import { githubCopilotLoginCommand } from "../providers/github-copilot-auth.js"; import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyAuthProfileConfig } from "./onboard-auth.js"; export async function applyAuthChoiceGitHubCopilot( params: ApplyAuthChoiceParams, ): Promise { if (params.authChoice !== "github-copilot") return null; let nextConfig = params.config; await params.prompter.note( [ "This will open a GitHub device login to authorize Copilot.", "Requires an active GitHub Copilot subscription.", ].join("\n"), "GitHub Copilot", ); if (!process.stdin.isTTY) { await params.prompter.note( "GitHub Copilot login requires an interactive TTY.", "GitHub Copilot", ); return { config: nextConfig }; } try { await githubCopilotLoginCommand({ yes: true }, params.runtime); } catch (err) { await params.prompter.note(`GitHub Copilot login failed: ${String(err)}`, "GitHub Copilot"); return { config: nextConfig }; } nextConfig = applyAuthProfileConfig(nextConfig, { profileId: "github-copilot:github", provider: "github-copilot", mode: "oauth", }); if (params.setDefaultModel) { const model = "github-copilot/gpt-4o"; nextConfig = { ...nextConfig, agents: { ...nextConfig.agents, defaults: { ...nextConfig.agents?.defaults, model: { ...(typeof nextConfig.agents?.defaults?.model === "object" ? nextConfig.agents.defaults.model : undefined), primary: model, }, }, }, }; await params.prompter.note(`Default model set to ${model}`, "Model configured"); } return { config: nextConfig }; }