@agent-native/core 0.28.3 → 0.28.5

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.
@@ -50,7 +50,7 @@ const CLIENT_LABELS = {
50
50
  const CLIENT_HINTS = {
51
51
  "claude-code": ".mcp.json or ~/.claude.json",
52
52
  "claude-code-cli": ".mcp.json or ~/.claude.json",
53
- codex: "~/.codex/config.toml",
53
+ codex: "$CODEX_HOME/config.toml or ~/.codex/config.toml",
54
54
  cowork: "~/.cowork/mcp.json",
55
55
  };
56
56
  const REMOTE_MCP_OAUTH_CLIENTS = new Set([
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `agent-native connect <url>` — wire your local Claude Code / Codex / Cowork\n * to a DEPLOYED agent-native app. OAuth-capable clients receive a standard\n * remote MCP URL entry and authenticate in the host. Fallback clients use the\n * browser device-code flow: open the verification URL, approve in the browser,\n * and the minted HTTP MCP server entry is written idempotently.\n *\n * agent-native connect <url> [--client all|claude-code|claude-code-cli|\n * codex|cowork] [--scope user|project]\n * [--name <serverName>]\n * agent-native connect <url> --token <token> (no-browser fallback)\n * agent-native connect [--client ...] (pick first-party apps)\n * agent-native connect --all [--client ...] (separate first-party app MCP resources)\n *\n * Server contract (implemented by another agent on `<url>`):\n * POST <url>/_agent-native/mcp/connect/device/start (no auth)\n * body { client?, app? }\n * → { device_code, user_code, verification_uri,\n * verification_uri_complete, interval, expires_in }\n * POST <url>/_agent-native/mcp/connect/device/poll (no auth)\n * body { device_code }\n * → { status: \"pending\" }\n * | { status: \"approved\", token, mcpUrl, serverName, mcpServerEntry }\n * | { status: \"expired\" }\n * | { status: \"consumed\" }\n * | { status: \"error\" | \"not_found\", message? }\n *\n * Node-only CLI module. Uses Node built-ins, @clack/prompts, and global fetch.\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport path from \"node:path\";\n\nimport { findWorkspaceRoot } from \"../mcp/workspace-resolve.js\";\nimport {\n CLIENTS,\n ClientId,\n configPathFor,\n writeCodexBlock,\n writeHttpEntryForClient,\n writeJsonMcpEntry,\n} from \"./mcp-config-writers.js\";\nimport { TEMPLATES, visibleTemplates } from \"./templates-meta.js\";\n\nconst DEVICE_START_PATH = \"/_agent-native/mcp/connect/device/start\";\nconst DEVICE_POLL_PATH = \"/_agent-native/mcp/connect/device/poll\";\nconst MCP_PATH = \"/_agent-native/mcp\";\nconst SERVER_NAME_PREFIX = \"agent-native\";\nconst CONNECT_PREFERENCES_VERSION = 1;\nconst CONNECT_PROFILES_VERSION = 1;\nconst DEFAULT_DEV_GATEWAY = \"http://127.0.0.1:8080\";\n\nconst CLIENT_LABELS: Record<ClientId, string> = {\n \"claude-code\": \"Claude Code\",\n \"claude-code-cli\": \"Claude Code CLI\",\n codex: \"Codex\",\n cowork: \"Claude Cowork\",\n};\n\nconst CLIENT_HINTS: Record<ClientId, string> = {\n \"claude-code\": \".mcp.json or ~/.claude.json\",\n \"claude-code-cli\": \".mcp.json or ~/.claude.json\",\n codex: \"~/.codex/config.toml\",\n cowork: \"~/.cowork/mcp.json\",\n};\n\nconst REMOTE_MCP_OAUTH_CLIENTS = new Set<ClientId>([\n \"claude-code\",\n \"claude-code-cli\",\n]);\n\nfunction logOut(msg: string): void {\n process.stdout.write(`${msg}\\n`);\n}\nfunction logErr(msg: string): void {\n process.stderr.write(`${msg}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Arg parsing\n// ---------------------------------------------------------------------------\n\nexport interface ParsedConnectArgs {\n /** Developer profile switch: local dev gateway or saved production config. */\n mode?: \"dev\" | \"prod\";\n /** Positional URL (the deployed app origin). Undefined for `--all`. */\n url?: string;\n /** all | claude-code | claude-code-cli | codex | cowork (default \"all\"). */\n client: string;\n /** True when the user passed --client explicitly, so we skip the picker. */\n clientExplicit: boolean;\n /** user | project (default \"user\"). */\n scope: string;\n /** Override the minted MCP server name. */\n name?: string;\n /** No-browser fallback: skip device flow, use this token directly. */\n token?: string;\n /** Connect every first-party hosted app. */\n all: boolean;\n /** Comma-separated app names for profile switching. */\n apps?: string;\n /** Local dev-lazy gateway URL for `connect dev`. */\n gateway?: string;\n /** Shorthand for a local dev-lazy gateway port. */\n port?: number;\n /** Local owner email override for dev entries. */\n ownerEmail?: string;\n}\n\nexport function parseConnectArgs(argv: string[]): ParsedConnectArgs {\n const out: ParsedConnectArgs = {\n client: \"all\",\n clientExplicit: false,\n scope: \"user\",\n all: false,\n };\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n const eat = (flag: string): string | undefined => {\n if (a === flag) return argv[++i];\n if (a.startsWith(`${flag}=`)) return a.slice(flag.length + 1);\n return undefined;\n };\n let v: string | undefined;\n if (a === \"--all\") out.all = true;\n else if ((v = eat(\"--apps\")) !== undefined) out.apps = v;\n else if ((v = eat(\"--gateway\")) !== undefined) out.gateway = v;\n else if ((v = eat(\"--gateway-url\")) !== undefined) out.gateway = v;\n else if ((v = eat(\"--port\")) !== undefined) out.port = Number(v);\n else if ((v = eat(\"--owner-email\")) !== undefined) out.ownerEmail = v;\n else if ((v = eat(\"--client\")) !== undefined) {\n out.client = v;\n out.clientExplicit = true;\n } else if ((v = eat(\"--scope\")) !== undefined) out.scope = v;\n else if ((v = eat(\"--name\")) !== undefined) out.name = v;\n else if ((v = eat(\"--token\")) !== undefined) out.token = v;\n else if (!a.startsWith(\"-\") && !out.url) {\n if (!out.mode && (a === \"dev\" || a === \"prod\")) out.mode = a;\n else out.url = a;\n }\n }\n return out;\n}\n\n/**\n * Normalize a user-supplied app URL: trim, require http/https, strip the\n * trailing slash. Throws a friendly Error otherwise.\n */\nexport function normalizeUrl(raw: string): string {\n const trimmed = (raw ?? \"\").trim();\n if (!trimmed) {\n throw new Error(\"Missing app URL. Usage: agent-native connect <url>\");\n }\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throw new Error(\n `Not a valid URL: \"${raw}\". Pass a full origin, e.g. ` +\n `agent-native connect https://mail.agent-native.com`,\n );\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\n `Unsupported URL scheme \"${parsed.protocol}\". Use http:// or https://`,\n );\n }\n const host = parsed.hostname.toLowerCase();\n const isLoopback =\n host === \"localhost\" ||\n host === \"127.0.0.1\" ||\n host === \"::1\" ||\n host === \"[::1]\" ||\n host.startsWith(\"127.\");\n if (parsed.protocol === \"http:\" && !isLoopback) {\n throw new Error(\n `Refusing plaintext HTTP for non-loopback host \"${parsed.hostname}\". ` +\n `Use https:// so bearer tokens are not sent in cleartext.`,\n );\n }\n // origin + pathname, trailing slash stripped (origin keeps no path).\n const base = `${parsed.origin}${parsed.pathname}`.replace(/\\/+$/, \"\");\n return base;\n}\n\n/** Resolve the requested clients list. \"all\" → every supported client. */\nexport function resolveClients(client: string): ClientId[] {\n const c = (client ?? \"all\").toLowerCase();\n if (c === \"all\" || c === \"\") return [...CLIENTS];\n if ((CLIENTS as string[]).includes(c)) return [c as ClientId];\n throw new Error(\n `Unknown --client \"${client}\". Use: all, ${CLIENTS.join(\", \")}`,\n );\n}\n\nexport function connectPreferencesPath(): string {\n return path.join(os.homedir(), \".agent-native\", \"connect.json\");\n}\n\nfunction normalizeClientIds(values: unknown): ClientId[] {\n if (!Array.isArray(values)) return [];\n const seen = new Set<ClientId>();\n const out: ClientId[] = [];\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n const id = value.toLowerCase();\n if (!(CLIENTS as string[]).includes(id)) continue;\n const client = id as ClientId;\n if (seen.has(client)) continue;\n seen.add(client);\n out.push(client);\n }\n return out;\n}\n\nexport function readConnectClientPreferences(\n file: string = connectPreferencesPath(),\n): ClientId[] | null {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, \"utf-8\"));\n const clients = normalizeClientIds(\n parsed?.defaultClients ?? parsed?.clients,\n );\n return clients.length > 0 ? clients : null;\n } catch {\n return null;\n }\n}\n\nexport function writeConnectClientPreferences(\n clients: ClientId[],\n file: string = connectPreferencesPath(),\n): void {\n const normalized = normalizeClientIds(clients);\n if (normalized.length === 0) return;\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(\n file,\n JSON.stringify(\n {\n version: CONNECT_PREFERENCES_VERSION,\n defaultClients: normalized,\n updatedAt: new Date().toISOString(),\n },\n null,\n 2,\n ) + \"\\n\",\n \"utf-8\",\n );\n}\n\nexport interface ConnectClientPromptContext {\n initialClients: ClientId[];\n options: { value: ClientId; label: string; hint: string }[];\n preferencesFile: string;\n}\n\nexport interface HostedApp {\n name: string;\n label: string;\n url: string;\n}\n\nexport interface ConnectHostedAppsPromptContext {\n apps: HostedApp[];\n initialApps: string[];\n}\n\nfunction clientPromptOptions(): ConnectClientPromptContext[\"options\"] {\n return CLIENTS.map((client) => ({\n value: client,\n label: CLIENT_LABELS[client],\n hint: CLIENT_HINTS[client],\n }));\n}\n\nfunction shouldPrompt(deps: ConnectDeps): boolean {\n if (deps.isInteractive) return deps.isInteractive();\n if (process.env.AGENT_NATIVE_NO_PROMPT === \"1\") return false;\n if (process.env.CI === \"true\") return false;\n return !!process.stdin.isTTY && !!process.stdout.isTTY;\n}\n\nfunction shouldPromptForClients(deps: ConnectDeps): boolean {\n return shouldPrompt(deps);\n}\n\nasync function promptForClients(\n context: ConnectClientPromptContext,\n): Promise<ClientId[] | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.multiselect({\n message:\n \"Write MCP config for which local agents?\\n\" +\n \" (space toggles, enter confirms; saved for next time)\",\n options: context.options,\n initialValues: context.initialClients,\n required: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return normalizeClientIds(result);\n}\n\nfunction normalizeHostedAppNames(values: unknown, apps: HostedApp[]): string[] {\n if (!Array.isArray(values)) return [];\n const byName = new Map(apps.map((app) => [app.name, app]));\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n const app = byName.get(value);\n if (!app || seen.has(app.name)) continue;\n seen.add(app.name);\n out.push(app.name);\n }\n return out;\n}\n\nasync function promptForHostedApps(\n context: ConnectHostedAppsPromptContext,\n): Promise<string[] | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.multiselect({\n message:\n \"Which Agent Native apps do you want to connect?\\n\" +\n \" (all are selected by default; space toggles, enter confirms)\",\n options: context.apps.map((app) => ({\n value: app.name,\n label: app.label,\n hint: app.url,\n })),\n initialValues: context.initialApps,\n required: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return normalizeHostedAppNames(result, context.apps);\n}\n\nasync function resolveConnectClients(\n parsed: ParsedConnectArgs,\n deps: ConnectDeps,\n): Promise<ClientId[] | null> {\n if (parsed.clientExplicit) return resolveClients(parsed.client);\n\n const defaultClients = resolveClients(parsed.client);\n if (!shouldPromptForClients(deps)) return defaultClients;\n\n const preferencesFile = deps.preferencesFile ?? connectPreferencesPath();\n const initialClients =\n readConnectClientPreferences(preferencesFile) ?? defaultClients;\n const prompt = deps.promptClients ?? promptForClients;\n const selected = normalizeClientIds(\n await prompt({\n initialClients,\n options: clientPromptOptions(),\n preferencesFile,\n }),\n );\n if (selected.length === 0) return null;\n\n try {\n writeConnectClientPreferences(selected, preferencesFile);\n } catch (err: any) {\n logErr(\n ` Could not save connect client preference (${err?.message ?? err}).`,\n );\n }\n return selected;\n}\n\nasync function resolveHostedAppsFromPrompt(\n deps: ConnectDeps,\n): Promise<HostedApp[] | null> {\n const apps = hostedApps();\n if (apps.length === 0) {\n logErr(\" No hosted first-party apps found in the template registry.\");\n return null;\n }\n if (!shouldPrompt(deps)) return null;\n\n const prompt = deps.promptHostedApps ?? promptForHostedApps;\n const selectedNames = normalizeHostedAppNames(\n await prompt({\n apps,\n initialApps: apps.map((app) => app.name),\n }),\n apps,\n );\n if (selectedNames.length === 0) return [];\n\n const selected = new Set(selectedNames);\n return apps.filter((app) => selected.has(app.name));\n}\n\nfunction clientArgForDeviceFlow(clients: ClientId[]): string {\n return clients.length === 1 ? clients[0] : \"all\";\n}\n\nexport function supportsRemoteMcpOAuth(client: ClientId): boolean {\n return REMOTE_MCP_OAUTH_CLIENTS.has(client);\n}\n\nfunction clientLabelList(clients: ClientId[]): string {\n return clients.map((client) => CLIENT_LABELS[client]).join(\", \");\n}\n\n/** Derive an app slug from a deployed origin, e.g. mail.agent-native.com → mail. */\nfunction appSlugFromUrl(url: string): string {\n try {\n const host = new URL(url).hostname;\n const first = host.split(\".\")[0];\n return first && first !== \"www\" ? first : \"app\";\n } catch {\n return \"app\";\n }\n}\n\nfunction defaultServerName(url: string): string {\n return `${SERVER_NAME_PREFIX}-${appSlugFromUrl(url)}`;\n}\n\n// ---------------------------------------------------------------------------\n// Browser open (mirrors workspace-dev.ts openBrowser)\n// ---------------------------------------------------------------------------\n\nfunction openInBrowser(url: string): void {\n if (process.env.AGENT_NATIVE_NO_OPEN === \"1\") return;\n try {\n const command =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const openArgs =\n process.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n const child = spawn(command, openArgs, {\n stdio: \"ignore\",\n detached: true,\n });\n child.unref();\n } catch {\n // Non-fatal: the user can open the URL manually (we already printed it).\n }\n}\n\n// ---------------------------------------------------------------------------\n// Device-code flow\n// ---------------------------------------------------------------------------\n\ninterface DeviceStartResponse {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n interval?: number;\n expires_in?: number;\n}\n\ninterface DevicePollResponse {\n status:\n | \"pending\"\n | \"approved\"\n | \"expired\"\n | \"consumed\"\n | \"error\"\n | \"not_found\";\n token?: string;\n mcpUrl?: string;\n serverName?: string;\n mcpServerEntry?: Record<string, unknown>;\n message?: string;\n error?: string;\n}\n\n/** Injectable hooks so the poll state machine is unit-testable. */\nexport interface ConnectDeps {\n /** Defaults to global fetch. */\n fetchImpl?: typeof fetch;\n /** Sleep between polls (ms). Defaults to real setTimeout. */\n sleep?: (ms: number) => Promise<void>;\n /** Open the verification URL. Defaults to the platform browser opener. */\n openBrowser?: (url: string) => void;\n /** Override \"now\" for the expiry cap (ms epoch). Defaults to Date.now. */\n now?: () => number;\n /** Tests/embedders can force or suppress the interactive client picker. */\n isInteractive?: () => boolean;\n /** Injectable client picker. Defaults to @clack/prompts multiselect. */\n promptClients?: (\n context: ConnectClientPromptContext,\n ) => Promise<ClientId[] | null>;\n /** Injectable hosted app picker. Defaults to @clack/prompts multiselect. */\n promptHostedApps?: (\n context: ConnectHostedAppsPromptContext,\n ) => Promise<string[] | null>;\n /** Override the persisted connect preferences file. */\n preferencesFile?: string;\n /** Override the saved dev/prod profile file. */\n profilesFile?: string;\n}\n\nfunction realSleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function postJson(\n fetchImpl: typeof fetch,\n url: string,\n body: unknown,\n): Promise<{ status: number; json: any }> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 30_000);\n try {\n const response = await fetchImpl(url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body ?? {}),\n signal: controller.signal,\n });\n let json: any = null;\n try {\n json = await response.json();\n } catch {\n json = null;\n }\n return { status: response.status, json };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction responseMessage(json: any, fallback: string): string {\n const message =\n typeof json?.message === \"string\"\n ? json.message\n : typeof json?.error === \"string\"\n ? json.error\n : \"\";\n return message.trim() || fallback;\n}\n\nfunction stripMcpPath(baseUrl: string): string {\n const parsed = new URL(baseUrl);\n const pathname = parsed.pathname.replace(/\\/+$/, \"\");\n if (pathname === MCP_PATH || pathname.endsWith(MCP_PATH)) {\n parsed.pathname = pathname.slice(0, -MCP_PATH.length) || \"/\";\n parsed.search = \"\";\n parsed.hash = \"\";\n return `${parsed.origin}${parsed.pathname}`.replace(/\\/+$/, \"\");\n }\n return baseUrl;\n}\n\nfunction mcpUrlForBaseUrl(baseUrl: string): string {\n const parsed = new URL(baseUrl);\n const pathname = parsed.pathname.replace(/\\/+$/, \"\");\n if (pathname === MCP_PATH || pathname.endsWith(MCP_PATH)) {\n parsed.pathname = pathname;\n parsed.search = \"\";\n parsed.hash = \"\";\n return `${parsed.origin}${parsed.pathname}`;\n }\n return `${baseUrl.replace(/\\/+$/, \"\")}${MCP_PATH}`;\n}\n\nasync function validateOAuthMcpServer(\n baseUrl: string,\n mcpUrl: string,\n deps: ConnectDeps,\n): Promise<boolean> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const metadataUrl = `${baseUrl}/.well-known/oauth-protected-resource`;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 15_000);\n try {\n const response = await fetchImpl(metadataUrl, {\n method: \"GET\",\n headers: { accept: \"application/json\" },\n signal: controller.signal,\n });\n if (!response.ok) {\n logErr(\n ` Could not validate OAuth MCP support at ${metadataUrl} ` +\n `(HTTP ${response.status}).`,\n );\n return false;\n }\n const metadata = (await response.json().catch(() => null)) as {\n resource?: unknown;\n } | null;\n if (metadata?.resource !== mcpUrl) {\n logErr(\n ` ${metadataUrl} did not advertise the expected MCP resource ` +\n `${mcpUrl}.`,\n );\n return false;\n }\n return true;\n } catch (err: any) {\n logErr(\n ` Could not reach ${metadataUrl} (${err?.message ?? err}). ` +\n `Check the URL and your network.`,\n );\n return false;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nconst SPINNER = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\n/**\n * Run the device-code flow against `baseUrl` and return the approved grant.\n * Resolves with `null` (and prints a clear message) on expired/consumed or\n * other terminal failure — the caller maps that to a non-zero exit.\n */\nexport async function runDeviceFlow(\n baseUrl: string,\n appSlug: string,\n clientArg: string,\n deps: ConnectDeps = {},\n): Promise<{\n token?: string;\n mcpUrl: string;\n serverName: string;\n headers?: Record<string, string>;\n} | null> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const sleep = deps.sleep ?? realSleep;\n const open = deps.openBrowser ?? openInBrowser;\n const now = deps.now ?? (() => Date.now());\n\n let start: DeviceStartResponse;\n try {\n const { status, json } = await postJson(\n fetchImpl,\n `${baseUrl}${DEVICE_START_PATH}`,\n { client: clientArg, app: appSlug },\n );\n if (status < 200 || status >= 300 || !json?.device_code) {\n logErr(\n ` Could not start the connect flow on ${baseUrl} ` +\n `(HTTP ${status}). Is this an agent-native app, and is it ` +\n `deployed with the connect endpoint enabled?`,\n );\n return null;\n }\n start = json as DeviceStartResponse;\n } catch (err: any) {\n logErr(\n ` Could not reach ${baseUrl} (${err?.message ?? err}). ` +\n `Check the URL and your network.`,\n );\n return null;\n }\n\n const interval = Math.max(1, Number(start.interval) || 5);\n const expiresIn = Math.max(interval, Number(start.expires_in) || 600);\n const deadline = now() + expiresIn * 1000;\n\n logOut(\"\");\n logOut(` Connecting to ${baseUrl}`);\n logOut(\"\");\n logOut(` Your code: ${start.user_code}`);\n logOut(` Open: ${start.verification_uri_complete}`);\n logOut(\"\");\n logOut(\" Approve in the browser to finish. Opening it now…\");\n open(start.verification_uri_complete);\n\n let spin = 0;\n const isTTY = !!process.stdout.isTTY;\n while (now() < deadline) {\n let poll: DevicePollResponse;\n try {\n const { status, json } = await postJson(\n fetchImpl,\n `${baseUrl}${DEVICE_POLL_PATH}`,\n { device_code: start.device_code },\n );\n if (status < 200 || status >= 300) {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\n ` Connect polling failed (HTTP ${status}): ` +\n responseMessage(json, \"server returned an error.\"),\n );\n return null;\n }\n poll = (json ?? { status: \"pending\" }) as DevicePollResponse;\n } catch {\n // Transient network error — keep polling until the deadline.\n poll = { status: \"pending\" };\n }\n\n if (poll.status === \"approved\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n const token = poll.token ?? \"\";\n const mcpUrl = poll.mcpUrl ?? `${baseUrl}/_agent-native/mcp`;\n const serverName = poll.serverName ?? `${SERVER_NAME_PREFIX}-${appSlug}`;\n const headers =\n poll.mcpServerEntry &&\n typeof poll.mcpServerEntry === \"object\" &&\n poll.mcpServerEntry.headers &&\n typeof poll.mcpServerEntry.headers === \"object\"\n ? (poll.mcpServerEntry.headers as Record<string, string>)\n : undefined;\n logOut(\" Approved.\");\n return { token: token || undefined, mcpUrl, serverName, headers };\n }\n if (poll.status === \"expired\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" The connect request expired before it was approved.\");\n logErr(\" Run the command again to retry.\");\n return null;\n }\n if (poll.status === \"consumed\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" This connect code was already used. Run the command again.\");\n return null;\n }\n if (poll.status === \"error\" || poll.status === \"not_found\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\n ` Connect polling failed: ${responseMessage(\n poll,\n poll.status === \"not_found\"\n ? \"device code was not found.\"\n : \"server returned an error.\",\n )}`,\n );\n return null;\n }\n\n if (isTTY) {\n process.stdout.write(\n `\\r ${SPINNER[spin++ % SPINNER.length]} Waiting for approval…`,\n );\n }\n await sleep(interval * 1000);\n }\n\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" Timed out waiting for approval. Run the command again to retry.\");\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Writing config(s)\n// ---------------------------------------------------------------------------\n\nfunction projectBaseDir(): string {\n const cwd = process.cwd();\n return findWorkspaceRoot(cwd) ?? path.resolve(cwd);\n}\n\n/**\n * Write the HTTP MCP entry into every requested client config idempotently.\n * Returns the list of files written so the caller can print them.\n */\nexport function writeConfigs(\n clients: ClientId[],\n serverName: string,\n mcpUrl: string,\n token: string | undefined,\n scope: string,\n baseDir: string = projectBaseDir(),\n headers?: Record<string, string>,\n): { client: ClientId; file: string }[] {\n const written: { client: ClientId; file: string }[] = [];\n for (const client of clients) {\n const file = writeHttpEntryForClient(\n client,\n serverName,\n mcpUrl,\n token,\n baseDir,\n scope,\n headers,\n );\n written.push({ client, file });\n }\n return written;\n}\n\n// ---------------------------------------------------------------------------\n// Developer profile switcher (`connect dev` / `connect prod`)\n// ---------------------------------------------------------------------------\n\ntype SavedMcpEntry =\n | {\n kind: \"json\";\n entry: Record<string, unknown>;\n savedAt: string;\n }\n | {\n kind: \"codex\";\n block: string;\n savedAt: string;\n };\n\ninterface ConnectProfiles {\n version: number;\n updatedAt?: string;\n prodEntries?: Record<string, Record<string, Record<string, SavedMcpEntry>>>;\n}\n\ninterface CurrentMcpEntry {\n file: string;\n saved?: SavedMcpEntry;\n}\n\ninterface ConnectableApp extends HostedApp {\n core: boolean;\n}\n\nexport function connectProfilesPath(): string {\n return path.join(os.homedir(), \".agent-native\", \"connect-profiles.json\");\n}\n\nfunction readConnectProfiles(file: string): ConnectProfiles {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, \"utf-8\"));\n if (parsed && typeof parsed === \"object\") {\n return {\n version: Number(parsed.version) || CONNECT_PROFILES_VERSION,\n updatedAt:\n typeof parsed.updatedAt === \"string\" ? parsed.updatedAt : undefined,\n prodEntries:\n parsed.prodEntries && typeof parsed.prodEntries === \"object\"\n ? parsed.prodEntries\n : {},\n };\n }\n } catch {\n // no saved profiles yet\n }\n return { version: CONNECT_PROFILES_VERSION, prodEntries: {} };\n}\n\nfunction writeConnectProfiles(file: string, profiles: ConnectProfiles): void {\n profiles.version = CONNECT_PROFILES_VERSION;\n profiles.updatedAt = new Date().toISOString();\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, JSON.stringify(profiles, null, 2) + \"\\n\", \"utf-8\");\n}\n\nfunction savedProfileEntry(\n profiles: ConnectProfiles,\n serverName: string,\n client: ClientId,\n file: string,\n): SavedMcpEntry | undefined {\n return profiles.prodEntries?.[serverName]?.[client]?.[file];\n}\n\nfunction setSavedProfileEntry(\n profiles: ConnectProfiles,\n serverName: string,\n client: ClientId,\n file: string,\n entry: SavedMcpEntry,\n): void {\n profiles.prodEntries ??= {};\n profiles.prodEntries[serverName] ??= {};\n profiles.prodEntries[serverName][client] ??= {};\n profiles.prodEntries[serverName][client][file] = entry;\n}\n\nfunction readJsonMcpServerEntry(\n file: string,\n serverName: string,\n): Record<string, unknown> | undefined {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, \"utf-8\"));\n const entry = parsed?.mcpServers?.[serverName];\n return entry && typeof entry === \"object\" ? entry : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction tomlQuoteForRead(s: string): string {\n return `\"${s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`;\n}\n\nfunction codexHeadersForRead(name: string): string[] {\n const headers = [`[mcp_servers.${tomlQuoteForRead(name)}]`];\n if (/^[A-Za-z0-9_-]+$/.test(name)) headers.push(`[mcp_servers.${name}]`);\n return headers;\n}\n\nfunction readCodexMcpBlock(\n file: string,\n serverName: string,\n): string | undefined {\n let content = \"\";\n try {\n content = fs.readFileSync(file, \"utf-8\");\n } catch {\n return undefined;\n }\n const headers = new Set(codexHeadersForRead(serverName));\n const lines = content.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n if (!headers.has(lines[i].trim())) continue;\n const block: string[] = [lines[i]];\n i++;\n while (i < lines.length && !/^\\s*\\[/.test(lines[i])) {\n block.push(lines[i]);\n i++;\n }\n return block.join(\"\\n\").replace(/\\n*$/, \"\") + \"\\n\";\n }\n return undefined;\n}\n\nfunction readCurrentMcpEntry(\n client: ClientId,\n serverName: string,\n baseDir: string,\n scope: string,\n): CurrentMcpEntry {\n const file = configPathFor(client, baseDir, scope);\n if (client === \"codex\") {\n const block = readCodexMcpBlock(file, serverName);\n return {\n file,\n saved: block\n ? { kind: \"codex\", block, savedAt: new Date().toISOString() }\n : undefined,\n };\n }\n const entry = readJsonMcpServerEntry(file, serverName);\n return {\n file,\n saved: entry\n ? { kind: \"json\", entry, savedAt: new Date().toISOString() }\n : undefined,\n };\n}\n\nfunction writeSavedMcpEntry(\n client: ClientId,\n file: string,\n serverName: string,\n saved: SavedMcpEntry,\n): void {\n if (client === \"codex\") {\n if (saved.kind !== \"codex\") return;\n writeCodexBlock(file, serverName, saved.block);\n return;\n }\n if (saved.kind !== \"json\") return;\n writeJsonMcpEntry(file, serverName, saved.entry);\n}\n\nfunction unescapeTomlString(value: string): string {\n return value.replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, \"\\\\\");\n}\n\nfunction parseCodexHeaders(block: string): Record<string, string> {\n const line = block\n .split(/\\r?\\n/)\n .find((candidate) => /^\\s*http_headers\\s*=/.test(candidate));\n if (!line) return {};\n const match = line.match(/\\{(.*)\\}/);\n if (!match) return {};\n const headers: Record<string, string> = {};\n const pairRe = /\"((?:\\\\.|[^\"])*)\"\\s*=\\s*\"((?:\\\\.|[^\"])*)\"/g;\n let pair: RegExpExecArray | null;\n while ((pair = pairRe.exec(match[1]))) {\n headers[unescapeTomlString(pair[1])] = unescapeTomlString(pair[2]);\n }\n return headers;\n}\n\nfunction savedEntryUrl(saved: SavedMcpEntry | undefined): string | undefined {\n if (!saved) return undefined;\n if (saved.kind === \"json\") {\n return typeof saved.entry.url === \"string\" ? saved.entry.url : undefined;\n }\n const match = saved.block.match(/^\\s*url\\s*=\\s*\"((?:\\\\.|[^\"])*)\"/m);\n return match ? unescapeTomlString(match[1]) : undefined;\n}\n\nfunction savedEntryHeaders(\n saved: SavedMcpEntry | undefined,\n): Record<string, string> {\n if (!saved) return {};\n if (saved.kind === \"json\") {\n const headers = saved.entry.headers;\n return headers && typeof headers === \"object\"\n ? Object.fromEntries(\n Object.entries(headers as Record<string, unknown>)\n .filter((entry): entry is [string, string] => {\n return typeof entry[1] === \"string\";\n })\n .map(([key, value]) => [key, value]),\n )\n : {};\n }\n return parseCodexHeaders(saved.block);\n}\n\nfunction isLoopbackMcpUrl(value: string | undefined): boolean {\n if (!value) return false;\n try {\n const url = new URL(value);\n return (\n url.hostname === \"localhost\" ||\n url.hostname === \"127.0.0.1\" ||\n url.hostname === \"::1\" ||\n url.hostname.startsWith(\"127.\")\n );\n } catch {\n return false;\n }\n}\n\nfunction decodeJwtSub(authHeader: string | undefined): string | undefined {\n if (!authHeader?.startsWith(\"Bearer \")) return undefined;\n const token = authHeader.slice(\"Bearer \".length);\n const [, payload] = token.split(\".\");\n if (!payload) return undefined;\n try {\n const normalized = payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padded = normalized.padEnd(\n normalized.length + ((4 - (normalized.length % 4)) % 4),\n \"=\",\n );\n const parsed = JSON.parse(Buffer.from(padded, \"base64\").toString(\"utf8\"));\n return typeof parsed.sub === \"string\" && parsed.sub.includes(\"@\")\n ? parsed.sub\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction ownerEmailFromEntry(\n saved: SavedMcpEntry | undefined,\n): string | undefined {\n const headers = savedEntryHeaders(saved);\n return (\n headers[\"X-Agent-Native-Owner-Email\"] || decodeJwtSub(headers.Authorization)\n );\n}\n\nfunction readEnvFile(file: string): string {\n try {\n return fs.readFileSync(file, \"utf-8\");\n } catch {\n return \"\";\n }\n}\n\nfunction readEnvValue(content: string, key: string): string | undefined {\n let found: string | undefined;\n for (const line of content.split(/\\r?\\n/)) {\n const match = line.match(/^\\s*([A-Z0-9_]+)\\s*=\\s*(.*)\\s*$/i);\n if (match?.[1] === key) {\n found = match[2].replace(/^[\"']|[\"']$/g, \"\");\n }\n }\n return found;\n}\n\nfunction workspaceEnvContent(baseDir: string): string {\n return (\n readEnvFile(path.join(baseDir, \".env.local\")) +\n \"\\n\" +\n readEnvFile(path.join(baseDir, \".env\"))\n );\n}\n\nfunction localAccessToken(baseDir: string): string | undefined {\n const content = workspaceEnvContent(baseDir);\n const single = readEnvValue(content, \"ACCESS_TOKEN\");\n if (single) return single;\n const multi = readEnvValue(content, \"ACCESS_TOKENS\");\n return multi\n ?.split(\",\")\n .map((token) => token.trim())\n .find(Boolean);\n}\n\nfunction localA2ASecret(baseDir: string): string | undefined {\n return (\n process.env.A2A_SECRET ||\n readEnvValue(workspaceEnvContent(baseDir), \"A2A_SECRET\")\n );\n}\n\nasync function mintLocalA2AToken(\n ownerEmail: string | undefined,\n baseDir: string,\n): Promise<string | undefined> {\n const secret = ownerEmail ? localA2ASecret(baseDir) : undefined;\n if (!secret) return undefined;\n const jose = await import(\"jose\");\n return new jose.SignJWT({ sub: ownerEmail })\n .setProtectedHeader({ alg: \"HS256\" })\n .setIssuer(\"agent-native-connect-dev\")\n .setIssuedAt()\n .setExpirationTime(\"30d\")\n .sign(new TextEncoder().encode(secret));\n}\n\nasync function devHeadersForApp(params: {\n ownerEmail?: string;\n sourceEntry?: SavedMcpEntry;\n baseDir: string;\n}): Promise<Record<string, string> | undefined> {\n const ownerEmail =\n params.ownerEmail ||\n process.env.AGENT_NATIVE_OWNER_EMAIL ||\n ownerEmailFromEntry(params.sourceEntry);\n const headers: Record<string, string> = {};\n const accessToken = localAccessToken(params.baseDir);\n const a2aToken = accessToken\n ? undefined\n : await mintLocalA2AToken(ownerEmail, params.baseDir);\n if (accessToken || a2aToken) {\n headers.Authorization = `Bearer ${accessToken || a2aToken}`;\n }\n if (ownerEmail) {\n headers[\"X-Agent-Native-Owner-Email\"] = ownerEmail;\n }\n return Object.keys(headers).length ? headers : undefined;\n}\n\nfunction connectableApps(includeHidden = false): ConnectableApp[] {\n const source = includeHidden ? TEMPLATES : visibleTemplates();\n return source\n .filter((template) => typeof template.prodUrl === \"string\")\n .map((template) => ({\n name: template.name,\n label: template.label,\n url: template.prodUrl as string,\n core: !!template.core,\n }));\n}\n\nfunction profileDefaultApps(): ConnectableApp[] {\n const core = connectableApps(false).filter((app) => app.core);\n return core.length ? core : connectableApps(false);\n}\n\nfunction parseAppsList(value: string | undefined): string[] {\n return (value ?? \"\")\n .split(\",\")\n .map((app) => app.trim())\n .filter(Boolean);\n}\n\nasync function resolveProfileApps(\n parsed: ParsedConnectArgs,\n deps: ConnectDeps,\n): Promise<ConnectableApp[] | null> {\n const allVisible = connectableApps(false);\n const allIncludingHidden = connectableApps(true);\n\n if (parsed.apps) {\n const requested = parseAppsList(parsed.apps);\n if (requested.includes(\"all\")) return allVisible;\n const byName = new Map(allIncludingHidden.map((app) => [app.name, app]));\n const unknown = requested.filter((name) => !byName.has(name));\n if (unknown.length) {\n throw new Error(\n `Unknown app(s): ${unknown.join(\", \")}. Known apps: ${allIncludingHidden\n .map((app) => app.name)\n .join(\", \")}`,\n );\n }\n return requested.map((name) => byName.get(name)!);\n }\n\n if (parsed.all) return allVisible;\n\n if (shouldPrompt(deps)) {\n const prompt = deps.promptHostedApps ?? promptForHostedApps;\n const initialApps = profileDefaultApps().map((app) => app.name);\n const selectedNames = normalizeHostedAppNames(\n await prompt({ apps: allVisible, initialApps }),\n allVisible,\n );\n if (selectedNames.length === 0) return [];\n const selected = new Set(selectedNames);\n return allVisible.filter((app) => selected.has(app.name));\n }\n\n return profileDefaultApps();\n}\n\nfunction defaultDevGateway(): string {\n if (process.env.WORKSPACE_GATEWAY_URL)\n return process.env.WORKSPACE_GATEWAY_URL;\n const port = process.env.WORKSPACE_PORT || process.env.PORT;\n return port ? `http://127.0.0.1:${port}` : DEFAULT_DEV_GATEWAY;\n}\n\nfunction normalizeDevGateway(parsed: ParsedConnectArgs): string {\n const raw =\n parsed.gateway ||\n (Number.isFinite(parsed.port) && parsed.port\n ? `http://127.0.0.1:${parsed.port}`\n : defaultDevGateway());\n const normalized = normalizeUrl(raw);\n return normalized.replace(/\\/+$/, \"\");\n}\n\nasync function gatewayAppUrls(\n gatewayUrl: string,\n deps: ConnectDeps,\n): Promise<Map<string, string>> {\n const out = new Map<string, string>();\n const fetchImpl = deps.fetchImpl ?? fetch;\n try {\n const response = await fetchImpl(`${gatewayUrl}/_workspace/apps`, {\n signal: AbortSignal.timeout(1200),\n });\n if (!response.ok) return out;\n const apps = (await response.json()) as unknown;\n if (!Array.isArray(apps)) return out;\n for (const app of apps) {\n if (!app || typeof app !== \"object\") continue;\n const id = (app as { id?: unknown }).id;\n const url = (app as { url?: unknown }).url;\n if (typeof id === \"string\" && typeof url === \"string\") {\n out.set(id, normalizeUrl(url));\n }\n }\n } catch {\n // The gateway may not be running yet; still write deterministic dev URLs.\n }\n return out;\n}\n\nfunction devMcpUrl(\n app: ConnectableApp,\n gatewayUrl: string,\n gatewayUrls: Map<string, string>,\n): string {\n const base = gatewayUrls.get(app.name) ?? `${gatewayUrl}/${app.name}`;\n return `${base.replace(/\\/+$/, \"\")}/_agent-native/mcp`;\n}\n\nfunction serverNameForApp(app: ConnectableApp): string {\n return `${SERVER_NAME_PREFIX}-${app.name}`;\n}\n\nasync function connectDevProfile(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n const apps = await resolveProfileApps(parsed, deps);\n if (!apps || apps.length === 0) return true;\n\n const baseDir = projectBaseDir();\n const scope = parsed.scope === \"project\" ? \"project\" : \"user\";\n const gatewayUrl = normalizeDevGateway(parsed);\n const gatewayUrls = await gatewayAppUrls(gatewayUrl, deps);\n const profilesFile = deps.profilesFile ?? connectProfilesPath();\n const profiles = readConnectProfiles(profilesFile);\n const rows: { app: string; client: string; status: string; file: string }[] =\n [];\n const ownerWarnings = new Set<string>();\n\n for (const app of apps) {\n const serverName = serverNameForApp(app);\n const mcpUrl = devMcpUrl(app, gatewayUrl, gatewayUrls);\n\n for (const client of clients) {\n const current = readCurrentMcpEntry(client, serverName, baseDir, scope);\n const backup = savedProfileEntry(\n profiles,\n serverName,\n client,\n current.file,\n );\n if (current.saved && !isLoopbackMcpUrl(savedEntryUrl(current.saved))) {\n setSavedProfileEntry(\n profiles,\n serverName,\n client,\n current.file,\n current.saved,\n );\n }\n const sourceEntry =\n current.saved && !isLoopbackMcpUrl(savedEntryUrl(current.saved))\n ? current.saved\n : backup;\n const headers = await devHeadersForApp({\n ownerEmail: parsed.ownerEmail,\n sourceEntry,\n baseDir,\n });\n if (!headers?.[\"X-Agent-Native-Owner-Email\"]) {\n ownerWarnings.add(app.name);\n }\n const file = writeHttpEntryForClient(\n client,\n serverName,\n mcpUrl,\n undefined,\n baseDir,\n scope,\n headers,\n );\n rows.push({\n app: app.name,\n client,\n status: \"dev\",\n file,\n });\n }\n }\n\n writeConnectProfiles(profilesFile, profiles);\n\n logOut(\"\");\n logOut(` Switched ${apps.length} app(s) to dev via ${gatewayUrl}`);\n for (const row of rows) {\n logOut(` ${row.app.padEnd(12)} ${row.client.padEnd(18)} ${row.file}`);\n }\n if (ownerWarnings.size) {\n logOut(\"\");\n logOut(\n ` Tip: pass --owner-email <you@example.com> if local tools look sparse ` +\n `for ${Array.from(ownerWarnings).join(\", \")}.`,\n );\n }\n logOut(\"\");\n logOut(\" Restart your coding agent to pick up the dev MCP servers.\");\n return true;\n}\n\nasync function connectProdProfile(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n const apps = await resolveProfileApps(parsed, deps);\n if (!apps || apps.length === 0) return true;\n\n const baseDir = projectBaseDir();\n const scope = parsed.scope === \"project\" ? \"project\" : \"user\";\n const profilesFile = deps.profilesFile ?? connectProfilesPath();\n const profiles = readConnectProfiles(profilesFile);\n const restored: { app: string; client: string; file: string }[] = [];\n const missing: { app: string; client: string }[] = [];\n\n for (const app of apps) {\n const serverName = serverNameForApp(app);\n for (const client of clients) {\n const file = configPathFor(client, baseDir, scope);\n const saved = savedProfileEntry(profiles, serverName, client, file);\n if (!saved) {\n missing.push({ app: app.name, client });\n continue;\n }\n writeSavedMcpEntry(client, file, serverName, saved);\n restored.push({ app: app.name, client, file });\n }\n }\n\n logOut(\"\");\n if (restored.length) {\n logOut(\n ` Restored ${restored.length} production MCP entr${restored.length === 1 ? \"y\" : \"ies\"}.`,\n );\n for (const row of restored) {\n logOut(` ${row.app.padEnd(12)} ${row.client.padEnd(18)} ${row.file}`);\n }\n }\n if (missing.length) {\n logOut(\"\");\n logOut(\" No saved production entry for:\");\n for (const row of missing) {\n const app = apps.find((candidate) => candidate.name === row.app);\n logOut(\n ` ${row.app.padEnd(12)} ${row.client.padEnd(18)} ` +\n `run: agent-native connect ${app?.url ?? \"<url>\"} --client ${row.client}`,\n );\n }\n }\n logOut(\"\");\n logOut(\" Restart your coding agent to pick up the production MCP servers.\");\n return missing.length === 0;\n}\n\n// ---------------------------------------------------------------------------\n// Single-app connect\n// ---------------------------------------------------------------------------\n\nasync function connectOne(\n rawUrl: string,\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<{ ok: boolean; serverName?: string; files?: string[] }> {\n const normalizedUrl = normalizeUrl(rawUrl);\n const baseUrl = stripMcpPath(normalizedUrl);\n const normalizedMcpUrl = mcpUrlForBaseUrl(normalizedUrl);\n const appSlug = appSlugFromUrl(baseUrl);\n const scope = parsed.scope === \"user\" ? \"user\" : \"project\";\n const baseDir = projectBaseDir();\n const allWritten: { client: ClientId; file: string }[] = [];\n const oauthClients = parsed.token\n ? []\n : clients.filter((client) => supportsRemoteMcpOAuth(client));\n const deviceFlowClients = parsed.token\n ? clients\n : clients.filter((client) => !supportsRemoteMcpOAuth(client));\n const oauthMigrations: ClientId[] = [];\n\n let token: string | undefined;\n let mcpUrl: string;\n let serverName: string;\n let headers: Record<string, string> | undefined;\n\n if (parsed.token) {\n // No-browser fallback: skip the device flow entirely.\n token = parsed.token;\n mcpUrl = normalizedMcpUrl;\n serverName = parsed.name ?? defaultServerName(baseUrl);\n logOut(\"\");\n logOut(` Using supplied --token for ${baseUrl} (skipping browser flow).`);\n } else if (deviceFlowClients.length === 0) {\n token = undefined;\n mcpUrl = normalizedMcpUrl;\n serverName = parsed.name ?? defaultServerName(baseUrl);\n } else {\n const grant = await runDeviceFlow(\n baseUrl,\n appSlug,\n clientArgForDeviceFlow(deviceFlowClients),\n deps,\n );\n if (!grant) return { ok: false };\n token = grant.token;\n mcpUrl = grant.mcpUrl;\n serverName = parsed.name ?? grant.serverName ?? defaultServerName(baseUrl);\n headers = grant.headers;\n }\n\n if (oauthClients.length > 0 && !parsed.token) {\n if (!(await validateOAuthMcpServer(baseUrl, mcpUrl, deps))) {\n return { ok: false };\n }\n }\n\n if (deviceFlowClients.length > 0) {\n allWritten.push(\n ...writeConfigs(\n deviceFlowClients,\n serverName,\n mcpUrl,\n token,\n scope,\n baseDir,\n headers,\n ),\n );\n }\n\n if (oauthClients.length > 0) {\n for (const client of oauthClients) {\n const current = readCurrentMcpEntry(client, serverName, baseDir, scope);\n const currentHeaders = savedEntryHeaders(current.saved);\n if (typeof currentHeaders.Authorization === \"string\") {\n oauthMigrations.push(client);\n }\n }\n allWritten.push(\n ...writeConfigs(\n oauthClients,\n serverName,\n mcpUrl,\n undefined,\n scope,\n baseDir,\n undefined,\n ),\n );\n }\n\n logOut(\"\");\n logOut(` Configured \"${serverName}\" → ${mcpUrl}`);\n for (const w of allWritten) {\n logOut(` ${w.client.padEnd(18)} ${w.file}`);\n }\n if (oauthClients.length > 0 && !parsed.token) {\n logOut(\"\");\n if (oauthMigrations.length > 0) {\n logOut(\n ` Replaced legacy bearer headers for ${clientLabelList(\n oauthMigrations,\n )}; it will reconnect with standard MCP OAuth.`,\n );\n }\n logOut(\n ` ${clientLabelList(\n oauthClients,\n )}: wrote URL-only MCP config (no bearer headers).`,\n );\n logOut(\" Next: restart Claude Code, run /mcp, and choose Authenticate.\");\n }\n logOut(\"\");\n logOut(\" Restart your coding agent to pick up the new MCP server.\");\n return { ok: true, serverName, files: allWritten.map((w) => w.file) };\n}\n\n// ---------------------------------------------------------------------------\n// --all : connect every first-party hosted app\n// ---------------------------------------------------------------------------\n\n/** Hosted first-party apps: visible (non-hidden) templates with a prodUrl. */\nexport function hostedApps(): HostedApp[] {\n return visibleTemplates()\n .filter((t) => typeof t.prodUrl === \"string\" && t.prodUrl.length > 0)\n .map((t) => ({\n name: t.name,\n label: t.label,\n url: t.prodUrl as string,\n }));\n}\n\nasync function connectApps(\n apps: HostedApp[],\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n if (apps.length === 0) {\n logErr(\" No hosted first-party apps found in the template registry.\");\n return false;\n }\n logOut(\"\");\n logOut(` Connecting ${apps.length} first-party hosted apps…`);\n\n const results: { name: string; status: string; files: string[] }[] = [];\n for (const app of apps) {\n logOut(\"\");\n logOut(` ── ${app.label} (${app.url}) ──`);\n try {\n const res = await connectOne(app.url, parsed, clients, deps);\n results.push({\n name: app.label,\n status: res.ok ? \"connected\" : \"skipped\",\n files: res.files ?? [],\n });\n } catch (err: any) {\n logErr(` ${app.name}: ${err?.message ?? err}`);\n results.push({ name: app.name, status: \"error\", files: [] });\n }\n }\n\n logOut(\"\");\n logOut(\" Summary\");\n for (const r of results) {\n const files = r.files.length ? r.files.join(\", \") : \"—\";\n logOut(` ${r.name.padEnd(14)} ${r.status.padEnd(10)} ${files}`);\n }\n return results.every((r) => r.status === \"connected\");\n}\n\nasync function connectAll(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n return connectApps(hostedApps(), parsed, clients, deps);\n}\n\n// ---------------------------------------------------------------------------\n// Entry point\n// ---------------------------------------------------------------------------\n\nconst HELP = `agent-native connect — wire your coding agent to a deployed app\n\nUsage:\n agent-native connect [--client <c>] [--scope user|project]\n With no URL, opens a picker for the built-in hosted apps\n (mail.agent-native.com, calendar.agent-native.com, and friends).\n\n agent-native connect <url> [--client <c>] [--scope user|project] [--name <n>]\n Writes the HTTP MCP entry into your selected client config(s). Claude\n Code / Claude Code CLI use standard remote MCP OAuth: restart Claude,\n run /mcp, and choose Authenticate. Codex / Cowork use the browser\n device-code fallback: the command prints a code, opens the verification\n URL, polls until approved, then writes bearer headers. With no --client,\n opens a brief picker preselected from ~/.agent-native/connect.json, or\n all clients on first run. Idempotent — re-running replaces the same entry.\n Re-running over an older Claude bearer entry upgrades it to URL-only\n OAuth config and prompts you to authenticate with /mcp.\n\n For cross-app access, prefer the unified Dispatch gateway:\n agent-native connect https://dispatch.agent-native.com\n\n agent-native connect <url> --token <token>\n No-browser fallback. Skip the device flow and write the entry with\n the supplied token (get it from the app's Connect page).\n\n agent-native connect --all [--client <c>] [--scope user|project]\n Connect every first-party hosted app as separate MCP resources.\n\nDeveloper:\n agent-native connect dev [--apps mail,calendar] [--client <c>]\n Switch selected first-party MCP entries to a local dev-lazy gateway.\n Defaults to ${DEFAULT_DEV_GATEWAY}; override with --gateway or --port.\n\n agent-native connect prod [--apps mail,calendar] [--client <c>]\n Restore production MCP entries saved before the dev switch.\n\nClients: all (default), claude-code, claude-code-cli, codex, cowork\nScope: user (default, ~/.claude.json) or project (.mcp.json)`;\n\n/**\n * `agent-native connect` entry point. `deps` is injectable for tests; the\n * dispatcher in index.ts calls it with just `args`.\n *\n * Sets `process.exitCode = 1` on failure (so the process exits non-zero\n * once the event loop drains) rather than calling `process.exit`, keeping\n * the function testable — same pattern as `audit-agent-web`.\n */\nexport async function runConnect(\n args: string[],\n deps: ConnectDeps = {},\n): Promise<void> {\n if (args[0] === \"--help\" || args[0] === \"-h\" || args[0] === \"help\") {\n logOut(HELP);\n return;\n }\n\n const parsed = parseConnectArgs(args);\n\n try {\n if (parsed.mode) {\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n const ok =\n parsed.mode === \"dev\"\n ? await connectDevProfile(parsed, clients, deps)\n : await connectProdProfile(parsed, clients, deps);\n if (!ok) process.exitCode = 1;\n return;\n }\n\n if (parsed.all) {\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n const ok = await connectAll(parsed, clients, deps);\n if (!ok) process.exitCode = 1;\n return;\n }\n\n if (!parsed.url) {\n const apps = await resolveHostedAppsFromPrompt(deps);\n if (apps) {\n if (apps.length === 0) return;\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n const ok = await connectApps(apps, parsed, clients, deps);\n if (!ok) process.exitCode = 1;\n return;\n }\n\n logErr(\" Missing app URL.\");\n logErr(\"\");\n logOut(HELP);\n process.exitCode = 1;\n return;\n }\n\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n const res = await connectOne(parsed.url, parsed, clients, deps);\n if (!res.ok) process.exitCode = 1;\n } catch (err: any) {\n logErr(` ${err?.message ?? err}`);\n process.exitCode = 1;\n }\n}\n"]}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `agent-native connect <url>` — wire your local Claude Code / Codex / Cowork\n * to a DEPLOYED agent-native app. OAuth-capable clients receive a standard\n * remote MCP URL entry and authenticate in the host. Fallback clients use the\n * browser device-code flow: open the verification URL, approve in the browser,\n * and the minted HTTP MCP server entry is written idempotently.\n *\n * agent-native connect <url> [--client all|claude-code|claude-code-cli|\n * codex|cowork] [--scope user|project]\n * [--name <serverName>]\n * agent-native connect <url> --token <token> (no-browser fallback)\n * agent-native connect [--client ...] (pick first-party apps)\n * agent-native connect --all [--client ...] (separate first-party app MCP resources)\n *\n * Server contract (implemented by another agent on `<url>`):\n * POST <url>/_agent-native/mcp/connect/device/start (no auth)\n * body { client?, app? }\n * → { device_code, user_code, verification_uri,\n * verification_uri_complete, interval, expires_in }\n * POST <url>/_agent-native/mcp/connect/device/poll (no auth)\n * body { device_code }\n * → { status: \"pending\" }\n * | { status: \"approved\", token, mcpUrl, serverName, mcpServerEntry }\n * | { status: \"expired\" }\n * | { status: \"consumed\" }\n * | { status: \"error\" | \"not_found\", message? }\n *\n * Node-only CLI module. Uses Node built-ins, @clack/prompts, and global fetch.\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport path from \"node:path\";\n\nimport { findWorkspaceRoot } from \"../mcp/workspace-resolve.js\";\nimport {\n CLIENTS,\n ClientId,\n configPathFor,\n writeCodexBlock,\n writeHttpEntryForClient,\n writeJsonMcpEntry,\n} from \"./mcp-config-writers.js\";\nimport { TEMPLATES, visibleTemplates } from \"./templates-meta.js\";\n\nconst DEVICE_START_PATH = \"/_agent-native/mcp/connect/device/start\";\nconst DEVICE_POLL_PATH = \"/_agent-native/mcp/connect/device/poll\";\nconst MCP_PATH = \"/_agent-native/mcp\";\nconst SERVER_NAME_PREFIX = \"agent-native\";\nconst CONNECT_PREFERENCES_VERSION = 1;\nconst CONNECT_PROFILES_VERSION = 1;\nconst DEFAULT_DEV_GATEWAY = \"http://127.0.0.1:8080\";\n\nconst CLIENT_LABELS: Record<ClientId, string> = {\n \"claude-code\": \"Claude Code\",\n \"claude-code-cli\": \"Claude Code CLI\",\n codex: \"Codex\",\n cowork: \"Claude Cowork\",\n};\n\nconst CLIENT_HINTS: Record<ClientId, string> = {\n \"claude-code\": \".mcp.json or ~/.claude.json\",\n \"claude-code-cli\": \".mcp.json or ~/.claude.json\",\n codex: \"$CODEX_HOME/config.toml or ~/.codex/config.toml\",\n cowork: \"~/.cowork/mcp.json\",\n};\n\nconst REMOTE_MCP_OAUTH_CLIENTS = new Set<ClientId>([\n \"claude-code\",\n \"claude-code-cli\",\n]);\n\nfunction logOut(msg: string): void {\n process.stdout.write(`${msg}\\n`);\n}\nfunction logErr(msg: string): void {\n process.stderr.write(`${msg}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Arg parsing\n// ---------------------------------------------------------------------------\n\nexport interface ParsedConnectArgs {\n /** Developer profile switch: local dev gateway or saved production config. */\n mode?: \"dev\" | \"prod\";\n /** Positional URL (the deployed app origin). Undefined for `--all`. */\n url?: string;\n /** all | claude-code | claude-code-cli | codex | cowork (default \"all\"). */\n client: string;\n /** True when the user passed --client explicitly, so we skip the picker. */\n clientExplicit: boolean;\n /** user | project (default \"user\"). */\n scope: string;\n /** Override the minted MCP server name. */\n name?: string;\n /** No-browser fallback: skip device flow, use this token directly. */\n token?: string;\n /** Connect every first-party hosted app. */\n all: boolean;\n /** Comma-separated app names for profile switching. */\n apps?: string;\n /** Local dev-lazy gateway URL for `connect dev`. */\n gateway?: string;\n /** Shorthand for a local dev-lazy gateway port. */\n port?: number;\n /** Local owner email override for dev entries. */\n ownerEmail?: string;\n}\n\nexport function parseConnectArgs(argv: string[]): ParsedConnectArgs {\n const out: ParsedConnectArgs = {\n client: \"all\",\n clientExplicit: false,\n scope: \"user\",\n all: false,\n };\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n const eat = (flag: string): string | undefined => {\n if (a === flag) return argv[++i];\n if (a.startsWith(`${flag}=`)) return a.slice(flag.length + 1);\n return undefined;\n };\n let v: string | undefined;\n if (a === \"--all\") out.all = true;\n else if ((v = eat(\"--apps\")) !== undefined) out.apps = v;\n else if ((v = eat(\"--gateway\")) !== undefined) out.gateway = v;\n else if ((v = eat(\"--gateway-url\")) !== undefined) out.gateway = v;\n else if ((v = eat(\"--port\")) !== undefined) out.port = Number(v);\n else if ((v = eat(\"--owner-email\")) !== undefined) out.ownerEmail = v;\n else if ((v = eat(\"--client\")) !== undefined) {\n out.client = v;\n out.clientExplicit = true;\n } else if ((v = eat(\"--scope\")) !== undefined) out.scope = v;\n else if ((v = eat(\"--name\")) !== undefined) out.name = v;\n else if ((v = eat(\"--token\")) !== undefined) out.token = v;\n else if (!a.startsWith(\"-\") && !out.url) {\n if (!out.mode && (a === \"dev\" || a === \"prod\")) out.mode = a;\n else out.url = a;\n }\n }\n return out;\n}\n\n/**\n * Normalize a user-supplied app URL: trim, require http/https, strip the\n * trailing slash. Throws a friendly Error otherwise.\n */\nexport function normalizeUrl(raw: string): string {\n const trimmed = (raw ?? \"\").trim();\n if (!trimmed) {\n throw new Error(\"Missing app URL. Usage: agent-native connect <url>\");\n }\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n throw new Error(\n `Not a valid URL: \"${raw}\". Pass a full origin, e.g. ` +\n `agent-native connect https://mail.agent-native.com`,\n );\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\n `Unsupported URL scheme \"${parsed.protocol}\". Use http:// or https://`,\n );\n }\n const host = parsed.hostname.toLowerCase();\n const isLoopback =\n host === \"localhost\" ||\n host === \"127.0.0.1\" ||\n host === \"::1\" ||\n host === \"[::1]\" ||\n host.startsWith(\"127.\");\n if (parsed.protocol === \"http:\" && !isLoopback) {\n throw new Error(\n `Refusing plaintext HTTP for non-loopback host \"${parsed.hostname}\". ` +\n `Use https:// so bearer tokens are not sent in cleartext.`,\n );\n }\n // origin + pathname, trailing slash stripped (origin keeps no path).\n const base = `${parsed.origin}${parsed.pathname}`.replace(/\\/+$/, \"\");\n return base;\n}\n\n/** Resolve the requested clients list. \"all\" → every supported client. */\nexport function resolveClients(client: string): ClientId[] {\n const c = (client ?? \"all\").toLowerCase();\n if (c === \"all\" || c === \"\") return [...CLIENTS];\n if ((CLIENTS as string[]).includes(c)) return [c as ClientId];\n throw new Error(\n `Unknown --client \"${client}\". Use: all, ${CLIENTS.join(\", \")}`,\n );\n}\n\nexport function connectPreferencesPath(): string {\n return path.join(os.homedir(), \".agent-native\", \"connect.json\");\n}\n\nfunction normalizeClientIds(values: unknown): ClientId[] {\n if (!Array.isArray(values)) return [];\n const seen = new Set<ClientId>();\n const out: ClientId[] = [];\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n const id = value.toLowerCase();\n if (!(CLIENTS as string[]).includes(id)) continue;\n const client = id as ClientId;\n if (seen.has(client)) continue;\n seen.add(client);\n out.push(client);\n }\n return out;\n}\n\nexport function readConnectClientPreferences(\n file: string = connectPreferencesPath(),\n): ClientId[] | null {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, \"utf-8\"));\n const clients = normalizeClientIds(\n parsed?.defaultClients ?? parsed?.clients,\n );\n return clients.length > 0 ? clients : null;\n } catch {\n return null;\n }\n}\n\nexport function writeConnectClientPreferences(\n clients: ClientId[],\n file: string = connectPreferencesPath(),\n): void {\n const normalized = normalizeClientIds(clients);\n if (normalized.length === 0) return;\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(\n file,\n JSON.stringify(\n {\n version: CONNECT_PREFERENCES_VERSION,\n defaultClients: normalized,\n updatedAt: new Date().toISOString(),\n },\n null,\n 2,\n ) + \"\\n\",\n \"utf-8\",\n );\n}\n\nexport interface ConnectClientPromptContext {\n initialClients: ClientId[];\n options: { value: ClientId; label: string; hint: string }[];\n preferencesFile: string;\n}\n\nexport interface HostedApp {\n name: string;\n label: string;\n url: string;\n}\n\nexport interface ConnectHostedAppsPromptContext {\n apps: HostedApp[];\n initialApps: string[];\n}\n\nfunction clientPromptOptions(): ConnectClientPromptContext[\"options\"] {\n return CLIENTS.map((client) => ({\n value: client,\n label: CLIENT_LABELS[client],\n hint: CLIENT_HINTS[client],\n }));\n}\n\nfunction shouldPrompt(deps: ConnectDeps): boolean {\n if (deps.isInteractive) return deps.isInteractive();\n if (process.env.AGENT_NATIVE_NO_PROMPT === \"1\") return false;\n if (process.env.CI === \"true\") return false;\n return !!process.stdin.isTTY && !!process.stdout.isTTY;\n}\n\nfunction shouldPromptForClients(deps: ConnectDeps): boolean {\n return shouldPrompt(deps);\n}\n\nasync function promptForClients(\n context: ConnectClientPromptContext,\n): Promise<ClientId[] | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.multiselect({\n message:\n \"Write MCP config for which local agents?\\n\" +\n \" (space toggles, enter confirms; saved for next time)\",\n options: context.options,\n initialValues: context.initialClients,\n required: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return normalizeClientIds(result);\n}\n\nfunction normalizeHostedAppNames(values: unknown, apps: HostedApp[]): string[] {\n if (!Array.isArray(values)) return [];\n const byName = new Map(apps.map((app) => [app.name, app]));\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n const app = byName.get(value);\n if (!app || seen.has(app.name)) continue;\n seen.add(app.name);\n out.push(app.name);\n }\n return out;\n}\n\nasync function promptForHostedApps(\n context: ConnectHostedAppsPromptContext,\n): Promise<string[] | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.multiselect({\n message:\n \"Which Agent Native apps do you want to connect?\\n\" +\n \" (all are selected by default; space toggles, enter confirms)\",\n options: context.apps.map((app) => ({\n value: app.name,\n label: app.label,\n hint: app.url,\n })),\n initialValues: context.initialApps,\n required: true,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n return normalizeHostedAppNames(result, context.apps);\n}\n\nasync function resolveConnectClients(\n parsed: ParsedConnectArgs,\n deps: ConnectDeps,\n): Promise<ClientId[] | null> {\n if (parsed.clientExplicit) return resolveClients(parsed.client);\n\n const defaultClients = resolveClients(parsed.client);\n if (!shouldPromptForClients(deps)) return defaultClients;\n\n const preferencesFile = deps.preferencesFile ?? connectPreferencesPath();\n const initialClients =\n readConnectClientPreferences(preferencesFile) ?? defaultClients;\n const prompt = deps.promptClients ?? promptForClients;\n const selected = normalizeClientIds(\n await prompt({\n initialClients,\n options: clientPromptOptions(),\n preferencesFile,\n }),\n );\n if (selected.length === 0) return null;\n\n try {\n writeConnectClientPreferences(selected, preferencesFile);\n } catch (err: any) {\n logErr(\n ` Could not save connect client preference (${err?.message ?? err}).`,\n );\n }\n return selected;\n}\n\nasync function resolveHostedAppsFromPrompt(\n deps: ConnectDeps,\n): Promise<HostedApp[] | null> {\n const apps = hostedApps();\n if (apps.length === 0) {\n logErr(\" No hosted first-party apps found in the template registry.\");\n return null;\n }\n if (!shouldPrompt(deps)) return null;\n\n const prompt = deps.promptHostedApps ?? promptForHostedApps;\n const selectedNames = normalizeHostedAppNames(\n await prompt({\n apps,\n initialApps: apps.map((app) => app.name),\n }),\n apps,\n );\n if (selectedNames.length === 0) return [];\n\n const selected = new Set(selectedNames);\n return apps.filter((app) => selected.has(app.name));\n}\n\nfunction clientArgForDeviceFlow(clients: ClientId[]): string {\n return clients.length === 1 ? clients[0] : \"all\";\n}\n\nexport function supportsRemoteMcpOAuth(client: ClientId): boolean {\n return REMOTE_MCP_OAUTH_CLIENTS.has(client);\n}\n\nfunction clientLabelList(clients: ClientId[]): string {\n return clients.map((client) => CLIENT_LABELS[client]).join(\", \");\n}\n\n/** Derive an app slug from a deployed origin, e.g. mail.agent-native.com → mail. */\nfunction appSlugFromUrl(url: string): string {\n try {\n const host = new URL(url).hostname;\n const first = host.split(\".\")[0];\n return first && first !== \"www\" ? first : \"app\";\n } catch {\n return \"app\";\n }\n}\n\nfunction defaultServerName(url: string): string {\n return `${SERVER_NAME_PREFIX}-${appSlugFromUrl(url)}`;\n}\n\n// ---------------------------------------------------------------------------\n// Browser open (mirrors workspace-dev.ts openBrowser)\n// ---------------------------------------------------------------------------\n\nfunction openInBrowser(url: string): void {\n if (process.env.AGENT_NATIVE_NO_OPEN === \"1\") return;\n try {\n const command =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"cmd\"\n : \"xdg-open\";\n const openArgs =\n process.platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n const child = spawn(command, openArgs, {\n stdio: \"ignore\",\n detached: true,\n });\n child.unref();\n } catch {\n // Non-fatal: the user can open the URL manually (we already printed it).\n }\n}\n\n// ---------------------------------------------------------------------------\n// Device-code flow\n// ---------------------------------------------------------------------------\n\ninterface DeviceStartResponse {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n interval?: number;\n expires_in?: number;\n}\n\ninterface DevicePollResponse {\n status:\n | \"pending\"\n | \"approved\"\n | \"expired\"\n | \"consumed\"\n | \"error\"\n | \"not_found\";\n token?: string;\n mcpUrl?: string;\n serverName?: string;\n mcpServerEntry?: Record<string, unknown>;\n message?: string;\n error?: string;\n}\n\n/** Injectable hooks so the poll state machine is unit-testable. */\nexport interface ConnectDeps {\n /** Defaults to global fetch. */\n fetchImpl?: typeof fetch;\n /** Sleep between polls (ms). Defaults to real setTimeout. */\n sleep?: (ms: number) => Promise<void>;\n /** Open the verification URL. Defaults to the platform browser opener. */\n openBrowser?: (url: string) => void;\n /** Override \"now\" for the expiry cap (ms epoch). Defaults to Date.now. */\n now?: () => number;\n /** Tests/embedders can force or suppress the interactive client picker. */\n isInteractive?: () => boolean;\n /** Injectable client picker. Defaults to @clack/prompts multiselect. */\n promptClients?: (\n context: ConnectClientPromptContext,\n ) => Promise<ClientId[] | null>;\n /** Injectable hosted app picker. Defaults to @clack/prompts multiselect. */\n promptHostedApps?: (\n context: ConnectHostedAppsPromptContext,\n ) => Promise<string[] | null>;\n /** Override the persisted connect preferences file. */\n preferencesFile?: string;\n /** Override the saved dev/prod profile file. */\n profilesFile?: string;\n}\n\nfunction realSleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function postJson(\n fetchImpl: typeof fetch,\n url: string,\n body: unknown,\n): Promise<{ status: number; json: any }> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 30_000);\n try {\n const response = await fetchImpl(url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body ?? {}),\n signal: controller.signal,\n });\n let json: any = null;\n try {\n json = await response.json();\n } catch {\n json = null;\n }\n return { status: response.status, json };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction responseMessage(json: any, fallback: string): string {\n const message =\n typeof json?.message === \"string\"\n ? json.message\n : typeof json?.error === \"string\"\n ? json.error\n : \"\";\n return message.trim() || fallback;\n}\n\nfunction stripMcpPath(baseUrl: string): string {\n const parsed = new URL(baseUrl);\n const pathname = parsed.pathname.replace(/\\/+$/, \"\");\n if (pathname === MCP_PATH || pathname.endsWith(MCP_PATH)) {\n parsed.pathname = pathname.slice(0, -MCP_PATH.length) || \"/\";\n parsed.search = \"\";\n parsed.hash = \"\";\n return `${parsed.origin}${parsed.pathname}`.replace(/\\/+$/, \"\");\n }\n return baseUrl;\n}\n\nfunction mcpUrlForBaseUrl(baseUrl: string): string {\n const parsed = new URL(baseUrl);\n const pathname = parsed.pathname.replace(/\\/+$/, \"\");\n if (pathname === MCP_PATH || pathname.endsWith(MCP_PATH)) {\n parsed.pathname = pathname;\n parsed.search = \"\";\n parsed.hash = \"\";\n return `${parsed.origin}${parsed.pathname}`;\n }\n return `${baseUrl.replace(/\\/+$/, \"\")}${MCP_PATH}`;\n}\n\nasync function validateOAuthMcpServer(\n baseUrl: string,\n mcpUrl: string,\n deps: ConnectDeps,\n): Promise<boolean> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const metadataUrl = `${baseUrl}/.well-known/oauth-protected-resource`;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 15_000);\n try {\n const response = await fetchImpl(metadataUrl, {\n method: \"GET\",\n headers: { accept: \"application/json\" },\n signal: controller.signal,\n });\n if (!response.ok) {\n logErr(\n ` Could not validate OAuth MCP support at ${metadataUrl} ` +\n `(HTTP ${response.status}).`,\n );\n return false;\n }\n const metadata = (await response.json().catch(() => null)) as {\n resource?: unknown;\n } | null;\n if (metadata?.resource !== mcpUrl) {\n logErr(\n ` ${metadataUrl} did not advertise the expected MCP resource ` +\n `${mcpUrl}.`,\n );\n return false;\n }\n return true;\n } catch (err: any) {\n logErr(\n ` Could not reach ${metadataUrl} (${err?.message ?? err}). ` +\n `Check the URL and your network.`,\n );\n return false;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nconst SPINNER = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\n/**\n * Run the device-code flow against `baseUrl` and return the approved grant.\n * Resolves with `null` (and prints a clear message) on expired/consumed or\n * other terminal failure — the caller maps that to a non-zero exit.\n */\nexport async function runDeviceFlow(\n baseUrl: string,\n appSlug: string,\n clientArg: string,\n deps: ConnectDeps = {},\n): Promise<{\n token?: string;\n mcpUrl: string;\n serverName: string;\n headers?: Record<string, string>;\n} | null> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const sleep = deps.sleep ?? realSleep;\n const open = deps.openBrowser ?? openInBrowser;\n const now = deps.now ?? (() => Date.now());\n\n let start: DeviceStartResponse;\n try {\n const { status, json } = await postJson(\n fetchImpl,\n `${baseUrl}${DEVICE_START_PATH}`,\n { client: clientArg, app: appSlug },\n );\n if (status < 200 || status >= 300 || !json?.device_code) {\n logErr(\n ` Could not start the connect flow on ${baseUrl} ` +\n `(HTTP ${status}). Is this an agent-native app, and is it ` +\n `deployed with the connect endpoint enabled?`,\n );\n return null;\n }\n start = json as DeviceStartResponse;\n } catch (err: any) {\n logErr(\n ` Could not reach ${baseUrl} (${err?.message ?? err}). ` +\n `Check the URL and your network.`,\n );\n return null;\n }\n\n const interval = Math.max(1, Number(start.interval) || 5);\n const expiresIn = Math.max(interval, Number(start.expires_in) || 600);\n const deadline = now() + expiresIn * 1000;\n\n logOut(\"\");\n logOut(` Connecting to ${baseUrl}`);\n logOut(\"\");\n logOut(` Your code: ${start.user_code}`);\n logOut(` Open: ${start.verification_uri_complete}`);\n logOut(\"\");\n logOut(\" Approve in the browser to finish. Opening it now…\");\n open(start.verification_uri_complete);\n\n let spin = 0;\n const isTTY = !!process.stdout.isTTY;\n while (now() < deadline) {\n let poll: DevicePollResponse;\n try {\n const { status, json } = await postJson(\n fetchImpl,\n `${baseUrl}${DEVICE_POLL_PATH}`,\n { device_code: start.device_code },\n );\n if (status < 200 || status >= 300) {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\n ` Connect polling failed (HTTP ${status}): ` +\n responseMessage(json, \"server returned an error.\"),\n );\n return null;\n }\n poll = (json ?? { status: \"pending\" }) as DevicePollResponse;\n } catch {\n // Transient network error — keep polling until the deadline.\n poll = { status: \"pending\" };\n }\n\n if (poll.status === \"approved\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n const token = poll.token ?? \"\";\n const mcpUrl = poll.mcpUrl ?? `${baseUrl}/_agent-native/mcp`;\n const serverName = poll.serverName ?? `${SERVER_NAME_PREFIX}-${appSlug}`;\n const headers =\n poll.mcpServerEntry &&\n typeof poll.mcpServerEntry === \"object\" &&\n poll.mcpServerEntry.headers &&\n typeof poll.mcpServerEntry.headers === \"object\"\n ? (poll.mcpServerEntry.headers as Record<string, string>)\n : undefined;\n logOut(\" Approved.\");\n return { token: token || undefined, mcpUrl, serverName, headers };\n }\n if (poll.status === \"expired\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" The connect request expired before it was approved.\");\n logErr(\" Run the command again to retry.\");\n return null;\n }\n if (poll.status === \"consumed\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" This connect code was already used. Run the command again.\");\n return null;\n }\n if (poll.status === \"error\" || poll.status === \"not_found\") {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\n ` Connect polling failed: ${responseMessage(\n poll,\n poll.status === \"not_found\"\n ? \"device code was not found.\"\n : \"server returned an error.\",\n )}`,\n );\n return null;\n }\n\n if (isTTY) {\n process.stdout.write(\n `\\r ${SPINNER[spin++ % SPINNER.length]} Waiting for approval…`,\n );\n }\n await sleep(interval * 1000);\n }\n\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\" Timed out waiting for approval. Run the command again to retry.\");\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Writing config(s)\n// ---------------------------------------------------------------------------\n\nfunction projectBaseDir(): string {\n const cwd = process.cwd();\n return findWorkspaceRoot(cwd) ?? path.resolve(cwd);\n}\n\n/**\n * Write the HTTP MCP entry into every requested client config idempotently.\n * Returns the list of files written so the caller can print them.\n */\nexport function writeConfigs(\n clients: ClientId[],\n serverName: string,\n mcpUrl: string,\n token: string | undefined,\n scope: string,\n baseDir: string = projectBaseDir(),\n headers?: Record<string, string>,\n): { client: ClientId; file: string }[] {\n const written: { client: ClientId; file: string }[] = [];\n for (const client of clients) {\n const file = writeHttpEntryForClient(\n client,\n serverName,\n mcpUrl,\n token,\n baseDir,\n scope,\n headers,\n );\n written.push({ client, file });\n }\n return written;\n}\n\n// ---------------------------------------------------------------------------\n// Developer profile switcher (`connect dev` / `connect prod`)\n// ---------------------------------------------------------------------------\n\ntype SavedMcpEntry =\n | {\n kind: \"json\";\n entry: Record<string, unknown>;\n savedAt: string;\n }\n | {\n kind: \"codex\";\n block: string;\n savedAt: string;\n };\n\ninterface ConnectProfiles {\n version: number;\n updatedAt?: string;\n prodEntries?: Record<string, Record<string, Record<string, SavedMcpEntry>>>;\n}\n\ninterface CurrentMcpEntry {\n file: string;\n saved?: SavedMcpEntry;\n}\n\ninterface ConnectableApp extends HostedApp {\n core: boolean;\n}\n\nexport function connectProfilesPath(): string {\n return path.join(os.homedir(), \".agent-native\", \"connect-profiles.json\");\n}\n\nfunction readConnectProfiles(file: string): ConnectProfiles {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, \"utf-8\"));\n if (parsed && typeof parsed === \"object\") {\n return {\n version: Number(parsed.version) || CONNECT_PROFILES_VERSION,\n updatedAt:\n typeof parsed.updatedAt === \"string\" ? parsed.updatedAt : undefined,\n prodEntries:\n parsed.prodEntries && typeof parsed.prodEntries === \"object\"\n ? parsed.prodEntries\n : {},\n };\n }\n } catch {\n // no saved profiles yet\n }\n return { version: CONNECT_PROFILES_VERSION, prodEntries: {} };\n}\n\nfunction writeConnectProfiles(file: string, profiles: ConnectProfiles): void {\n profiles.version = CONNECT_PROFILES_VERSION;\n profiles.updatedAt = new Date().toISOString();\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, JSON.stringify(profiles, null, 2) + \"\\n\", \"utf-8\");\n}\n\nfunction savedProfileEntry(\n profiles: ConnectProfiles,\n serverName: string,\n client: ClientId,\n file: string,\n): SavedMcpEntry | undefined {\n return profiles.prodEntries?.[serverName]?.[client]?.[file];\n}\n\nfunction setSavedProfileEntry(\n profiles: ConnectProfiles,\n serverName: string,\n client: ClientId,\n file: string,\n entry: SavedMcpEntry,\n): void {\n profiles.prodEntries ??= {};\n profiles.prodEntries[serverName] ??= {};\n profiles.prodEntries[serverName][client] ??= {};\n profiles.prodEntries[serverName][client][file] = entry;\n}\n\nfunction readJsonMcpServerEntry(\n file: string,\n serverName: string,\n): Record<string, unknown> | undefined {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, \"utf-8\"));\n const entry = parsed?.mcpServers?.[serverName];\n return entry && typeof entry === \"object\" ? entry : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction tomlQuoteForRead(s: string): string {\n return `\"${s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`;\n}\n\nfunction codexHeadersForRead(name: string): string[] {\n const headers = [`[mcp_servers.${tomlQuoteForRead(name)}]`];\n if (/^[A-Za-z0-9_-]+$/.test(name)) headers.push(`[mcp_servers.${name}]`);\n return headers;\n}\n\nfunction readCodexMcpBlock(\n file: string,\n serverName: string,\n): string | undefined {\n let content = \"\";\n try {\n content = fs.readFileSync(file, \"utf-8\");\n } catch {\n return undefined;\n }\n const headers = new Set(codexHeadersForRead(serverName));\n const lines = content.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n if (!headers.has(lines[i].trim())) continue;\n const block: string[] = [lines[i]];\n i++;\n while (i < lines.length && !/^\\s*\\[/.test(lines[i])) {\n block.push(lines[i]);\n i++;\n }\n return block.join(\"\\n\").replace(/\\n*$/, \"\") + \"\\n\";\n }\n return undefined;\n}\n\nfunction readCurrentMcpEntry(\n client: ClientId,\n serverName: string,\n baseDir: string,\n scope: string,\n): CurrentMcpEntry {\n const file = configPathFor(client, baseDir, scope);\n if (client === \"codex\") {\n const block = readCodexMcpBlock(file, serverName);\n return {\n file,\n saved: block\n ? { kind: \"codex\", block, savedAt: new Date().toISOString() }\n : undefined,\n };\n }\n const entry = readJsonMcpServerEntry(file, serverName);\n return {\n file,\n saved: entry\n ? { kind: \"json\", entry, savedAt: new Date().toISOString() }\n : undefined,\n };\n}\n\nfunction writeSavedMcpEntry(\n client: ClientId,\n file: string,\n serverName: string,\n saved: SavedMcpEntry,\n): void {\n if (client === \"codex\") {\n if (saved.kind !== \"codex\") return;\n writeCodexBlock(file, serverName, saved.block);\n return;\n }\n if (saved.kind !== \"json\") return;\n writeJsonMcpEntry(file, serverName, saved.entry);\n}\n\nfunction unescapeTomlString(value: string): string {\n return value.replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, \"\\\\\");\n}\n\nfunction parseCodexHeaders(block: string): Record<string, string> {\n const line = block\n .split(/\\r?\\n/)\n .find((candidate) => /^\\s*http_headers\\s*=/.test(candidate));\n if (!line) return {};\n const match = line.match(/\\{(.*)\\}/);\n if (!match) return {};\n const headers: Record<string, string> = {};\n const pairRe = /\"((?:\\\\.|[^\"])*)\"\\s*=\\s*\"((?:\\\\.|[^\"])*)\"/g;\n let pair: RegExpExecArray | null;\n while ((pair = pairRe.exec(match[1]))) {\n headers[unescapeTomlString(pair[1])] = unescapeTomlString(pair[2]);\n }\n return headers;\n}\n\nfunction savedEntryUrl(saved: SavedMcpEntry | undefined): string | undefined {\n if (!saved) return undefined;\n if (saved.kind === \"json\") {\n return typeof saved.entry.url === \"string\" ? saved.entry.url : undefined;\n }\n const match = saved.block.match(/^\\s*url\\s*=\\s*\"((?:\\\\.|[^\"])*)\"/m);\n return match ? unescapeTomlString(match[1]) : undefined;\n}\n\nfunction savedEntryHeaders(\n saved: SavedMcpEntry | undefined,\n): Record<string, string> {\n if (!saved) return {};\n if (saved.kind === \"json\") {\n const headers = saved.entry.headers;\n return headers && typeof headers === \"object\"\n ? Object.fromEntries(\n Object.entries(headers as Record<string, unknown>)\n .filter((entry): entry is [string, string] => {\n return typeof entry[1] === \"string\";\n })\n .map(([key, value]) => [key, value]),\n )\n : {};\n }\n return parseCodexHeaders(saved.block);\n}\n\nfunction isLoopbackMcpUrl(value: string | undefined): boolean {\n if (!value) return false;\n try {\n const url = new URL(value);\n return (\n url.hostname === \"localhost\" ||\n url.hostname === \"127.0.0.1\" ||\n url.hostname === \"::1\" ||\n url.hostname.startsWith(\"127.\")\n );\n } catch {\n return false;\n }\n}\n\nfunction decodeJwtSub(authHeader: string | undefined): string | undefined {\n if (!authHeader?.startsWith(\"Bearer \")) return undefined;\n const token = authHeader.slice(\"Bearer \".length);\n const [, payload] = token.split(\".\");\n if (!payload) return undefined;\n try {\n const normalized = payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padded = normalized.padEnd(\n normalized.length + ((4 - (normalized.length % 4)) % 4),\n \"=\",\n );\n const parsed = JSON.parse(Buffer.from(padded, \"base64\").toString(\"utf8\"));\n return typeof parsed.sub === \"string\" && parsed.sub.includes(\"@\")\n ? parsed.sub\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction ownerEmailFromEntry(\n saved: SavedMcpEntry | undefined,\n): string | undefined {\n const headers = savedEntryHeaders(saved);\n return (\n headers[\"X-Agent-Native-Owner-Email\"] || decodeJwtSub(headers.Authorization)\n );\n}\n\nfunction readEnvFile(file: string): string {\n try {\n return fs.readFileSync(file, \"utf-8\");\n } catch {\n return \"\";\n }\n}\n\nfunction readEnvValue(content: string, key: string): string | undefined {\n let found: string | undefined;\n for (const line of content.split(/\\r?\\n/)) {\n const match = line.match(/^\\s*([A-Z0-9_]+)\\s*=\\s*(.*)\\s*$/i);\n if (match?.[1] === key) {\n found = match[2].replace(/^[\"']|[\"']$/g, \"\");\n }\n }\n return found;\n}\n\nfunction workspaceEnvContent(baseDir: string): string {\n return (\n readEnvFile(path.join(baseDir, \".env.local\")) +\n \"\\n\" +\n readEnvFile(path.join(baseDir, \".env\"))\n );\n}\n\nfunction localAccessToken(baseDir: string): string | undefined {\n const content = workspaceEnvContent(baseDir);\n const single = readEnvValue(content, \"ACCESS_TOKEN\");\n if (single) return single;\n const multi = readEnvValue(content, \"ACCESS_TOKENS\");\n return multi\n ?.split(\",\")\n .map((token) => token.trim())\n .find(Boolean);\n}\n\nfunction localA2ASecret(baseDir: string): string | undefined {\n return (\n process.env.A2A_SECRET ||\n readEnvValue(workspaceEnvContent(baseDir), \"A2A_SECRET\")\n );\n}\n\nasync function mintLocalA2AToken(\n ownerEmail: string | undefined,\n baseDir: string,\n): Promise<string | undefined> {\n const secret = ownerEmail ? localA2ASecret(baseDir) : undefined;\n if (!secret) return undefined;\n const jose = await import(\"jose\");\n return new jose.SignJWT({ sub: ownerEmail })\n .setProtectedHeader({ alg: \"HS256\" })\n .setIssuer(\"agent-native-connect-dev\")\n .setIssuedAt()\n .setExpirationTime(\"30d\")\n .sign(new TextEncoder().encode(secret));\n}\n\nasync function devHeadersForApp(params: {\n ownerEmail?: string;\n sourceEntry?: SavedMcpEntry;\n baseDir: string;\n}): Promise<Record<string, string> | undefined> {\n const ownerEmail =\n params.ownerEmail ||\n process.env.AGENT_NATIVE_OWNER_EMAIL ||\n ownerEmailFromEntry(params.sourceEntry);\n const headers: Record<string, string> = {};\n const accessToken = localAccessToken(params.baseDir);\n const a2aToken = accessToken\n ? undefined\n : await mintLocalA2AToken(ownerEmail, params.baseDir);\n if (accessToken || a2aToken) {\n headers.Authorization = `Bearer ${accessToken || a2aToken}`;\n }\n if (ownerEmail) {\n headers[\"X-Agent-Native-Owner-Email\"] = ownerEmail;\n }\n return Object.keys(headers).length ? headers : undefined;\n}\n\nfunction connectableApps(includeHidden = false): ConnectableApp[] {\n const source = includeHidden ? TEMPLATES : visibleTemplates();\n return source\n .filter((template) => typeof template.prodUrl === \"string\")\n .map((template) => ({\n name: template.name,\n label: template.label,\n url: template.prodUrl as string,\n core: !!template.core,\n }));\n}\n\nfunction profileDefaultApps(): ConnectableApp[] {\n const core = connectableApps(false).filter((app) => app.core);\n return core.length ? core : connectableApps(false);\n}\n\nfunction parseAppsList(value: string | undefined): string[] {\n return (value ?? \"\")\n .split(\",\")\n .map((app) => app.trim())\n .filter(Boolean);\n}\n\nasync function resolveProfileApps(\n parsed: ParsedConnectArgs,\n deps: ConnectDeps,\n): Promise<ConnectableApp[] | null> {\n const allVisible = connectableApps(false);\n const allIncludingHidden = connectableApps(true);\n\n if (parsed.apps) {\n const requested = parseAppsList(parsed.apps);\n if (requested.includes(\"all\")) return allVisible;\n const byName = new Map(allIncludingHidden.map((app) => [app.name, app]));\n const unknown = requested.filter((name) => !byName.has(name));\n if (unknown.length) {\n throw new Error(\n `Unknown app(s): ${unknown.join(\", \")}. Known apps: ${allIncludingHidden\n .map((app) => app.name)\n .join(\", \")}`,\n );\n }\n return requested.map((name) => byName.get(name)!);\n }\n\n if (parsed.all) return allVisible;\n\n if (shouldPrompt(deps)) {\n const prompt = deps.promptHostedApps ?? promptForHostedApps;\n const initialApps = profileDefaultApps().map((app) => app.name);\n const selectedNames = normalizeHostedAppNames(\n await prompt({ apps: allVisible, initialApps }),\n allVisible,\n );\n if (selectedNames.length === 0) return [];\n const selected = new Set(selectedNames);\n return allVisible.filter((app) => selected.has(app.name));\n }\n\n return profileDefaultApps();\n}\n\nfunction defaultDevGateway(): string {\n if (process.env.WORKSPACE_GATEWAY_URL)\n return process.env.WORKSPACE_GATEWAY_URL;\n const port = process.env.WORKSPACE_PORT || process.env.PORT;\n return port ? `http://127.0.0.1:${port}` : DEFAULT_DEV_GATEWAY;\n}\n\nfunction normalizeDevGateway(parsed: ParsedConnectArgs): string {\n const raw =\n parsed.gateway ||\n (Number.isFinite(parsed.port) && parsed.port\n ? `http://127.0.0.1:${parsed.port}`\n : defaultDevGateway());\n const normalized = normalizeUrl(raw);\n return normalized.replace(/\\/+$/, \"\");\n}\n\nasync function gatewayAppUrls(\n gatewayUrl: string,\n deps: ConnectDeps,\n): Promise<Map<string, string>> {\n const out = new Map<string, string>();\n const fetchImpl = deps.fetchImpl ?? fetch;\n try {\n const response = await fetchImpl(`${gatewayUrl}/_workspace/apps`, {\n signal: AbortSignal.timeout(1200),\n });\n if (!response.ok) return out;\n const apps = (await response.json()) as unknown;\n if (!Array.isArray(apps)) return out;\n for (const app of apps) {\n if (!app || typeof app !== \"object\") continue;\n const id = (app as { id?: unknown }).id;\n const url = (app as { url?: unknown }).url;\n if (typeof id === \"string\" && typeof url === \"string\") {\n out.set(id, normalizeUrl(url));\n }\n }\n } catch {\n // The gateway may not be running yet; still write deterministic dev URLs.\n }\n return out;\n}\n\nfunction devMcpUrl(\n app: ConnectableApp,\n gatewayUrl: string,\n gatewayUrls: Map<string, string>,\n): string {\n const base = gatewayUrls.get(app.name) ?? `${gatewayUrl}/${app.name}`;\n return `${base.replace(/\\/+$/, \"\")}/_agent-native/mcp`;\n}\n\nfunction serverNameForApp(app: ConnectableApp): string {\n return `${SERVER_NAME_PREFIX}-${app.name}`;\n}\n\nasync function connectDevProfile(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n const apps = await resolveProfileApps(parsed, deps);\n if (!apps || apps.length === 0) return true;\n\n const baseDir = projectBaseDir();\n const scope = parsed.scope === \"project\" ? \"project\" : \"user\";\n const gatewayUrl = normalizeDevGateway(parsed);\n const gatewayUrls = await gatewayAppUrls(gatewayUrl, deps);\n const profilesFile = deps.profilesFile ?? connectProfilesPath();\n const profiles = readConnectProfiles(profilesFile);\n const rows: { app: string; client: string; status: string; file: string }[] =\n [];\n const ownerWarnings = new Set<string>();\n\n for (const app of apps) {\n const serverName = serverNameForApp(app);\n const mcpUrl = devMcpUrl(app, gatewayUrl, gatewayUrls);\n\n for (const client of clients) {\n const current = readCurrentMcpEntry(client, serverName, baseDir, scope);\n const backup = savedProfileEntry(\n profiles,\n serverName,\n client,\n current.file,\n );\n if (current.saved && !isLoopbackMcpUrl(savedEntryUrl(current.saved))) {\n setSavedProfileEntry(\n profiles,\n serverName,\n client,\n current.file,\n current.saved,\n );\n }\n const sourceEntry =\n current.saved && !isLoopbackMcpUrl(savedEntryUrl(current.saved))\n ? current.saved\n : backup;\n const headers = await devHeadersForApp({\n ownerEmail: parsed.ownerEmail,\n sourceEntry,\n baseDir,\n });\n if (!headers?.[\"X-Agent-Native-Owner-Email\"]) {\n ownerWarnings.add(app.name);\n }\n const file = writeHttpEntryForClient(\n client,\n serverName,\n mcpUrl,\n undefined,\n baseDir,\n scope,\n headers,\n );\n rows.push({\n app: app.name,\n client,\n status: \"dev\",\n file,\n });\n }\n }\n\n writeConnectProfiles(profilesFile, profiles);\n\n logOut(\"\");\n logOut(` Switched ${apps.length} app(s) to dev via ${gatewayUrl}`);\n for (const row of rows) {\n logOut(` ${row.app.padEnd(12)} ${row.client.padEnd(18)} ${row.file}`);\n }\n if (ownerWarnings.size) {\n logOut(\"\");\n logOut(\n ` Tip: pass --owner-email <you@example.com> if local tools look sparse ` +\n `for ${Array.from(ownerWarnings).join(\", \")}.`,\n );\n }\n logOut(\"\");\n logOut(\" Restart your coding agent to pick up the dev MCP servers.\");\n return true;\n}\n\nasync function connectProdProfile(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n const apps = await resolveProfileApps(parsed, deps);\n if (!apps || apps.length === 0) return true;\n\n const baseDir = projectBaseDir();\n const scope = parsed.scope === \"project\" ? \"project\" : \"user\";\n const profilesFile = deps.profilesFile ?? connectProfilesPath();\n const profiles = readConnectProfiles(profilesFile);\n const restored: { app: string; client: string; file: string }[] = [];\n const missing: { app: string; client: string }[] = [];\n\n for (const app of apps) {\n const serverName = serverNameForApp(app);\n for (const client of clients) {\n const file = configPathFor(client, baseDir, scope);\n const saved = savedProfileEntry(profiles, serverName, client, file);\n if (!saved) {\n missing.push({ app: app.name, client });\n continue;\n }\n writeSavedMcpEntry(client, file, serverName, saved);\n restored.push({ app: app.name, client, file });\n }\n }\n\n logOut(\"\");\n if (restored.length) {\n logOut(\n ` Restored ${restored.length} production MCP entr${restored.length === 1 ? \"y\" : \"ies\"}.`,\n );\n for (const row of restored) {\n logOut(` ${row.app.padEnd(12)} ${row.client.padEnd(18)} ${row.file}`);\n }\n }\n if (missing.length) {\n logOut(\"\");\n logOut(\" No saved production entry for:\");\n for (const row of missing) {\n const app = apps.find((candidate) => candidate.name === row.app);\n logOut(\n ` ${row.app.padEnd(12)} ${row.client.padEnd(18)} ` +\n `run: agent-native connect ${app?.url ?? \"<url>\"} --client ${row.client}`,\n );\n }\n }\n logOut(\"\");\n logOut(\" Restart your coding agent to pick up the production MCP servers.\");\n return missing.length === 0;\n}\n\n// ---------------------------------------------------------------------------\n// Single-app connect\n// ---------------------------------------------------------------------------\n\nasync function connectOne(\n rawUrl: string,\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<{ ok: boolean; serverName?: string; files?: string[] }> {\n const normalizedUrl = normalizeUrl(rawUrl);\n const baseUrl = stripMcpPath(normalizedUrl);\n const normalizedMcpUrl = mcpUrlForBaseUrl(normalizedUrl);\n const appSlug = appSlugFromUrl(baseUrl);\n const scope = parsed.scope === \"user\" ? \"user\" : \"project\";\n const baseDir = projectBaseDir();\n const allWritten: { client: ClientId; file: string }[] = [];\n const oauthClients = parsed.token\n ? []\n : clients.filter((client) => supportsRemoteMcpOAuth(client));\n const deviceFlowClients = parsed.token\n ? clients\n : clients.filter((client) => !supportsRemoteMcpOAuth(client));\n const oauthMigrations: ClientId[] = [];\n\n let token: string | undefined;\n let mcpUrl: string;\n let serverName: string;\n let headers: Record<string, string> | undefined;\n\n if (parsed.token) {\n // No-browser fallback: skip the device flow entirely.\n token = parsed.token;\n mcpUrl = normalizedMcpUrl;\n serverName = parsed.name ?? defaultServerName(baseUrl);\n logOut(\"\");\n logOut(` Using supplied --token for ${baseUrl} (skipping browser flow).`);\n } else if (deviceFlowClients.length === 0) {\n token = undefined;\n mcpUrl = normalizedMcpUrl;\n serverName = parsed.name ?? defaultServerName(baseUrl);\n } else {\n const grant = await runDeviceFlow(\n baseUrl,\n appSlug,\n clientArgForDeviceFlow(deviceFlowClients),\n deps,\n );\n if (!grant) return { ok: false };\n token = grant.token;\n mcpUrl = grant.mcpUrl;\n serverName = parsed.name ?? grant.serverName ?? defaultServerName(baseUrl);\n headers = grant.headers;\n }\n\n if (oauthClients.length > 0 && !parsed.token) {\n if (!(await validateOAuthMcpServer(baseUrl, mcpUrl, deps))) {\n return { ok: false };\n }\n }\n\n if (deviceFlowClients.length > 0) {\n allWritten.push(\n ...writeConfigs(\n deviceFlowClients,\n serverName,\n mcpUrl,\n token,\n scope,\n baseDir,\n headers,\n ),\n );\n }\n\n if (oauthClients.length > 0) {\n for (const client of oauthClients) {\n const current = readCurrentMcpEntry(client, serverName, baseDir, scope);\n const currentHeaders = savedEntryHeaders(current.saved);\n if (typeof currentHeaders.Authorization === \"string\") {\n oauthMigrations.push(client);\n }\n }\n allWritten.push(\n ...writeConfigs(\n oauthClients,\n serverName,\n mcpUrl,\n undefined,\n scope,\n baseDir,\n undefined,\n ),\n );\n }\n\n logOut(\"\");\n logOut(` Configured \"${serverName}\" → ${mcpUrl}`);\n for (const w of allWritten) {\n logOut(` ${w.client.padEnd(18)} ${w.file}`);\n }\n if (oauthClients.length > 0 && !parsed.token) {\n logOut(\"\");\n if (oauthMigrations.length > 0) {\n logOut(\n ` Replaced legacy bearer headers for ${clientLabelList(\n oauthMigrations,\n )}; it will reconnect with standard MCP OAuth.`,\n );\n }\n logOut(\n ` ${clientLabelList(\n oauthClients,\n )}: wrote URL-only MCP config (no bearer headers).`,\n );\n logOut(\" Next: restart Claude Code, run /mcp, and choose Authenticate.\");\n }\n logOut(\"\");\n logOut(\" Restart your coding agent to pick up the new MCP server.\");\n return { ok: true, serverName, files: allWritten.map((w) => w.file) };\n}\n\n// ---------------------------------------------------------------------------\n// --all : connect every first-party hosted app\n// ---------------------------------------------------------------------------\n\n/** Hosted first-party apps: visible (non-hidden) templates with a prodUrl. */\nexport function hostedApps(): HostedApp[] {\n return visibleTemplates()\n .filter((t) => typeof t.prodUrl === \"string\" && t.prodUrl.length > 0)\n .map((t) => ({\n name: t.name,\n label: t.label,\n url: t.prodUrl as string,\n }));\n}\n\nasync function connectApps(\n apps: HostedApp[],\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n if (apps.length === 0) {\n logErr(\" No hosted first-party apps found in the template registry.\");\n return false;\n }\n logOut(\"\");\n logOut(` Connecting ${apps.length} first-party hosted apps…`);\n\n const results: { name: string; status: string; files: string[] }[] = [];\n for (const app of apps) {\n logOut(\"\");\n logOut(` ── ${app.label} (${app.url}) ──`);\n try {\n const res = await connectOne(app.url, parsed, clients, deps);\n results.push({\n name: app.label,\n status: res.ok ? \"connected\" : \"skipped\",\n files: res.files ?? [],\n });\n } catch (err: any) {\n logErr(` ${app.name}: ${err?.message ?? err}`);\n results.push({ name: app.name, status: \"error\", files: [] });\n }\n }\n\n logOut(\"\");\n logOut(\" Summary\");\n for (const r of results) {\n const files = r.files.length ? r.files.join(\", \") : \"—\";\n logOut(` ${r.name.padEnd(14)} ${r.status.padEnd(10)} ${files}`);\n }\n return results.every((r) => r.status === \"connected\");\n}\n\nasync function connectAll(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n return connectApps(hostedApps(), parsed, clients, deps);\n}\n\n// ---------------------------------------------------------------------------\n// Entry point\n// ---------------------------------------------------------------------------\n\nconst HELP = `agent-native connect — wire your coding agent to a deployed app\n\nUsage:\n agent-native connect [--client <c>] [--scope user|project]\n With no URL, opens a picker for the built-in hosted apps\n (mail.agent-native.com, calendar.agent-native.com, and friends).\n\n agent-native connect <url> [--client <c>] [--scope user|project] [--name <n>]\n Writes the HTTP MCP entry into your selected client config(s). Claude\n Code / Claude Code CLI use standard remote MCP OAuth: restart Claude,\n run /mcp, and choose Authenticate. Codex / Cowork use the browser\n device-code fallback: the command prints a code, opens the verification\n URL, polls until approved, then writes bearer headers. With no --client,\n opens a brief picker preselected from ~/.agent-native/connect.json, or\n all clients on first run. Idempotent — re-running replaces the same entry.\n Re-running over an older Claude bearer entry upgrades it to URL-only\n OAuth config and prompts you to authenticate with /mcp.\n\n For cross-app access, prefer the unified Dispatch gateway:\n agent-native connect https://dispatch.agent-native.com\n\n agent-native connect <url> --token <token>\n No-browser fallback. Skip the device flow and write the entry with\n the supplied token (get it from the app's Connect page).\n\n agent-native connect --all [--client <c>] [--scope user|project]\n Connect every first-party hosted app as separate MCP resources.\n\nDeveloper:\n agent-native connect dev [--apps mail,calendar] [--client <c>]\n Switch selected first-party MCP entries to a local dev-lazy gateway.\n Defaults to ${DEFAULT_DEV_GATEWAY}; override with --gateway or --port.\n\n agent-native connect prod [--apps mail,calendar] [--client <c>]\n Restore production MCP entries saved before the dev switch.\n\nClients: all (default), claude-code, claude-code-cli, codex, cowork\nScope: user (default, ~/.claude.json) or project (.mcp.json)`;\n\n/**\n * `agent-native connect` entry point. `deps` is injectable for tests; the\n * dispatcher in index.ts calls it with just `args`.\n *\n * Sets `process.exitCode = 1` on failure (so the process exits non-zero\n * once the event loop drains) rather than calling `process.exit`, keeping\n * the function testable — same pattern as `audit-agent-web`.\n */\nexport async function runConnect(\n args: string[],\n deps: ConnectDeps = {},\n): Promise<void> {\n if (args[0] === \"--help\" || args[0] === \"-h\" || args[0] === \"help\") {\n logOut(HELP);\n return;\n }\n\n const parsed = parseConnectArgs(args);\n\n try {\n if (parsed.mode) {\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n const ok =\n parsed.mode === \"dev\"\n ? await connectDevProfile(parsed, clients, deps)\n : await connectProdProfile(parsed, clients, deps);\n if (!ok) process.exitCode = 1;\n return;\n }\n\n if (parsed.all) {\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n const ok = await connectAll(parsed, clients, deps);\n if (!ok) process.exitCode = 1;\n return;\n }\n\n if (!parsed.url) {\n const apps = await resolveHostedAppsFromPrompt(deps);\n if (apps) {\n if (apps.length === 0) return;\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n const ok = await connectApps(apps, parsed, clients, deps);\n if (!ok) process.exitCode = 1;\n return;\n }\n\n logErr(\" Missing app URL.\");\n logErr(\"\");\n logOut(HELP);\n process.exitCode = 1;\n return;\n }\n\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n const res = await connectOne(parsed.url, parsed, clients, deps);\n if (!res.ok) process.exitCode = 1;\n } catch (err: any) {\n logErr(` ${err?.message ?? err}`);\n process.exitCode = 1;\n }\n}\n"]}
@@ -12,7 +12,8 @@
12
12
  * - claude-code / claude-code-cli → `.mcp.json` (project) or
13
13
  * `~/.claude.json` (user). JSON `mcpServers[name] = entry`.
14
14
  * - cowork → `~/.cowork/mcp.json`. Same JSON shape.
15
- * - codex → `~/.codex/config.toml`.
15
+ * - codex → `$CODEX_HOME/config.toml` when set,
16
+ * otherwise `~/.codex/config.toml`.
16
17
  * `[mcp_servers.<name>]` block.
17
18
  *
18
19
  * Node-only. No new npm deps — hand-rolled JSON merge + minimal TOML block
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config-writers.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-config-writers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9E,eAAO,MAAM,OAAO,EAAE,QAAQ,EAK7B,CAAC;AAEF,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,YAAY,CAUd;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAYR;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACpC,IAAI,CAYN;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnE;AAkBD,wEAAwE;AACxE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAgBR;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,IAAI,CA2CN;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjE;AAMD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAmBR"}
1
+ {"version":3,"file":"mcp-config-writers.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-config-writers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9E,eAAO,MAAM,OAAO,EAAE,QAAQ,EAK7B,CAAC;AAEF,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,YAAY,CAUd;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAYR;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACpC,IAAI,CAYN;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnE;AAkBD,wEAAwE;AACxE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAgBR;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,IAAI,CA2CN;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjE;AAMD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAmBR"}
@@ -12,7 +12,8 @@
12
12
  * - claude-code / claude-code-cli → `.mcp.json` (project) or
13
13
  * `~/.claude.json` (user). JSON `mcpServers[name] = entry`.
14
14
  * - cowork → `~/.cowork/mcp.json`. Same JSON shape.
15
- * - codex → `~/.codex/config.toml`.
15
+ * - codex → `$CODEX_HOME/config.toml` when set,
16
+ * otherwise `~/.codex/config.toml`.
16
17
  * `[mcp_servers.<name>]` block.
17
18
  *
18
19
  * Node-only. No new npm deps — hand-rolled JSON merge + minimal TOML block
@@ -56,6 +57,9 @@ export function claudeCodeUserConfig() {
56
57
  return path.join(os.homedir(), ".claude.json");
57
58
  }
58
59
  export function codexConfigPath() {
60
+ const codexHome = process.env.CODEX_HOME?.trim();
61
+ if (codexHome)
62
+ return path.join(codexHome, "config.toml");
59
63
  return path.join(os.homedir(), ".codex", "config.toml");
60
64
  }
61
65
  /**