@agent-native/dispatch 0.40.41-same-host-mcp-20261027-20261027081850 → 0.40.41
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 +28 -10
- package/dist/actions/provider-api-register.d.ts +11 -11
- package/dist/actions/upsert-destination.d.ts +12 -12
- package/dist/components/action-query-error.d.ts.map +1 -1
- package/dist/components/action-query-error.js +8 -0
- package/dist/components/action-query-error.js.map +1 -1
- package/dist/server/lib/app-creation-store.d.ts.map +1 -1
- package/dist/server/lib/app-creation-store.js +48 -3
- package/dist/server/lib/app-creation-store.js.map +1 -1
- package/dist/server/lib/mcp-gateway.d.ts +8 -0
- package/dist/server/lib/mcp-gateway.d.ts.map +1 -1
- package/dist/server/lib/mcp-gateway.js +71 -11
- package/dist/server/lib/mcp-gateway.js.map +1 -1
- package/dist/server/lib/workspace-app-chat-proxy.d.ts +6 -5
- package/dist/server/lib/workspace-app-chat-proxy.d.ts.map +1 -1
- package/dist/server/lib/workspace-app-chat-proxy.js +78 -11
- package/dist/server/lib/workspace-app-chat-proxy.js.map +1 -1
- package/dist/server/plugins/agent-chat.js +1 -0
- package/dist/server/plugins/agent-chat.js.map +1 -1
- package/package.json +3 -3
- package/src/components/action-query-error.spec.tsx +37 -0
- package/src/components/action-query-error.tsx +11 -0
- package/src/server/lib/app-creation-store.spec.ts +101 -1
- package/src/server/lib/app-creation-store.ts +65 -4
- package/src/server/lib/mcp-gateway.spec.ts +135 -1
- package/src/server/lib/mcp-gateway.ts +122 -22
- package/src/server/lib/workspace-app-chat-proxy.spec.ts +309 -5
- package/src/server/lib/workspace-app-chat-proxy.ts +123 -25
- package/src/server/plugins/agent-chat.spec.ts +1 -0
- package/src/server/plugins/agent-chat.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-gateway.js","sourceRoot":"","sources":["../../../src/server/lib/mcp-gateway.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n A2AClient,\n canonicalA2AAudience,\n extractA2APersistedMutationReceipts,\n getGlobalA2ASecret,\n signA2AOrgMemberDelegationToken,\n signA2AOrganizationToken,\n signA2AToken,\n stripA2APersistedArtifactMarkers,\n type A2APersistedMutationReceipt,\n type Task,\n} from \"@agent-native/core/a2a\";\nimport { getAppConfig } from \"@agent-native/core/app-config\";\nimport { isFeatureFlagEnabled } from \"@agent-native/core/feature-flags\";\nimport {\n buildMcpToolName,\n McpClientManager,\n} from \"@agent-native/core/mcp-client\";\nimport { getOrgA2ASecret, getOrgDomain } from \"@agent-native/core/org\";\nimport {\n buildDeepLink,\n buildEmbedStartPath,\n createEmbedSessionTicket,\n getConfiguredAppBasePath,\n getRequestContext,\n getRequestOrgId,\n getRequestUserEmail,\n} from \"@agent-native/core/server\";\nimport {\n discoverAgents,\n getBuiltinAgents,\n type DiscoveredAgent,\n} from \"@agent-native/core/server/agent-discovery\";\nimport { EMBED_START_PATH } from \"@agent-native/core/shared\";\n\nimport { DESKTOP_WORKSPACE_SSO_FLAG } from \"../../shared/feature-flags.js\";\nimport {\n DISPATCH_WORKSPACE_SSO_FLAG,\n isWorkspaceSsoAppUrl,\n} from \"../../shared/workspace-sso.js\";\nimport { listWorkspaceApps } from \"./app-creation-store.js\";\nimport {\n projectEnvironmentUrl,\n requestEnvironmentLane,\n} from \"./environment-lane.js\";\nimport {\n getDispatchMcpAppAccessSettings,\n isAppAllowedByMcpAccess,\n type DispatchMcpAppAccessSettings,\n} from \"./mcp-access-store.js\";\n\nconst DISPATCH_APP_ID = \"dispatch\";\nconst DISPATCH_NAME = \"Dispatch\";\nconst DISPATCH_DESCRIPTION =\n \"Workspace control plane for extensions, agents, vault, integrations, approvals, and app routing.\";\nconst DISPATCH_COLOR = \"#14B8A6\";\nconst TARGET_EMBED_SESSION_ATTEMPTS = 3;\nconst TARGET_EMBED_SESSION_RETRY_BASE_MS = 250;\nconst TARGET_EMBED_SESSION_CONNECT_TIMEOUT_MS = 90_000;\nconst TARGET_EMBED_SESSION_BUDGET_MS = 95_000;\nconst DISPATCH_ASK_APP_DEFAULT_INLINE_WAIT_MS = 20_000;\nconst DISPATCH_ASK_APP_MAX_INLINE_WAIT_MS = 20_000;\nconst DISPATCH_ASK_APP_POLL_INTERVAL_MS = 1_500;\nconst DISPATCH_A2A_REQUEST_TIMEOUT_MS = 10_000;\nconst DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS = [250, 750, 1_500] as const;\nconst DISPATCH_ASK_APP_TERMINAL_STATES = new Set([\n \"completed\",\n \"failed\",\n \"canceled\",\n \"input-required\",\n]);\n\nclass DispatchAskAppInlineDeadlineError extends Error {\n constructor() {\n super(\"ask_app inline wait deadline reached\");\n this.name = \"DispatchAskAppInlineDeadlineError\";\n }\n}\n\nexport interface DispatchMcpAccessibleApp {\n id: string;\n name: string;\n description: string;\n url: string;\n homeUrl?: string;\n mcpUrl?: string;\n color: string;\n granted: boolean;\n}\n\nfunction normalizeAppId(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction boundedDispatchAskAppWaitMs(raw: unknown): number {\n if (raw == null || raw === \"\") {\n return DISPATCH_ASK_APP_DEFAULT_INLINE_WAIT_MS;\n }\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) return DISPATCH_ASK_APP_DEFAULT_INLINE_WAIT_MS;\n return Math.max(\n 0,\n Math.min(DISPATCH_ASK_APP_MAX_INLINE_WAIT_MS, Math.trunc(parsed)),\n );\n}\n\nasync function dispatchAskAppIdempotencyKey(\n target: DispatchMcpAccessibleApp,\n message: string,\n): Promise<string> {\n const requestId = getRequestContext()?.mcpRequestId;\n if (!requestId) return `ask-app:${globalThis.crypto.randomUUID()}`;\n\n const digest = await globalThis.crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(\n JSON.stringify({\n requestId,\n app: target.id,\n targetUrl: target.url,\n message,\n }),\n ),\n );\n let hex = \"\";\n for (const byte of new Uint8Array(digest)) {\n hex += byte.toString(16).padStart(2, \"0\");\n }\n return `ask-app:v1:${hex}`;\n}\n\nfunction isTerminalDispatchTask(task: Task): boolean {\n return DISPATCH_ASK_APP_TERMINAL_STATES.has(String(task.status.state));\n}\n\nfunction dispatchTaskText(task: Task): string {\n return (\n task.status.message?.parts\n ?.filter(\n (part): part is { type: \"text\"; text: string } => part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\\n\")\n .trim() ?? \"\"\n );\n}\n\ntype DispatchMutationReceipt = A2APersistedMutationReceipt;\n\nfunction dispatchTaskMutationReceipts(\n task: Task,\n app: string,\n identity: {\n userEmail: string;\n orgId: string | null;\n orgSecret: string | null;\n },\n): DispatchMutationReceipt[] {\n if (app !== \"content\" || !identity.orgSecret) return [];\n const text = dispatchTaskText(task);\n if (!text) return [];\n const result = [{ tool: \"call-agent\", result: text }];\n const receipts = extractA2APersistedMutationReceipts(result, {\n persistedArtifactSecrets: [identity.orgSecret],\n expectedDelegatedTaskId: task.id,\n });\n return receipts.filter((receipt) => {\n if (receipt.target.authorityScopeKind === \"personal\") {\n return (\n receipt.target.authorityScopeId.toLowerCase() ===\n identity.userEmail.toLowerCase()\n );\n }\n return (\n identity.orgId !== null &&\n receipt.target.authorityScopeId === identity.orgId\n );\n });\n}\n\ntype DispatchAskAppStatusErrorCategory =\n | \"transport\"\n | \"timeout\"\n | \"upstream_5xx\"\n | \"rate_limited\";\n\ntype DispatchAskAppTaskResult = {\n app: string;\n routedVia: \"a2a\";\n taskId: string;\n status: string;\n response?: string;\n receipts?: DispatchMutationReceipt[];\n error?: string;\n inputRequired?: string;\n statusRead?: \"unavailable\";\n retryable?: true;\n errorCategory?: DispatchAskAppStatusErrorCategory;\n attempts?: number;\n pollAfterMs?: number;\n poll?: { tool: \"ask_app_status\"; arguments: { app: string; taskId: string } };\n message?: string;\n};\n\nfunction dispatchAskAppTaskResult(\n app: string,\n task: Task,\n identity: {\n userEmail: string;\n orgId: string | null;\n orgSecret: string | null;\n },\n): DispatchAskAppTaskResult {\n const status = String(task.status.state);\n const response = stripA2APersistedArtifactMarkers(dispatchTaskText(task));\n const receipts = dispatchTaskMutationReceipts(task, app, identity);\n const base = {\n app,\n routedVia: \"a2a\" as const,\n taskId: task.id,\n status,\n };\n\n if (status === \"completed\") {\n return {\n ...base,\n response: response || \"(no response)\",\n ...(receipts.length > 0 ? { receipts } : {}),\n };\n }\n if (status === \"failed\" || status === \"canceled\") {\n return {\n ...base,\n ...(response ? { response } : {}),\n error: response || `ask_app task ${status}.`,\n };\n }\n if (status === \"input-required\") {\n const inputRequired =\n response || \"The agent needs additional input before it can continue.\";\n return {\n ...base,\n response: inputRequired,\n inputRequired,\n message: inputRequired,\n };\n }\n return {\n ...base,\n pollAfterMs: DISPATCH_ASK_APP_POLL_INTERVAL_MS,\n poll: {\n tool: \"ask_app_status\",\n arguments: { app, taskId: task.id },\n },\n message:\n `ask_app is still ${status}. Call ask_app_status with ` +\n `taskId \"${task.id}\" to retrieve the final response.`,\n };\n}\n\nasync function createDispatchA2AClient(input: {\n targetUrl: string;\n userEmail: string;\n orgId?: string;\n orgDomain?: string;\n orgSecret?: string;\n deadline?: number;\n}): Promise<{\n client: A2AClient;\n metadata: Record<string, unknown>;\n}> {\n const apiKeys: string[] = [];\n const addSignedToken = async (preferGlobalSecret: boolean) => {\n if (input.orgId && !input.orgDomain?.trim()) return;\n try {\n const audience = canonicalA2AAudience(input.targetUrl);\n const token = preferGlobalSecret\n ? await signA2AToken(input.userEmail, input.orgDomain, undefined, {\n preferGlobalSecret: true,\n audience,\n })\n : input.orgDomain && input.orgSecret\n ? await signA2AOrganizationToken(\n input.orgDomain,\n input.orgSecret,\n undefined,\n { audience },\n )\n : undefined;\n if (token && !apiKeys.includes(token)) apiKeys.push(token);\n } catch {\n // A2A can still be configured for local/dev unauthenticated calls. If\n // signing is unavailable, let the target return its own auth error.\n }\n };\n\n if (getGlobalA2ASecret()) await addSignedToken(true);\n if (input.orgSecret) await addSignedToken(false);\n\n const metadata: Record<string, unknown> = {\n userEmail: input.userEmail,\n ...(input.orgDomain ? { orgDomain: input.orgDomain } : {}),\n ...(getRequestContext()?.requestOrigin\n ? { requestOrigin: getRequestContext()?.requestOrigin }\n : {}),\n };\n const remainingMs =\n input.deadline == null ? null : input.deadline - Date.now();\n return {\n client: new A2AClient(input.targetUrl, apiKeys[0], {\n requestTimeoutMs:\n remainingMs == null\n ? DISPATCH_A2A_REQUEST_TIMEOUT_MS\n : Math.max(1, Math.min(DISPATCH_A2A_REQUEST_TIMEOUT_MS, remainingMs)),\n ...(apiKeys.length > 1 ? { fallbackApiKeys: apiKeys.slice(1) } : {}),\n }),\n metadata,\n };\n}\n\nfunction isTransientDispatchAskAppStatusError(err: unknown): boolean {\n return dispatchAskAppStatusErrorCategory(err) != null;\n}\n\nfunction dispatchAskAppStatusErrorCategory(\n err: unknown,\n): DispatchAskAppStatusErrorCategory | null {\n const message = err instanceof Error ? err.message : safeJson(err);\n const causeCode = dispatchAskAppStatusErrorCauseCode(err) ?? \"\";\n const diagnostic = `${message} ${causeCode}`;\n if (/A2A request failed \\(429\\)/i.test(message)) return \"rate_limited\";\n if (/A2A request failed \\((?:500|502|503|504)\\)/i.test(message)) {\n return \"upstream_5xx\";\n }\n if (/etimedout|timeout|aborted|aborterror/i.test(diagnostic)) {\n return \"timeout\";\n }\n if (\n /\\bfetch failed\\b|failed to fetch|networkerror|socket hang up|econnreset/i.test(\n diagnostic,\n )\n ) {\n return \"transport\";\n }\n return null;\n}\n\nfunction dispatchAskAppStatusErrorCauseCode(err: unknown): string | undefined {\n if (!(err instanceof Error)) return undefined;\n const directCode = (err as Error & { code?: unknown }).code;\n if (typeof directCode === \"string\" && directCode.trim()) {\n return directCode.trim();\n }\n if (!err.cause || typeof err.cause !== \"object\") return undefined;\n const code = (err.cause as { code?: unknown }).code;\n return typeof code === \"string\" && code.trim() ? code.trim() : undefined;\n}\n\nfunction dispatchAskAppStatusOriginHost(origin: string): string {\n try {\n return new URL(origin).host;\n } catch {\n return \"unknown\";\n }\n}\n\nfunction dispatchAskAppStatusReadUnavailableResult(\n app: string,\n taskId: string,\n errorCategory: DispatchAskAppStatusErrorCategory,\n attempts: number,\n): DispatchAskAppTaskResult {\n return {\n app,\n routedVia: \"a2a\",\n taskId,\n status: \"unknown\",\n statusRead: \"unavailable\",\n retryable: true,\n errorCategory,\n attempts,\n pollAfterMs: DISPATCH_ASK_APP_POLL_INTERVAL_MS,\n poll: {\n tool: \"ask_app_status\",\n arguments: { app, taskId },\n },\n message:\n \"The durable ask_app task status could not be read after bounded retries. \" +\n \"The task may still be running or completed. Retry ask_app_status \" +\n \"with the same app and taskId; do not resubmit ask_app.\",\n };\n}\n\nasync function runBeforeDispatchAskAppDeadline<T>(\n operation: () => Promise<T>,\n deadline: number,\n): Promise<T> {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) throw new DispatchAskAppInlineDeadlineError();\n\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n operation(),\n new Promise<T>((_resolve, reject) => {\n timeout = setTimeout(\n () => reject(new DispatchAskAppInlineDeadlineError()),\n remainingMs,\n );\n }),\n ]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\nasync function waitForDispatchA2ATask(\n client: A2AClient,\n task: Task,\n deadline: number | undefined,\n): Promise<Task> {\n if (deadline == null || isTerminalDispatchTask(task)) return task;\n let current = task;\n while (!isTerminalDispatchTask(current)) {\n const remaining = deadline - Date.now();\n if (remaining <= 0) return current;\n await new Promise((resolve) =>\n setTimeout(\n resolve,\n Math.min(DISPATCH_ASK_APP_POLL_INTERVAL_MS, remaining),\n ),\n );\n if (Date.now() >= deadline) return current;\n try {\n current = await runBeforeDispatchAskAppDeadline(\n () => client.getTask(task.id),\n deadline,\n );\n } catch (err) {\n if (err instanceof DispatchAskAppInlineDeadlineError) return current;\n if (!isTransientDispatchAskAppStatusError(err)) throw err;\n if (Date.now() >= deadline) return current;\n }\n }\n return current;\n}\n\nfunction normalizeBaseUrl(raw: string | undefined | null): string | null {\n const value = raw?.trim();\n if (!value) return null;\n try {\n const url = new URL(value);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return null;\n return url.toString().replace(/\\/+$/, \"\");\n } catch {\n return null;\n }\n}\n\nfunction normalizeBasePath(value: string | undefined): string {\n const trimmed = value?.trim();\n if (!trimmed || trimmed === \"/\") return \"\";\n const normalized = trimmed.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n return normalized ? `/${normalized}` : \"\";\n}\n\nfunction withConfiguredBasePath(baseUrl: string): string {\n const basePath = normalizeBasePath(\n process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH,\n );\n if (!basePath) return baseUrl;\n try {\n const url = new URL(baseUrl);\n const path = normalizeBasePath(url.pathname);\n if (path === basePath || path.startsWith(`${basePath}/`)) {\n return baseUrl;\n }\n url.pathname = path && path !== \"/\" ? `${basePath}${path}` : `${basePath}/`;\n return url.toString().replace(/\\/+$/, \"\");\n } catch {\n return baseUrl;\n }\n}\n\nfunction dispatchSelfBaseUrl(): string {\n const requestOrigin = normalizeBaseUrl(getRequestContext()?.requestOrigin);\n if (requestOrigin) return withConfiguredBasePath(requestOrigin);\n\n const configured =\n normalizeBaseUrl(process.env.WORKSPACE_GATEWAY_URL) ??\n normalizeBaseUrl(process.env.APP_URL) ??\n normalizeBaseUrl(process.env.URL) ??\n normalizeBaseUrl(process.env.DEPLOY_URL) ??\n normalizeBaseUrl(process.env.BETTER_AUTH_URL);\n if (configured) return withConfiguredBasePath(configured);\n\n return process.env.NODE_ENV === \"production\"\n ? \"https://dispatch.agent-native.com\"\n : \"http://localhost:8092\";\n}\n\nfunction dispatchSelfApp(\n settings: DispatchMcpAppAccessSettings,\n): DispatchMcpAccessibleApp {\n return {\n id: DISPATCH_APP_ID,\n name: DISPATCH_NAME,\n description: DISPATCH_DESCRIPTION,\n url: dispatchSelfBaseUrl(),\n color: DISPATCH_COLOR,\n granted: isAppAllowedByMcpAccess(DISPATCH_APP_ID, settings),\n };\n}\n\nconst CONTROL_CHARS = new RegExp(\"[\\\\u0000-\\\\u001f\\\\u007f]\");\n\nfunction safeAppPath(raw: unknown): string | null {\n if (typeof raw !== \"string\" || !raw.trim()) return null;\n const value = raw.trim();\n if (CONTROL_CHARS.test(value)) return null;\n if (!value.startsWith(\"/\")) return null;\n if (value.startsWith(\"//\") || value.startsWith(\"/\\\\\")) return null;\n if (/^\\/[a-z][a-z0-9+.-]*:/i.test(value)) return null;\n if (/%(?:2f|5c)/i.test(value)) return null;\n const rawPath = value.split(/[?#]/, 1)[0] ?? value;\n let parsed: URL;\n try {\n parsed = new URL(value, \"http://agent-native.invalid\");\n } catch {\n return null;\n }\n if (parsed.pathname !== rawPath) return null;\n return value;\n}\n\nfunction safeJson(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return \"[unserializable]\";\n }\n}\n\nfunction appendParamsToPath(\n path: string,\n params: Record<string, string | number | boolean> | undefined,\n): string {\n if (!params || Object.keys(params).length === 0) return path;\n const url = new URL(path, \"http://agent-native.invalid\");\n for (const [key, value] of Object.entries(params)) {\n url.searchParams.set(key, String(value));\n }\n return `${url.pathname}${url.search}${url.hash}`;\n}\n\nfunction safeAppOrigin(app: DispatchMcpAccessibleApp): string | null {\n try {\n const url = new URL(app.url);\n return url.protocol === \"http:\" || url.protocol === \"https:\"\n ? url.origin\n : null;\n } catch {\n return null;\n }\n}\n\nfunction appBaseUrl(app: DispatchMcpAccessibleApp): string {\n return app.url.replace(/\\/+$/, \"\");\n}\n\nfunction appHomeBaseUrl(app: DispatchMcpAccessibleApp): string {\n const configured = app.homeUrl?.trim();\n if (configured) {\n try {\n const url = new URL(configured);\n if (url.protocol === \"http:\" || url.protocol === \"https:\") {\n return url.toString().replace(/\\/+$/, \"\");\n }\n } catch {\n // coercion-ok: invalid optional home URL falls back to endpoint.\n // Fall back to the registered endpoint below. The endpoint has already\n // passed the app-origin validation before this helper is reached.\n }\n }\n return appBaseUrl(app);\n}\n\nfunction workspaceGatewayMcpUrl(appUrl: string): string | undefined {\n const configuredGateway = getAppConfig().workspace.gatewayUrl?.trim();\n if (!configuredGateway) return undefined;\n\n let configuredUrl: URL;\n try {\n configuredUrl = new URL(configuredGateway);\n } catch {\n throw new Error(\n \"WORKSPACE_GATEWAY_URL must be a valid absolute HTTP(S) URL.\",\n );\n }\n if (\n configuredUrl.protocol !== \"http:\" &&\n configuredUrl.protocol !== \"https:\"\n ) {\n throw new Error(\"WORKSPACE_GATEWAY_URL must use http or https.\");\n }\n\n const gateway = new URL(projectEnvironmentUrl(configuredUrl.toString()));\n if (gateway.protocol !== \"http:\" && gateway.protocol !== \"https:\") {\n throw new Error(\"WORKSPACE_GATEWAY_URL must use http or https.\");\n }\n const target = new URL(appUrl);\n if (gateway.origin !== target.origin) return undefined;\n const requestOrigin = normalizeBaseUrl(getRequestContext()?.requestOrigin);\n if (requestOrigin && new URL(requestOrigin).origin === gateway.origin) {\n // Same-deployment embeds must use the mounted app endpoint, not call back into this gateway.\n return undefined;\n }\n const configuredBasePath = getConfiguredAppBasePath();\n const gatewayPath = gateway.pathname.replace(/\\/+$/, \"\");\n const basePath =\n configuredBasePath &&\n gatewayPath !== configuredBasePath &&\n !gatewayPath.startsWith(`${configuredBasePath}/`)\n ? `${configuredBasePath}${gatewayPath}`\n : gatewayPath;\n gateway.pathname = `${basePath}/mcp`;\n gateway.search = \"\";\n gateway.hash = \"\";\n return gateway.toString().replace(/\\/$/, \"\");\n}\n\nfunction appMcpUrl(app: DispatchMcpAccessibleApp): string {\n const explicit = app.mcpUrl?.trim();\n return (\n explicit?.replace(/\\/+$/, \"\") ??\n workspaceGatewayMcpUrl(app.url) ??\n `${appHomeBaseUrl(app)}/mcp`\n );\n}\n\nfunction appMcpBaseUrl(app: DispatchMcpAccessibleApp): string {\n const url = new URL(appMcpUrl(app));\n url.pathname = url.pathname.replace(/\\/mcp\\/?$/, \"\") || \"/\";\n url.search = \"\";\n url.hash = \"\";\n return url.toString().replace(/\\/$/, \"\");\n}\n\nfunction resolveGrantedAppEmbedStartUrl(\n app: DispatchMcpAccessibleApp,\n startUrl: string,\n): string {\n try {\n const baseUrl = appMcpBaseUrl(app);\n const resolved = new URL(startUrl, `${baseUrl}/`);\n const base = new URL(baseUrl);\n const basePath = base.pathname.replace(/\\/+$/, \"\");\n const expectedPath = `${basePath}${EMBED_START_PATH}`;\n if (resolved.origin !== base.origin || resolved.pathname !== expectedPath) {\n throw new Error(\n \"Target app returned an embed start URL outside the granted app.\",\n );\n }\n return resolved.toString();\n } catch {\n throw new Error(\"Target app returned an invalid embed start URL.\");\n }\n}\n\nfunction appBasePath(app: DispatchMcpAccessibleApp): string {\n const pathname = new URL(appHomeBaseUrl(app)).pathname.replace(/\\/+$/, \"\");\n return pathname === \"/\" ? \"\" : pathname;\n}\n\nfunction appMatchesUrlPath(app: DispatchMcpAccessibleApp, url: URL): boolean {\n const origin = new URL(appHomeBaseUrl(app)).origin;\n if (!origin || url.origin !== origin) return false;\n const basePath = appBasePath(app);\n if (!basePath) return true;\n return url.pathname === basePath || url.pathname.startsWith(`${basePath}/`);\n}\n\nfunction appPathSpecificity(app: DispatchMcpAccessibleApp): number {\n return appBasePath(app).length;\n}\n\nfunction appRelativePath(app: DispatchMcpAccessibleApp, url: URL): string {\n const basePath = appBasePath(app);\n const path = basePath\n ? url.pathname === basePath\n ? \"/\"\n : url.pathname.slice(basePath.length)\n : url.pathname;\n return `${path || \"/\"}${url.search}${url.hash}`;\n}\n\nfunction defaultWorkspaceSsoHomeUrl(\n app: DispatchMcpAccessibleApp,\n builtinHomeUrls: ReadonlyMap<string, string>,\n): string | undefined {\n const builtinHomeUrl = builtinHomeUrls.get(app.id);\n if (builtinHomeUrl) return builtinHomeUrl;\n return safeAppOrigin(app) ?? undefined;\n}\n\nfunction isDispatchControlPath(path: string | null): boolean {\n if (!path) return false;\n const route = path.split(/[?#]/, 1)[0] ?? path;\n return (\n route === \"/extensions\" ||\n route.startsWith(\"/extensions/\") ||\n route === \"/tools\" ||\n route.startsWith(\"/tools/\")\n );\n}\n\nfunction assertAppCanOpenPath(app: DispatchMcpAccessibleApp, path: string) {\n if (app.id !== DISPATCH_APP_ID && isDispatchControlPath(path)) {\n throw new Error(\n `Path \"${path}\" belongs to Dispatch. Use app: \"dispatch\" for Dispatch extension and tool routes.`,\n );\n }\n}\n\nfunction toAccessibleApp(\n agent: DiscoveredAgent,\n settings: DispatchMcpAppAccessSettings,\n): DispatchMcpAccessibleApp {\n return {\n id: agent.id,\n name: agent.name,\n description: agent.description,\n url: projectEnvironmentUrl(agent.url),\n color: agent.color,\n granted: isAppAllowedByMcpAccess(agent.id, settings),\n };\n}\n\nexport async function listDispatchMcpApps(): Promise<{\n settings: DispatchMcpAppAccessSettings;\n apps: DispatchMcpAccessibleApp[];\n}> {\n const [settings, agents] = await Promise.all([\n getDispatchMcpAppAccessSettings(),\n discoverAgents(\"dispatch\"),\n ]);\n return {\n settings,\n apps: [\n dispatchSelfApp(settings),\n ...agents\n .filter((agent) => normalizeAppId(agent.id) !== DISPATCH_APP_ID)\n .map((agent) => toAccessibleApp(agent, settings)),\n ],\n };\n}\n\nexport async function listGrantedDispatchMcpApps(): Promise<\n DispatchMcpAccessibleApp[]\n> {\n const { apps } = await listDispatchMcpApps();\n return apps.filter((app) => app.granted && safeAppOrigin(app));\n}\n\nexport async function listGrantedDispatchMcpAppOrigins(): Promise<string[]> {\n const apps = await listGrantedDispatchMcpApps();\n return Array.from(new Set(apps.flatMap((app) => safeAppOrigin(app) ?? [])));\n}\n\nexport async function resolveGrantedDispatchMcpApp(\n app: string,\n): Promise<DispatchMcpAccessibleApp> {\n const target = normalizeAppId(app);\n if (!target) throw new Error(\"app is required\");\n const { apps } = await listDispatchMcpApps();\n const match = apps.find(\n (candidate) =>\n candidate.id === target || candidate.name.toLowerCase() === target,\n );\n if (!match) {\n throw new Error(\n `Unknown app \"${app}\". Call list_apps to see apps available through Dispatch MCP.`,\n );\n }\n if (!match.granted) {\n throw new Error(\n `Dispatch MCP access to \"${match.id}\" is not granted. Open Dispatch > Agents to change MCP app access.`,\n );\n }\n if (!safeAppOrigin(match)) {\n throw new Error(\n `Dispatch MCP app \"${match.id}\" has an invalid URL and cannot be opened through MCP.`,\n );\n }\n return match;\n}\n\nasync function isEligibleWorkspaceSsoApp(\n candidate: DispatchMcpAccessibleApp,\n): Promise<boolean> {\n return isWorkspaceSsoAppUrl(candidate, {\n nodeEnv: process.env.NODE_ENV,\n registryRaw: process.env.IDENTITY_SSO_APP_REGISTRY_JSON,\n environmentLane: requestEnvironmentLane(),\n });\n}\n\nasync function listWorkspaceSsoApps(): Promise<DispatchMcpAccessibleApp[]> {\n const [agents, mountedApps] = await Promise.all([\n discoverAgents(\"dispatch\"),\n listWorkspaceApps({ includeAgentCards: false }),\n ]);\n const builtinHomeUrls = new Map(\n getBuiltinAgents(\"dispatch\").map((agent) => [\n agent.id,\n projectEnvironmentUrl(agent.url),\n ]),\n );\n const candidatesById = new Map<string, DispatchMcpAccessibleApp>();\n for (const agent of agents) {\n if (normalizeAppId(agent.id) === DISPATCH_APP_ID) continue;\n const accessible = toAccessibleApp(agent, {\n mode: \"all-apps\",\n selectedAppIds: [],\n });\n candidatesById.set(agent.id, {\n ...accessible,\n homeUrl: defaultWorkspaceSsoHomeUrl(accessible, builtinHomeUrls),\n granted: true,\n });\n }\n for (const app of mountedApps) {\n if (app.isDispatch || !app.url) continue;\n const mcpUrl = workspaceGatewayMcpUrl(app.url);\n candidatesById.set(app.id, {\n id: app.id,\n name: app.name,\n description: app.description,\n url: app.url,\n ...(mcpUrl ? { mcpUrl } : {}),\n color: DISPATCH_COLOR,\n granted: true,\n });\n }\n const candidates = [...candidatesById.values()];\n const eligible = [] as DispatchMcpAccessibleApp[];\n for (const candidate of candidates) {\n if (await isEligibleWorkspaceSsoApp(candidate)) {\n eligible.push(candidate);\n }\n }\n return [\n {\n id: DISPATCH_APP_ID,\n name: DISPATCH_NAME,\n description: DISPATCH_DESCRIPTION,\n url: dispatchSelfBaseUrl(),\n color: DISPATCH_COLOR,\n granted: true,\n },\n ...eligible,\n ];\n}\n\nasync function resolveWorkspaceSsoApp(\n app: string,\n): Promise<DispatchMcpAccessibleApp> {\n const target = normalizeAppId(app);\n if (!target) throw new Error(\"app is required\");\n const apps = await listWorkspaceSsoApps();\n const match = apps.find(\n (candidate) =>\n candidate.id === target || candidate.name.toLowerCase() === target,\n );\n if (!match) {\n throw new Error(\n `Workspace app \"${app}\" is not registered for workspace sign-in.`,\n );\n }\n return match;\n}\n\nexport async function askGrantedDispatchMcpApp(\n app: string,\n message: string,\n options?: { async?: boolean; maxWaitMs?: number },\n): Promise<ReturnType<typeof dispatchAskAppTaskResult>> {\n const trimmedMessage = message.trim();\n if (!trimmedMessage) throw new Error(\"message is required\");\n const target = await resolveGrantedDispatchMcpApp(app);\n const userEmail = getRequestUserEmail();\n if (!userEmail) throw new Error(\"no authenticated user\");\n\n const orgId = getRequestOrgId();\n const [orgDomain, orgSecret] = orgId\n ? await Promise.all([\n getOrgDomain(orgId).catch(() => null),\n getOrgA2ASecret(orgId).catch(() => null),\n ])\n : [null, null];\n\n const inlineWaitMs =\n options?.async === true\n ? 0\n : boundedDispatchAskAppWaitMs(options?.maxWaitMs);\n const deadline = inlineWaitMs > 0 ? Date.now() + inlineWaitMs : undefined;\n const submissionDeadline =\n deadline ?? Date.now() + DISPATCH_A2A_REQUEST_TIMEOUT_MS;\n\n const { client, metadata } = await createDispatchA2AClient({\n targetUrl: target.url,\n userEmail,\n orgId: orgId ?? undefined,\n orgDomain: orgDomain ?? undefined,\n orgSecret: orgSecret ?? undefined,\n deadline: submissionDeadline,\n });\n const idempotencyKey = await dispatchAskAppIdempotencyKey(\n target,\n trimmedMessage,\n );\n const task = await client.send(\n {\n role: \"user\",\n parts: [{ type: \"text\", text: trimmedMessage }],\n },\n {\n async: true,\n metadata,\n idempotencyKey,\n deadlineMs: submissionDeadline,\n },\n );\n const finalOrRunning = await waitForDispatchA2ATask(client, task, deadline);\n return dispatchAskAppTaskResult(target.id, finalOrRunning, {\n userEmail,\n orgId: orgId ?? null,\n orgSecret: orgSecret ?? null,\n });\n}\n\nexport async function getGrantedDispatchMcpAppTask(\n app: string,\n taskId: string,\n): Promise<DispatchAskAppTaskResult> {\n const trimmedTaskId = taskId.trim();\n if (!trimmedTaskId) throw new Error(\"taskId is required\");\n const target = await resolveGrantedDispatchMcpApp(app);\n const userEmail = getRequestUserEmail();\n if (!userEmail) throw new Error(\"no authenticated user\");\n\n const orgId = getRequestOrgId();\n const [orgDomain, orgSecret] = orgId\n ? await Promise.all([\n getOrgDomain(orgId).catch(() => null),\n getOrgA2ASecret(orgId).catch(() => null),\n ])\n : [null, null];\n const { client } = await createDispatchA2AClient({\n targetUrl: target.url,\n userEmail,\n orgId: orgId ?? undefined,\n orgDomain: orgDomain ?? undefined,\n orgSecret: orgSecret ?? undefined,\n });\n const maxAttempts = DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS.length + 1;\n for (\n let attempt = 0;\n attempt <= DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS.length;\n attempt++\n ) {\n const startedAt = Date.now();\n try {\n const task = await client.getTask(trimmedTaskId);\n return dispatchAskAppTaskResult(target.id, task, {\n userEmail,\n orgId: orgId ?? null,\n orgSecret: orgSecret ?? null,\n });\n } catch (err) {\n const delayMs = DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS[attempt];\n const errorCategory = dispatchAskAppStatusErrorCategory(err);\n const retryable = errorCategory != null;\n const willRetry = retryable && delayMs != null;\n if (retryable) {\n console.warn(\"[ask_app_status] tasks/get attempt failed\", {\n app: target.id,\n routedVia: \"a2a\",\n taskId: trimmedTaskId,\n originHost: dispatchAskAppStatusOriginHost(target.url),\n attempt: attempt + 1,\n maxAttempts,\n elapsedMs: Date.now() - startedAt,\n errorCategory,\n errorName: err instanceof Error ? err.name : typeof err,\n causeCode: dispatchAskAppStatusErrorCauseCode(err),\n willRetry,\n });\n }\n if (!retryable) throw err;\n if (delayMs == null) {\n return dispatchAskAppStatusReadUnavailableResult(\n target.id,\n trimmedTaskId,\n errorCategory,\n maxAttempts,\n );\n }\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n throw new Error(\"ask_app_status retry loop exited unexpectedly.\");\n}\n\nexport async function openGrantedDispatchMcpApp(input: {\n app: string;\n view?: string;\n path?: string;\n params?: Record<string, string | number | boolean>;\n embed?: boolean;\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n app: string;\n view?: string;\n path?: string;\n url: string;\n embed?: boolean;\n chrome?: \"full\" | \"minimal\";\n embedStartUrl?: string;\n embedTargetPath?: string;\n embedExpiresAt?: number;\n}> {\n const view = input.view?.trim() ?? \"\";\n const hasPathInput = input.path != null;\n const path = safeAppPath(input.path);\n if (hasPathInput && !path) {\n throw new Error(\"path must be a safe app-relative route\");\n }\n if (!view && !path) throw new Error(\"open_app requires view or path\");\n const target = await resolveGrantedDispatchMcpApp(input.app);\n if (path) assertAppCanOpenPath(target, path);\n const relUrl = path\n ? appendParamsToPath(path, input.params)\n : buildDeepLink({\n app: target.id,\n view,\n params: input.params,\n });\n const url = `${appBaseUrl(target)}${relUrl}`;\n let embedSession: Awaited<\n ReturnType<typeof createGrantedDispatchMcpEmbedSession>\n > | null = null;\n if (input.embed) {\n try {\n embedSession = await createGrantedDispatchMcpEmbedSession({\n app: target.id,\n url,\n chrome: input.chrome,\n });\n } catch (error) {\n console.warn(\n `[dispatch] Could not pre-mint MCP embed session for ${target.id}:`,\n error,\n );\n }\n }\n return {\n app: target.id,\n ...(view ? { view } : {}),\n ...(path ? { path } : {}),\n url,\n ...(input.embed === true ? { embed: true } : {}),\n ...(input.chrome ? { chrome: input.chrome } : {}),\n ...(embedSession?.startUrl ? { embedStartUrl: embedSession.startUrl } : {}),\n ...(embedSession?.targetPath\n ? { embedTargetPath: embedSession.targetPath }\n : {}),\n ...(typeof embedSession?.expiresAt === \"number\"\n ? { embedExpiresAt: embedSession.expiresAt }\n : {}),\n };\n}\n\nfunction parseMcpToolTextResult(result: unknown): Record<string, unknown> {\n if (result && typeof result === \"object\") {\n const response = result as Record<string, unknown>;\n const meta =\n response._meta && typeof response._meta === \"object\"\n ? (response._meta as Record<string, unknown>)\n : undefined;\n const embedStart =\n meta?.[\"agent-native/embedStart\"] &&\n typeof meta[\"agent-native/embedStart\"] === \"object\"\n ? (meta[\"agent-native/embedStart\"] as Record<string, unknown>)\n : undefined;\n const withEmbedStart = (parsed: Record<string, unknown>) =>\n typeof embedStart?.startUrl === \"string\"\n ? { ...parsed, startUrl: embedStart.startUrl }\n : parsed;\n const structured = response.structuredContent;\n if (structured && typeof structured === \"object\") {\n return withEmbedStart(structured as Record<string, unknown>);\n }\n const parts = Array.isArray(response.content)\n ? (response.content as Array<Record<string, unknown>>)\n : [];\n const text = parts.find(\n (part) => part?.type === \"text\" && typeof part.text === \"string\",\n )?.text;\n if (typeof text === \"string\" && text.trim()) {\n if (response.isError) throw new Error(text.trim());\n const parsed = JSON.parse(text);\n if (parsed && typeof parsed === \"object\") {\n return withEmbedStart(parsed as Record<string, unknown>);\n }\n }\n }\n throw new Error(\"Target app did not return an embed session.\");\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction httpStatusFromError(error: unknown): number | undefined {\n if (!error || typeof error !== \"object\") return undefined;\n const record = error as Record<string, unknown>;\n const nested =\n record.data && typeof record.data === \"object\"\n ? (record.data as Record<string, unknown>)\n : undefined;\n const status = record.status ?? nested?.status ?? record.code ?? nested?.code;\n return typeof status === \"number\" && status >= 100 && status <= 599\n ? status\n : undefined;\n}\n\nfunction isRetryableTargetMcpError(error: unknown): boolean {\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : safeJson(error);\n const status = httpStatusFromError(error);\n if (status !== undefined) {\n if (\n status === 408 ||\n status === 429 ||\n status === 502 ||\n status === 503 ||\n status === 504\n )\n return true;\n if (status >= 400 && status < 500) return false;\n }\n if (\n /^(?:MCP server\\b.*?\\bnot connected:\\s+)?HTTP(?:\\/\\d+(?:\\.\\d+)?)?\\s+(?:502|503|504)\\b/i.test(\n message,\n )\n ) {\n return true;\n }\n if (\n /rejected the request|unauthorized|forbidden|401|403|404|405|html/i.test(\n message,\n )\n ) {\n return false;\n }\n return /streamable http|handshake|failed to fetch|fetch failed|networkerror|econnrefused|enotfound|timed out|timeout/i.test(\n message,\n );\n}\n\nfunction targetMcpErrorStatus(error: unknown): number | undefined {\n const status = httpStatusFromError(error);\n if (status !== undefined) return status;\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : safeJson(error);\n const matchedStatus = message.match(/\\b([45]\\d{2})\\b/)?.[1];\n return matchedStatus ? Number(matchedStatus) : undefined;\n}\n\nfunction targetMcpRequestDetails(input: {\n app: DispatchMcpAccessibleApp;\n mcpUrl: string;\n url: string;\n}): {\n app: string;\n targetOrigin: string;\n targetPath: string;\n mcpOrigin: string;\n mcpPath: string;\n} {\n const targetUrl = new URL(input.url);\n const mcpUrl = new URL(input.mcpUrl);\n return {\n app: input.app.id,\n targetOrigin: targetUrl.origin,\n targetPath: targetUrl.pathname,\n mcpOrigin: mcpUrl.origin,\n mcpPath: mcpUrl.pathname,\n };\n}\n\nfunction targetMcpConnectTimeout(deadline: number): number {\n const remaining = deadline - Date.now();\n const budget = Math.min(TARGET_EMBED_SESSION_CONNECT_TIMEOUT_MS, remaining);\n return Math.max(1000, budget);\n}\n\nclass TargetMcpAuthenticationRejectedError extends Error {\n readonly status?: number;\n\n constructor(cause: unknown) {\n super(\"Target MCP authentication was rejected\", { cause });\n this.name = \"TargetMcpAuthenticationRejectedError\";\n const status = httpStatusFromError(cause) ?? targetMcpErrorStatus(cause);\n if (status !== undefined) this.status = status;\n }\n}\n\nfunction isTargetMcpAuthenticationRejected(error: unknown): boolean {\n const status = httpStatusFromError(error);\n return status === 401 || status === 403;\n}\n\nfunction targetMcpRetryDelay(attempt: number): number {\n const base =\n TARGET_EMBED_SESSION_RETRY_BASE_MS * Math.pow(2, Math.max(0, attempt - 1));\n return base + Math.floor(Math.random() * 100);\n}\n\nasync function callTargetCreateEmbedSession(input: {\n mcpUrl: string;\n token: string;\n url: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<unknown> {\n const serverId = \"target\";\n const deadline = Date.now() + TARGET_EMBED_SESSION_BUDGET_MS;\n for (let attempt = 1; ; attempt += 1) {\n const manager = new McpClientManager(\n {\n servers: {\n [serverId]: {\n type: \"http\",\n url: input.mcpUrl,\n headers: {\n Authorization: `Bearer ${input.token}`,\n },\n },\n },\n },\n { connectTimeoutMs: targetMcpConnectTimeout(deadline) },\n );\n let connected = false;\n try {\n await manager.start();\n const connectErrorStatus = manager.getConnectErrorStatus(serverId);\n if (connectErrorStatus === 401 || connectErrorStatus === 403) {\n const error = Object.assign(new Error(`HTTP ${connectErrorStatus}`), {\n status: connectErrorStatus,\n });\n throw new TargetMcpAuthenticationRejectedError(error);\n }\n connected = true;\n return await manager.callTool(\n buildMcpToolName(serverId, \"create_embed_session\"),\n {\n url: input.url,\n chrome: input.chrome ?? \"full\",\n },\n );\n } catch (error) {\n if (\n !connected &&\n !(error instanceof TargetMcpAuthenticationRejectedError) &&\n isTargetMcpAuthenticationRejected(error)\n ) {\n throw new TargetMcpAuthenticationRejectedError(error);\n }\n if (\n attempt >= TARGET_EMBED_SESSION_ATTEMPTS ||\n !isRetryableTargetMcpError(error) ||\n deadline - Date.now() < TARGET_EMBED_SESSION_RETRY_BASE_MS\n ) {\n throw error;\n }\n await sleep(targetMcpRetryDelay(attempt));\n } finally {\n await manager.stop().catch((stopError) => {\n console.warn(\"[dispatch] Failed to stop target MCP client:\", stopError);\n });\n }\n }\n}\n\ntype TargetMcpCredential = {\n strategy: \"deployment-user\" | \"org-member-delegation\";\n token: string;\n};\n\nasync function createTargetMcpUserCredentials(input: {\n mcpUrl: string;\n ownerEmail: string;\n orgId?: string;\n}): Promise<{\n credentials: TargetMcpCredential[];\n loadOrgMemberCredential: () => Promise<TargetMcpCredential | undefined>;\n}> {\n const audience = canonicalA2AAudience(input.mcpUrl);\n const orgDomain = input.orgId\n ? (await getOrgDomain(input.orgId))?.trim().toLowerCase() || undefined\n : undefined;\n const credentials: TargetMcpCredential[] = [];\n if (getGlobalA2ASecret()) {\n credentials.push({\n strategy: \"deployment-user\",\n token: await signA2AToken(input.ownerEmail, undefined, undefined, {\n expiresIn: \"5m\",\n audience,\n preferGlobalSecret: true,\n }),\n });\n }\n\n const loadOrgMemberCredential = async () => {\n if (!input.orgId || !orgDomain) return undefined;\n const orgSecret = await getOrgA2ASecret(input.orgId);\n if (!orgSecret) return undefined;\n return {\n strategy: \"org-member-delegation\" as const,\n token: await signA2AOrgMemberDelegationToken(\n input.ownerEmail,\n orgDomain,\n orgSecret,\n audience,\n ),\n };\n };\n\n if (credentials.length === 0) {\n const orgMemberCredential = await loadOrgMemberCredential();\n if (orgMemberCredential) credentials.push(orgMemberCredential);\n }\n if (credentials.length === 0) {\n throw new Error(\n \"Cross-app embed sessions require a deployment A2A secret or an organization secret with member delegation enabled on the target.\",\n );\n }\n return { credentials, loadOrgMemberCredential };\n}\n\nasync function resolveEmbedTarget(\n input: {\n app?: string;\n url?: string;\n path?: string;\n },\n options: {\n resolveApp: (app: string) => Promise<DispatchMcpAccessibleApp>;\n listApps: () => Promise<DispatchMcpAccessibleApp[]>;\n urlError: string;\n },\n): Promise<{ app: DispatchMcpAccessibleApp; path: string; url: string }> {\n const explicitApp = input.app?.trim()\n ? await options.resolveApp(input.app)\n : null;\n if (explicitApp && input.path) {\n const path = safeAppPath(input.path);\n if (!path) throw new Error(\"path must be a safe app-relative route\");\n assertAppCanOpenPath(explicitApp, path);\n return {\n app: explicitApp,\n path,\n url: `${appHomeBaseUrl(explicitApp)}${path}`,\n };\n }\n\n if (!input.url) {\n throw new Error(\"create_embed_session requires a url or app + path.\");\n }\n\n let parsed: URL;\n try {\n parsed = new URL(input.url);\n } catch {\n if (!explicitApp) {\n throw new Error(\"Relative embed paths require an app id.\");\n }\n const path = safeAppPath(input.url);\n if (!path) throw new Error(\"url must be a safe app route.\");\n return {\n app: explicitApp,\n path,\n url: `${appHomeBaseUrl(explicitApp)}${path}`,\n };\n }\n\n const apps = explicitApp ? [explicitApp] : await options.listApps();\n const target = apps\n .filter((app) => appMatchesUrlPath(app, parsed))\n .sort((a, b) => appPathSpecificity(b) - appPathSpecificity(a))[0];\n if (!target) {\n throw new Error(options.urlError);\n }\n const path = safeAppPath(appRelativePath(target, parsed));\n if (!path) throw new Error(\"Embed URL path is not safe.\");\n assertAppCanOpenPath(target, path);\n return { app: target, path, url: `${appHomeBaseUrl(target)}${path}` };\n}\n\nasync function resolveDispatchEmbedTarget(input: {\n app?: string;\n url?: string;\n path?: string;\n}): Promise<{ app: DispatchMcpAccessibleApp; path: string; url: string }> {\n return resolveEmbedTarget(input, {\n resolveApp: resolveGrantedDispatchMcpApp,\n listApps: listGrantedDispatchMcpApps,\n urlError: \"Embed URL must belong to an app granted through Dispatch.\",\n });\n}\n\nasync function resolveWorkspaceSsoEmbedTarget(input: {\n app?: string;\n url?: string;\n path?: string;\n}): Promise<{ app: DispatchMcpAccessibleApp; path: string; url: string }> {\n return resolveEmbedTarget(input, {\n resolveApp: resolveWorkspaceSsoApp,\n listApps: listWorkspaceSsoApps,\n urlError:\n \"Embed URL must belong to an app registered for Dispatch workspace sign-in.\",\n });\n}\n\nasync function createDispatchSelfEmbedSession(input: {\n ownerEmail: string;\n orgId?: string;\n path: string;\n baseUrl: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n}> {\n const ticket = await createEmbedSessionTicket({\n ownerEmail: input.ownerEmail,\n orgId: input.orgId,\n targetPath: input.path,\n scope: input.chrome ?? null,\n });\n const startPath = buildEmbedStartPath(ticket.ticket);\n return {\n startUrl: new URL(startPath, input.baseUrl).toString(),\n targetPath: input.path,\n expiresAt: ticket.expiresAt,\n app: DISPATCH_APP_ID,\n };\n}\n\nexport async function createGrantedDispatchMcpEmbedSession(input: {\n app?: string;\n url?: string;\n path?: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n}> {\n const userEmail = getRequestUserEmail();\n if (!userEmail) throw new Error(\"no authenticated user\");\n const target = await resolveDispatchEmbedTarget(input);\n\n return createEmbedSessionForResolvedApp({\n ownerEmail: userEmail,\n orgId: getRequestOrgId(),\n target,\n chrome: input.chrome,\n });\n}\n\nasync function createEmbedSessionForResolvedApp(input: {\n ownerEmail: string;\n orgId?: string;\n target: { app: DispatchMcpAccessibleApp; path: string; url: string };\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n}> {\n const { ownerEmail, orgId, target, chrome } = input;\n\n if (target.app.id === DISPATCH_APP_ID) {\n return createDispatchSelfEmbedSession({\n ownerEmail,\n orgId,\n path: target.path,\n baseUrl: appBaseUrl(target.app),\n chrome,\n });\n }\n\n const targetMcpUrl = appMcpUrl(target.app);\n const targetCredentials = await createTargetMcpUserCredentials({\n mcpUrl: targetMcpUrl,\n ownerEmail,\n ...(orgId !== undefined ? { orgId } : {}),\n });\n const targetDetails = targetMcpRequestDetails({\n app: target.app,\n mcpUrl: targetMcpUrl,\n url: target.url,\n });\n let parsed:\n | {\n startUrl?: string;\n targetPath?: string;\n expiresAt?: number;\n }\n | undefined;\n const credentials = [...targetCredentials.credentials];\n for (const [index, credential] of credentials.entries()) {\n console.info(\"[dispatch] workspace embed target request\", {\n ...targetDetails,\n authStrategy: credential.strategy,\n });\n try {\n const result = await callTargetCreateEmbedSession({\n mcpUrl: targetMcpUrl,\n token: credential.token,\n url: target.url,\n ...(chrome !== undefined ? { chrome } : {}),\n });\n parsed = parseMcpToolTextResult(result) as {\n startUrl?: string;\n targetPath?: string;\n expiresAt?: number;\n };\n break;\n } catch (error) {\n if (\n error instanceof TargetMcpAuthenticationRejectedError &&\n credential.strategy === \"deployment-user\" &&\n index === credentials.length - 1\n ) {\n const orgMemberCredential =\n await targetCredentials.loadOrgMemberCredential();\n if (orgMemberCredential) credentials.push(orgMemberCredential);\n }\n if (\n error instanceof TargetMcpAuthenticationRejectedError &&\n index < credentials.length - 1\n ) {\n console.warn(\"[dispatch] workspace embed auth candidate rejected\", {\n ...targetDetails,\n authStrategy: credential.strategy,\n status: targetMcpErrorStatus(error),\n });\n continue;\n }\n console.warn(\"[dispatch] workspace embed target response\", {\n ...targetDetails,\n authStrategy: credential.strategy,\n status: targetMcpErrorStatus(error),\n category: isRetryableTargetMcpError(error) ? \"transient\" : \"permanent\",\n });\n throw error;\n }\n }\n if (!parsed) throw new Error(\"Target app did not return an embed session.\");\n if (!parsed.startUrl) {\n throw new Error(\"Target app did not return an embed start URL.\");\n }\n const startUrl = resolveGrantedAppEmbedStartUrl(target.app, parsed.startUrl);\n const startUrlDetails = new URL(startUrl);\n console.info(\"[dispatch] workspace embed target minted session\", {\n ...targetDetails,\n startPath: startUrlDetails.pathname,\n returnedTicket: startUrlDetails.searchParams.has(\"ticket\"),\n returnedTargetPath: typeof parsed.targetPath === \"string\",\n returnedExpiry: typeof parsed.expiresAt === \"number\",\n });\n const output: {\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n } = {\n startUrl,\n app: target.app.id,\n };\n if (parsed.targetPath) output.targetPath = parsed.targetPath;\n if (typeof parsed.expiresAt === \"number\") output.expiresAt = parsed.expiresAt;\n return output;\n}\n\nexport async function createWorkspaceSsoEmbedSession(input: {\n app?: string;\n url?: string;\n path?: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n}> {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) {\n console.warn(\"[dispatch] workspace embed mint rejected\", {\n phase: \"dispatch-auth\",\n requestedApp: input.app ?? null,\n hasPath: typeof input.path === \"string\",\n hasUrl: typeof input.url === \"string\",\n ownerResolved: false,\n orgResolved: Boolean(getRequestOrgId()),\n });\n throw new Error(\"no authenticated user\");\n }\n const scope = {\n userEmail: ownerEmail,\n userKey: ownerEmail,\n orgId: getRequestOrgId(),\n };\n const enabled =\n (await isFeatureFlagEnabled(DISPATCH_WORKSPACE_SSO_FLAG, scope)) ||\n (await isFeatureFlagEnabled(DESKTOP_WORKSPACE_SSO_FLAG, scope));\n if (!enabled) {\n console.warn(\"[dispatch] workspace embed mint rejected\", {\n phase: \"feature-flag\",\n requestedApp: input.app ?? null,\n hasPath: typeof input.path === \"string\",\n hasUrl: typeof input.url === \"string\",\n ownerResolved: true,\n orgResolved: Boolean(getRequestOrgId()),\n });\n throw new Error(\"Dispatch workspace sign-in is not enabled.\");\n }\n\n const target = await resolveWorkspaceSsoEmbedTarget(input);\n return createEmbedSessionForResolvedApp({\n ownerEmail,\n orgId: getRequestOrgId(),\n target,\n chrome: input.chrome,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mcp-gateway.js","sourceRoot":"","sources":["../../../src/server/lib/mcp-gateway.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n A2AClient,\n canonicalA2AAudience,\n extractA2APersistedMutationReceipts,\n getGlobalA2ASecret,\n signA2AOrgMemberDelegationToken,\n signA2AOrganizationToken,\n signA2AToken,\n stripA2APersistedArtifactMarkers,\n type A2APersistedMutationReceipt,\n type Task,\n} from \"@agent-native/core/a2a\";\nimport { getAppConfig } from \"@agent-native/core/app-config\";\nimport { isFeatureFlagEnabled } from \"@agent-native/core/feature-flags\";\nimport {\n buildMcpToolName,\n McpClientManager,\n} from \"@agent-native/core/mcp-client\";\nimport { getOrgA2ASecret, getOrgDomain } from \"@agent-native/core/org\";\nimport {\n buildDeepLink,\n buildEmbedStartPath,\n createEmbedSessionTicket,\n getAppProductionUrl,\n getConfiguredAppBasePath,\n getRequestContext,\n getRequestOrgId,\n getRequestUserEmail,\n resolveAppRuntimeUrl,\n} from \"@agent-native/core/server\";\nimport {\n discoverAgents,\n getBuiltinAgents,\n type DiscoveredAgent,\n} from \"@agent-native/core/server/agent-discovery\";\nimport { EMBED_START_PATH } from \"@agent-native/core/shared\";\n\nimport { DESKTOP_WORKSPACE_SSO_FLAG } from \"../../shared/feature-flags.js\";\nimport {\n DISPATCH_WORKSPACE_SSO_FLAG,\n isWorkspaceSsoAppUrl,\n} from \"../../shared/workspace-sso.js\";\nimport { listWorkspaceApps } from \"./app-creation-store.js\";\nimport {\n projectEnvironmentUrl,\n requestEnvironmentLane,\n} from \"./environment-lane.js\";\nimport {\n getDispatchMcpAppAccessSettings,\n isAppAllowedByMcpAccess,\n type DispatchMcpAppAccessSettings,\n} from \"./mcp-access-store.js\";\n\nconst DISPATCH_APP_ID = \"dispatch\";\nconst DISPATCH_NAME = \"Dispatch\";\nconst DISPATCH_DESCRIPTION =\n \"Workspace control plane for extensions, agents, vault, integrations, approvals, and app routing.\";\nconst DISPATCH_COLOR = \"#14B8A6\";\nconst TARGET_EMBED_SESSION_ATTEMPTS = 3;\nconst TARGET_EMBED_SESSION_RETRY_BASE_MS = 250;\nconst TARGET_EMBED_SESSION_CONNECT_TIMEOUT_MS = 90_000;\nconst TARGET_EMBED_SESSION_BUDGET_MS = 95_000;\nconst DISPATCH_ASK_APP_DEFAULT_INLINE_WAIT_MS = 20_000;\nconst DISPATCH_ASK_APP_MAX_INLINE_WAIT_MS = 20_000;\nconst DISPATCH_ASK_APP_POLL_INTERVAL_MS = 1_500;\nconst DISPATCH_A2A_REQUEST_TIMEOUT_MS = 10_000;\nconst DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS = [250, 750, 1_500] as const;\nconst DISPATCH_ASK_APP_TERMINAL_STATES = new Set([\n \"completed\",\n \"failed\",\n \"canceled\",\n \"input-required\",\n]);\n\nclass DispatchAskAppInlineDeadlineError extends Error {\n constructor() {\n super(\"ask_app inline wait deadline reached\");\n this.name = \"DispatchAskAppInlineDeadlineError\";\n }\n}\n\nexport interface DispatchMcpAccessibleApp {\n id: string;\n name: string;\n description: string;\n url: string;\n homeUrl?: string;\n mcpUrl?: string;\n color: string;\n granted: boolean;\n}\n\nfunction normalizeAppId(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction boundedDispatchAskAppWaitMs(raw: unknown): number {\n if (raw == null || raw === \"\") {\n return DISPATCH_ASK_APP_DEFAULT_INLINE_WAIT_MS;\n }\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) return DISPATCH_ASK_APP_DEFAULT_INLINE_WAIT_MS;\n return Math.max(\n 0,\n Math.min(DISPATCH_ASK_APP_MAX_INLINE_WAIT_MS, Math.trunc(parsed)),\n );\n}\n\nasync function dispatchAskAppIdempotencyKey(\n target: DispatchMcpAccessibleApp,\n message: string,\n): Promise<string> {\n const requestId = getRequestContext()?.mcpRequestId;\n if (!requestId) return `ask-app:${globalThis.crypto.randomUUID()}`;\n\n const digest = await globalThis.crypto.subtle.digest(\n \"SHA-256\",\n new TextEncoder().encode(\n JSON.stringify({\n requestId,\n app: target.id,\n targetUrl: target.url,\n message,\n }),\n ),\n );\n let hex = \"\";\n for (const byte of new Uint8Array(digest)) {\n hex += byte.toString(16).padStart(2, \"0\");\n }\n return `ask-app:v1:${hex}`;\n}\n\nfunction isTerminalDispatchTask(task: Task): boolean {\n return DISPATCH_ASK_APP_TERMINAL_STATES.has(String(task.status.state));\n}\n\nfunction dispatchTaskText(task: Task): string {\n return (\n task.status.message?.parts\n ?.filter(\n (part): part is { type: \"text\"; text: string } => part.type === \"text\",\n )\n .map((part) => part.text)\n .join(\"\\n\")\n .trim() ?? \"\"\n );\n}\n\ntype DispatchMutationReceipt = A2APersistedMutationReceipt;\n\nfunction dispatchTaskMutationReceipts(\n task: Task,\n app: string,\n identity: {\n userEmail: string;\n orgId: string | null;\n orgSecret: string | null;\n },\n): DispatchMutationReceipt[] {\n if (app !== \"content\" || !identity.orgSecret) return [];\n const text = dispatchTaskText(task);\n if (!text) return [];\n const result = [{ tool: \"call-agent\", result: text }];\n const receipts = extractA2APersistedMutationReceipts(result, {\n persistedArtifactSecrets: [identity.orgSecret],\n expectedDelegatedTaskId: task.id,\n });\n return receipts.filter((receipt) => {\n if (receipt.target.authorityScopeKind === \"personal\") {\n return (\n receipt.target.authorityScopeId.toLowerCase() ===\n identity.userEmail.toLowerCase()\n );\n }\n return (\n identity.orgId !== null &&\n receipt.target.authorityScopeId === identity.orgId\n );\n });\n}\n\ntype DispatchAskAppStatusErrorCategory =\n | \"transport\"\n | \"timeout\"\n | \"upstream_5xx\"\n | \"rate_limited\";\n\ntype DispatchAskAppTaskResult = {\n app: string;\n routedVia: \"a2a\";\n taskId: string;\n status: string;\n response?: string;\n receipts?: DispatchMutationReceipt[];\n error?: string;\n inputRequired?: string;\n statusRead?: \"unavailable\";\n retryable?: true;\n errorCategory?: DispatchAskAppStatusErrorCategory;\n attempts?: number;\n pollAfterMs?: number;\n poll?: { tool: \"ask_app_status\"; arguments: { app: string; taskId: string } };\n message?: string;\n};\n\nfunction dispatchAskAppTaskResult(\n app: string,\n task: Task,\n identity: {\n userEmail: string;\n orgId: string | null;\n orgSecret: string | null;\n },\n): DispatchAskAppTaskResult {\n const status = String(task.status.state);\n const response = stripA2APersistedArtifactMarkers(dispatchTaskText(task));\n const receipts = dispatchTaskMutationReceipts(task, app, identity);\n const base = {\n app,\n routedVia: \"a2a\" as const,\n taskId: task.id,\n status,\n };\n\n if (status === \"completed\") {\n return {\n ...base,\n response: response || \"(no response)\",\n ...(receipts.length > 0 ? { receipts } : {}),\n };\n }\n if (status === \"failed\" || status === \"canceled\") {\n return {\n ...base,\n ...(response ? { response } : {}),\n error: response || `ask_app task ${status}.`,\n };\n }\n if (status === \"input-required\") {\n const inputRequired =\n response || \"The agent needs additional input before it can continue.\";\n return {\n ...base,\n response: inputRequired,\n inputRequired,\n message: inputRequired,\n };\n }\n return {\n ...base,\n pollAfterMs: DISPATCH_ASK_APP_POLL_INTERVAL_MS,\n poll: {\n tool: \"ask_app_status\",\n arguments: { app, taskId: task.id },\n },\n message:\n `ask_app is still ${status}. Call ask_app_status with ` +\n `taskId \"${task.id}\" to retrieve the final response.`,\n };\n}\n\nasync function createDispatchA2AClient(input: {\n targetUrl: string;\n userEmail: string;\n orgId?: string;\n orgDomain?: string;\n orgSecret?: string;\n deadline?: number;\n}): Promise<{\n client: A2AClient;\n metadata: Record<string, unknown>;\n}> {\n const apiKeys: string[] = [];\n const addSignedToken = async (preferGlobalSecret: boolean) => {\n if (input.orgId && !input.orgDomain?.trim()) return;\n try {\n const audience = canonicalA2AAudience(input.targetUrl);\n const token = preferGlobalSecret\n ? await signA2AToken(input.userEmail, input.orgDomain, undefined, {\n preferGlobalSecret: true,\n audience,\n })\n : input.orgDomain && input.orgSecret\n ? await signA2AOrganizationToken(\n input.orgDomain,\n input.orgSecret,\n undefined,\n { audience },\n )\n : undefined;\n if (token && !apiKeys.includes(token)) apiKeys.push(token);\n } catch {\n // A2A can still be configured for local/dev unauthenticated calls. If\n // signing is unavailable, let the target return its own auth error.\n }\n };\n\n if (getGlobalA2ASecret()) await addSignedToken(true);\n if (input.orgSecret) await addSignedToken(false);\n\n const metadata: Record<string, unknown> = {\n userEmail: input.userEmail,\n ...(input.orgDomain ? { orgDomain: input.orgDomain } : {}),\n ...(getRequestContext()?.requestOrigin\n ? { requestOrigin: getRequestContext()?.requestOrigin }\n : {}),\n };\n const remainingMs =\n input.deadline == null ? null : input.deadline - Date.now();\n return {\n client: new A2AClient(input.targetUrl, apiKeys[0], {\n requestTimeoutMs:\n remainingMs == null\n ? DISPATCH_A2A_REQUEST_TIMEOUT_MS\n : Math.max(1, Math.min(DISPATCH_A2A_REQUEST_TIMEOUT_MS, remainingMs)),\n ...(apiKeys.length > 1 ? { fallbackApiKeys: apiKeys.slice(1) } : {}),\n }),\n metadata,\n };\n}\n\nfunction isTransientDispatchAskAppStatusError(err: unknown): boolean {\n return dispatchAskAppStatusErrorCategory(err) != null;\n}\n\nfunction dispatchAskAppStatusErrorCategory(\n err: unknown,\n): DispatchAskAppStatusErrorCategory | null {\n const message = err instanceof Error ? err.message : safeJson(err);\n const causeCode = dispatchAskAppStatusErrorCauseCode(err) ?? \"\";\n const diagnostic = `${message} ${causeCode}`;\n if (/A2A request failed \\(429\\)/i.test(message)) return \"rate_limited\";\n if (/A2A request failed \\((?:500|502|503|504)\\)/i.test(message)) {\n return \"upstream_5xx\";\n }\n if (/etimedout|timeout|aborted|aborterror/i.test(diagnostic)) {\n return \"timeout\";\n }\n if (\n /\\bfetch failed\\b|failed to fetch|networkerror|socket hang up|econnreset/i.test(\n diagnostic,\n )\n ) {\n return \"transport\";\n }\n return null;\n}\n\nfunction dispatchAskAppStatusErrorCauseCode(err: unknown): string | undefined {\n if (!(err instanceof Error)) return undefined;\n const directCode = (err as Error & { code?: unknown }).code;\n if (typeof directCode === \"string\" && directCode.trim()) {\n return directCode.trim();\n }\n if (!err.cause || typeof err.cause !== \"object\") return undefined;\n const code = (err.cause as { code?: unknown }).code;\n return typeof code === \"string\" && code.trim() ? code.trim() : undefined;\n}\n\nfunction dispatchAskAppStatusOriginHost(origin: string): string {\n try {\n return new URL(origin).host;\n } catch {\n return \"unknown\";\n }\n}\n\nfunction dispatchAskAppStatusReadUnavailableResult(\n app: string,\n taskId: string,\n errorCategory: DispatchAskAppStatusErrorCategory,\n attempts: number,\n): DispatchAskAppTaskResult {\n return {\n app,\n routedVia: \"a2a\",\n taskId,\n status: \"unknown\",\n statusRead: \"unavailable\",\n retryable: true,\n errorCategory,\n attempts,\n pollAfterMs: DISPATCH_ASK_APP_POLL_INTERVAL_MS,\n poll: {\n tool: \"ask_app_status\",\n arguments: { app, taskId },\n },\n message:\n \"The durable ask_app task status could not be read after bounded retries. \" +\n \"The task may still be running or completed. Retry ask_app_status \" +\n \"with the same app and taskId; do not resubmit ask_app.\",\n };\n}\n\nasync function runBeforeDispatchAskAppDeadline<T>(\n operation: () => Promise<T>,\n deadline: number,\n): Promise<T> {\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) throw new DispatchAskAppInlineDeadlineError();\n\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n operation(),\n new Promise<T>((_resolve, reject) => {\n timeout = setTimeout(\n () => reject(new DispatchAskAppInlineDeadlineError()),\n remainingMs,\n );\n }),\n ]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\nasync function waitForDispatchA2ATask(\n client: A2AClient,\n task: Task,\n deadline: number | undefined,\n): Promise<Task> {\n if (deadline == null || isTerminalDispatchTask(task)) return task;\n let current = task;\n while (!isTerminalDispatchTask(current)) {\n const remaining = deadline - Date.now();\n if (remaining <= 0) return current;\n await new Promise((resolve) =>\n setTimeout(\n resolve,\n Math.min(DISPATCH_ASK_APP_POLL_INTERVAL_MS, remaining),\n ),\n );\n if (Date.now() >= deadline) return current;\n try {\n current = await runBeforeDispatchAskAppDeadline(\n () => client.getTask(task.id),\n deadline,\n );\n } catch (err) {\n if (err instanceof DispatchAskAppInlineDeadlineError) return current;\n if (!isTransientDispatchAskAppStatusError(err)) throw err;\n if (Date.now() >= deadline) return current;\n }\n }\n return current;\n}\n\nfunction normalizeBaseUrl(raw: string | undefined | null): string | null {\n const value = raw?.trim();\n if (!value) return null;\n try {\n const url = new URL(value);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return null;\n return url.toString().replace(/\\/+$/, \"\");\n } catch {\n return null;\n }\n}\n\nfunction normalizeBasePath(value: string | undefined): string {\n const trimmed = value?.trim();\n if (!trimmed || trimmed === \"/\") return \"\";\n const normalized = trimmed.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n return normalized ? `/${normalized}` : \"\";\n}\n\nfunction withConfiguredBasePath(baseUrl: string): string {\n const basePath = normalizeBasePath(\n process.env.VITE_APP_BASE_PATH || process.env.APP_BASE_PATH,\n );\n if (!basePath) return baseUrl;\n try {\n const url = new URL(baseUrl);\n const path = normalizeBasePath(url.pathname);\n if (path === basePath || path.startsWith(`${basePath}/`)) {\n return baseUrl;\n }\n url.pathname = path && path !== \"/\" ? `${basePath}${path}` : `${basePath}/`;\n return url.toString().replace(/\\/+$/, \"\");\n } catch {\n return baseUrl;\n }\n}\n\nfunction dispatchSelfBaseUrl(): string {\n const requestOrigin = normalizeBaseUrl(getRequestContext()?.requestOrigin);\n if (requestOrigin && isTrustedRequestOrigin(requestOrigin)) {\n return withConfiguredBasePath(requestOrigin);\n }\n\n const configured =\n normalizeBaseUrl(process.env.WORKSPACE_GATEWAY_URL) ??\n normalizeBaseUrl(process.env.APP_URL) ??\n normalizeBaseUrl(process.env.URL) ??\n normalizeBaseUrl(process.env.DEPLOY_URL) ??\n normalizeBaseUrl(process.env.BETTER_AUTH_URL);\n if (configured) return withConfiguredBasePath(configured);\n\n return process.env.NODE_ENV === \"production\"\n ? \"https://dispatch.agent-native.com\"\n : \"http://localhost:8092\";\n}\n\nfunction isTrustedRequestOrigin(value: string): boolean {\n // An embed ticket is fetched from this origin and becomes a bearer token.\n const origin = new URL(value).origin;\n const candidates = [\n { source: \"production\", value: getAppProductionUrl() },\n { source: \"runtime\", value: resolveAppRuntimeUrl() },\n ];\n return candidates.some(({ source, value }) => {\n if (!value) return false;\n const url = normalizeBaseUrl(value);\n if (!url) {\n console.warn(\"[dispatch] invalid configured request origin\", { source });\n return false;\n }\n return new URL(url).origin === origin;\n });\n}\n\nfunction dispatchSelfApp(\n settings: DispatchMcpAppAccessSettings,\n): DispatchMcpAccessibleApp {\n return {\n id: DISPATCH_APP_ID,\n name: DISPATCH_NAME,\n description: DISPATCH_DESCRIPTION,\n url: dispatchSelfBaseUrl(),\n color: DISPATCH_COLOR,\n granted: isAppAllowedByMcpAccess(DISPATCH_APP_ID, settings),\n };\n}\n\nconst CONTROL_CHARS = new RegExp(\"[\\\\u0000-\\\\u001f\\\\u007f]\");\n\nfunction safeAppPath(raw: unknown): string | null {\n if (typeof raw !== \"string\" || !raw.trim()) return null;\n const value = raw.trim();\n if (CONTROL_CHARS.test(value)) return null;\n if (!value.startsWith(\"/\")) return null;\n if (value.startsWith(\"//\") || value.startsWith(\"/\\\\\")) return null;\n if (/^\\/[a-z][a-z0-9+.-]*:/i.test(value)) return null;\n if (/%(?:2f|5c)/i.test(value)) return null;\n const rawPath = value.split(/[?#]/, 1)[0] ?? value;\n let parsed: URL;\n try {\n parsed = new URL(value, \"http://agent-native.invalid\");\n } catch {\n return null;\n }\n if (parsed.pathname !== rawPath) return null;\n return value;\n}\n\nfunction safeJson(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return \"[unserializable]\";\n }\n}\n\nfunction appendParamsToPath(\n path: string,\n params: Record<string, string | number | boolean> | undefined,\n): string {\n if (!params || Object.keys(params).length === 0) return path;\n const url = new URL(path, \"http://agent-native.invalid\");\n for (const [key, value] of Object.entries(params)) {\n url.searchParams.set(key, String(value));\n }\n return `${url.pathname}${url.search}${url.hash}`;\n}\n\nfunction safeAppOrigin(app: DispatchMcpAccessibleApp): string | null {\n try {\n const url = new URL(app.url);\n return url.protocol === \"http:\" || url.protocol === \"https:\"\n ? url.origin\n : null;\n } catch {\n return null;\n }\n}\n\nfunction appBaseUrl(app: DispatchMcpAccessibleApp): string {\n return app.url.replace(/\\/+$/, \"\");\n}\n\nfunction appHomeBaseUrl(app: DispatchMcpAccessibleApp): string {\n const configured = app.homeUrl?.trim();\n if (configured) {\n try {\n const url = new URL(configured);\n if (url.protocol === \"http:\" || url.protocol === \"https:\") {\n return url.toString().replace(/\\/+$/, \"\");\n }\n } catch {\n // coercion-ok: invalid optional home URL falls back to endpoint.\n // Fall back to the registered endpoint below. The endpoint has already\n // passed the app-origin validation before this helper is reached.\n }\n }\n return appBaseUrl(app);\n}\n\nfunction workspaceGatewayMcpUrl(appUrl: string): string | undefined {\n const configuredGateway = getAppConfig().workspace.gatewayUrl?.trim();\n if (!configuredGateway) return undefined;\n\n let configuredUrl: URL;\n try {\n configuredUrl = new URL(configuredGateway);\n } catch {\n throw new Error(\n \"WORKSPACE_GATEWAY_URL must be a valid absolute HTTP(S) URL.\",\n );\n }\n if (\n configuredUrl.protocol !== \"http:\" &&\n configuredUrl.protocol !== \"https:\"\n ) {\n throw new Error(\"WORKSPACE_GATEWAY_URL must use http or https.\");\n }\n\n const gateway = new URL(projectEnvironmentUrl(configuredUrl.toString()));\n if (gateway.protocol !== \"http:\" && gateway.protocol !== \"https:\") {\n throw new Error(\"WORKSPACE_GATEWAY_URL must use http or https.\");\n }\n const target = new URL(appUrl);\n if (gateway.origin !== target.origin) return undefined;\n const requestOrigin = normalizeBaseUrl(getRequestContext()?.requestOrigin);\n if (requestOrigin && new URL(requestOrigin).origin === gateway.origin) {\n // Same-deployment embeds must use the mounted app endpoint, not call back into this gateway.\n return undefined;\n }\n const configuredBasePath = getConfiguredAppBasePath();\n const gatewayPath = gateway.pathname.replace(/\\/+$/, \"\");\n const basePath =\n configuredBasePath &&\n gatewayPath !== configuredBasePath &&\n !gatewayPath.startsWith(`${configuredBasePath}/`)\n ? `${configuredBasePath}${gatewayPath}`\n : gatewayPath;\n gateway.pathname = `${basePath}/mcp`;\n gateway.search = \"\";\n gateway.hash = \"\";\n return gateway.toString().replace(/\\/$/, \"\");\n}\n\nfunction appMcpUrl(app: DispatchMcpAccessibleApp): string {\n const explicit = app.mcpUrl?.trim();\n return (\n explicit?.replace(/\\/+$/, \"\") ??\n workspaceGatewayMcpUrl(app.url) ??\n `${appHomeBaseUrl(app)}/mcp`\n );\n}\n\nfunction appMcpBaseUrl(app: DispatchMcpAccessibleApp): string {\n const url = new URL(appMcpUrl(app));\n url.pathname = url.pathname.replace(/\\/mcp\\/?$/, \"\") || \"/\";\n url.search = \"\";\n url.hash = \"\";\n return url.toString().replace(/\\/$/, \"\");\n}\n\nfunction appChatBaseUrl(app: DispatchMcpAccessibleApp): string {\n const homeUrl = new URL(appHomeBaseUrl(app));\n if (homeUrl.pathname !== \"/\") {\n return homeUrl.toString().replace(/\\/+$/, \"\");\n }\n return appMcpBaseUrl(app);\n}\n\nfunction resolveGrantedAppEmbedStartUrl(\n app: DispatchMcpAccessibleApp,\n startUrl: string,\n): string {\n try {\n const baseUrl = appMcpBaseUrl(app);\n const resolved = new URL(startUrl, `${baseUrl}/`);\n const base = new URL(baseUrl);\n const basePath = base.pathname.replace(/\\/+$/, \"\");\n const expectedPath = `${basePath}${EMBED_START_PATH}`;\n if (resolved.origin !== base.origin || resolved.pathname !== expectedPath) {\n throw new Error(\n \"Target app returned an embed start URL outside the granted app.\",\n );\n }\n return resolved.toString();\n } catch {\n throw new Error(\"Target app returned an invalid embed start URL.\");\n }\n}\n\nfunction appBasePath(app: DispatchMcpAccessibleApp): string {\n const pathname = new URL(appHomeBaseUrl(app)).pathname.replace(/\\/+$/, \"\");\n return pathname === \"/\" ? \"\" : pathname;\n}\n\nfunction appMatchesUrlPath(app: DispatchMcpAccessibleApp, url: URL): boolean {\n const origin = new URL(appHomeBaseUrl(app)).origin;\n if (!origin || url.origin !== origin) return false;\n const basePath = appBasePath(app);\n if (!basePath) return true;\n return url.pathname === basePath || url.pathname.startsWith(`${basePath}/`);\n}\n\nfunction appPathSpecificity(app: DispatchMcpAccessibleApp): number {\n return appBasePath(app).length;\n}\n\nfunction appRelativePath(app: DispatchMcpAccessibleApp, url: URL): string {\n const basePath = appBasePath(app);\n const path = basePath\n ? url.pathname === basePath\n ? \"/\"\n : url.pathname.slice(basePath.length)\n : url.pathname;\n return `${path || \"/\"}${url.search}${url.hash}`;\n}\n\nfunction defaultWorkspaceSsoHomeUrl(\n app: DispatchMcpAccessibleApp,\n builtinHomeUrls: ReadonlyMap<string, string>,\n): string | undefined {\n const builtinHomeUrl = builtinHomeUrls.get(app.id);\n if (builtinHomeUrl) return builtinHomeUrl;\n return safeAppOrigin(app) ?? undefined;\n}\n\nfunction isDispatchControlPath(path: string | null): boolean {\n if (!path) return false;\n const route = path.split(/[?#]/, 1)[0] ?? path;\n return (\n route === \"/extensions\" ||\n route.startsWith(\"/extensions/\") ||\n route === \"/tools\" ||\n route.startsWith(\"/tools/\")\n );\n}\n\nfunction assertAppCanOpenPath(app: DispatchMcpAccessibleApp, path: string) {\n if (app.id !== DISPATCH_APP_ID && isDispatchControlPath(path)) {\n throw new Error(\n `Path \"${path}\" belongs to Dispatch. Use app: \"dispatch\" for Dispatch extension and tool routes.`,\n );\n }\n}\n\nfunction toAccessibleApp(\n agent: DiscoveredAgent,\n settings: DispatchMcpAppAccessSettings,\n): DispatchMcpAccessibleApp {\n return {\n id: agent.id,\n name: agent.name,\n description: agent.description,\n url: projectEnvironmentUrl(agent.url),\n color: agent.color,\n granted: isAppAllowedByMcpAccess(agent.id, settings),\n };\n}\n\nexport async function listDispatchMcpApps(): Promise<{\n settings: DispatchMcpAppAccessSettings;\n apps: DispatchMcpAccessibleApp[];\n}> {\n const [settings, agents] = await Promise.all([\n getDispatchMcpAppAccessSettings(),\n discoverAgents(\"dispatch\"),\n ]);\n return {\n settings,\n apps: [\n dispatchSelfApp(settings),\n ...agents\n .filter((agent) => normalizeAppId(agent.id) !== DISPATCH_APP_ID)\n .map((agent) => toAccessibleApp(agent, settings)),\n ],\n };\n}\n\nexport async function listGrantedDispatchMcpApps(): Promise<\n DispatchMcpAccessibleApp[]\n> {\n const { apps } = await listDispatchMcpApps();\n return apps.filter((app) => app.granted && safeAppOrigin(app));\n}\n\nexport async function listGrantedDispatchMcpAppOrigins(): Promise<string[]> {\n const apps = await listGrantedDispatchMcpApps();\n return Array.from(new Set(apps.flatMap((app) => safeAppOrigin(app) ?? [])));\n}\n\nexport async function resolveGrantedDispatchMcpApp(\n app: string,\n): Promise<DispatchMcpAccessibleApp> {\n const target = normalizeAppId(app);\n if (!target) throw new Error(\"app is required\");\n const { apps } = await listDispatchMcpApps();\n const match = apps.find(\n (candidate) =>\n candidate.id === target || candidate.name.toLowerCase() === target,\n );\n if (!match) {\n throw new Error(\n `Unknown app \"${app}\". Call list_apps to see apps available through Dispatch MCP.`,\n );\n }\n if (!match.granted) {\n throw new Error(\n `Dispatch MCP access to \"${match.id}\" is not granted. Open Dispatch > Agents to change MCP app access.`,\n );\n }\n if (!safeAppOrigin(match)) {\n throw new Error(\n `Dispatch MCP app \"${match.id}\" has an invalid URL and cannot be opened through MCP.`,\n );\n }\n return match;\n}\n\nasync function isEligibleWorkspaceSsoApp(\n candidate: DispatchMcpAccessibleApp,\n): Promise<boolean> {\n return isWorkspaceSsoAppUrl(candidate, {\n nodeEnv: process.env.NODE_ENV,\n registryRaw: process.env.IDENTITY_SSO_APP_REGISTRY_JSON,\n environmentLane: requestEnvironmentLane(),\n });\n}\n\nasync function listWorkspaceSsoApps(): Promise<DispatchMcpAccessibleApp[]> {\n const [agents, mountedApps] = await Promise.all([\n discoverAgents(\"dispatch\"),\n listWorkspaceApps({ includeAgentCards: false }),\n ]);\n const builtinHomeUrls = new Map(\n getBuiltinAgents(\"dispatch\").map((agent) => [\n agent.id,\n projectEnvironmentUrl(agent.url),\n ]),\n );\n const candidatesById = new Map<string, DispatchMcpAccessibleApp>();\n for (const agent of agents) {\n if (normalizeAppId(agent.id) === DISPATCH_APP_ID) continue;\n const accessible = toAccessibleApp(agent, {\n mode: \"all-apps\",\n selectedAppIds: [],\n });\n candidatesById.set(agent.id, {\n ...accessible,\n homeUrl: defaultWorkspaceSsoHomeUrl(accessible, builtinHomeUrls),\n granted: true,\n });\n }\n for (const app of mountedApps) {\n if (app.isDispatch || !app.url) continue;\n const mcpUrl = workspaceGatewayMcpUrl(app.url);\n candidatesById.set(app.id, {\n id: app.id,\n name: app.name,\n description: app.description,\n url: app.url,\n ...(mcpUrl ? { mcpUrl } : {}),\n color: DISPATCH_COLOR,\n granted: true,\n });\n }\n const candidates = [...candidatesById.values()];\n const eligible = [] as DispatchMcpAccessibleApp[];\n for (const candidate of candidates) {\n if (await isEligibleWorkspaceSsoApp(candidate)) {\n eligible.push(candidate);\n }\n }\n return [\n {\n id: DISPATCH_APP_ID,\n name: DISPATCH_NAME,\n description: DISPATCH_DESCRIPTION,\n url: dispatchSelfBaseUrl(),\n color: DISPATCH_COLOR,\n granted: true,\n },\n ...eligible,\n ];\n}\n\nasync function resolveWorkspaceSsoApp(\n app: string,\n): Promise<DispatchMcpAccessibleApp> {\n const target = normalizeAppId(app);\n if (!target) throw new Error(\"app is required\");\n const apps = await listWorkspaceSsoApps();\n const match = apps.find(\n (candidate) =>\n candidate.id === target || candidate.name.toLowerCase() === target,\n );\n if (!match) {\n throw new Error(\n `Workspace app \"${app}\" is not registered for workspace sign-in.`,\n );\n }\n return match;\n}\n\nexport async function askGrantedDispatchMcpApp(\n app: string,\n message: string,\n options?: { async?: boolean; maxWaitMs?: number },\n): Promise<ReturnType<typeof dispatchAskAppTaskResult>> {\n const trimmedMessage = message.trim();\n if (!trimmedMessage) throw new Error(\"message is required\");\n const target = await resolveGrantedDispatchMcpApp(app);\n const userEmail = getRequestUserEmail();\n if (!userEmail) throw new Error(\"no authenticated user\");\n\n const orgId = getRequestOrgId();\n const [orgDomain, orgSecret] = orgId\n ? await Promise.all([\n getOrgDomain(orgId).catch(() => null),\n getOrgA2ASecret(orgId).catch(() => null),\n ])\n : [null, null];\n\n const inlineWaitMs =\n options?.async === true\n ? 0\n : boundedDispatchAskAppWaitMs(options?.maxWaitMs);\n const deadline = inlineWaitMs > 0 ? Date.now() + inlineWaitMs : undefined;\n const submissionDeadline =\n deadline ?? Date.now() + DISPATCH_A2A_REQUEST_TIMEOUT_MS;\n\n const { client, metadata } = await createDispatchA2AClient({\n targetUrl: target.url,\n userEmail,\n orgId: orgId ?? undefined,\n orgDomain: orgDomain ?? undefined,\n orgSecret: orgSecret ?? undefined,\n deadline: submissionDeadline,\n });\n const idempotencyKey = await dispatchAskAppIdempotencyKey(\n target,\n trimmedMessage,\n );\n const task = await client.send(\n {\n role: \"user\",\n parts: [{ type: \"text\", text: trimmedMessage }],\n },\n {\n async: true,\n metadata,\n idempotencyKey,\n deadlineMs: submissionDeadline,\n },\n );\n const finalOrRunning = await waitForDispatchA2ATask(client, task, deadline);\n return dispatchAskAppTaskResult(target.id, finalOrRunning, {\n userEmail,\n orgId: orgId ?? null,\n orgSecret: orgSecret ?? null,\n });\n}\n\nexport async function getGrantedDispatchMcpAppTask(\n app: string,\n taskId: string,\n): Promise<DispatchAskAppTaskResult> {\n const trimmedTaskId = taskId.trim();\n if (!trimmedTaskId) throw new Error(\"taskId is required\");\n const target = await resolveGrantedDispatchMcpApp(app);\n const userEmail = getRequestUserEmail();\n if (!userEmail) throw new Error(\"no authenticated user\");\n\n const orgId = getRequestOrgId();\n const [orgDomain, orgSecret] = orgId\n ? await Promise.all([\n getOrgDomain(orgId).catch(() => null),\n getOrgA2ASecret(orgId).catch(() => null),\n ])\n : [null, null];\n const { client } = await createDispatchA2AClient({\n targetUrl: target.url,\n userEmail,\n orgId: orgId ?? undefined,\n orgDomain: orgDomain ?? undefined,\n orgSecret: orgSecret ?? undefined,\n });\n const maxAttempts = DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS.length + 1;\n for (\n let attempt = 0;\n attempt <= DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS.length;\n attempt++\n ) {\n const startedAt = Date.now();\n try {\n const task = await client.getTask(trimmedTaskId);\n return dispatchAskAppTaskResult(target.id, task, {\n userEmail,\n orgId: orgId ?? null,\n orgSecret: orgSecret ?? null,\n });\n } catch (err) {\n const delayMs = DISPATCH_ASK_APP_STATUS_RETRY_DELAYS_MS[attempt];\n const errorCategory = dispatchAskAppStatusErrorCategory(err);\n const retryable = errorCategory != null;\n const willRetry = retryable && delayMs != null;\n if (retryable) {\n console.warn(\"[ask_app_status] tasks/get attempt failed\", {\n app: target.id,\n routedVia: \"a2a\",\n taskId: trimmedTaskId,\n originHost: dispatchAskAppStatusOriginHost(target.url),\n attempt: attempt + 1,\n maxAttempts,\n elapsedMs: Date.now() - startedAt,\n errorCategory,\n errorName: err instanceof Error ? err.name : typeof err,\n causeCode: dispatchAskAppStatusErrorCauseCode(err),\n willRetry,\n });\n }\n if (!retryable) throw err;\n if (delayMs == null) {\n return dispatchAskAppStatusReadUnavailableResult(\n target.id,\n trimmedTaskId,\n errorCategory,\n maxAttempts,\n );\n }\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n throw new Error(\"ask_app_status retry loop exited unexpectedly.\");\n}\n\nexport async function openGrantedDispatchMcpApp(input: {\n app: string;\n view?: string;\n path?: string;\n params?: Record<string, string | number | boolean>;\n embed?: boolean;\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n app: string;\n view?: string;\n path?: string;\n url: string;\n embed?: boolean;\n chrome?: \"full\" | \"minimal\";\n embedStartUrl?: string;\n embedTargetPath?: string;\n embedExpiresAt?: number;\n}> {\n const view = input.view?.trim() ?? \"\";\n const hasPathInput = input.path != null;\n const path = safeAppPath(input.path);\n if (hasPathInput && !path) {\n throw new Error(\"path must be a safe app-relative route\");\n }\n if (!view && !path) throw new Error(\"open_app requires view or path\");\n const target = await resolveGrantedDispatchMcpApp(input.app);\n if (path) assertAppCanOpenPath(target, path);\n const relUrl = path\n ? appendParamsToPath(path, input.params)\n : buildDeepLink({\n app: target.id,\n view,\n params: input.params,\n });\n const url = `${appBaseUrl(target)}${relUrl}`;\n let embedSession: Awaited<\n ReturnType<typeof createGrantedDispatchMcpEmbedSession>\n > | null = null;\n if (input.embed) {\n try {\n embedSession = await createGrantedDispatchMcpEmbedSession({\n app: target.id,\n url,\n chrome: input.chrome,\n });\n } catch (error) {\n console.warn(\n `[dispatch] Could not pre-mint MCP embed session for ${target.id}:`,\n error,\n );\n }\n }\n return {\n app: target.id,\n ...(view ? { view } : {}),\n ...(path ? { path } : {}),\n url,\n ...(input.embed === true ? { embed: true } : {}),\n ...(input.chrome ? { chrome: input.chrome } : {}),\n ...(embedSession?.startUrl ? { embedStartUrl: embedSession.startUrl } : {}),\n ...(embedSession?.targetPath\n ? { embedTargetPath: embedSession.targetPath }\n : {}),\n ...(typeof embedSession?.expiresAt === \"number\"\n ? { embedExpiresAt: embedSession.expiresAt }\n : {}),\n };\n}\n\nfunction parseMcpToolTextResult(result: unknown): Record<string, unknown> {\n if (result && typeof result === \"object\") {\n const response = result as Record<string, unknown>;\n const meta =\n response._meta && typeof response._meta === \"object\"\n ? (response._meta as Record<string, unknown>)\n : undefined;\n const embedStart =\n meta?.[\"agent-native/embedStart\"] &&\n typeof meta[\"agent-native/embedStart\"] === \"object\"\n ? (meta[\"agent-native/embedStart\"] as Record<string, unknown>)\n : undefined;\n const withEmbedStart = (parsed: Record<string, unknown>) =>\n typeof embedStart?.startUrl === \"string\"\n ? { ...parsed, startUrl: embedStart.startUrl }\n : parsed;\n const structured = response.structuredContent;\n if (structured && typeof structured === \"object\") {\n return withEmbedStart(structured as Record<string, unknown>);\n }\n const parts = Array.isArray(response.content)\n ? (response.content as Array<Record<string, unknown>>)\n : [];\n const text = parts.find(\n (part) => part?.type === \"text\" && typeof part.text === \"string\",\n )?.text;\n if (typeof text === \"string\" && text.trim()) {\n if (response.isError) throw new Error(text.trim());\n const parsed = JSON.parse(text);\n if (parsed && typeof parsed === \"object\") {\n return withEmbedStart(parsed as Record<string, unknown>);\n }\n }\n }\n throw new Error(\"Target app did not return an embed session.\");\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction httpStatusFromError(error: unknown): number | undefined {\n if (!error || typeof error !== \"object\") return undefined;\n const record = error as Record<string, unknown>;\n const nested =\n record.data && typeof record.data === \"object\"\n ? (record.data as Record<string, unknown>)\n : undefined;\n const status = record.status ?? nested?.status ?? record.code ?? nested?.code;\n return typeof status === \"number\" && status >= 100 && status <= 599\n ? status\n : undefined;\n}\n\nfunction isRetryableTargetMcpError(error: unknown): boolean {\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : safeJson(error);\n const status = httpStatusFromError(error);\n if (status !== undefined) {\n if (\n status === 408 ||\n status === 429 ||\n status === 502 ||\n status === 503 ||\n status === 504\n )\n return true;\n if (status >= 400 && status < 500) return false;\n }\n if (\n /^(?:MCP server\\b.*?\\bnot connected:\\s+)?HTTP(?:\\/\\d+(?:\\.\\d+)?)?\\s+(?:502|503|504)\\b/i.test(\n message,\n )\n ) {\n return true;\n }\n if (\n /rejected the request|unauthorized|forbidden|401|403|404|405|html/i.test(\n message,\n )\n ) {\n return false;\n }\n return /streamable http|handshake|failed to fetch|fetch failed|networkerror|econnrefused|enotfound|timed out|timeout/i.test(\n message,\n );\n}\n\nfunction targetMcpErrorStatus(error: unknown): number | undefined {\n const status = httpStatusFromError(error);\n if (status !== undefined) return status;\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : safeJson(error);\n const matchedStatus = message.match(/\\b([45]\\d{2})\\b/)?.[1];\n return matchedStatus ? Number(matchedStatus) : undefined;\n}\n\nfunction targetMcpRequestDetails(input: {\n app: DispatchMcpAccessibleApp;\n mcpUrl: string;\n url: string;\n}): {\n app: string;\n targetOrigin: string;\n targetPath: string;\n mcpOrigin: string;\n mcpPath: string;\n} {\n const targetUrl = new URL(input.url);\n const mcpUrl = new URL(input.mcpUrl);\n return {\n app: input.app.id,\n targetOrigin: targetUrl.origin,\n targetPath: targetUrl.pathname,\n mcpOrigin: mcpUrl.origin,\n mcpPath: mcpUrl.pathname,\n };\n}\n\nfunction targetMcpConnectTimeout(deadline: number): number {\n const remaining = deadline - Date.now();\n const budget = Math.min(TARGET_EMBED_SESSION_CONNECT_TIMEOUT_MS, remaining);\n return Math.max(1000, budget);\n}\n\nclass TargetMcpAuthenticationRejectedError extends Error {\n readonly status?: number;\n\n constructor(cause: unknown) {\n super(\"Target MCP authentication was rejected\", { cause });\n this.name = \"TargetMcpAuthenticationRejectedError\";\n const status = httpStatusFromError(cause) ?? targetMcpErrorStatus(cause);\n if (status !== undefined) this.status = status;\n }\n}\n\nfunction isTargetMcpAuthenticationRejected(error: unknown): boolean {\n const status = httpStatusFromError(error);\n return status === 401 || status === 403;\n}\n\nfunction targetMcpRetryDelay(attempt: number): number {\n const base =\n TARGET_EMBED_SESSION_RETRY_BASE_MS * Math.pow(2, Math.max(0, attempt - 1));\n return base + Math.floor(Math.random() * 100);\n}\n\nasync function callTargetCreateEmbedSession(input: {\n mcpUrl: string;\n token: string;\n url: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<unknown> {\n const serverId = \"target\";\n const deadline = Date.now() + TARGET_EMBED_SESSION_BUDGET_MS;\n for (let attempt = 1; ; attempt += 1) {\n const manager = new McpClientManager(\n {\n servers: {\n [serverId]: {\n type: \"http\",\n url: input.mcpUrl,\n headers: {\n Authorization: `Bearer ${input.token}`,\n },\n },\n },\n },\n { connectTimeoutMs: targetMcpConnectTimeout(deadline) },\n );\n let connected = false;\n try {\n await manager.start();\n const connectErrorStatus = manager.getConnectErrorStatus(serverId);\n if (connectErrorStatus === 401 || connectErrorStatus === 403) {\n const error = Object.assign(new Error(`HTTP ${connectErrorStatus}`), {\n status: connectErrorStatus,\n });\n throw new TargetMcpAuthenticationRejectedError(error);\n }\n connected = true;\n return await manager.callTool(\n buildMcpToolName(serverId, \"create_embed_session\"),\n {\n url: input.url,\n chrome: input.chrome ?? \"full\",\n },\n );\n } catch (error) {\n if (\n !connected &&\n !(error instanceof TargetMcpAuthenticationRejectedError) &&\n isTargetMcpAuthenticationRejected(error)\n ) {\n throw new TargetMcpAuthenticationRejectedError(error);\n }\n if (\n attempt >= TARGET_EMBED_SESSION_ATTEMPTS ||\n !isRetryableTargetMcpError(error) ||\n deadline - Date.now() < TARGET_EMBED_SESSION_RETRY_BASE_MS\n ) {\n throw error;\n }\n await sleep(targetMcpRetryDelay(attempt));\n } finally {\n await manager.stop().catch((stopError) => {\n console.warn(\"[dispatch] Failed to stop target MCP client:\", stopError);\n });\n }\n }\n}\n\ntype TargetMcpCredential = {\n strategy: \"deployment-user\" | \"org-member-delegation\";\n token: string;\n};\n\nasync function createTargetMcpUserCredentials(input: {\n mcpUrl: string;\n ownerEmail: string;\n orgId?: string;\n}): Promise<{\n credentials: TargetMcpCredential[];\n loadOrgMemberCredential: () => Promise<TargetMcpCredential | undefined>;\n}> {\n const audience = canonicalA2AAudience(input.mcpUrl);\n const orgDomain = input.orgId\n ? (await getOrgDomain(input.orgId))?.trim().toLowerCase() || undefined\n : undefined;\n const credentials: TargetMcpCredential[] = [];\n if (getGlobalA2ASecret()) {\n credentials.push({\n strategy: \"deployment-user\",\n token: await signA2AToken(input.ownerEmail, undefined, undefined, {\n expiresIn: \"5m\",\n audience,\n preferGlobalSecret: true,\n }),\n });\n }\n\n const loadOrgMemberCredential = async () => {\n if (!input.orgId || !orgDomain) return undefined;\n const orgSecret = await getOrgA2ASecret(input.orgId);\n if (!orgSecret) return undefined;\n return {\n strategy: \"org-member-delegation\" as const,\n token: await signA2AOrgMemberDelegationToken(\n input.ownerEmail,\n orgDomain,\n orgSecret,\n audience,\n ),\n };\n };\n\n if (credentials.length === 0) {\n const orgMemberCredential = await loadOrgMemberCredential();\n if (orgMemberCredential) credentials.push(orgMemberCredential);\n }\n if (credentials.length === 0) {\n throw new Error(\n \"Cross-app embed sessions require a deployment A2A secret or an organization secret with member delegation enabled on the target.\",\n );\n }\n return { credentials, loadOrgMemberCredential };\n}\n\nasync function resolveEmbedTarget(\n input: {\n app?: string;\n url?: string;\n path?: string;\n },\n options: {\n resolveApp: (app: string) => Promise<DispatchMcpAccessibleApp>;\n listApps: () => Promise<DispatchMcpAccessibleApp[]>;\n urlError: string;\n },\n): Promise<{ app: DispatchMcpAccessibleApp; path: string; url: string }> {\n const explicitApp = input.app?.trim()\n ? await options.resolveApp(input.app)\n : null;\n if (explicitApp && input.path) {\n const path = safeAppPath(input.path);\n if (!path) throw new Error(\"path must be a safe app-relative route\");\n assertAppCanOpenPath(explicitApp, path);\n return {\n app: explicitApp,\n path,\n url: `${appHomeBaseUrl(explicitApp)}${path}`,\n };\n }\n\n if (!input.url) {\n throw new Error(\"create_embed_session requires a url or app + path.\");\n }\n\n let parsed: URL;\n try {\n parsed = new URL(input.url);\n } catch {\n if (!explicitApp) {\n throw new Error(\"Relative embed paths require an app id.\");\n }\n const path = safeAppPath(input.url);\n if (!path) throw new Error(\"url must be a safe app route.\");\n return {\n app: explicitApp,\n path,\n url: `${appHomeBaseUrl(explicitApp)}${path}`,\n };\n }\n\n const apps = explicitApp ? [explicitApp] : await options.listApps();\n const target = apps\n .filter((app) => appMatchesUrlPath(app, parsed))\n .sort((a, b) => appPathSpecificity(b) - appPathSpecificity(a))[0];\n if (!target) {\n throw new Error(options.urlError);\n }\n const path = safeAppPath(appRelativePath(target, parsed));\n if (!path) throw new Error(\"Embed URL path is not safe.\");\n assertAppCanOpenPath(target, path);\n return { app: target, path, url: `${appHomeBaseUrl(target)}${path}` };\n}\n\nasync function resolveDispatchEmbedTarget(input: {\n app?: string;\n url?: string;\n path?: string;\n}): Promise<{ app: DispatchMcpAccessibleApp; path: string; url: string }> {\n return resolveEmbedTarget(input, {\n resolveApp: resolveGrantedDispatchMcpApp,\n listApps: listGrantedDispatchMcpApps,\n urlError: \"Embed URL must belong to an app granted through Dispatch.\",\n });\n}\n\nasync function resolveWorkspaceSsoEmbedTarget(input: {\n app?: string;\n url?: string;\n path?: string;\n}): Promise<{ app: DispatchMcpAccessibleApp; path: string; url: string }> {\n return resolveEmbedTarget(input, {\n resolveApp: resolveWorkspaceSsoApp,\n listApps: listWorkspaceSsoApps,\n urlError:\n \"Embed URL must belong to an app registered for Dispatch workspace sign-in.\",\n });\n}\n\nasync function createDispatchSelfEmbedSession(input: {\n ownerEmail: string;\n orgId?: string;\n path: string;\n baseUrl: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n}> {\n const ticket = await createEmbedSessionTicket({\n ownerEmail: input.ownerEmail,\n orgId: input.orgId,\n targetPath: input.path,\n scope: input.chrome ?? null,\n });\n const startPath = buildEmbedStartPath(ticket.ticket);\n return {\n startUrl: new URL(startPath, input.baseUrl).toString(),\n targetPath: input.path,\n expiresAt: ticket.expiresAt,\n app: DISPATCH_APP_ID,\n };\n}\n\ntype InternalEmbedSession = {\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n appBaseUrl: string;\n};\n\nfunction publicEmbedSession({\n startUrl,\n targetPath,\n expiresAt,\n app,\n}: InternalEmbedSession) {\n return {\n startUrl,\n ...(targetPath ? { targetPath } : {}),\n ...(typeof expiresAt === \"number\" ? { expiresAt } : {}),\n app,\n };\n}\n\nasync function createGrantedDispatchMcpEmbedSessionResult(input: {\n app?: string;\n url?: string;\n path?: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<InternalEmbedSession> {\n const userEmail = getRequestUserEmail();\n if (!userEmail) throw new Error(\"no authenticated user\");\n const target = await resolveDispatchEmbedTarget(input);\n\n return createEmbedSessionForResolvedApp({\n ownerEmail: userEmail,\n orgId: getRequestOrgId(),\n target,\n chrome: input.chrome,\n });\n}\n\nexport async function createGrantedDispatchMcpEmbedSession(input: {\n app?: string;\n url?: string;\n path?: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n}> {\n return publicEmbedSession(\n await createGrantedDispatchMcpEmbedSessionResult(input),\n );\n}\n\nexport async function createGrantedDispatchMcpEmbedSessionForWorkspaceAppChat(\n appId: string,\n): Promise<{ startUrl: string; appBaseUrl: string }> {\n const session = await createGrantedDispatchMcpEmbedSessionResult({\n app: appId,\n path: \"/\",\n chrome: \"minimal\",\n });\n return { startUrl: session.startUrl, appBaseUrl: session.appBaseUrl };\n}\n\nasync function createEmbedSessionForResolvedApp(input: {\n ownerEmail: string;\n orgId?: string;\n target: { app: DispatchMcpAccessibleApp; path: string; url: string };\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n appBaseUrl: string;\n}> {\n const { ownerEmail, orgId, target, chrome } = input;\n\n if (target.app.id === DISPATCH_APP_ID) {\n return {\n ...(await createDispatchSelfEmbedSession({\n ownerEmail,\n ...(orgId !== undefined ? { orgId } : {}),\n path: target.path,\n baseUrl: appBaseUrl(target.app),\n ...(chrome !== undefined ? { chrome } : {}),\n })),\n appBaseUrl: appBaseUrl(target.app),\n };\n }\n\n const targetMcpUrl = appMcpUrl(target.app);\n const targetCredentials = await createTargetMcpUserCredentials({\n mcpUrl: targetMcpUrl,\n ownerEmail,\n ...(orgId !== undefined ? { orgId } : {}),\n });\n const targetDetails = targetMcpRequestDetails({\n app: target.app,\n mcpUrl: targetMcpUrl,\n url: target.url,\n });\n let parsed:\n | {\n startUrl?: string;\n targetPath?: string;\n expiresAt?: number;\n }\n | undefined;\n const credentials = [...targetCredentials.credentials];\n for (const [index, credential] of credentials.entries()) {\n console.info(\"[dispatch] workspace embed target request\", {\n ...targetDetails,\n authStrategy: credential.strategy,\n });\n try {\n const result = await callTargetCreateEmbedSession({\n mcpUrl: targetMcpUrl,\n token: credential.token,\n url: target.url,\n ...(chrome !== undefined ? { chrome } : {}),\n });\n parsed = parseMcpToolTextResult(result) as {\n startUrl?: string;\n targetPath?: string;\n expiresAt?: number;\n };\n break;\n } catch (error) {\n if (\n error instanceof TargetMcpAuthenticationRejectedError &&\n credential.strategy === \"deployment-user\" &&\n index === credentials.length - 1\n ) {\n const orgMemberCredential =\n await targetCredentials.loadOrgMemberCredential();\n if (orgMemberCredential) credentials.push(orgMemberCredential);\n }\n if (\n error instanceof TargetMcpAuthenticationRejectedError &&\n index < credentials.length - 1\n ) {\n console.warn(\"[dispatch] workspace embed auth candidate rejected\", {\n ...targetDetails,\n authStrategy: credential.strategy,\n status: targetMcpErrorStatus(error),\n });\n continue;\n }\n console.warn(\"[dispatch] workspace embed target response\", {\n ...targetDetails,\n authStrategy: credential.strategy,\n status: targetMcpErrorStatus(error),\n category: isRetryableTargetMcpError(error) ? \"transient\" : \"permanent\",\n });\n throw error;\n }\n }\n if (!parsed) throw new Error(\"Target app did not return an embed session.\");\n if (!parsed.startUrl) {\n throw new Error(\"Target app did not return an embed start URL.\");\n }\n const startUrl = resolveGrantedAppEmbedStartUrl(target.app, parsed.startUrl);\n const startUrlDetails = new URL(startUrl);\n console.info(\"[dispatch] workspace embed target minted session\", {\n ...targetDetails,\n startPath: startUrlDetails.pathname,\n returnedTicket: startUrlDetails.searchParams.has(\"ticket\"),\n returnedTargetPath: typeof parsed.targetPath === \"string\",\n returnedExpiry: typeof parsed.expiresAt === \"number\",\n });\n const output: {\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n appBaseUrl: string;\n } = {\n startUrl,\n app: target.app.id,\n appBaseUrl: appChatBaseUrl(target.app),\n };\n if (parsed.targetPath) output.targetPath = parsed.targetPath;\n if (typeof parsed.expiresAt === \"number\") output.expiresAt = parsed.expiresAt;\n return output;\n}\n\nasync function createWorkspaceSsoEmbedSessionResult(input: {\n app?: string;\n url?: string;\n path?: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<InternalEmbedSession> {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) {\n console.warn(\"[dispatch] workspace embed mint rejected\", {\n phase: \"dispatch-auth\",\n requestedApp: input.app ?? null,\n hasPath: typeof input.path === \"string\",\n hasUrl: typeof input.url === \"string\",\n ownerResolved: false,\n orgResolved: Boolean(getRequestOrgId()),\n });\n throw new Error(\"no authenticated user\");\n }\n const scope = {\n userEmail: ownerEmail,\n userKey: ownerEmail,\n orgId: getRequestOrgId(),\n };\n const enabled =\n (await isFeatureFlagEnabled(DISPATCH_WORKSPACE_SSO_FLAG, scope)) ||\n (await isFeatureFlagEnabled(DESKTOP_WORKSPACE_SSO_FLAG, scope));\n if (!enabled) {\n console.warn(\"[dispatch] workspace embed mint rejected\", {\n phase: \"feature-flag\",\n requestedApp: input.app ?? null,\n hasPath: typeof input.path === \"string\",\n hasUrl: typeof input.url === \"string\",\n ownerResolved: true,\n orgResolved: Boolean(getRequestOrgId()),\n });\n throw new Error(\"Dispatch workspace sign-in is not enabled.\");\n }\n\n const target = await resolveWorkspaceSsoEmbedTarget(input);\n return createEmbedSessionForResolvedApp({\n ownerEmail,\n orgId: getRequestOrgId(),\n target,\n chrome: input.chrome,\n });\n}\n\nexport async function createWorkspaceSsoEmbedSession(input: {\n app?: string;\n url?: string;\n path?: string;\n chrome?: \"full\" | \"minimal\";\n}): Promise<{\n startUrl: string;\n targetPath?: string;\n expiresAt?: number;\n app: string;\n}> {\n return publicEmbedSession(await createWorkspaceSsoEmbedSessionResult(input));\n}\n\nexport async function createWorkspaceSsoEmbedSessionForWorkspaceAppChat(\n appId: string,\n): Promise<{ startUrl: string; appBaseUrl: string }> {\n const session = await createWorkspaceSsoEmbedSessionResult({\n app: appId,\n path: \"/\",\n chrome: \"minimal\",\n });\n return { startUrl: session.startUrl, appBaseUrl: session.appBaseUrl };\n}\n"]}
|
|
@@ -4,18 +4,19 @@ export interface WorkspaceAppChatSession {
|
|
|
4
4
|
embedTarget: string;
|
|
5
5
|
expiresAt: number;
|
|
6
6
|
}
|
|
7
|
+
interface WorkspaceAppChatProxyEvent {
|
|
8
|
+
url: URL;
|
|
9
|
+
req: Request;
|
|
10
|
+
context?: Record<string, unknown>;
|
|
11
|
+
}
|
|
7
12
|
/**
|
|
8
13
|
* Read the embed token's own `exp` claim. Guessing a TTL here would silently
|
|
9
14
|
* produce a session that the target has already rejected, so a token we cannot
|
|
10
15
|
* read an expiry from is an error rather than a default.
|
|
11
16
|
*/
|
|
12
17
|
export declare function embedSessionTokenExpiry(token: string): number;
|
|
13
|
-
export declare function exchangeEmbedStartUrl(startUrl: string, fetchImpl?: typeof fetch): Promise<WorkspaceAppChatSession>;
|
|
18
|
+
export declare function exchangeEmbedStartUrl(startUrl: string, expectedAppBaseUrl: string, fetchImpl?: typeof fetch): Promise<WorkspaceAppChatSession>;
|
|
14
19
|
export declare function clearWorkspaceAppChatSessions(): void;
|
|
15
|
-
interface WorkspaceAppChatProxyEvent {
|
|
16
|
-
url: URL;
|
|
17
|
-
req: Request;
|
|
18
|
-
}
|
|
19
20
|
export declare function createWorkspaceAppChatProxyHandler(options?: {
|
|
20
21
|
fetchImpl?: typeof fetch;
|
|
21
22
|
}): (event: WorkspaceAppChatProxyEvent) => Promise<Response>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-app-chat-proxy.d.ts","sourceRoot":"","sources":["../../../src/server/lib/workspace-app-chat-proxy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workspace-app-chat-proxy.d.ts","sourceRoot":"","sources":["../../../src/server/lib/workspace-app-chat-proxy.ts"],"names":[],"mappings":"AA6DA,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,UAAU,0BAA0B;IAClC,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AA2ED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAc7D;AAsBD,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAoClC;AAkED,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AA8BD,wBAAgB,kCAAkC,CAChD,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,WAGrB,0BAA0B,KAAG,OAAO,CAAC,QAAQ,CAAC,CA+GpE"}
|