1+ #! /usr/bin/env bash
2+ # kimi-fork-update.sh — SINGLE SOURCE für den update-kimi-code Workflow.
3+ # Host-aware: erkennt den Host und wählt die Fork-/Deploy-Pfade selbst.
4+ # Override via ENV: KIMI_FORK_REPO, KIMI_FORK_SYMLINK, KIMI_KIMI_BIN,
5+ # KIMI_UPSTREAM (default origin), KIMI_FORK (default creatiVision).
6+ # Bei unbekanntem Host (z. B. debian1) bricht das Skript ab und verlangt,
7+ # die Pfade per board/buzz bei debian1 zu erfragen und via ENV zu setzen.
8+ #
9+ # Logs: ~/.kimi-code/logs/fork-update.log
10+ set -euo pipefail
11+
12+ HOST=$( hostname)
13+ LOG_FILE=" ${KIMI_LOG_FILE:- $HOME / .kimi-code/ logs/ fork-update.log} "
14+ DIST_ENTRY=" ${KIMI_DIST_ENTRY:- apps/ kimi-code/ dist/ main.mjs} "
15+
16+ # ---- Host-Pfadauflösung ----------------------------------------------------
17+ case " $HOST " in
18+ * laptop* |kimi-* )
19+ # kimi-laptop (Default)
20+ FORK_REPO=" ${KIMI_FORK_REPO:-/ media/ work-data/ 002_cv-projects/ cv_ai_kimi-code-cli-fork} "
21+ REPO_DIR=" ${KIMI_FORK_SYMLINK:-/ home/ mb/ .kimi-code-cli} "
22+ KIMI_BIN=" ${KIMI_KIMI_BIN:- $HOME / .kimi-code/ bin/ kimi} "
23+ ;;
24+ * )
25+ # Fremder Host (debian1, agy, hermes): Pfade müssen explizit gesetzt sein.
26+ FORK_REPO=" ${KIMI_FORK_REPO:? Unbekannter Host $HOST : Pfade per board/ buzz bei debian1 erfragen und KIMI_FORK_REPO setzen} "
27+ REPO_DIR=" ${KIMI_FORK_SYMLINK:- $FORK_REPO } "
28+ KIMI_BIN=" ${KIMI_KIMI_BIN:? Unbekannter Host $HOST : KIMI_KIMI_BIN setzen} "
29+ ;;
30+ esac
31+ UPSTREAM=" ${KIMI_UPSTREAM:- origin} "
32+ FORK_REMOTE=" ${KIMI_FORK:- creatiVision} "
33+ BIN_DIR=" $( dirname " $KIMI_BIN " ) "
34+ KIMI_BAK=" $KIMI_BIN .bak"
35+
36+ log () { echo " [$( date ' +%Y-%m-%d %H:%M:%S' ) ] $* " ; }
37+
38+ exec 3>&1 1>> " $LOG_FILE " 2>&1
39+
40+ log " === kimi-fork-update ($HOST ) gestartet ==="
41+ cd " $REPO_DIR "
42+
43+ # 1. Upstream fetchen
44+ log " Fetch upstream ($UPSTREAM )..."
45+ git fetch " $UPSTREAM " main
46+
47+ # 2. Neue Commits in Upstream?
48+ UPSTREAM_NEW=$( git log --oneline main.." $UPSTREAM /main" || true)
49+ if [ -z " $UPSTREAM_NEW " ]; then
50+ log " Keine neuen Upstream-Commits – kein Update nötig."
51+ log " === kimi-fork-update beendet (keine Änderung) ==="
52+ exit 0
53+ fi
54+ log " Neue Upstream-Commits gefunden."
55+
56+ # 3. Fork main syncen (Achtung: hart reset!)
57+ git checkout main
58+ git reset --hard " $UPSTREAM /main"
59+ git push " $FORK_REMOTE " main --force
60+ log " Fork main gesynct."
61+
62+ # 4. Unsere 3 PR-Branches rebasen + pushen
63+ for BRANCH in fix/latest-with-prompt-cache fix/mcp-schema-limits fix/session-workdir-resume; do
64+ log " Rebase $BRANCH ..."
65+ if git checkout " $BRANCH " 2> /dev/null; then
66+ if git rebase " $UPSTREAM /main" ; then
67+ git push " $FORK_REMOTE " " $BRANCH " --force
68+ log " $BRANCH rebased und gepusht."
69+ else
70+ log " WARNUNG: Rebase $BRANCH fehlgeschlagen – breche ab."
71+ git rebase --abort 2> /dev/null || true
72+ exit 1
73+ fi
74+ else
75+ log " Branch $BRANCH existiert nicht – überspringe."
76+ fi
77+ done
78+
79+ # Sanity: echte Konflikt-Marker
80+ if git grep -nE ' ^(<<<<<<<|>>>>>>>)' -- apps/kimi-code/src packages/agent-core-v2/src 2> /dev/null; then
81+ log " FEHLER: Ungelöste Konflikt-Marker. Breche ab."
82+ exit 1
83+ fi
84+
85+ # 5. Merge der 3 in fork main
86+ git checkout main
87+ for BRANCH in fix/latest-with-prompt-cache fix/mcp-schema-limits fix/session-workdir-resume; do
88+ if git branch -a | grep -q " $BRANCH " ; then
89+ git merge " $BRANCH " -m " chore: merge $BRANCH into fork main" || git merge --abort 2> /dev/null || true
90+ fi
91+ done
92+
93+ # 6. Install + Build
94+ pnpm install --no-frozen-lockfile || log " WARNUNG: pnpm install Warnungen."
95+ pnpm run build:packages
96+ pnpm --filter @moonshot-ai/kimi-code run build || { log " FEHLER: Build fehlgeschlagen." ; exit 1; }
97+
98+ # 7. Deploy Wrapper (atomar)
99+ mkdir -p " $BIN_DIR "
100+ printf ' #!/usr/bin/env node\nimport(%s)\n' " '$REPO_DIR /$DIST_ENTRY '" > /tmp/kimi.new
101+ chmod +x /tmp/kimi.new
102+ if [ -f " $KIMI_BIN " ] && [ ! -f " $KIMI_BAK " ]; then cp " $KIMI_BIN " " $KIMI_BAK " 2> /dev/null || true ; fi
103+ mv -f /tmp/kimi.new " $KIMI_BIN "
104+ chmod +x " $KIMI_BIN "
105+ log " Wrapper geschrieben: $KIMI_BIN "
106+
107+ # 8. Fork main pushen
108+ git push " $FORK_REMOTE " main
109+
110+ log " === kimi-fork-update ($HOST ) erfolgreich abgeschlossen ==="
0 commit comments