@agent-native/core 0.52.0 → 0.54.0

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.
Files changed (267) hide show
  1. package/README.md +41 -95
  2. package/blueprints/action/crud.md +98 -0
  3. package/blueprints/channel/discord.md +74 -0
  4. package/blueprints/provider/stripe.md +87 -0
  5. package/blueprints/sandbox/docker.md +78 -0
  6. package/dist/action.d.ts +64 -1
  7. package/dist/action.d.ts.map +1 -1
  8. package/dist/action.js +73 -2
  9. package/dist/action.js.map +1 -1
  10. package/dist/agent/index.d.ts +1 -0
  11. package/dist/agent/index.d.ts.map +1 -1
  12. package/dist/agent/index.js +1 -0
  13. package/dist/agent/index.js.map +1 -1
  14. package/dist/agent/observational-memory/compactor.d.ts +43 -0
  15. package/dist/agent/observational-memory/compactor.d.ts.map +1 -0
  16. package/dist/agent/observational-memory/compactor.js +50 -0
  17. package/dist/agent/observational-memory/compactor.js.map +1 -0
  18. package/dist/agent/observational-memory/config.d.ts +37 -0
  19. package/dist/agent/observational-memory/config.d.ts.map +1 -0
  20. package/dist/agent/observational-memory/config.js +48 -0
  21. package/dist/agent/observational-memory/config.js.map +1 -0
  22. package/dist/agent/observational-memory/index.d.ts +26 -0
  23. package/dist/agent/observational-memory/index.d.ts.map +1 -0
  24. package/dist/agent/observational-memory/index.js +25 -0
  25. package/dist/agent/observational-memory/index.js.map +1 -0
  26. package/dist/agent/observational-memory/internal-run.d.ts +37 -0
  27. package/dist/agent/observational-memory/internal-run.d.ts.map +1 -0
  28. package/dist/agent/observational-memory/internal-run.js +59 -0
  29. package/dist/agent/observational-memory/internal-run.js.map +1 -0
  30. package/dist/agent/observational-memory/message-text.d.ts +13 -0
  31. package/dist/agent/observational-memory/message-text.d.ts.map +1 -0
  32. package/dist/agent/observational-memory/message-text.js +46 -0
  33. package/dist/agent/observational-memory/message-text.js.map +1 -0
  34. package/dist/agent/observational-memory/migrations.d.ts +13 -0
  35. package/dist/agent/observational-memory/migrations.d.ts.map +1 -0
  36. package/dist/agent/observational-memory/migrations.js +43 -0
  37. package/dist/agent/observational-memory/migrations.js.map +1 -0
  38. package/dist/agent/observational-memory/observer.d.ts +37 -0
  39. package/dist/agent/observational-memory/observer.d.ts.map +1 -0
  40. package/dist/agent/observational-memory/observer.js +82 -0
  41. package/dist/agent/observational-memory/observer.js.map +1 -0
  42. package/dist/agent/observational-memory/plugin.d.ts +16 -0
  43. package/dist/agent/observational-memory/plugin.d.ts.map +1 -0
  44. package/dist/agent/observational-memory/plugin.js +26 -0
  45. package/dist/agent/observational-memory/plugin.js.map +1 -0
  46. package/dist/agent/observational-memory/prompts.d.ts +27 -0
  47. package/dist/agent/observational-memory/prompts.d.ts.map +1 -0
  48. package/dist/agent/observational-memory/prompts.js +42 -0
  49. package/dist/agent/observational-memory/prompts.js.map +1 -0
  50. package/dist/agent/observational-memory/read.d.ts +45 -0
  51. package/dist/agent/observational-memory/read.d.ts.map +1 -0
  52. package/dist/agent/observational-memory/read.js +97 -0
  53. package/dist/agent/observational-memory/read.js.map +1 -0
  54. package/dist/agent/observational-memory/reflector.d.ts +31 -0
  55. package/dist/agent/observational-memory/reflector.d.ts.map +1 -0
  56. package/dist/agent/observational-memory/reflector.js +76 -0
  57. package/dist/agent/observational-memory/reflector.js.map +1 -0
  58. package/dist/agent/observational-memory/schema.d.ts +267 -0
  59. package/dist/agent/observational-memory/schema.d.ts.map +1 -0
  60. package/dist/agent/observational-memory/schema.js +48 -0
  61. package/dist/agent/observational-memory/schema.js.map +1 -0
  62. package/dist/agent/observational-memory/store.d.ts +52 -0
  63. package/dist/agent/observational-memory/store.d.ts.map +1 -0
  64. package/dist/agent/observational-memory/store.js +197 -0
  65. package/dist/agent/observational-memory/store.js.map +1 -0
  66. package/dist/agent/observational-memory/types.d.ts +61 -0
  67. package/dist/agent/observational-memory/types.d.ts.map +1 -0
  68. package/dist/agent/observational-memory/types.js +9 -0
  69. package/dist/agent/observational-memory/types.js.map +1 -0
  70. package/dist/agent/processors.d.ts +146 -0
  71. package/dist/agent/processors.d.ts.map +1 -0
  72. package/dist/agent/processors.js +122 -0
  73. package/dist/agent/processors.js.map +1 -0
  74. package/dist/agent/production-agent.d.ts +25 -0
  75. package/dist/agent/production-agent.d.ts.map +1 -1
  76. package/dist/agent/production-agent.js +341 -1
  77. package/dist/agent/production-agent.js.map +1 -1
  78. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  79. package/dist/agent/run-loop-with-resume.js +48 -0
  80. package/dist/agent/run-loop-with-resume.js.map +1 -1
  81. package/dist/agent/run-store.d.ts +17 -0
  82. package/dist/agent/run-store.d.ts.map +1 -1
  83. package/dist/agent/run-store.js +55 -0
  84. package/dist/agent/run-store.js.map +1 -1
  85. package/dist/agent/runtime-context.d.ts +30 -0
  86. package/dist/agent/runtime-context.d.ts.map +1 -1
  87. package/dist/agent/runtime-context.js +54 -1
  88. package/dist/agent/runtime-context.js.map +1 -1
  89. package/dist/agent/tool-call-journal.d.ts +99 -0
  90. package/dist/agent/tool-call-journal.d.ts.map +1 -0
  91. package/dist/agent/tool-call-journal.js +212 -0
  92. package/dist/agent/tool-call-journal.js.map +1 -0
  93. package/dist/agent/types.d.ts +35 -0
  94. package/dist/agent/types.d.ts.map +1 -1
  95. package/dist/agent/types.js.map +1 -1
  96. package/dist/cli/add.d.ts +109 -0
  97. package/dist/cli/add.d.ts.map +1 -0
  98. package/dist/cli/add.js +352 -0
  99. package/dist/cli/add.js.map +1 -0
  100. package/dist/cli/connect.d.ts +2 -2
  101. package/dist/cli/connect.d.ts.map +1 -1
  102. package/dist/cli/connect.js +92 -24
  103. package/dist/cli/connect.js.map +1 -1
  104. package/dist/cli/eval.d.ts +17 -0
  105. package/dist/cli/eval.d.ts.map +1 -0
  106. package/dist/cli/eval.js +121 -0
  107. package/dist/cli/eval.js.map +1 -0
  108. package/dist/cli/index.js +44 -3
  109. package/dist/cli/index.js.map +1 -1
  110. package/dist/cli/mcp.d.ts.map +1 -1
  111. package/dist/cli/mcp.js +11 -5
  112. package/dist/cli/mcp.js.map +1 -1
  113. package/dist/cli/plan-local.d.ts +66 -5
  114. package/dist/cli/plan-local.d.ts.map +1 -1
  115. package/dist/cli/plan-local.js +622 -21
  116. package/dist/cli/plan-local.js.map +1 -1
  117. package/dist/cli/skills.d.ts +2 -2
  118. package/dist/cli/skills.d.ts.map +1 -1
  119. package/dist/cli/skills.js +108 -62
  120. package/dist/cli/skills.js.map +1 -1
  121. package/dist/client/AssistantChat.d.ts.map +1 -1
  122. package/dist/client/AssistantChat.js +118 -92
  123. package/dist/client/AssistantChat.js.map +1 -1
  124. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  125. package/dist/client/agent-chat-adapter.js +16 -0
  126. package/dist/client/agent-chat-adapter.js.map +1 -1
  127. package/dist/client/chat/tool-call-display.d.ts +20 -1
  128. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  129. package/dist/client/chat/tool-call-display.js +32 -7
  130. package/dist/client/chat/tool-call-display.js.map +1 -1
  131. package/dist/client/sse-event-processor.d.ts +13 -0
  132. package/dist/client/sse-event-processor.d.ts.map +1 -1
  133. package/dist/client/sse-event-processor.js +21 -0
  134. package/dist/client/sse-event-processor.js.map +1 -1
  135. package/dist/coding-tools/run-code.d.ts.map +1 -1
  136. package/dist/coding-tools/run-code.js +18 -2
  137. package/dist/coding-tools/run-code.js.map +1 -1
  138. package/dist/db/client.d.ts +4 -2
  139. package/dist/db/client.d.ts.map +1 -1
  140. package/dist/db/client.js +6 -4
  141. package/dist/db/client.js.map +1 -1
  142. package/dist/deploy/route-discovery.d.ts.map +1 -1
  143. package/dist/deploy/route-discovery.js +1 -0
  144. package/dist/deploy/route-discovery.js.map +1 -1
  145. package/dist/eval/agent-runner.d.ts +63 -0
  146. package/dist/eval/agent-runner.d.ts.map +1 -0
  147. package/dist/eval/agent-runner.js +142 -0
  148. package/dist/eval/agent-runner.js.map +1 -0
  149. package/dist/eval/define-eval.d.ts +29 -0
  150. package/dist/eval/define-eval.d.ts.map +1 -0
  151. package/dist/eval/define-eval.js +43 -0
  152. package/dist/eval/define-eval.js.map +1 -0
  153. package/dist/eval/index.d.ts +18 -0
  154. package/dist/eval/index.d.ts.map +1 -0
  155. package/dist/eval/index.js +17 -0
  156. package/dist/eval/index.js.map +1 -0
  157. package/dist/eval/report.d.ts +8 -0
  158. package/dist/eval/report.d.ts.map +1 -0
  159. package/dist/eval/report.js +44 -0
  160. package/dist/eval/report.js.map +1 -0
  161. package/dist/eval/runner.d.ts +67 -0
  162. package/dist/eval/runner.d.ts.map +1 -0
  163. package/dist/eval/runner.js +256 -0
  164. package/dist/eval/runner.js.map +1 -0
  165. package/dist/eval/scorer.d.ts +83 -0
  166. package/dist/eval/scorer.d.ts.map +1 -0
  167. package/dist/eval/scorer.js +195 -0
  168. package/dist/eval/scorer.js.map +1 -0
  169. package/dist/eval/types.d.ts +162 -0
  170. package/dist/eval/types.d.ts.map +1 -0
  171. package/dist/eval/types.js +20 -0
  172. package/dist/eval/types.js.map +1 -0
  173. package/dist/extensions/fetch-tool.d.ts.map +1 -1
  174. package/dist/extensions/fetch-tool.js +80 -15
  175. package/dist/extensions/fetch-tool.js.map +1 -1
  176. package/dist/extensions/web-content.d.ts +61 -0
  177. package/dist/extensions/web-content.d.ts.map +1 -0
  178. package/dist/extensions/web-content.js +468 -0
  179. package/dist/extensions/web-content.js.map +1 -0
  180. package/dist/extensions/web-search-tool.js +3 -3
  181. package/dist/extensions/web-search-tool.js.map +1 -1
  182. package/dist/mcp/build-server.d.ts.map +1 -1
  183. package/dist/mcp/build-server.js +4 -1
  184. package/dist/mcp/build-server.js.map +1 -1
  185. package/dist/observability/traces.d.ts.map +1 -1
  186. package/dist/observability/traces.js +100 -1
  187. package/dist/observability/traces.js.map +1 -1
  188. package/dist/observability/tracing.d.ts +73 -0
  189. package/dist/observability/tracing.d.ts.map +1 -0
  190. package/dist/observability/tracing.js +126 -0
  191. package/dist/observability/tracing.js.map +1 -0
  192. package/dist/onboarding/default-steps.d.ts.map +1 -1
  193. package/dist/onboarding/default-steps.js +4 -1
  194. package/dist/onboarding/default-steps.js.map +1 -1
  195. package/dist/provider-api/actions/query-staged-dataset.d.ts +1 -1
  196. package/dist/provider-api/corpus-jobs.d.ts +80 -0
  197. package/dist/provider-api/corpus-jobs.d.ts.map +1 -1
  198. package/dist/provider-api/corpus-jobs.js +219 -22
  199. package/dist/provider-api/corpus-jobs.js.map +1 -1
  200. package/dist/provider-api/index.d.ts +24 -32
  201. package/dist/provider-api/index.d.ts.map +1 -1
  202. package/dist/provider-api/index.js +28 -1
  203. package/dist/provider-api/index.js.map +1 -1
  204. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  205. package/dist/scripts/agent-engines/list-agent-engines.js +10 -3
  206. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  207. package/dist/server/action-discovery.d.ts.map +1 -1
  208. package/dist/server/action-discovery.js +4 -0
  209. package/dist/server/action-discovery.js.map +1 -1
  210. package/dist/server/agent-chat-plugin.d.ts +9 -0
  211. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  212. package/dist/server/agent-chat-plugin.js +119 -111
  213. package/dist/server/agent-chat-plugin.js.map +1 -1
  214. package/dist/server/agent-teams.d.ts +62 -0
  215. package/dist/server/agent-teams.d.ts.map +1 -1
  216. package/dist/server/agent-teams.js +99 -2
  217. package/dist/server/agent-teams.js.map +1 -1
  218. package/dist/server/better-auth-instance.d.ts +7 -0
  219. package/dist/server/better-auth-instance.d.ts.map +1 -1
  220. package/dist/server/better-auth-instance.js +90 -0
  221. package/dist/server/better-auth-instance.js.map +1 -1
  222. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  223. package/dist/server/core-routes-plugin.js +7 -4
  224. package/dist/server/core-routes-plugin.js.map +1 -1
  225. package/dist/server/credential-provider.d.ts.map +1 -1
  226. package/dist/server/credential-provider.js +2 -0
  227. package/dist/server/credential-provider.js.map +1 -1
  228. package/dist/server/deep-link.d.ts +7 -0
  229. package/dist/server/deep-link.d.ts.map +1 -1
  230. package/dist/server/deep-link.js +13 -2
  231. package/dist/server/deep-link.js.map +1 -1
  232. package/dist/server/framework-request-handler.d.ts.map +1 -1
  233. package/dist/server/framework-request-handler.js +33 -1
  234. package/dist/server/framework-request-handler.js.map +1 -1
  235. package/dist/server/index.d.ts +2 -1
  236. package/dist/server/index.d.ts.map +1 -1
  237. package/dist/server/index.js +2 -1
  238. package/dist/server/index.js.map +1 -1
  239. package/dist/templates/default/.agents/skills/actions/SKILL.md +52 -1
  240. package/dist/templates/default/.agents/skills/security/SKILL.md +22 -0
  241. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +52 -1
  242. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +16 -4
  243. package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +20 -0
  244. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +31 -0
  245. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +22 -0
  246. package/docs/content/actions.md +50 -0
  247. package/docs/content/agent-teams.md +32 -0
  248. package/docs/content/blueprint-installer.md +73 -0
  249. package/docs/content/durable-resume.md +49 -0
  250. package/docs/content/evals.md +141 -0
  251. package/docs/content/external-agents.md +2 -2
  252. package/docs/content/human-approval.md +101 -0
  253. package/docs/content/observability.md +21 -0
  254. package/docs/content/observational-memory.md +63 -0
  255. package/docs/content/plan-plugin.md +5 -0
  256. package/docs/content/pr-visual-recap.md +9 -5
  257. package/docs/content/processors.md +99 -0
  258. package/docs/content/sandbox-adapters.md +134 -0
  259. package/docs/content/template-plan.md +97 -21
  260. package/package.json +10 -1
  261. package/src/templates/default/.agents/skills/actions/SKILL.md +52 -1
  262. package/src/templates/default/.agents/skills/security/SKILL.md +22 -0
  263. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +52 -1
  264. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +16 -4
  265. package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +20 -0
  266. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +31 -0
  267. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +22 -0
@@ -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 MCP-capable coding agent\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|cursor|opencode|github-copilot]\n * [--scope user|project]\n * [--name <serverName>]\n * agent-native reconnect [<url>] [--client ...] [--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 jsonMcpConfigKeyForClient,\n removeSameUrlDuplicatesForClient,\n writeCodexBlock,\n writeHttpEntryForClient,\n writeJsonMcpEntryForClient,\n} from \"./mcp-config-writers.js\";\nimport {\n isFirstPartyPlanHost,\n writePlanPublishAuth,\n} from \"./plan-publish-store.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;\n\n/**\n * Maps a normalised hosted MCP URL to the canonical server name for that\n * first-party app. Kept in sync with BUILT_IN_APP_SKILLS in skills.ts (we\n * cannot import from there — it imports connect.ts, which would be circular).\n */\nconst CANONICAL_SERVER_NAME_BY_MCP_URL: Readonly<Record<string, string>> = {\n \"https://plan.agent-native.com/_agent-native/mcp\": \"plan\",\n \"https://assets.agent-native.com/_agent-native/mcp\": \"agent-native-assets\",\n \"https://design.agent-native.com/_agent-native/mcp\": \"agent-native-design\",\n \"https://context-xray.agent-native.com/_agent-native/mcp\":\n \"agent-native-context-xray\",\n};\nconst LEGACY_SERVER_NAMES_BY_MCP_URL: Readonly<\n Record<string, readonly string[]>\n> = {\n \"https://plan.agent-native.com/_agent-native/mcp\": [\n \"agent-native-plan\",\n \"agent-native-plans\",\n \"agent-native-visual-plans\",\n ],\n};\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 cursor: \"Cursor\",\n opencode: \"OpenCode\",\n \"github-copilot\": \"GitHub Copilot / VS Code\",\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 cursor: \".cursor/mcp.json or ~/.cursor/mcp.json\",\n opencode: \"opencode.json or ~/.config/opencode/opencode.json\",\n \"github-copilot\": \".vscode/mcp.json or VS Code user mcp.json\",\n};\n\nconst REMOTE_MCP_OAUTH_CLIENTS = new Set<ClientId>([\n \"claude-code\",\n \"claude-code-cli\",\n \"cursor\",\n \"opencode\",\n \"github-copilot\",\n]);\n\nlet logOutImpl = (msg: string) => process.stdout.write(`${msg}\\n`);\nlet logErrImpl = (msg: string) => process.stderr.write(`${msg}\\n`);\n\nfunction logOut(msg: string): void {\n logOutImpl(msg);\n}\nfunction logErr(msg: string): void {\n logErrImpl(msg);\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\" | \"reauth\" | \"reconnect\";\n /** Positional URL (the deployed app origin). Undefined for `--all`. */\n url?: string;\n /** all | claude-code | claude-code-cli | codex | cowork | cursor | opencode | github-copilot (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 /**\n * Mint an ORG SERVICE token with this service name (e.g. \"ci\") instead of\n * writing local MCP configs. Authenticates the human via the device flow,\n * then calls the app's `create-org-service-token` action and prints the\n * token once — for CI secrets like PLAN_RECAP_TOKEN.\n */\n serviceToken?: string;\n /** Optional token TTL in days (1–365) for --service-token. */\n ttlDays?: number;\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 * Embed `catalog_scope: \"full\"` in the minted token so the connected client\n * bypasses the connector-catalog tier and sees the complete action surface.\n * Matches the `fullCatalog` body param on the app's token-mint route.\n */\n fullCatalog?: boolean;\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(\"--service-token\")) !== undefined) out.serviceToken = v;\n else if ((v = eat(\"--ttl-days\")) !== undefined) out.ttlDays = Number(v);\n else if ((v = eat(\"--token\")) !== undefined) out.token = v;\n else if (a === \"--full-catalog\") out.fullCatalog = true;\n else if (!a.startsWith(\"-\") && !out.url) {\n if (\n !out.mode &&\n (a === \"dev\" || a === \"prod\" || a === \"reauth\" || a === \"reconnect\")\n ) {\n 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(\n \"Missing app URL. Usage: npx @agent-native/core@latest connect <url>\",\n );\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 `npx @agent-native/core@latest 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 = normalizeClientAlias(client ?? \"all\");\n if (c === \"all\" || c === \"\") return [...CLIENTS];\n if (c.includes(\",\")) {\n const clients = normalizeClientIds(c.split(\",\").map((part) => part.trim()));\n if (clients.length > 0) return clients;\n }\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\nfunction normalizeClientAlias(value: string): string {\n const id = value.trim().toLowerCase();\n if (id === \"claude\" || id === \"claude-code-desktop\") return \"claude-code\";\n if (id === \"copilot\" || id === \"vscode\" || id === \"vs-code\") {\n return \"github-copilot\";\n }\n return id;\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 = normalizeClientAlias(value);\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\nfunction sentenceClientLabelList(clients: ClientId[]): string {\n const labels = clients.map((client) => CLIENT_LABELS[client]);\n if (labels.length <= 1) return labels[0] ?? \"\";\n if (labels.length === 2) return `${labels[0]} and ${labels[1]}`;\n return `${labels.slice(0, -1).join(\", \")}, and ${labels[labels.length - 1]}`;\n}\n\nfunction oauthNextStepsForClients(\n clients: ClientId[],\n serverName?: string,\n): string[] {\n const lines: string[] = [];\n if (clients.includes(\"claude-code\") || clients.includes(\"claude-code-cli\")) {\n lines.push(\n \"Claude Code: restart Claude Code, run /mcp, and choose Authenticate.\",\n );\n }\n if (clients.includes(\"cursor\")) {\n lines.push(\n \"Cursor: restart or reload Cursor, then authenticate the MCP server from Cursor MCP settings if prompted.\",\n );\n }\n if (clients.includes(\"opencode\")) {\n lines.push(\n `OpenCode: run opencode mcp auth ${serverName ?? \"<server-name>\"} or authenticate on first use.`,\n );\n }\n if (clients.includes(\"github-copilot\")) {\n lines.push(\n \"GitHub Copilot / VS Code: reload VS Code, open the MCP config, and use the Auth action above the server if prompted.\",\n );\n }\n return lines;\n}\n\nfunction clientsNotIn(\n requestedClients: ClientId[],\n effectiveClients: ClientId[],\n): ClientId[] {\n const effective = new Set(effectiveClients);\n return requestedClients.filter((client) => !effective.has(client));\n}\n\nfunction displayMcpServerName(serverName: string | undefined): string {\n if (!serverName) return \"Agent Native MCP\";\n if (serverName === \"plan\") return \"Plan MCP\";\n return `\"${serverName}\" MCP`;\n}\n\nasync function showReconnectSuccessOutro({\n serverName,\n clients,\n}: {\n serverName: string | undefined;\n clients: ClientId[];\n}): Promise<void> {\n const lines = [`✅ Reconnected ${displayMcpServerName(serverName)}.`];\n if (clients.includes(\"codex\")) {\n lines.push(\n \"Codex: start a new Codex session now; the MCP tools should be available there.\",\n );\n }\n const oauthClients = clients.filter((client) =>\n supportsRemoteMcpOAuth(client),\n );\n if (oauthClients.length > 0) {\n lines.push(...oauthNextStepsForClients(oauthClients, serverName));\n }\n if (!clients.includes(\"codex\") && oauthClients.length === 0) {\n lines.push(\n `Restart or reload ${sentenceClientLabelList(\n clients,\n )} before using the MCP tools.`,\n );\n }\n\n const message = lines.join(\"\\n\");\n try {\n const clack = await import(\"@clack/prompts\");\n clack.outro(message);\n } catch {\n logOut(\"\");\n for (const line of lines) logOut(` ${line}`);\n }\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 const canonical = canonicalServerNameForMcpUrl(mcpUrlForBaseUrl(url));\n if (canonical) return canonical;\n return `${SERVER_NAME_PREFIX}-${appSlugFromUrl(url)}`;\n}\n\nfunction canonicalServerNameForMcpUrl(\n mcpUrl: string | undefined,\n): string | undefined {\n const key = canonicalMcpUrl(mcpUrl);\n return key ? CANONICAL_SERVER_NAME_BY_MCP_URL[key] : undefined;\n}\n\nfunction reconnectServerNameForMcpUrl(\n mcpUrl: string | undefined,\n serverName: string | undefined,\n): string | undefined {\n const key = canonicalMcpUrl(mcpUrl);\n if (!key || !serverName) return serverName;\n const canonical = CANONICAL_SERVER_NAME_BY_MCP_URL[key];\n if (!canonical || serverName === canonical) return serverName;\n const legacyNames = LEGACY_SERVER_NAMES_BY_MCP_URL[key] ?? [];\n return legacyNames.includes(serverName) ? canonical : serverName;\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 /** Optional output hooks used when another clack-based command embeds connect. */\n logOut?: (message: string) => void;\n logErr?: (message: string) => void;\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 sleep = deps.sleep ?? realSleep;\n const metadataUrl = `${baseUrl}/.well-known/oauth-protected-resource`;\n let lastFailure = \"\";\n\n for (let attempt = 0; attempt < 2; attempt++) {\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 lastFailure = `HTTP ${response.status}`;\n } else {\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 }\n } catch (err: any) {\n lastFailure = err?.message ?? String(err);\n } finally {\n clearTimeout(timeout);\n }\n\n if (attempt === 0) await sleep(500);\n }\n\n logErr(\n ` Could not validate OAuth MCP support at ${metadataUrl}` +\n (lastFailure ? ` (${lastFailure}).` : \".\"),\n );\n return false;\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 options: { fullCatalog?: boolean } = {},\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 {\n client: clientArg,\n app: appSlug,\n ...(options.fullCatalog ? { fullCatalog: true } : {}),\n },\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 client: ClientId,\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?.[jsonMcpConfigKeyForClient(client)]?.[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(client, 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 writeJsonMcpEntryForClient(client, 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\ninterface ExistingMcpEntry {\n client: ClientId;\n serverName: string;\n file: string;\n saved: SavedMcpEntry;\n url: string;\n}\n\nfunction readJsonMcpServerEntries(\n client: ClientId,\n file: string,\n): { serverName: string; saved: SavedMcpEntry }[] {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, \"utf-8\"));\n const servers = parsed?.[jsonMcpConfigKeyForClient(client)];\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n return [];\n }\n return Object.entries(servers).flatMap(([serverName, entry]) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n return [];\n }\n return [\n {\n serverName,\n saved: {\n kind: \"json\" as const,\n entry: entry as Record<string, unknown>,\n savedAt: new Date().toISOString(),\n },\n },\n ];\n });\n } catch {\n return [];\n }\n}\n\nfunction parseCodexMcpServerName(line: string): string | undefined {\n const trimmed = line.trim();\n const quoted = trimmed.match(/^\\[mcp_servers\\.\"((?:\\\\.|[^\"])*)\"\\]$/);\n if (quoted) return unescapeTomlString(quoted[1]);\n const bare = trimmed.match(/^\\[mcp_servers\\.([A-Za-z0-9_-]+)\\]$/);\n return bare?.[1];\n}\n\nfunction readCodexMcpServerEntries(\n file: string,\n): { serverName: string; saved: SavedMcpEntry }[] {\n let content = \"\";\n try {\n content = fs.readFileSync(file, \"utf-8\");\n } catch {\n return [];\n }\n const lines = content.split(/\\r?\\n/);\n const entries: { serverName: string; saved: SavedMcpEntry }[] = [];\n for (let i = 0; i < lines.length; i++) {\n const serverName = parseCodexMcpServerName(lines[i]);\n if (!serverName) 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 i--;\n entries.push({\n serverName,\n saved: {\n kind: \"codex\",\n block: block.join(\"\\n\").replace(/\\n*$/, \"\") + \"\\n\",\n savedAt: new Date().toISOString(),\n },\n });\n }\n return entries;\n}\n\nfunction readExistingMcpEntries(\n clients: ClientId[],\n baseDir: string,\n scope: string,\n): ExistingMcpEntry[] {\n const entries: ExistingMcpEntry[] = [];\n for (const client of clients) {\n const file = configPathFor(client, baseDir, scope);\n const rawEntries =\n client === \"codex\"\n ? readCodexMcpServerEntries(file)\n : readJsonMcpServerEntries(client, file);\n for (const { serverName, saved } of rawEntries) {\n const url = savedEntryUrl(saved);\n if (!url) continue;\n entries.push({ client, serverName, file, saved, url });\n }\n }\n return entries;\n}\n\nfunction canonicalMcpUrl(value: string | undefined): string | undefined {\n if (!value) return undefined;\n try {\n const url = new URL(value);\n url.hash = \"\";\n return url.toString().replace(/\\/+$/, \"\");\n } catch {\n return undefined;\n }\n}\n\nfunction sameMcpUrl(a: string | undefined, b: string | undefined): boolean {\n const left = canonicalMcpUrl(a);\n const right = canonicalMcpUrl(b);\n return !!left && !!right && left === right;\n}\n\nfunction savedEntryHeaders(\n saved: SavedMcpEntry | undefined,\n): Record<string, string> {\n if (!saved) return {};\n if (saved.kind === \"json\") {\n const headers =\n saved.entry.headers ??\n (saved.entry.requestInit &&\n typeof saved.entry.requestInit === \"object\" &&\n !Array.isArray(saved.entry.requestInit)\n ? (saved.entry.requestInit as Record<string, unknown>).headers\n : undefined);\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 // Local dev defaults to the compact/connector catalog + tool-search, same as\n // every other client. The local server still honors AGENT_NATIVE_MCP_FULL_CATALOG=1\n // for an explicit full-catalog opt-in, so we don't force the header here.\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: npx @agent-native/core@latest 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\ninterface ReconnectTarget {\n rawUrl: string;\n serverName?: string;\n clients?: ClientId[];\n}\n\nfunction distinctReconnectEntries(\n entries: ExistingMcpEntry[],\n): ExistingMcpEntry[] {\n const seen = new Set<string>();\n const out: ExistingMcpEntry[] = [];\n for (const entry of entries) {\n const key = `${entry.serverName}\\0${canonicalMcpUrl(entry.url) ?? entry.url}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(entry);\n }\n return out;\n}\n\nfunction uniqueClients(entries: ExistingMcpEntry[]): ClientId[] {\n return [...new Set(entries.map((entry) => entry.client))];\n}\n\nfunction preferredReconnectEntry(\n url: string,\n entries: ExistingMcpEntry[],\n): ExistingMcpEntry | undefined {\n const canonicalName = CANONICAL_SERVER_NAME_BY_MCP_URL[url];\n return (\n (canonicalName\n ? entries.find((entry) => entry.serverName === canonicalName)\n : undefined) ??\n entries.find((entry) => !entry.serverName.startsWith(\"agent-native-\")) ??\n entries[0]\n );\n}\n\n/**\n * Return true when `url` is an agent-native MCP endpoint.\n * Matches any URL whose path ends with `/_agent-native/mcp` (after stripping\n * trailing slashes), regardless of the MCP server's name in the config.\n */\nfunction isAgentNativeMcpUrl(url: string | undefined): boolean {\n if (!url) return false;\n try {\n const pathname = new URL(url).pathname.replace(/\\/+$/, \"\");\n return pathname === MCP_PATH || pathname.endsWith(MCP_PATH);\n } catch {\n return false;\n }\n}\n\nasync function resolveReconnectTarget(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<ReconnectTarget | null> {\n const baseDir = projectBaseDir();\n const scope = parsed.scope === \"user\" ? \"user\" : \"project\";\n const entries = readExistingMcpEntries(clients, baseDir, scope);\n\n if (parsed.url) {\n const normalizedUrl = normalizeUrl(parsed.url);\n const mcpUrl = mcpUrlForBaseUrl(normalizedUrl);\n const matches = distinctReconnectEntries(\n entries.filter((entry) => sameMcpUrl(entry.url, mcpUrl)),\n );\n\n if (matches.length === 0) {\n logErr(` No existing Agent Native MCP entry found for ${mcpUrl}.`);\n logErr(\n \" First-time setup still uses: npx @agent-native/core@latest connect <url> --client <client>\",\n );\n return null;\n }\n\n if (parsed.name) {\n const namedMatches = matches.filter(\n (entry) => entry.serverName === parsed.name,\n );\n if (namedMatches.length === 0) {\n logErr(\n ` No existing MCP entry named \"${parsed.name}\" found for ${mcpUrl}.`,\n );\n logErr(\" Re-run without --name to use the existing entry name.\");\n return null;\n }\n return {\n rawUrl: parsed.url,\n serverName: parsed.name,\n clients: uniqueClients(namedMatches),\n };\n }\n\n const key = canonicalMcpUrl(mcpUrl) ?? mcpUrl;\n const preferred = preferredReconnectEntry(key, matches);\n if (preferred) {\n const names = [...new Set(matches.map((entry) => entry.serverName))];\n if (names.length > 1) {\n logOut(\n ` Found duplicate MCP entries for ${mcpUrl}: ${names.join(\", \")}.`,\n );\n logOut(\n ` Reconnecting \"${preferred.serverName}\" and removing the duplicate names.`,\n );\n }\n return {\n rawUrl: parsed.url,\n serverName:\n reconnectServerNameForMcpUrl(mcpUrl, preferred.serverName) ??\n preferred.serverName,\n clients: uniqueClients(matches),\n };\n }\n\n const names = [...new Set(matches.map((entry) => entry.serverName))];\n if (names.length > 1) {\n logErr(\n ` Found multiple MCP entries for ${mcpUrl}: ${names.join(\", \")}.`,\n );\n logErr(\" Re-run with --name <serverName> to choose one.\");\n return null;\n }\n return {\n rawUrl: parsed.url,\n serverName: names[0],\n clients: uniqueClients(matches),\n };\n }\n\n // No URL provided: scan all configs for agent-native MCP entries by URL\n // pattern, not by server name prefix. This finds the canonical \"plan\" entry\n // (and any other custom-named entries) that the old prefix scan missed.\n const agentNativeEntries = distinctReconnectEntries(\n parsed.name\n ? entries.filter((entry) => entry.serverName === parsed.name)\n : entries.filter((entry) => isAgentNativeMcpUrl(entry.url)),\n );\n\n // Group by normalised URL so we can detect multi-app situations.\n const byUrl = new Map<string, ExistingMcpEntry[]>();\n for (const entry of agentNativeEntries) {\n const key = canonicalMcpUrl(entry.url) ?? entry.url;\n const bucket = byUrl.get(key) ?? [];\n bucket.push(entry);\n byUrl.set(key, bucket);\n }\n\n if (byUrl.size === 0) {\n logErr(\" No existing Agent Native MCP entry found to reconnect.\");\n logErr(\n \" Pass a URL, or use --name <serverName> if the entry has a custom name.\",\n );\n logErr(\n \" First-time setup still uses: npx @agent-native/core@latest connect <url> --client <client>\",\n );\n return null;\n }\n\n if (byUrl.size === 1) {\n // Exactly one distinct URL: prefer the entry whose serverName matches the\n // canonical name for this app (e.g. \"plan\" over \"agent-native-plans\").\n // Fall back to any entry whose name doesn't start with \"agent-native-\"\n // (short canonical names like \"plan\"), then bucket[0].\n const [url, bucket] = [...byUrl.entries()][0];\n const preferred = preferredReconnectEntry(url, bucket) ?? bucket[0];\n return {\n rawUrl: preferred.url,\n serverName:\n reconnectServerNameForMcpUrl(preferred.url, preferred.serverName) ??\n preferred.serverName,\n clients: uniqueClients(bucket),\n };\n }\n\n // Multiple distinct URLs: pick interactively when TTY, else list with hints.\n const urlList = [...byUrl.keys()];\n if (shouldPrompt(deps)) {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.select<\n { value: string; label: string; hint: string }[],\n string\n >({\n message:\n \"Multiple Agent Native apps found. Which one do you want to reconnect?\",\n options: urlList.map((u) => {\n const representativeEntry = byUrl.get(u)![0];\n return {\n value: u,\n label: representativeEntry.serverName,\n hint: u,\n };\n }),\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n const bucket = byUrl.get(result as string);\n const chosen = bucket\n ? (preferredReconnectEntry(result as string, bucket) ?? bucket[0])\n : undefined;\n if (!chosen || !bucket) return null;\n return {\n rawUrl: chosen.url,\n serverName:\n reconnectServerNameForMcpUrl(chosen.url, chosen.serverName) ??\n chosen.serverName,\n clients: uniqueClients(bucket),\n };\n }\n\n logErr(\" Found multiple Agent Native MCP entries:\");\n for (const [u, bucket] of byUrl) {\n logErr(` ${bucket[0].serverName} → ${u}`);\n }\n logErr(\" Re-run with a URL or --name <serverName>. For example:\");\n for (const u of urlList) {\n // Strip the MCP path suffix for a cleaner reconnect URL suggestion.\n const baseUrl = u.replace(/\\/_agent-native\\/mcp$/, \"\");\n logErr(` npx -y @agent-native/core@latest reconnect ${baseUrl}`);\n }\n return null;\n}\n\nasync function reconnectOne(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n const target = await resolveReconnectTarget(parsed, clients, deps);\n if (!target) return false;\n const effectiveParsed: ParsedConnectArgs = {\n ...parsed,\n url: target.rawUrl,\n name: target.serverName ?? parsed.name,\n };\n const effectiveClients = target.clients?.length ? target.clients : clients;\n logOut(\"\");\n logOut(\n ` Reconnecting${effectiveParsed.name ? ` \"${effectiveParsed.name}\"` : \"\"}...`,\n );\n const res = await connectOne(\n target.rawUrl,\n effectiveParsed,\n effectiveClients,\n deps,\n );\n const skippedClients = clientsNotIn(clients, effectiveClients);\n if (res.ok && skippedClients.length > 0) {\n const baseUrl = stripMcpPath(normalizeUrl(target.rawUrl));\n logOut(\"\");\n logOut(\n ` Reconnected existing client configs for ${clientLabelList(effectiveClients)}.`,\n );\n logOut(\n ` Did not touch ${clientLabelList(skippedClients)} because no matching MCP entry was found.`,\n );\n logOut(\n ` To add another client, run: npx @agent-native/core@latest connect ${baseUrl} --client CLIENT --scope ${effectiveParsed.scope}`,\n );\n }\n if (res.ok) {\n await showReconnectSuccessOutro({\n serverName: res.serverName ?? effectiveParsed.name,\n clients: effectiveClients,\n });\n }\n return res.ok;\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 let oauthClients = parsed.token\n ? []\n : clients.filter((client) => supportsRemoteMcpOAuth(client));\n let 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 { fullCatalog: parsed.fullCatalog },\n );\n if (!grant) return { ok: false };\n token = grant.token;\n mcpUrl = grant.mcpUrl;\n serverName =\n parsed.name ??\n reconnectServerNameForMcpUrl(grant.mcpUrl, grant.serverName) ??\n grant.serverName ??\n defaultServerName(baseUrl);\n headers = grant.headers;\n }\n\n if (oauthClients.length > 0 && !parsed.token) {\n if (!(await validateOAuthMcpServer(baseUrl, mcpUrl, deps))) {\n if (parsed.mode !== \"reconnect\") {\n return { ok: false };\n }\n\n logOut(\"\");\n logOut(\n ` OAuth metadata was unavailable; falling back to bearer-token reconnect for ${clientLabelList(\n oauthClients,\n )}.`,\n );\n\n if (!token) {\n const grant = await runDeviceFlow(\n baseUrl,\n appSlug,\n clientArgForDeviceFlow(oauthClients),\n deps,\n { fullCatalog: parsed.fullCatalog },\n );\n if (!grant) return { ok: false };\n token = grant.token;\n mcpUrl = grant.mcpUrl;\n serverName =\n parsed.name ??\n reconnectServerNameForMcpUrl(grant.mcpUrl, grant.serverName) ??\n grant.serverName ??\n defaultServerName(baseUrl);\n headers = grant.headers;\n }\n\n deviceFlowClients = [...deviceFlowClients, ...oauthClients];\n oauthClients = [];\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 // After writing the canonical entry, remove any same-URL duplicates (alias\n // names, legacy default names, stale custom names) from the same config\n // files so each app has exactly one MCP session.\n const allRemovedNames: string[] = [];\n for (const client of clients) {\n const removed = removeSameUrlDuplicatesForClient(\n client,\n serverName,\n mcpUrl,\n baseDir,\n scope,\n );\n allRemovedNames.push(...removed);\n }\n if (allRemovedNames.length > 0) {\n logOut(\n ` Removed duplicate MCP entries: ${[...new Set(allRemovedNames)].join(\", \")}`,\n );\n }\n\n // Canonical publish-token write: when we have a real minted bearer token for\n // a first-party Plans app, also persist `{ url, token }` to\n // `~/.agent-native/plan-publish.json` so the local Plans server can read the\n // same token for a server-to-server publish (publish-on-share). This is an\n // ADDITIONAL write alongside the per-client MCP config; Best-effort and\n // merge-not-clobber — never fails the connect.\n //\n // OAuth clients authenticate in-host via standard MCP OAuth, so they never\n // mint a local bearer token. To still populate the publish store for them, we\n // run a supplemental device-flow mint using a non-OAuth client arg so the\n // Plans server gets a usable token and `publish-visual-plan` doesn't send the\n // user back to `agent-native connect` right after they just ran it.\n let publishToken = token;\n if (\n !publishToken &&\n oauthClients.length > 0 &&\n isFirstPartyPlanHost(baseUrl)\n ) {\n try {\n logOut(\"\");\n logOut(\n ` Minting a publish token for the local Plans server (device flow)…`,\n );\n const grant = await runDeviceFlow(\n baseUrl,\n appSlug,\n // Use a non-OAuth client arg so the server mints a bearer token even\n // though our primary clients are OAuth-native. \"codex\" is a stable,\n // always-supported non-OAuth client identifier.\n \"codex\",\n deps,\n );\n if (grant?.token) {\n publishToken = grant.token;\n } else {\n logOut(\n ` Warning: could not mint a publish token for the local Plans ` +\n `server. You can still publish via the hosted UI.`,\n );\n }\n } catch {\n logOut(\n ` Warning: publish-token mint failed. You can still publish via the ` +\n `hosted UI.`,\n );\n }\n }\n if (publishToken && isFirstPartyPlanHost(baseUrl)) {\n const canonicalPath = writePlanPublishAuth({\n url: baseUrl,\n token: publishToken,\n });\n if (canonicalPath) {\n logOut(\"\");\n logOut(\n ` Saved publish token for the local Plans server → ${canonicalPath}`,\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 logOut(\n ` Auth/config is per client: this command updated ${clientLabelList(clients)} only.`,\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 for (const line of oauthNextStepsForClients(oauthClients, serverName)) {\n logOut(` Next: ${line}`);\n }\n }\n logOut(\"\");\n logOut(\n ` Restart or reload ${sentenceClientLabelList(clients)} to pick up the new MCP server.`,\n );\n if (clients.includes(\"codex\")) {\n logOut(\n \" Codex sessions load MCP tools at startup; start a new Codex session if the tools are still missing.\",\n );\n }\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// Org service-token mint (--service-token <name>)\n// ---------------------------------------------------------------------------\n\n/** `postJson` with a bearer Authorization header (action-route calls). */\nasync function postJsonAuthed(\n fetchImpl: typeof fetch,\n url: string,\n body: unknown,\n bearerToken: string,\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: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${bearerToken}`,\n },\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\n/**\n * `agent-native connect <url> --service-token <name>` — mint an ORG service\n * token for CI (e.g. the PLAN_RECAP_TOKEN GitHub secret).\n *\n * Flow: authenticate the human via the existing browser device flow, then use\n * that short-lived grant to call the app's `create-org-service-token` action\n * (org owner/admin gated server-side). The service token is printed exactly\n * once and never written to any local config file.\n */\nexport async function runServiceTokenMint(\n parsed: ParsedConnectArgs,\n deps: ConnectDeps = {},\n): Promise<boolean> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const serviceName = parsed.serviceToken?.trim() ?? \"\";\n if (!parsed.url) {\n logErr(\" --service-token requires the app URL.\");\n logErr(\n \" Usage: npx @agent-native/core@latest connect <url> --service-token <name> [--ttl-days <1-365>]\",\n );\n return false;\n }\n if (!serviceName) {\n logErr(\n \" --service-token requires a service name, e.g. --service-token ci\",\n );\n return false;\n }\n\n const normalizedUrl = normalizeUrl(parsed.url);\n const baseUrl = stripMcpPath(normalizedUrl);\n const appSlug = appSlugFromUrl(baseUrl);\n\n logOut(\"\");\n logOut(` Creating org service token \"${serviceName}\" on ${baseUrl}`);\n logOut(\" First, verify it's you (the token will belong to your org)…\");\n\n // Use a non-OAuth client arg so the server mints a bearer grant we can use\n // against the action route (same approach as the Plans publish-token mint).\n const grant = await runDeviceFlow(baseUrl, appSlug, \"codex\", deps);\n if (!grant?.token) {\n logErr(\" Could not authenticate (the server returned no bearer token).\");\n logErr(\" Org service tokens require a deployed app with auth configured.\");\n return false;\n }\n\n let status: number;\n let json: any;\n try {\n ({ status, json } = await postJsonAuthed(\n fetchImpl,\n `${baseUrl}/_agent-native/actions/create-org-service-token`,\n {\n name: serviceName,\n ...(Number.isFinite(parsed.ttlDays) && parsed.ttlDays\n ? { ttlDays: parsed.ttlDays }\n : {}),\n },\n grant.token,\n ));\n } catch (err: any) {\n logErr(` Could not reach ${baseUrl} (${err?.message ?? err}).`);\n return false;\n }\n\n if (status === 404) {\n logErr(\n \" This app does not expose the create-org-service-token action yet.\",\n );\n logErr(\" Redeploy it with a current @agent-native/core, then retry.\");\n return false;\n }\n if (status < 200 || status >= 300 || typeof json?.token !== \"string\") {\n logErr(\n ` Could not create the service token (HTTP ${status}): ` +\n responseMessage(json, \"server returned an error.\"),\n );\n if (status === 403) {\n logErr(\" Only org owners or admins can create service tokens.\");\n }\n return false;\n }\n\n logOut(\"\");\n logOut(\" Org service token created.\");\n logOut(\"\");\n logOut(` Name: ${json.serviceName ?? serviceName}`);\n if (typeof json.serviceEmail === \"string\") {\n logOut(` Acts as: ${json.serviceEmail}`);\n }\n if (Number.isFinite(Number(json.ttlDays))) {\n logOut(` Expires: in ${json.ttlDays} days`);\n }\n logOut(\"\");\n // The ONLY place the secret is ever printed. Never logged elsewhere,\n // never written to disk.\n logOut(` ${json.token}`);\n logOut(\"\");\n logOut(\" Shown once — store it now as your CI secret, e.g.:\");\n logOut(` gh secret set PLAN_RECAP_TOKEN --body \"<paste token>\"`);\n logOut(\"\");\n logOut(\n \" Manage it later with the list-org-service-tokens / \" +\n \"revoke-org-service-token actions (org owners/admins).\",\n );\n return true;\n}\n\n// ---------------------------------------------------------------------------\n// Entry point\n// ---------------------------------------------------------------------------\n\nconst HELP = `npx @agent-native/core@latest connect — wire your coding agent to a deployed app\n\nUsage:\n npx @agent-native/core@latest 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 npx @agent-native/core@latest connect <url> [--client <c>] [--scope user|project] [--name <n>]\n Writes the HTTP MCP entry into your selected client config(s). Claude\n Code, Cursor, OpenCode, and GitHub Copilot / VS Code use standard remote\n MCP OAuth and get URL-only config. 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 Auth is stored per client config/session; restart or reload each selected\n client before expecting new tools to appear.\n Re-running over an older OAuth-capable bearer entry upgrades it to\n URL-only OAuth config and prompts you to authenticate in that host.\n\n For cross-app access, prefer the unified Dispatch gateway:\n npx @agent-native/core@latest connect https://dispatch.agent-native.com\n\n npx @agent-native/core@latest 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 npx @agent-native/core@latest connect <url> --service-token <name> [--ttl-days <1-365>]\n Mint an ORG service token for CI (e.g. the PLAN_RECAP_TOKEN secret for\n PR Visual Recap). Authenticates you via the browser device flow, then\n mints a token owned by your ORGANIZATION — it keeps working if you\n leave or revoke your personal tokens, and CI-created plans are\n org-visible. Org owner/admin only. Printed once; nothing is written\n to local MCP configs.\n\n npx -y @agent-native/core@latest reconnect [<url>] [--client <c>] [--scope user|project]\n npx -y @agent-native/core@latest connect reconnect [<url>] [--client <c>] [--scope user|project]\n Re-authenticate an existing MCP entry without reinstalling apps/skills.\n With a URL, it reuses the existing server name for that MCP URL when\n possible, reconnecting only clients that already have that entry. Pass\n --client to limit which configs it searches; for Codex recovery, prefer\n --client codex. Without a URL, it reconnects the only matching Agent\n Native entry in local client configs. Use --name for custom server names.\n\n npx @agent-native/core@latest connect --all [--client <c>] [--scope user|project]\n Connect every first-party hosted app as separate MCP resources.\n\nDeveloper:\n npx @agent-native/core@latest 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 npx @agent-native/core@latest 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, cursor, opencode, github-copilot\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 const previousLogOut = logOutImpl;\n const previousLogErr = logErrImpl;\n logOutImpl = deps.logOut ?? previousLogOut;\n logErrImpl = deps.logErr ?? previousLogErr;\n try {\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 if (parsed.mode) {\n let ok: boolean;\n if (parsed.mode === \"reconnect\" || parsed.mode === \"reauth\") {\n const clients = resolveClients(parsed.client);\n ok = await reconnectOne(parsed, clients, deps);\n } else {\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n ok =\n parsed.mode === \"dev\"\n ? await connectDevProfile(parsed, clients, deps)\n : await connectProdProfile(parsed, clients, deps);\n }\n if (!ok) process.exitCode = 1;\n return;\n }\n\n if (parsed.serviceToken !== undefined) {\n const ok = await runServiceTokenMint(parsed, 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 } finally {\n logOutImpl = previousLogOut;\n logErrImpl = previousLogErr;\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 MCP-capable coding agent\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|\n * codex|cowork|cursor|opencode|github-copilot]\n * [--scope user|project]\n * [--name <serverName>]\n * agent-native reconnect [<url>] [--client ...] [--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 jsonMcpConfigKeyForClient,\n removeSameUrlDuplicatesForClient,\n writeCodexBlock,\n writeHttpEntryForClient,\n writeJsonMcpEntryForClient,\n} from \"./mcp-config-writers.js\";\nimport {\n isFirstPartyPlanHost,\n writePlanPublishAuth,\n} from \"./plan-publish-store.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;\n\n/**\n * Maps a normalised hosted MCP URL to the canonical server name for that\n * first-party app. Kept in sync with BUILT_IN_APP_SKILLS in skills.ts (we\n * cannot import from there — it imports connect.ts, which would be circular).\n */\nconst CANONICAL_SERVER_NAME_BY_MCP_URL: Readonly<Record<string, string>> = {\n \"https://plan.agent-native.com/_agent-native/mcp\": \"plan\",\n \"https://assets.agent-native.com/_agent-native/mcp\": \"agent-native-assets\",\n \"https://design.agent-native.com/_agent-native/mcp\": \"agent-native-design\",\n \"https://context-xray.agent-native.com/_agent-native/mcp\":\n \"agent-native-context-xray\",\n};\nconst LEGACY_SERVER_NAMES_BY_MCP_URL: Readonly<\n Record<string, readonly string[]>\n> = {\n \"https://plan.agent-native.com/_agent-native/mcp\": [\n \"agent-native-plan\",\n \"agent-native-plans\",\n \"agent-native-visual-plans\",\n ],\n};\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 cursor: \"Cursor\",\n opencode: \"OpenCode\",\n \"github-copilot\": \"GitHub Copilot / VS Code\",\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 cursor: \".cursor/mcp.json or ~/.cursor/mcp.json\",\n opencode: \"opencode.json or ~/.config/opencode/opencode.json\",\n \"github-copilot\": \".vscode/mcp.json or VS Code user mcp.json\",\n};\n\nconst REMOTE_MCP_OAUTH_CLIENTS = new Set<ClientId>([\n \"claude-code\",\n \"claude-code-cli\",\n \"cursor\",\n \"opencode\",\n \"github-copilot\",\n]);\n\nlet logOutImpl = (msg: string) => process.stdout.write(`${msg}\\n`);\nlet logErrImpl = (msg: string) => process.stderr.write(`${msg}\\n`);\n\nfunction logOut(msg: string): void {\n logOutImpl(msg);\n}\nfunction logErr(msg: string): void {\n logErrImpl(msg);\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\" | \"reauth\" | \"reconnect\";\n /** Positional URL (the deployed app origin). Undefined for `--all`. */\n url?: string;\n /** all | claude-code | codex | cowork | cursor | opencode | github-copilot (default \"all\"). claude-code-cli is accepted as a legacy alias for claude-code. */\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 /**\n * Mint an ORG SERVICE token with this service name (e.g. \"ci\") instead of\n * writing local MCP configs. Authenticates the human via the device flow,\n * then calls the app's `create-org-service-token` action and prints the\n * token once — for CI secrets like PLAN_RECAP_TOKEN.\n */\n serviceToken?: string;\n /** Optional token TTL in days (1–365) for --service-token. */\n ttlDays?: number;\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 * Embed `catalog_scope: \"full\"` in the minted token so the connected client\n * bypasses the connector-catalog tier and sees the complete action surface.\n * Matches the `fullCatalog` body param on the app's token-mint route.\n */\n fullCatalog?: boolean;\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(\"--service-token\")) !== undefined) out.serviceToken = v;\n else if ((v = eat(\"--ttl-days\")) !== undefined) out.ttlDays = Number(v);\n else if ((v = eat(\"--token\")) !== undefined) out.token = v;\n else if (a === \"--full-catalog\") out.fullCatalog = true;\n else if (!a.startsWith(\"-\") && !out.url) {\n if (\n !out.mode &&\n (a === \"dev\" || a === \"prod\" || a === \"reauth\" || a === \"reconnect\")\n ) {\n 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(\n \"Missing app URL. Usage: npx @agent-native/core@latest connect <url>\",\n );\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 `npx @agent-native/core@latest 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// Clients offered in the interactive picker and expanded by \"all\". Excludes\n// the `claude-code-cli` alias so users only ever see a single \"Claude Code\"\n// option (it still works if passed explicitly via --client).\nconst SELECTABLE_CLIENTS: ClientId[] = CLIENTS.filter(\n (c) => c !== \"claude-code-cli\",\n);\n\n/** Resolve the requested clients list. \"all\" → every supported client. */\nexport function resolveClients(client: string): ClientId[] {\n const c = normalizeClientAlias(client ?? \"all\");\n if (c === \"all\" || c === \"\") return [...SELECTABLE_CLIENTS];\n if (c.includes(\",\")) {\n const clients = normalizeClientIds(c.split(\",\").map((part) => part.trim()));\n if (clients.length > 0) return clients;\n }\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\nfunction normalizeClientAlias(value: string): string {\n const id = value.trim().toLowerCase();\n // The Claude Code CLI and desktop share ~/.claude.json, so they are one\n // client. `claude-code-cli` stays accepted for back-compat but collapses to\n // the single \"Claude Code\" option everywhere it surfaces.\n if (\n id === \"claude\" ||\n id === \"claude-code-desktop\" ||\n id === \"claude-code-cli\"\n )\n return \"claude-code\";\n if (id === \"copilot\" || id === \"vscode\" || id === \"vs-code\") {\n return \"github-copilot\";\n }\n return id;\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 = normalizeClientAlias(value);\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 SELECTABLE_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\nfunction sentenceClientLabelList(clients: ClientId[]): string {\n const labels = clients.map((client) => CLIENT_LABELS[client]);\n if (labels.length <= 1) return labels[0] ?? \"\";\n if (labels.length === 2) return `${labels[0]} and ${labels[1]}`;\n return `${labels.slice(0, -1).join(\", \")}, and ${labels[labels.length - 1]}`;\n}\n\nfunction oauthNextStepsForClients(\n clients: ClientId[],\n serverName?: string,\n): string[] {\n const lines: string[] = [];\n if (clients.includes(\"claude-code\") || clients.includes(\"claude-code-cli\")) {\n lines.push(\n \"Claude Code: restart Claude Code, run /mcp, and choose Authenticate.\",\n );\n }\n if (clients.includes(\"cursor\")) {\n lines.push(\n \"Cursor: restart or reload Cursor, then authenticate the MCP server from Cursor MCP settings if prompted.\",\n );\n }\n if (clients.includes(\"opencode\")) {\n lines.push(\n `OpenCode: run opencode mcp auth ${serverName ?? \"<server-name>\"} or authenticate on first use.`,\n );\n }\n if (clients.includes(\"github-copilot\")) {\n lines.push(\n \"GitHub Copilot / VS Code: reload VS Code, open the MCP config, and use the Auth action above the server if prompted.\",\n );\n }\n return lines;\n}\n\nfunction clientsNotIn(\n requestedClients: ClientId[],\n effectiveClients: ClientId[],\n): ClientId[] {\n const effective = new Set(effectiveClients);\n return requestedClients.filter((client) => !effective.has(client));\n}\n\nfunction displayMcpServerName(serverName: string | undefined): string {\n if (!serverName) return \"Agent Native MCP\";\n if (serverName === \"plan\") return \"Plan MCP\";\n return `\"${serverName}\" MCP`;\n}\n\nasync function showReconnectSuccessOutro({\n serverName,\n clients,\n}: {\n serverName: string | undefined;\n clients: ClientId[];\n}): Promise<void> {\n const lines = [`✅ Reconnected ${displayMcpServerName(serverName)}.`];\n if (clients.includes(\"codex\")) {\n lines.push(\n \"Codex: start a new Codex session now; the MCP tools should be available there.\",\n );\n }\n const oauthClients = clients.filter((client) =>\n supportsRemoteMcpOAuth(client),\n );\n if (oauthClients.length > 0) {\n lines.push(...oauthNextStepsForClients(oauthClients, serverName));\n }\n if (!clients.includes(\"codex\") && oauthClients.length === 0) {\n lines.push(\n `Restart or reload ${sentenceClientLabelList(\n clients,\n )} before using the MCP tools.`,\n );\n }\n\n const message = lines.join(\"\\n\");\n try {\n const clack = await import(\"@clack/prompts\");\n clack.outro(message);\n } catch {\n logOut(\"\");\n for (const line of lines) logOut(` ${line}`);\n }\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 const canonical = canonicalServerNameForMcpUrl(mcpUrlForBaseUrl(url));\n if (canonical) return canonical;\n return `${SERVER_NAME_PREFIX}-${appSlugFromUrl(url)}`;\n}\n\nfunction canonicalServerNameForMcpUrl(\n mcpUrl: string | undefined,\n): string | undefined {\n const key = canonicalMcpUrl(mcpUrl);\n return key ? CANONICAL_SERVER_NAME_BY_MCP_URL[key] : undefined;\n}\n\nfunction reconnectServerNameForMcpUrl(\n mcpUrl: string | undefined,\n serverName: string | undefined,\n): string | undefined {\n const key = canonicalMcpUrl(mcpUrl);\n if (!key || !serverName) return serverName;\n const canonical = CANONICAL_SERVER_NAME_BY_MCP_URL[key];\n if (!canonical || serverName === canonical) return serverName;\n const legacyNames = LEGACY_SERVER_NAMES_BY_MCP_URL[key] ?? [];\n return legacyNames.includes(serverName) ? canonical : serverName;\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 /** Optional output hooks used when another clack-based command embeds connect. */\n logOut?: (message: string) => void;\n logErr?: (message: string) => void;\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 sleep = deps.sleep ?? realSleep;\n const metadataUrl = `${baseUrl}/.well-known/oauth-protected-resource`;\n let lastFailure = \"\";\n\n for (let attempt = 0; attempt < 2; attempt++) {\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 lastFailure = `HTTP ${response.status}`;\n } else {\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 }\n } catch (err: any) {\n lastFailure = err?.message ?? String(err);\n } finally {\n clearTimeout(timeout);\n }\n\n if (attempt === 0) await sleep(500);\n }\n\n logErr(\n ` Could not validate OAuth MCP support at ${metadataUrl}` +\n (lastFailure ? ` (${lastFailure}).` : \".\"),\n );\n return false;\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 options: { fullCatalog?: boolean } = {},\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 | null = null;\n // A cold/propagating Plan instance can briefly 404/5xx before its connect\n // route is registered (async plugin init). Retry a few times so a recoverable\n // blip doesn't kill the connect before polling even begins.\n const START_ATTEMPTS = 4;\n for (let attempt = 0; attempt < START_ATTEMPTS; attempt++) {\n try {\n const { status, json } = await postJson(\n fetchImpl,\n `${baseUrl}${DEVICE_START_PATH}`,\n {\n client: clientArg,\n app: appSlug,\n ...(options.fullCatalog ? { fullCatalog: true } : {}),\n },\n );\n if (status >= 200 && status < 300 && json?.device_code) {\n start = json as DeviceStartResponse;\n break;\n }\n if ((status === 404 || status >= 500) && attempt < START_ATTEMPTS - 1) {\n await sleep(1000 * (attempt + 1));\n continue;\n }\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 } catch (err: any) {\n if (attempt < START_ATTEMPTS - 1) {\n await sleep(1000 * (attempt + 1));\n continue;\n }\n logErr(\n ` Could not reach ${baseUrl} (${err?.message ?? err}). ` +\n `Check the URL and your network.`,\n );\n return null;\n }\n }\n if (!start) return null;\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 let transientStreak = 0;\n // Ride out brief cold-instance blips, but don't poll a persistently-dead\n // endpoint forever: give up after this many consecutive transient (404/5xx\n // or network-error) polls. Reset as soon as one poll responds normally.\n const MAX_TRANSIENT_POLLS = 20;\n const isTTY = !!process.stdout.isTTY;\n while (now() < deadline) {\n let poll: DevicePollResponse;\n let transient = false;\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 (isTerminalPollBody(json)) {\n poll = json as DevicePollResponse;\n } else if (status === 404 || status >= 500) {\n // Transient: a cold/propagating Plan instance can briefly serve a\n // bare 404 (the MCP route isn't registered until async plugin init\n // settles) or a 5xx before it's healthy. The next poll usually lands\n // on a warm instance, so keep polling until the deadline instead of\n // hard-failing the whole connect on a recoverable blip. (This is the\n // recurring \"Cannot find any route matching [POST] .../mcp\" case.)\n poll = { status: \"pending\" };\n transient = true;\n } else {\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 } else {\n poll = (json ?? { status: \"pending\" }) as DevicePollResponse;\n }\n } catch {\n // Transient network error — keep polling.\n poll = { status: \"pending\" };\n transient = true;\n }\n\n if (transient) {\n if (++transientStreak > MAX_TRANSIENT_POLLS) {\n if (isTTY) process.stdout.write(\"\\r\\x1b[K\");\n logErr(\n \" Connect endpoint is not responding (repeated 404/5xx). It may be \" +\n \"mid-deploy — wait a minute and run the command again.\",\n );\n return null;\n }\n } else {\n transientStreak = 0;\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\nfunction isTerminalPollBody(json: any): boolean {\n return (\n json?.status === \"not_found\" ||\n json?.status === \"error\" ||\n json?.status === \"expired\" ||\n json?.status === \"consumed\"\n );\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 client: ClientId,\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?.[jsonMcpConfigKeyForClient(client)]?.[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(client, 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 writeJsonMcpEntryForClient(client, 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\ninterface ExistingMcpEntry {\n client: ClientId;\n serverName: string;\n file: string;\n saved: SavedMcpEntry;\n url: string;\n}\n\nfunction readJsonMcpServerEntries(\n client: ClientId,\n file: string,\n): { serverName: string; saved: SavedMcpEntry }[] {\n try {\n const parsed = JSON.parse(fs.readFileSync(file, \"utf-8\"));\n const servers = parsed?.[jsonMcpConfigKeyForClient(client)];\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n return [];\n }\n return Object.entries(servers).flatMap(([serverName, entry]) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n return [];\n }\n return [\n {\n serverName,\n saved: {\n kind: \"json\" as const,\n entry: entry as Record<string, unknown>,\n savedAt: new Date().toISOString(),\n },\n },\n ];\n });\n } catch {\n return [];\n }\n}\n\nfunction parseCodexMcpServerName(line: string): string | undefined {\n const trimmed = line.trim();\n const quoted = trimmed.match(/^\\[mcp_servers\\.\"((?:\\\\.|[^\"])*)\"\\]$/);\n if (quoted) return unescapeTomlString(quoted[1]);\n const bare = trimmed.match(/^\\[mcp_servers\\.([A-Za-z0-9_-]+)\\]$/);\n return bare?.[1];\n}\n\nfunction readCodexMcpServerEntries(\n file: string,\n): { serverName: string; saved: SavedMcpEntry }[] {\n let content = \"\";\n try {\n content = fs.readFileSync(file, \"utf-8\");\n } catch {\n return [];\n }\n const lines = content.split(/\\r?\\n/);\n const entries: { serverName: string; saved: SavedMcpEntry }[] = [];\n for (let i = 0; i < lines.length; i++) {\n const serverName = parseCodexMcpServerName(lines[i]);\n if (!serverName) 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 i--;\n entries.push({\n serverName,\n saved: {\n kind: \"codex\",\n block: block.join(\"\\n\").replace(/\\n*$/, \"\") + \"\\n\",\n savedAt: new Date().toISOString(),\n },\n });\n }\n return entries;\n}\n\nfunction readExistingMcpEntries(\n clients: ClientId[],\n baseDir: string,\n scope: string,\n): ExistingMcpEntry[] {\n const entries: ExistingMcpEntry[] = [];\n for (const client of clients) {\n const file = configPathFor(client, baseDir, scope);\n const rawEntries =\n client === \"codex\"\n ? readCodexMcpServerEntries(file)\n : readJsonMcpServerEntries(client, file);\n for (const { serverName, saved } of rawEntries) {\n const url = savedEntryUrl(saved);\n if (!url) continue;\n entries.push({ client, serverName, file, saved, url });\n }\n }\n return entries;\n}\n\nfunction canonicalMcpUrl(value: string | undefined): string | undefined {\n if (!value) return undefined;\n try {\n const url = new URL(value);\n url.hash = \"\";\n return url.toString().replace(/\\/+$/, \"\");\n } catch {\n return undefined;\n }\n}\n\nfunction sameMcpUrl(a: string | undefined, b: string | undefined): boolean {\n const left = canonicalMcpUrl(a);\n const right = canonicalMcpUrl(b);\n return !!left && !!right && left === right;\n}\n\nfunction savedEntryHeaders(\n saved: SavedMcpEntry | undefined,\n): Record<string, string> {\n if (!saved) return {};\n if (saved.kind === \"json\") {\n const headers =\n saved.entry.headers ??\n (saved.entry.requestInit &&\n typeof saved.entry.requestInit === \"object\" &&\n !Array.isArray(saved.entry.requestInit)\n ? (saved.entry.requestInit as Record<string, unknown>).headers\n : undefined);\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 // Local dev defaults to the compact/connector catalog + tool-search, same as\n // every other client. The local server still honors AGENT_NATIVE_MCP_FULL_CATALOG=1\n // for an explicit full-catalog opt-in, so we don't force the header here.\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: npx @agent-native/core@latest 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\ninterface ReconnectTarget {\n rawUrl: string;\n serverName?: string;\n clients?: ClientId[];\n}\n\nfunction distinctReconnectEntries(\n entries: ExistingMcpEntry[],\n): ExistingMcpEntry[] {\n const seen = new Set<string>();\n const out: ExistingMcpEntry[] = [];\n for (const entry of entries) {\n const key = `${entry.serverName}\\0${canonicalMcpUrl(entry.url) ?? entry.url}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(entry);\n }\n return out;\n}\n\nfunction uniqueClients(entries: ExistingMcpEntry[]): ClientId[] {\n return [...new Set(entries.map((entry) => entry.client))];\n}\n\nfunction preferredReconnectEntry(\n url: string,\n entries: ExistingMcpEntry[],\n): ExistingMcpEntry | undefined {\n const canonicalName = CANONICAL_SERVER_NAME_BY_MCP_URL[url];\n return (\n (canonicalName\n ? entries.find((entry) => entry.serverName === canonicalName)\n : undefined) ??\n entries.find((entry) => !entry.serverName.startsWith(\"agent-native-\")) ??\n entries[0]\n );\n}\n\n/**\n * Return true when `url` is an agent-native MCP endpoint.\n * Matches any URL whose path ends with `/_agent-native/mcp` (after stripping\n * trailing slashes), regardless of the MCP server's name in the config.\n */\nfunction isAgentNativeMcpUrl(url: string | undefined): boolean {\n if (!url) return false;\n try {\n const pathname = new URL(url).pathname.replace(/\\/+$/, \"\");\n return pathname === MCP_PATH || pathname.endsWith(MCP_PATH);\n } catch {\n return false;\n }\n}\n\nasync function resolveReconnectTarget(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<ReconnectTarget | null> {\n const baseDir = projectBaseDir();\n const scope = parsed.scope === \"user\" ? \"user\" : \"project\";\n const entries = readExistingMcpEntries(clients, baseDir, scope);\n\n if (parsed.url) {\n const normalizedUrl = normalizeUrl(parsed.url);\n const mcpUrl = mcpUrlForBaseUrl(normalizedUrl);\n const matches = distinctReconnectEntries(\n entries.filter((entry) => sameMcpUrl(entry.url, mcpUrl)),\n );\n\n if (matches.length === 0) {\n logErr(` No existing Agent Native MCP entry found for ${mcpUrl}.`);\n logErr(\n \" First-time setup still uses: npx @agent-native/core@latest connect <url> --client <client>\",\n );\n return null;\n }\n\n if (parsed.name) {\n const namedMatches = matches.filter(\n (entry) => entry.serverName === parsed.name,\n );\n if (namedMatches.length === 0) {\n logErr(\n ` No existing MCP entry named \"${parsed.name}\" found for ${mcpUrl}.`,\n );\n logErr(\" Re-run without --name to use the existing entry name.\");\n return null;\n }\n return {\n rawUrl: parsed.url,\n serverName: parsed.name,\n clients: uniqueClients(namedMatches),\n };\n }\n\n const key = canonicalMcpUrl(mcpUrl) ?? mcpUrl;\n const preferred = preferredReconnectEntry(key, matches);\n if (preferred) {\n const names = [...new Set(matches.map((entry) => entry.serverName))];\n if (names.length > 1) {\n logOut(\n ` Found duplicate MCP entries for ${mcpUrl}: ${names.join(\", \")}.`,\n );\n logOut(\n ` Reconnecting \"${preferred.serverName}\" and removing the duplicate names.`,\n );\n }\n return {\n rawUrl: parsed.url,\n serverName:\n reconnectServerNameForMcpUrl(mcpUrl, preferred.serverName) ??\n preferred.serverName,\n clients: uniqueClients(matches),\n };\n }\n\n const names = [...new Set(matches.map((entry) => entry.serverName))];\n if (names.length > 1) {\n logErr(\n ` Found multiple MCP entries for ${mcpUrl}: ${names.join(\", \")}.`,\n );\n logErr(\" Re-run with --name <serverName> to choose one.\");\n return null;\n }\n return {\n rawUrl: parsed.url,\n serverName: names[0],\n clients: uniqueClients(matches),\n };\n }\n\n // No URL provided: scan all configs for agent-native MCP entries by URL\n // pattern, not by server name prefix. This finds the canonical \"plan\" entry\n // (and any other custom-named entries) that the old prefix scan missed.\n const agentNativeEntries = distinctReconnectEntries(\n parsed.name\n ? entries.filter((entry) => entry.serverName === parsed.name)\n : entries.filter((entry) => isAgentNativeMcpUrl(entry.url)),\n );\n\n // Group by normalised URL so we can detect multi-app situations.\n const byUrl = new Map<string, ExistingMcpEntry[]>();\n for (const entry of agentNativeEntries) {\n const key = canonicalMcpUrl(entry.url) ?? entry.url;\n const bucket = byUrl.get(key) ?? [];\n bucket.push(entry);\n byUrl.set(key, bucket);\n }\n\n if (byUrl.size === 0) {\n logErr(\" No existing Agent Native MCP entry found to reconnect.\");\n logErr(\n \" Pass a URL, or use --name <serverName> if the entry has a custom name.\",\n );\n logErr(\n \" First-time setup still uses: npx @agent-native/core@latest connect <url> --client <client>\",\n );\n return null;\n }\n\n if (byUrl.size === 1) {\n // Exactly one distinct URL: prefer the entry whose serverName matches the\n // canonical name for this app (e.g. \"plan\" over \"agent-native-plans\").\n // Fall back to any entry whose name doesn't start with \"agent-native-\"\n // (short canonical names like \"plan\"), then bucket[0].\n const [url, bucket] = [...byUrl.entries()][0];\n const preferred = preferredReconnectEntry(url, bucket) ?? bucket[0];\n return {\n rawUrl: preferred.url,\n serverName:\n reconnectServerNameForMcpUrl(preferred.url, preferred.serverName) ??\n preferred.serverName,\n clients: uniqueClients(bucket),\n };\n }\n\n // Multiple distinct URLs: pick interactively when TTY, else list with hints.\n const urlList = [...byUrl.keys()];\n if (shouldPrompt(deps)) {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.select<\n { value: string; label: string; hint: string }[],\n string\n >({\n message:\n \"Multiple Agent Native apps found. Which one do you want to reconnect?\",\n options: urlList.map((u) => {\n const representativeEntry = byUrl.get(u)![0];\n return {\n value: u,\n label: representativeEntry.serverName,\n hint: u,\n };\n }),\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Cancelled.\");\n return null;\n }\n const bucket = byUrl.get(result as string);\n const chosen = bucket\n ? (preferredReconnectEntry(result as string, bucket) ?? bucket[0])\n : undefined;\n if (!chosen || !bucket) return null;\n return {\n rawUrl: chosen.url,\n serverName:\n reconnectServerNameForMcpUrl(chosen.url, chosen.serverName) ??\n chosen.serverName,\n clients: uniqueClients(bucket),\n };\n }\n\n logErr(\" Found multiple Agent Native MCP entries:\");\n for (const [u, bucket] of byUrl) {\n logErr(` ${bucket[0].serverName} → ${u}`);\n }\n logErr(\" Re-run with a URL or --name <serverName>. For example:\");\n for (const u of urlList) {\n // Strip the MCP path suffix for a cleaner reconnect URL suggestion.\n const baseUrl = u.replace(/\\/_agent-native\\/mcp$/, \"\");\n logErr(` npx -y @agent-native/core@latest reconnect ${baseUrl}`);\n }\n return null;\n}\n\nasync function reconnectOne(\n parsed: ParsedConnectArgs,\n clients: ClientId[],\n deps: ConnectDeps,\n): Promise<boolean> {\n const target = await resolveReconnectTarget(parsed, clients, deps);\n if (!target) return false;\n const effectiveParsed: ParsedConnectArgs = {\n ...parsed,\n url: target.rawUrl,\n name: target.serverName ?? parsed.name,\n };\n const effectiveClients = target.clients?.length ? target.clients : clients;\n logOut(\"\");\n logOut(\n ` Reconnecting${effectiveParsed.name ? ` \"${effectiveParsed.name}\"` : \"\"}...`,\n );\n const res = await connectOne(\n target.rawUrl,\n effectiveParsed,\n effectiveClients,\n deps,\n );\n const skippedClients = clientsNotIn(clients, effectiveClients);\n if (res.ok && skippedClients.length > 0) {\n const baseUrl = stripMcpPath(normalizeUrl(target.rawUrl));\n logOut(\"\");\n logOut(\n ` Reconnected existing client configs for ${clientLabelList(effectiveClients)}.`,\n );\n logOut(\n ` Did not touch ${clientLabelList(skippedClients)} because no matching MCP entry was found.`,\n );\n logOut(\n ` To add another client, run: npx @agent-native/core@latest connect ${baseUrl} --client CLIENT --scope ${effectiveParsed.scope}`,\n );\n }\n if (res.ok) {\n await showReconnectSuccessOutro({\n serverName: res.serverName ?? effectiveParsed.name,\n clients: effectiveClients,\n });\n }\n return res.ok;\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 let oauthClients = parsed.token\n ? []\n : clients.filter((client) => supportsRemoteMcpOAuth(client));\n let 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 { fullCatalog: parsed.fullCatalog },\n );\n if (!grant) return { ok: false };\n token = grant.token;\n mcpUrl = grant.mcpUrl;\n serverName =\n parsed.name ??\n reconnectServerNameForMcpUrl(grant.mcpUrl, grant.serverName) ??\n grant.serverName ??\n defaultServerName(baseUrl);\n headers = grant.headers;\n }\n\n if (oauthClients.length > 0 && !parsed.token) {\n if (!(await validateOAuthMcpServer(baseUrl, mcpUrl, deps))) {\n if (parsed.mode !== \"reconnect\") {\n return { ok: false };\n }\n\n logOut(\"\");\n logOut(\n ` OAuth metadata was unavailable; falling back to bearer-token reconnect for ${clientLabelList(\n oauthClients,\n )}.`,\n );\n\n if (!token) {\n const grant = await runDeviceFlow(\n baseUrl,\n appSlug,\n clientArgForDeviceFlow(oauthClients),\n deps,\n { fullCatalog: parsed.fullCatalog },\n );\n if (!grant) return { ok: false };\n token = grant.token;\n mcpUrl = grant.mcpUrl;\n serverName =\n parsed.name ??\n reconnectServerNameForMcpUrl(grant.mcpUrl, grant.serverName) ??\n grant.serverName ??\n defaultServerName(baseUrl);\n headers = grant.headers;\n }\n\n deviceFlowClients = [...deviceFlowClients, ...oauthClients];\n oauthClients = [];\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 // After writing the canonical entry, remove any same-URL duplicates (alias\n // names, legacy default names, stale custom names) from the same config\n // files so each app has exactly one MCP session.\n const allRemovedNames: string[] = [];\n for (const client of clients) {\n const removed = removeSameUrlDuplicatesForClient(\n client,\n serverName,\n mcpUrl,\n baseDir,\n scope,\n );\n allRemovedNames.push(...removed);\n }\n if (allRemovedNames.length > 0) {\n logOut(\n ` Removed duplicate MCP entries: ${[...new Set(allRemovedNames)].join(\", \")}`,\n );\n }\n\n // Canonical publish-token write: when we have a real minted bearer token for\n // a first-party Plans app, also persist `{ url, token }` to\n // `~/.agent-native/plan-publish.json` so the local Plans server can read the\n // same token for a server-to-server publish (publish-on-share). This is an\n // ADDITIONAL write alongside the per-client MCP config; Best-effort and\n // merge-not-clobber — never fails the connect.\n //\n // OAuth clients authenticate in-host via standard MCP OAuth, so they never\n // mint a local bearer token. To still populate the publish store for them, we\n // run a supplemental device-flow mint using a non-OAuth client arg so the\n // Plans server gets a usable token and `publish-visual-plan` doesn't send the\n // user back to `agent-native connect` right after they just ran it.\n let publishToken = token;\n if (\n !publishToken &&\n oauthClients.length > 0 &&\n isFirstPartyPlanHost(baseUrl)\n ) {\n try {\n logOut(\"\");\n logOut(\n ` Minting a publish token for the local Plans server (device flow)…`,\n );\n const grant = await runDeviceFlow(\n baseUrl,\n appSlug,\n // Use a non-OAuth client arg so the server mints a bearer token even\n // though our primary clients are OAuth-native. \"codex\" is a stable,\n // always-supported non-OAuth client identifier.\n \"codex\",\n deps,\n );\n if (grant?.token) {\n publishToken = grant.token;\n } else {\n logOut(\n ` Warning: could not mint a publish token for the local Plans ` +\n `server. You can still publish via the hosted UI.`,\n );\n }\n } catch {\n logOut(\n ` Warning: publish-token mint failed. You can still publish via the ` +\n `hosted UI.`,\n );\n }\n }\n if (publishToken && isFirstPartyPlanHost(baseUrl)) {\n const canonicalPath = writePlanPublishAuth({\n url: baseUrl,\n token: publishToken,\n });\n if (canonicalPath) {\n logOut(\"\");\n logOut(\n ` Saved publish token for the local Plans server → ${canonicalPath}`,\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 logOut(\n ` Auth/config is per client: this command updated ${clientLabelList(clients)} only.`,\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 for (const line of oauthNextStepsForClients(oauthClients, serverName)) {\n logOut(` Next: ${line}`);\n }\n }\n logOut(\"\");\n logOut(\n ` Restart or reload ${sentenceClientLabelList(clients)} to pick up the new MCP server.`,\n );\n if (clients.includes(\"codex\")) {\n logOut(\n \" Codex sessions load MCP tools at startup; start a new Codex session if the tools are still missing.\",\n );\n }\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// Org service-token mint (--service-token <name>)\n// ---------------------------------------------------------------------------\n\n/** `postJson` with a bearer Authorization header (action-route calls). */\nasync function postJsonAuthed(\n fetchImpl: typeof fetch,\n url: string,\n body: unknown,\n bearerToken: string,\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: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${bearerToken}`,\n },\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\n/**\n * `agent-native connect <url> --service-token <name>` — mint an ORG service\n * token for CI (e.g. the PLAN_RECAP_TOKEN GitHub secret).\n *\n * Flow: authenticate the human via the existing browser device flow, then use\n * that short-lived grant to call the app's `create-org-service-token` action\n * (org owner/admin gated server-side). The service token is printed exactly\n * once and never written to any local config file.\n */\nexport async function runServiceTokenMint(\n parsed: ParsedConnectArgs,\n deps: ConnectDeps = {},\n): Promise<boolean> {\n const fetchImpl = deps.fetchImpl ?? fetch;\n const serviceName = parsed.serviceToken?.trim() ?? \"\";\n if (!parsed.url) {\n logErr(\" --service-token requires the app URL.\");\n logErr(\n \" Usage: npx @agent-native/core@latest connect <url> --service-token <name> [--ttl-days <1-365>]\",\n );\n return false;\n }\n if (!serviceName) {\n logErr(\n \" --service-token requires a service name, e.g. --service-token ci\",\n );\n return false;\n }\n\n const normalizedUrl = normalizeUrl(parsed.url);\n const baseUrl = stripMcpPath(normalizedUrl);\n const appSlug = appSlugFromUrl(baseUrl);\n\n logOut(\"\");\n logOut(` Creating org service token \"${serviceName}\" on ${baseUrl}`);\n logOut(\" First, verify it's you (the token will belong to your org)…\");\n\n // Use a non-OAuth client arg so the server mints a bearer grant we can use\n // against the action route (same approach as the Plans publish-token mint).\n const grant = await runDeviceFlow(baseUrl, appSlug, \"codex\", deps);\n if (!grant?.token) {\n logErr(\" Could not authenticate (the server returned no bearer token).\");\n logErr(\" Org service tokens require a deployed app with auth configured.\");\n return false;\n }\n\n let status: number;\n let json: any;\n try {\n ({ status, json } = await postJsonAuthed(\n fetchImpl,\n `${baseUrl}/_agent-native/actions/create-org-service-token`,\n {\n name: serviceName,\n ...(Number.isFinite(parsed.ttlDays) && parsed.ttlDays\n ? { ttlDays: parsed.ttlDays }\n : {}),\n },\n grant.token,\n ));\n } catch (err: any) {\n logErr(` Could not reach ${baseUrl} (${err?.message ?? err}).`);\n return false;\n }\n\n if (status === 404) {\n logErr(\n \" This app does not expose the create-org-service-token action yet.\",\n );\n logErr(\" Redeploy it with a current @agent-native/core, then retry.\");\n return false;\n }\n if (status < 200 || status >= 300 || typeof json?.token !== \"string\") {\n logErr(\n ` Could not create the service token (HTTP ${status}): ` +\n responseMessage(json, \"server returned an error.\"),\n );\n if (status === 403) {\n logErr(\" Only org owners or admins can create service tokens.\");\n }\n return false;\n }\n\n logOut(\"\");\n logOut(\" Org service token created.\");\n logOut(\"\");\n logOut(` Name: ${json.serviceName ?? serviceName}`);\n if (typeof json.serviceEmail === \"string\") {\n logOut(` Acts as: ${json.serviceEmail}`);\n }\n if (Number.isFinite(Number(json.ttlDays))) {\n logOut(` Expires: in ${json.ttlDays} days`);\n }\n logOut(\"\");\n // The ONLY place the secret is ever printed. Never logged elsewhere,\n // never written to disk.\n logOut(` ${json.token}`);\n logOut(\"\");\n logOut(\" Shown once — store it now as your CI secret, e.g.:\");\n logOut(` gh secret set PLAN_RECAP_TOKEN --body \"<paste token>\"`);\n logOut(\"\");\n logOut(\n \" Manage it later with the list-org-service-tokens / \" +\n \"revoke-org-service-token actions (org owners/admins).\",\n );\n return true;\n}\n\n// ---------------------------------------------------------------------------\n// Entry point\n// ---------------------------------------------------------------------------\n\nconst HELP = `npx @agent-native/core@latest connect — wire your coding agent to a deployed app\n\nUsage:\n npx @agent-native/core@latest 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 npx @agent-native/core@latest connect <url> [--client <c>] [--scope user|project] [--name <n>]\n Writes the HTTP MCP entry into your selected client config(s). Claude\n Code, Cursor, OpenCode, and GitHub Copilot / VS Code use standard remote\n MCP OAuth and get URL-only config. 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 Auth is stored per client config/session; restart or reload each selected\n client before expecting new tools to appear.\n Re-running over an older OAuth-capable bearer entry upgrades it to\n URL-only OAuth config and prompts you to authenticate in that host.\n\n For cross-app access, prefer the unified Dispatch gateway:\n npx @agent-native/core@latest connect https://dispatch.agent-native.com\n\n npx @agent-native/core@latest 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 npx @agent-native/core@latest connect <url> --service-token <name> [--ttl-days <1-365>]\n Mint an ORG service token for CI (e.g. the PLAN_RECAP_TOKEN secret for\n PR Visual Recap). Authenticates you via the browser device flow, then\n mints a token owned by your ORGANIZATION — it keeps working if you\n leave or revoke your personal tokens, and CI-created plans are\n org-visible. Org owner/admin only. Printed once; nothing is written\n to local MCP configs.\n\n npx -y @agent-native/core@latest reconnect [<url>] [--client <c>] [--scope user|project]\n npx -y @agent-native/core@latest connect reconnect [<url>] [--client <c>] [--scope user|project]\n Re-authenticate an existing MCP entry without reinstalling apps/skills.\n With a URL, it reuses the existing server name for that MCP URL when\n possible, reconnecting only clients that already have that entry. Pass\n --client to limit which configs it searches; for Codex recovery, prefer\n --client codex. Without a URL, it reconnects the only matching Agent\n Native entry in local client configs. Use --name for custom server names.\n\n npx @agent-native/core@latest connect --all [--client <c>] [--scope user|project]\n Connect every first-party hosted app as separate MCP resources.\n\nDeveloper:\n npx @agent-native/core@latest 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 npx @agent-native/core@latest connect prod [--apps mail,calendar] [--client <c>]\n Restore production MCP entries saved before the dev switch.\n\nClients: all (default), claude-code, codex, cowork, cursor, opencode, github-copilot\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 const previousLogOut = logOutImpl;\n const previousLogErr = logErrImpl;\n logOutImpl = deps.logOut ?? previousLogOut;\n logErrImpl = deps.logErr ?? previousLogErr;\n try {\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 if (parsed.mode) {\n let ok: boolean;\n if (parsed.mode === \"reconnect\" || parsed.mode === \"reauth\") {\n const clients = resolveClients(parsed.client);\n ok = await reconnectOne(parsed, clients, deps);\n } else {\n const clients = await resolveConnectClients(parsed, deps);\n if (!clients) return;\n ok =\n parsed.mode === \"dev\"\n ? await connectDevProfile(parsed, clients, deps)\n : await connectProdProfile(parsed, clients, deps);\n }\n if (!ok) process.exitCode = 1;\n return;\n }\n\n if (parsed.serviceToken !== undefined) {\n const ok = await runServiceTokenMint(parsed, 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 } finally {\n logOutImpl = previousLogOut;\n logErrImpl = previousLogErr;\n }\n}\n"]}