119e18c810
- Extract atlas/ into 15 focused modules (hook, event handler, tool policies, types, etc.) - Split auto-update-checker into checker/ and hook/ subdirectories with single-purpose files - Decompose session-recovery into separate recovery strategy files per error type - Extract todo-continuation-enforcer from monolith to directory with dedicated modules - Split background-task/tools.ts into individual tool creator files - Extract command-executor, tmux-utils into focused sub-modules - Split config/schema.ts into domain-specific schema files - Decompose cli/config-manager.ts into focused modules - Rollback skill-mcp-manager, model-availability, index.ts splits that broke tests - Fix all import path depths for moved files (../../ -> ../../../) - Add explicit type annotations to resolve TS7006 implicit any errors Typecheck: 0 errors Tests: 2359 pass, 5 fail (all pre-existing)
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { writeFileSync } from "node:fs"
|
|
import type { ConfigMergeResult, InstallConfig } from "../types"
|
|
import { getConfigDir } from "./config-context"
|
|
import { ensureConfigDirectoryExists } from "./ensure-config-directory-exists"
|
|
import { formatErrorWithSuggestion } from "./format-error-with-suggestion"
|
|
import { detectConfigFormat } from "./opencode-config-format"
|
|
import { parseOpenCodeConfigFileWithError, type OpenCodeConfig } from "./parse-opencode-config-file"
|
|
import { ANTIGRAVITY_PROVIDER_CONFIG } from "./antigravity-provider-configuration"
|
|
|
|
export function addProviderConfig(config: InstallConfig): ConfigMergeResult {
|
|
try {
|
|
ensureConfigDirectoryExists()
|
|
} catch (err) {
|
|
return {
|
|
success: false,
|
|
configPath: getConfigDir(),
|
|
error: formatErrorWithSuggestion(err, "create config directory"),
|
|
}
|
|
}
|
|
|
|
const { format, path } = detectConfigFormat()
|
|
|
|
try {
|
|
let existingConfig: OpenCodeConfig | null = null
|
|
if (format !== "none") {
|
|
const parseResult = parseOpenCodeConfigFileWithError(path)
|
|
if (parseResult.error && !parseResult.config) {
|
|
existingConfig = {}
|
|
} else {
|
|
existingConfig = parseResult.config
|
|
}
|
|
}
|
|
|
|
const newConfig = { ...(existingConfig ?? {}) }
|
|
const providers = (newConfig.provider ?? {}) as Record<string, unknown>
|
|
|
|
if (config.hasGemini) {
|
|
providers.google = ANTIGRAVITY_PROVIDER_CONFIG.google
|
|
}
|
|
|
|
if (Object.keys(providers).length > 0) {
|
|
newConfig.provider = providers
|
|
}
|
|
|
|
writeFileSync(path, JSON.stringify(newConfig, null, 2) + "\n")
|
|
return { success: true, configPath: path }
|
|
} catch (err) {
|
|
return {
|
|
success: false,
|
|
configPath: path,
|
|
error: formatErrorWithSuggestion(err, "add provider config"),
|
|
}
|
|
}
|
|
}
|