refactor(cli): remove ChatGPT subscription check from installer

- Remove chatgpt option from CLI args and types
- Remove ChatGPT prompt from TUI installer flow
- Update config detection to not include hasChatGPT
- Update related tests
This commit is contained in:
justsisyphus 2026-01-20 16:04:50 +09:00
parent 3be387d9e3
commit 2c3f1bfd80
5 changed files with 10 additions and 46 deletions

View File

@ -206,7 +206,6 @@ describe("generateOmoConfig - v3 beta: no hardcoded models", () => {
const config: InstallConfig = {
hasClaude: true,
isMax20: false,
hasChatGPT: true,
hasGemini: false,
hasCopilot: false,
}
@ -225,7 +224,6 @@ describe("generateOmoConfig - v3 beta: no hardcoded models", () => {
const config: InstallConfig = {
hasClaude: true,
isMax20: true,
hasChatGPT: true,
hasGemini: true,
hasCopilot: true,
}
@ -243,7 +241,6 @@ describe("generateOmoConfig - v3 beta: no hardcoded models", () => {
const config: InstallConfig = {
hasClaude: false,
isMax20: false,
hasChatGPT: false,
hasGemini: false,
hasCopilot: false,
}

View File

@ -587,7 +587,6 @@ export function detectCurrentConfig(): DetectedConfig {
isInstalled: false,
hasClaude: true,
isMax20: true,
hasChatGPT: true,
hasGemini: false,
hasCopilot: false,
}

View File

@ -24,26 +24,23 @@ program
.description("Install and configure oh-my-opencode with interactive setup")
.option("--no-tui", "Run in non-interactive mode (requires all options)")
.option("--claude <value>", "Claude subscription: no, yes, max20")
.option("--chatgpt <value>", "ChatGPT subscription: no, yes")
.option("--gemini <value>", "Gemini integration: no, yes")
.option("--copilot <value>", "GitHub Copilot subscription: no, yes")
.option("--skip-auth", "Skip authentication setup hints")
.addHelpText("after", `
Examples:
$ bunx oh-my-opencode install
$ bunx oh-my-opencode install --no-tui --claude=max20 --chatgpt=yes --gemini=yes --copilot=no
$ bunx oh-my-opencode install --no-tui --claude=no --chatgpt=no --gemini=no --copilot=yes
$ bunx oh-my-opencode install --no-tui --claude=max20 --gemini=yes --copilot=no
$ bunx oh-my-opencode install --no-tui --claude=no --gemini=no --copilot=yes
Model Providers:
Claude Required for Sisyphus (main orchestrator) and Librarian agents
ChatGPT Powers the Oracle agent for debugging and architecture
Gemini Powers frontend, documentation, and multimodal agents
`)
.action(async (options) => {
const args: InstallArgs = {
tui: options.tui !== false,
claude: options.claude,
chatgpt: options.chatgpt,
gemini: options.gemini,
copilot: options.copilot,
skipAuth: options.skipAuth ?? false,

View File

@ -39,7 +39,6 @@ function formatConfigSummary(config: InstallConfig): string {
const claudeDetail = config.hasClaude ? (config.isMax20 ? "max20" : "standard") : undefined
lines.push(formatProvider("Claude", config.hasClaude, claudeDetail))
lines.push(formatProvider("ChatGPT", config.hasChatGPT))
lines.push(formatProvider("Gemini", config.hasGemini))
lines.push(formatProvider("GitHub Copilot", config.hasCopilot, "fallback provider"))
@ -115,12 +114,6 @@ function validateNonTuiArgs(args: InstallArgs): { valid: boolean; errors: string
errors.push(`Invalid --claude value: ${args.claude} (expected: no, yes, max20)`)
}
if (args.chatgpt === undefined) {
errors.push("--chatgpt is required (values: no, yes)")
} else if (!["no", "yes"].includes(args.chatgpt)) {
errors.push(`Invalid --chatgpt value: ${args.chatgpt} (expected: no, yes)`)
}
if (args.gemini === undefined) {
errors.push("--gemini is required (values: no, yes)")
} else if (!["no", "yes"].includes(args.gemini)) {
@ -140,13 +133,12 @@ function argsToConfig(args: InstallArgs): InstallConfig {
return {
hasClaude: args.claude !== "no",
isMax20: args.claude === "max20",
hasChatGPT: args.chatgpt === "yes",
hasGemini: args.gemini === "yes",
hasCopilot: args.copilot === "yes",
}
}
function detectedToInitialValues(detected: DetectedConfig): { claude: ClaudeSubscription; chatgpt: BooleanArg; gemini: BooleanArg; copilot: BooleanArg } {
function detectedToInitialValues(detected: DetectedConfig): { claude: ClaudeSubscription; gemini: BooleanArg; copilot: BooleanArg } {
let claude: ClaudeSubscription = "no"
if (detected.hasClaude) {
claude = detected.isMax20 ? "max20" : "yes"
@ -154,7 +146,6 @@ function detectedToInitialValues(detected: DetectedConfig): { claude: ClaudeSubs
return {
claude,
chatgpt: detected.hasChatGPT ? "yes" : "no",
gemini: detected.hasGemini ? "yes" : "no",
copilot: detected.hasCopilot ? "yes" : "no",
}
@ -178,20 +169,6 @@ async function runTuiMode(detected: DetectedConfig): Promise<InstallConfig | nul
return null
}
const chatgpt = await p.select({
message: "Do you have a ChatGPT Plus/Pro subscription?",
options: [
{ value: "no" as const, label: "No", hint: "Oracle will use fallback model" },
{ value: "yes" as const, label: "Yes", hint: "GPT-5.2 for debugging and architecture" },
],
initialValue: initial.chatgpt,
})
if (p.isCancel(chatgpt)) {
p.cancel("Installation cancelled.")
return null
}
const gemini = await p.select({
message: "Will you integrate Google Gemini?",
options: [
@ -223,7 +200,6 @@ async function runTuiMode(detected: DetectedConfig): Promise<InstallConfig | nul
return {
hasClaude: claude !== "no",
isMax20: claude === "max20",
hasChatGPT: chatgpt === "yes",
hasGemini: gemini === "yes",
hasCopilot: copilot === "yes",
}
@ -238,7 +214,7 @@ async function runNonTuiInstall(args: InstallArgs): Promise<number> {
console.log(` ${SYMBOLS.bullet} ${err}`)
}
console.log()
printInfo("Usage: bunx oh-my-opencode install --no-tui --claude=<no|yes|max20> --chatgpt=<no|yes> --gemini=<no|yes> --copilot=<no|yes>")
printInfo("Usage: bunx oh-my-opencode install --no-tui --claude=<no|yes|max20> --gemini=<no|yes> --copilot=<no|yes>")
console.log()
return 1
}
@ -264,7 +240,7 @@ async function runNonTuiInstall(args: InstallArgs): Promise<number> {
if (isUpdate) {
const initial = detectedToInitialValues(detected)
printInfo(`Current config: Claude=${initial.claude}, ChatGPT=${initial.chatgpt}, Gemini=${initial.gemini}`)
printInfo(`Current config: Claude=${initial.claude}, Gemini=${initial.gemini}`)
}
const config = argsToConfig(args)
@ -307,7 +283,7 @@ async function runNonTuiInstall(args: InstallArgs): Promise<number> {
printBox(formatConfigSummary(config), isUpdate ? "Updated Configuration" : "Installation Complete")
if (!config.hasClaude && !config.hasChatGPT && !config.hasGemini && !config.hasCopilot) {
if (!config.hasClaude && !config.hasGemini && !config.hasCopilot) {
printWarning("No model providers configured. Using opencode/glm-4.7-free as fallback.")
}
@ -328,11 +304,10 @@ async function runNonTuiInstall(args: InstallArgs): Promise<number> {
console.log(color.dim("oMoMoMoMo... Enjoy!"))
console.log()
if ((config.hasClaude || config.hasChatGPT || config.hasGemini || config.hasCopilot) && !args.skipAuth) {
if ((config.hasClaude || config.hasGemini || config.hasCopilot) && !args.skipAuth) {
printBox(
`Run ${color.cyan("opencode auth login")} and select your provider:\n` +
(config.hasClaude ? ` ${SYMBOLS.bullet} Anthropic ${color.gray("→ Claude Pro/Max")}\n` : "") +
(config.hasChatGPT ? ` ${SYMBOLS.bullet} OpenAI ${color.gray("→ ChatGPT Plus/Pro")}\n` : "") +
(config.hasGemini ? ` ${SYMBOLS.bullet} Google ${color.gray("→ OAuth with Antigravity")}\n` : "") +
(config.hasCopilot ? ` ${SYMBOLS.bullet} GitHub ${color.gray("→ Copilot")}` : ""),
"🔐 Authenticate Your Providers"
@ -354,7 +329,7 @@ export async function install(args: InstallArgs): Promise<number> {
if (isUpdate) {
const initial = detectedToInitialValues(detected)
p.log.info(`Existing configuration detected: Claude=${initial.claude}, ChatGPT=${initial.chatgpt}, Gemini=${initial.gemini}`)
p.log.info(`Existing configuration detected: Claude=${initial.claude}, Gemini=${initial.gemini}`)
}
const s = p.spinner()
@ -413,7 +388,7 @@ export async function install(args: InstallArgs): Promise<number> {
}
s.stop(`Config written to ${color.cyan(omoResult.configPath)}`)
if (!config.hasClaude && !config.hasChatGPT && !config.hasGemini && !config.hasCopilot) {
if (!config.hasClaude && !config.hasGemini && !config.hasCopilot) {
p.log.warn("No model providers configured. Using opencode/glm-4.7-free as fallback.")
}
@ -434,10 +409,9 @@ export async function install(args: InstallArgs): Promise<number> {
p.outro(color.green("oMoMoMoMo... Enjoy!"))
if ((config.hasClaude || config.hasChatGPT || config.hasGemini || config.hasCopilot) && !args.skipAuth) {
if ((config.hasClaude || config.hasGemini || config.hasCopilot) && !args.skipAuth) {
const providers: string[] = []
if (config.hasClaude) providers.push(`Anthropic ${color.gray("→ Claude Pro/Max")}`)
if (config.hasChatGPT) providers.push(`OpenAI ${color.gray("→ ChatGPT Plus/Pro")}`)
if (config.hasGemini) providers.push(`Google ${color.gray("→ OAuth with Antigravity")}`)
if (config.hasCopilot) providers.push(`GitHub ${color.gray("→ Copilot")}`)

View File

@ -4,7 +4,6 @@ export type BooleanArg = "no" | "yes"
export interface InstallArgs {
tui: boolean
claude?: ClaudeSubscription
chatgpt?: BooleanArg
gemini?: BooleanArg
copilot?: BooleanArg
skipAuth?: boolean
@ -13,7 +12,6 @@ export interface InstallArgs {
export interface InstallConfig {
hasClaude: boolean
isMax20: boolean
hasChatGPT: boolean
hasGemini: boolean
hasCopilot: boolean
}
@ -28,7 +26,6 @@ export interface DetectedConfig {
isInstalled: boolean
hasClaude: boolean
isMax20: boolean
hasChatGPT: boolean
hasGemini: boolean
hasCopilot: boolean
}