From eb5af7c62c920973f1ed54f6b523058f0887e3a1 Mon Sep 17 00:00:00 2001 From: vitaly Date: Mon, 1 Jun 2026 17:27:45 +0000 Subject: [PATCH] Write native agent rules during setup --- README.md | 4 +++- ai-setup.sh | 34 +++++++++++++++++++++------------- tests/test_fixes.sh | 12 ++++++++---- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 0d42c69..be6b4c9 100644 --- a/README.md +++ b/README.md @@ -68,13 +68,15 @@ exec bash - Kimi config пишется в `${KIMI_CODE_HOME:-$HOME/.kimi-code}/config.toml`. - Глобальные правила пишутся в `~/.config/ai-setup/global_rules.md`. -При запуске лаунчеры вызывают helper `_build_ai_sys_prompt`. Он обновляет native rule-файлы: +При запуске `ai-setup.sh` сразу обновляются native rule-файлы: - `~/.codex/AGENTS.md` - `~/.kimi-code/AGENTS.md` - `~/.claude/CLAUDE.md` - `~/.gemini/GEMINI.md` +Лаунчеры дополнительно обновляют эти файлы через helper `_build_ai_sys_prompt` при своём запуске. + В native rule-файлы попадают только глобальные правила. Полный prompt с проектными `.md` используется в `ai-claude`, `ai-deepseek` и `ai-gemini`; `ai-gpt` и `ai-kimi` полагаются на native rule-файлы своих CLI. ## Права запуска агентов diff --git a/ai-setup.sh b/ai-setup.sh index e29bc46..52fca00 100755 --- a/ai-setup.sh +++ b/ai-setup.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # ============================================================ -# Claude Code Setup — GPT-5.5 / DeepSeek / Kimi / Gemini +# Claude Code Setup - GPT-5.5 / DeepSeek / Kimi / Gemini # Запуск: bash ai-setup.sh # ============================================================ @@ -112,7 +112,7 @@ cat > "$EFFORT_PROXY_BIN" << 'PYEOF' """Effort mapping proxy for GPT backend. claude-code-proxy now accepts: low, medium, high, max (no "xhigh"). -Claude Code may send "xhigh" effort — we map it to "high". +Claude Code may send "xhigh" effort - we map it to "high". """ import http.client, http.server, sys, logging, socketserver @@ -127,7 +127,7 @@ logging.basicConfig( ) log = logging.getLogger("effort-proxy") -# Потокобезопасный сервер — обрабатывает несколько запросов одновременно +# Потокобезопасный сервер - обрабатывает несколько запросов одновременно class _ThreadedServer(socketserver.ThreadingMixIn, http.server.HTTPServer): daemon_threads = True @@ -274,13 +274,21 @@ The rules below are mandatory for every interaction and task. They are intention All changes must remain visible to the user through the standard `git diff` command. Leave modified files in the working directory unstaged. Do not add files to the Git index with `git add` unless the user explicitly asks for staging, committing, or another action that requires staging, because staging hides changes from plain `git diff`. 4. **Typography:** - Always use the regular hyphen-minus (`-`) instead of an em dash (`—`). + Always use the regular hyphen-minus (`-`) instead of long dash characters. 5. **Project context:** At the start of work, pay close attention to all provided project `.md` files, because they are provided automatically and contain the current repository's context and specifics. RULESEOF success "Глобальные правила обновлены: $CONFIG_DIR/global_rules.md" +info "Обновляю native rule-файлы агентов..." +mkdir -p "$HOME/.codex" "$HOME/.kimi-code" "$HOME/.claude" "$HOME/.gemini" +cp "$CONFIG_DIR/global_rules.md" "$HOME/.codex/AGENTS.md" +cp "$CONFIG_DIR/global_rules.md" "$HOME/.kimi-code/AGENTS.md" +cp "$CONFIG_DIR/global_rules.md" "$HOME/.claude/CLAUDE.md" +cp "$CONFIG_DIR/global_rules.md" "$HOME/.gemini/GEMINI.md" +success "Native rule-файлы обновлены" + # ── 7. Очистка старых функций из .bashrc / .zshrc ─────────── clean_rc() { local rc_file="$1" @@ -519,7 +527,7 @@ chmod +x "$HELPERS_FILE" # === ai-gpt === cat > "$BIN_DIR/ai-gpt" << 'GPTEOF' #!/usr/bin/env bash -# ai-gpt — запуск нативного OpenAI Codex +# ai-gpt - запуск нативного OpenAI Codex source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true codex_bin="$HOME/.npm-global/bin/codex" @@ -616,7 +624,7 @@ chmod +x "$BIN_DIR/ai-deepseek" # === ai-kimi === cat > "$BIN_DIR/ai-kimi" << 'KIMIEOF' #!/usr/bin/env bash -# ai-kimi — запуск нативного Kimi Code через Artemox API +# ai-kimi - запуск нативного Kimi Code через Artemox API source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true @@ -799,7 +807,7 @@ chmod +x "$BIN_DIR/ai-kimi" cat > "$BIN_DIR/ai-gemini" << 'GEMINIEOF' #!/usr/bin/env bash # ============================================================ -# ai-gemini — запуск нативного antigravity CLI (agy) +# ai-gemini - запуск нативного antigravity CLI (agy) # ============================================================ agy_bin="$HOME/.local/bin/agy" @@ -840,7 +848,7 @@ chmod +x "$BIN_DIR/ai-gemini" # === ai-claude === cat > "$BIN_DIR/ai-claude" << 'CLAUDEEOF' #!/usr/bin/env bash -# ai-claude — запуск оригинального Claude Code (Anthropic) +# ai-claude - запуск оригинального Claude Code (Anthropic) source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true SYS_PROMPT=$(_build_ai_sys_prompt) exec claude --dangerously-skip-permissions --system-prompt "$SYS_PROMPT" "$@" @@ -859,11 +867,11 @@ echo -e "${GREEN} Установка завершена!${NC}" echo -e "${GREEN}════════════════════════════════════════════════════${NC}" echo "" echo "Доступные команды (теперь это независимые скрипты в ~/.local/bin):" -echo -e " ${CYAN}ai-claude${NC} — Оригинальный Claude Code (Anthropic)" -echo -e " ${CYAN}ai-gpt${NC} — OpenAI Codex (нативный CLI, автоустановка)" -echo -e " ${CYAN}ai-deepseek${NC} — DeepSeek (API ключ сохраняется)" -echo -e " ${CYAN}ai-kimi${NC} — Kimi K2.6 (нативный CLI, автоустановка)" -echo -e " ${CYAN}ai-gemini${NC} — Gemini (нативный agy CLI, автоустановка)" +echo -e " ${CYAN}ai-claude${NC} - Оригинальный Claude Code (Anthropic)" +echo -e " ${CYAN}ai-gpt${NC} - OpenAI Codex (нативный CLI, автоустановка)" +echo -e " ${CYAN}ai-deepseek${NC} - DeepSeek (API ключ сохраняется)" +echo -e " ${CYAN}ai-kimi${NC} - Kimi K2.6 (нативный CLI, автоустановка)" +echo -e " ${CYAN}ai-gemini${NC} - Gemini (нативный agy CLI, автоустановка)" echo "" echo -e "${YELLOW}⚠️ Для Gemini используйте отдельный Google-аккаунт!${NC}" echo "" diff --git a/tests/test_fixes.sh b/tests/test_fixes.sh index 74df9d9..ba4ae28 100755 --- a/tests/test_fixes.sh +++ b/tests/test_fixes.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# tests/test_fixes.sh — unit tests for code-review fixes in ai-setup.sh +# tests/test_fixes.sh - unit tests for code-review fixes in ai-setup.sh # Run: bash tests/test_fixes.sh set -euo pipefail @@ -89,14 +89,18 @@ test_global_rules_include_quality_guidelines() { } test_native_rule_files_generated() { - if echo "$HELPERS_SECTION" | grep -q 'echo "$global_rendered" > "$HOME/.codex/AGENTS.md"' \ + if grep -q 'cp "$CONFIG_DIR/global_rules.md" "$HOME/.codex/AGENTS.md"' "$SCRIPT" \ + && grep -q 'cp "$CONFIG_DIR/global_rules.md" "$HOME/.kimi-code/AGENTS.md"' "$SCRIPT" \ + && grep -q 'cp "$CONFIG_DIR/global_rules.md" "$HOME/.claude/CLAUDE.md"' "$SCRIPT" \ + && grep -q 'cp "$CONFIG_DIR/global_rules.md" "$HOME/.gemini/GEMINI.md"' "$SCRIPT" \ + && echo "$HELPERS_SECTION" | grep -q 'echo "$global_rendered" > "$HOME/.codex/AGENTS.md"' \ && echo "$HELPERS_SECTION" | grep -q 'echo "$global_rendered" > "$HOME/.kimi-code/AGENTS.md"' \ && echo "$HELPERS_SECTION" | grep -q 'echo "$global_rendered" > "$HOME/.claude/CLAUDE.md"' \ && echo "$HELPERS_SECTION" | grep -q 'echo "$global_rendered" > "$HOME/.gemini/GEMINI.md"' \ && ! echo "$HELPERS_SECTION" | grep -q 'echo "$rendered" >'; then - ok "global rules: native rule files contain only global_rules.md" + ok "global rules: setup and launchers write native rule files from global_rules.md" else - fail "global rules: native rule files must not include project prompt render" + fail "global rules: setup and launchers must write native rule files from global_rules.md" fi }