63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
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<ApplyAuthChoiceResult | null> {
|
|
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 };
|
|
}
|