summaryrefslogtreecommitdiffhomepage
path: root/patches
diff options
context:
space:
mode:
authorryan.h.park <[email protected]>2026-04-12 05:51:49 +0900
committerGitHub <[email protected]>2026-04-11 15:51:49 -0500
commit63035f977ff3f733a7602da6f65346203f6cee55 (patch)
treea627543b07cf4a0104ea5a7116420eee6d342626 /patches
parent514d2a36bc44f34be62df8aa744117de01c72809 (diff)
downloadopencode-63035f977ff3f733a7602da6f65346203f6cee55.tar.gz
opencode-63035f977ff3f733a7602da6f65346203f6cee55.zip
fix: enable thinking for zhipuai-coding-plan & prevent Korean IME truncation (#22041)
Co-authored-by: claudianus <[email protected]> Co-authored-by: Aiden Cline <[email protected]> Co-authored-by: Sisyphus <[email protected]>
Diffstat (limited to 'patches')
-rwxr-xr-xpatches/install-korean-ime-fix.sh120
1 files changed, 120 insertions, 0 deletions
diff --git a/patches/install-korean-ime-fix.sh b/patches/install-korean-ime-fix.sh
new file mode 100755
index 000000000..8d6c60b64
--- /dev/null
+++ b/patches/install-korean-ime-fix.sh
@@ -0,0 +1,120 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# opencode Korean IME Fix Installer
+# https://github.com/anomalyco/opencode/issues/14371
+#
+# Patches opencode to prevent Korean (and other CJK) IME last character
+# truncation when pressing Enter in Kitty and other terminals.
+#
+# Usage:
+# curl -fsSL https://raw.githubusercontent.com/claudianus/opencode/fix-zhipuai-coding-plan-thinking/patches/install-korean-ime-fix.sh | bash
+# # or from a cloned repo:
+# ./patches/install-korean-ime-fix.sh
+
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+ORANGE='\033[38;5;214m'
+MUTED='\033[0;2m'
+NC='\033[0m'
+
+OPENCODE_DIR="${OPENCODE_DIR:-$HOME/.opencode}"
+OPENCODE_SRC="${OPENCODE_SRC:-$HOME/.opencode-src}"
+FORK_REPO="${FORK_REPO:-https://github.com/claudianus/opencode.git}"
+FORK_BRANCH="${FORK_BRANCH:-fix-zhipuai-coding-plan-thinking}"
+
+info() { echo -e "${MUTED}$*${NC}"; }
+warn() { echo -e "${ORANGE}$*${NC}"; }
+err() { echo -e "${RED}$*${NC}" >&2; }
+ok() { echo -e "${GREEN}$*${NC}"; }
+
+need() {
+ if ! command -v "$1" >/dev/null 2>&1; then
+ err "Error: $1 is required but not installed."
+ exit 1
+ fi
+}
+
+need git
+need bun
+
+# ── 1. Clone or update fork ────────────────────────────────────────────
+if [ -d "$OPENCODE_SRC/.git" ]; then
+ info "Updating existing source at $OPENCODE_SRC ..."
+ git -C "$OPENCODE_SRC" fetch origin "$FORK_BRANCH"
+ git -C "$OPENCODE_SRC" checkout "$FORK_BRANCH"
+ git -C "$OPENCODE_SRC" reset --hard "origin/$FORK_BRANCH"
+else
+ info "Cloning fork (shallow) to $OPENCODE_SRC ..."
+ git clone --depth 1 --branch "$FORK_BRANCH" "$FORK_REPO" "$OPENCODE_SRC"
+fi
+
+# ── 2. Verify the IME fix is present in source ────────────────────────
+PROMPT_FILE="$OPENCODE_SRC/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx"
+if [ ! -f "$PROMPT_FILE" ]; then
+ err "Prompt file not found: $PROMPT_FILE"
+ exit 1
+fi
+
+if grep -q "setTimeout(() => setTimeout" "$PROMPT_FILE"; then
+ ok "IME fix already present in source."
+else
+ warn "IME fix not found. Applying patch ..."
+ # Apply the fix: replace onSubmit={submit} with double-deferred version
+ sed -i 's|onSubmit={submit}|onSubmit={() => {\n // IME: double-defer so the last composed character (e.g. Korean\n // hangul) is flushed to plainText before we read it for submission.\n setTimeout(() => setTimeout(() => submit(), 0), 0)\n }}|' "$PROMPT_FILE"
+ if grep -q "setTimeout(() => setTimeout" "$PROMPT_FILE"; then
+ ok "Patch applied."
+ else
+ err "Failed to apply patch. The source may have changed."
+ exit 1
+ fi
+fi
+
+# ── 3. Install dependencies ────────────────────────────────────────────
+info "Installing dependencies (this may take a minute) ..."
+cd "$OPENCODE_SRC"
+bun install --frozen-lockfile 2>/dev/null || bun install
+
+# ── 4. Build (current platform only) ──────────────────────────────────
+info "Building opencode for current platform ..."
+cd "$OPENCODE_SRC/packages/opencode"
+bun run build --single
+
+# ── 5. Install binary ──────────────────────────────────────────────────
+mkdir -p "$OPENCODE_DIR/bin"
+
+PLATFORM=$(uname -s | tr '[:upper:]' '[:lower:]')
+ARCH=$(uname -m)
+[ "$ARCH" = "aarch64" ] && ARCH="arm64"
+[ "$ARCH" = "x86_64" ] && ARCH="x64"
+[ "$PLATFORM" = "darwin" ] && true
+[ "$PLATFORM" = "linux" ] && true
+
+BUILT_BINARY="$OPENCODE_SRC/packages/opencode/dist/opencode-${PLATFORM}-${ARCH}/bin/opencode"
+
+if [ ! -f "$BUILT_BINARY" ]; then
+ BUILT_BINARY=$(find "$OPENCODE_SRC/packages/opencode/dist" -name "opencode" -type f -executable 2>/dev/null | head -1)
+fi
+
+if [ -f "$BUILT_BINARY" ]; then
+ if [ -f "$OPENCODE_DIR/bin/opencode" ]; then
+ cp "$OPENCODE_DIR/bin/opencode" "$OPENCODE_DIR/bin/opencode.bak.$(date +%Y%m%d%H%M%S)"
+ fi
+ cp "$BUILT_BINARY" "$OPENCODE_DIR/bin/opencode"
+ chmod +x "$OPENCODE_DIR/bin/opencode"
+ ok "Installed to $OPENCODE_DIR/bin/opencode"
+else
+ err "Build failed - binary not found in dist/"
+ info "Try running manually:"
+ echo " cd $OPENCODE_SRC/packages/opencode && bun run build --single"
+ exit 1
+fi
+
+echo ""
+ok "Done! Korean IME fix is now active."
+echo ""
+info "To uninstall and revert to the official release:"
+echo " curl -fsSL https://opencode.ai/install | bash"
+echo ""
+info "To update (re-pull and rebuild):"
+echo " $0"