Implement preserving config merge for opencode.

Co-Authored-By: win0na <winnie@winneon.moe>

feat(opencode): config-merge.sh with formatting-preserving JSON merge

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

build(opencode): source config-merge.sh from adapter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

feat(install): use oc_config_merge for opencode.json instead of overwrite

Source config-merge.sh from install scripts for opencode platform so
user keys in opencode.json are preserved on reinstall and update.
Fix in-place merge by writing to a temp file before moving to output.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
nunziati
2026-04-10 12:21:42 +00:00
parent f76fcca42a
commit 0e78ac72b0
5 changed files with 274 additions and 2 deletions

View File

@@ -129,6 +129,12 @@ case "$PLATFORM" in
esac
PLATFORM_VAULT_DIR="$VAULT_COMPONENTS_DIR"
# Load opencode-specific helpers when building for opencode
if [[ "$PLATFORM" == "opencode" ]]; then
# shellcheck source=adapters/opencode/config-merge.sh
source "$REPO_DIR/adapters/opencode/config-merge.sh"
fi
# ── Migrate legacy manifests (if any) ────────────────────────────────────────
manifest_migrate
@@ -213,7 +219,12 @@ install_dispatcher "$DISPATCHER_SRC" "$DISPATCHER_DST"
# ── MCP / opencode.json ───────────────────────────────────────────────────────
if [[ -f "$MCP_SRC" ]]; then
copy_if_changed "$MCP_SRC" "$MCP_DST"
if [[ "$PLATFORM" == "opencode" && -f "$MCP_DST" ]]; then
oc_config_merge "$MCP_SRC" "$MCP_DST" "$MCP_DST"
info "Merged opencode.json (user config preserved)"
else
copy_if_changed "$MCP_SRC" "$MCP_DST"
fi
fi
# ── Done ──────────────────────────────────────────────────────────────────────

View File

@@ -106,6 +106,12 @@ case "$PLATFORM" in
esac
PLATFORM_VAULT_DIR="$VAULT_COMPONENTS_DIR"
# Load opencode-specific helpers when building for opencode
if [[ "$PLATFORM" == "opencode" ]]; then
# shellcheck source=adapters/opencode/config-merge.sh
source "$REPO_DIR/adapters/opencode/config-merge.sh"
fi
# ── Migrate legacy manifests (if any) ────────────────────────────────────────
manifest_migrate
@@ -142,7 +148,12 @@ CLAUDE_MD_CHANGED=$_LAST_CHANGED
# ── MCP / opencode.json ───────────────────────────────────────────────────────
if [[ -f "$MCP_SRC" ]]; then
copy_if_changed "$MCP_SRC" "$MCP_DST"
if [[ "$PLATFORM" == "opencode" && -f "$MCP_DST" ]]; then
oc_config_merge "$MCP_SRC" "$MCP_DST" "$MCP_DST"
info "Merged opencode.json (user config preserved)"
else
copy_if_changed "$MCP_SRC" "$MCP_DST"
fi
fi
# ── Summary ───────────────────────────────────────────────────────────────────