| 2426 | } |
| 2427 | |
| 2428 | static void cbm_opencode_config_path(const char *home_dir, char *out, size_t out_sz) { |
| 2429 | char env_buf[CLI_BUF_1K]; |
| 2430 | const char *custom = cbm_safe_getenv("OPENCODE_CONFIG", env_buf, sizeof(env_buf), NULL); |
| 2431 | if (custom && custom[0]) { |
| 2432 | snprintf(out, out_sz, "%s", custom); |
| 2433 | return; |
| 2434 | } |
| 2435 | /* OpenCode reads either opencode.json or opencode.jsonc. We always wrote |
| 2436 | * the .json name, so a user whose real config is .jsonc got a SECOND file |
| 2437 | * that OpenCode ignores — their MCP server silently never appeared, and the |
| 2438 | * install looked like it had succeeded (discussion #1560). Prefer whichever |
| 2439 | * file already exists, .jsonc first since it is the one we used to miss; |
| 2440 | * with neither present, create .json as before. Other clients in this file |
| 2441 | * (pochi, kilo) already carry .jsonc paths — OpenCode was the gap. */ |
| 2442 | char candidate[CLI_BUF_1K]; |
| 2443 | int written = snprintf(candidate, sizeof(candidate), "%s/.config/opencode/opencode.jsonc", |
| 2444 | home_dir ? home_dir : ""); |
| 2445 | if (written > 0 && (size_t)written < sizeof(candidate) && cbm_file_exists(candidate)) { |
| 2446 | snprintf(out, out_sz, "%s", candidate); |
| 2447 | return; |
| 2448 | } |
| 2449 | snprintf(out, out_sz, "%s/.config/opencode/opencode.json", home_dir); |
| 2450 | } |
| 2451 | |
| 2452 | static void cbm_copilot_config_dir(const char *home_dir, char *out, size_t out_sz) { |
| 2453 | char env_buf[CLI_BUF_1K]; |
no test coverage detected