Write native agent rules during setup
This commit is contained in:
@@ -68,13 +68,15 @@ exec bash
|
|||||||
- Kimi config пишется в `${KIMI_CODE_HOME:-$HOME/.kimi-code}/config.toml`.
|
- Kimi config пишется в `${KIMI_CODE_HOME:-$HOME/.kimi-code}/config.toml`.
|
||||||
- Глобальные правила пишутся в `~/.config/ai-setup/global_rules.md`.
|
- Глобальные правила пишутся в `~/.config/ai-setup/global_rules.md`.
|
||||||
|
|
||||||
При запуске лаунчеры вызывают helper `_build_ai_sys_prompt`. Он обновляет native rule-файлы:
|
При запуске `ai-setup.sh` сразу обновляются native rule-файлы:
|
||||||
|
|
||||||
- `~/.codex/AGENTS.md`
|
- `~/.codex/AGENTS.md`
|
||||||
- `~/.kimi-code/AGENTS.md`
|
- `~/.kimi-code/AGENTS.md`
|
||||||
- `~/.claude/CLAUDE.md`
|
- `~/.claude/CLAUDE.md`
|
||||||
- `~/.gemini/GEMINI.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.
|
В native rule-файлы попадают только глобальные правила. Полный prompt с проектными `.md` используется в `ai-claude`, `ai-deepseek` и `ai-gemini`; `ai-gpt` и `ai-kimi` полагаются на native rule-файлы своих CLI.
|
||||||
|
|
||||||
## Права запуска агентов
|
## Права запуска агентов
|
||||||
|
|||||||
34
ai-setup.sh
34
ai-setup.sh
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/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
|
# Запуск: bash ai-setup.sh
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ cat > "$EFFORT_PROXY_BIN" << 'PYEOF'
|
|||||||
"""Effort mapping proxy for GPT backend.
|
"""Effort mapping proxy for GPT backend.
|
||||||
|
|
||||||
claude-code-proxy now accepts: low, medium, high, max (no "xhigh").
|
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
|
import http.client, http.server, sys, logging, socketserver
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ logging.basicConfig(
|
|||||||
)
|
)
|
||||||
log = logging.getLogger("effort-proxy")
|
log = logging.getLogger("effort-proxy")
|
||||||
|
|
||||||
# Потокобезопасный сервер — обрабатывает несколько запросов одновременно
|
# Потокобезопасный сервер - обрабатывает несколько запросов одновременно
|
||||||
class _ThreadedServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
|
class _ThreadedServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
|
||||||
daemon_threads = True
|
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`.
|
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:**
|
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:**
|
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.
|
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
|
RULESEOF
|
||||||
success "Глобальные правила обновлены: $CONFIG_DIR/global_rules.md"
|
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 ───────────
|
# ── 7. Очистка старых функций из .bashrc / .zshrc ───────────
|
||||||
clean_rc() {
|
clean_rc() {
|
||||||
local rc_file="$1"
|
local rc_file="$1"
|
||||||
@@ -519,7 +527,7 @@ chmod +x "$HELPERS_FILE"
|
|||||||
# === ai-gpt ===
|
# === ai-gpt ===
|
||||||
cat > "$BIN_DIR/ai-gpt" << 'GPTEOF'
|
cat > "$BIN_DIR/ai-gpt" << 'GPTEOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ai-gpt — запуск нативного OpenAI Codex
|
# ai-gpt - запуск нативного OpenAI Codex
|
||||||
source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true
|
source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true
|
||||||
|
|
||||||
codex_bin="$HOME/.npm-global/bin/codex"
|
codex_bin="$HOME/.npm-global/bin/codex"
|
||||||
@@ -616,7 +624,7 @@ chmod +x "$BIN_DIR/ai-deepseek"
|
|||||||
# === ai-kimi ===
|
# === ai-kimi ===
|
||||||
cat > "$BIN_DIR/ai-kimi" << 'KIMIEOF'
|
cat > "$BIN_DIR/ai-kimi" << 'KIMIEOF'
|
||||||
#!/usr/bin/env bash
|
#!/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
|
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'
|
cat > "$BIN_DIR/ai-gemini" << 'GEMINIEOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# ai-gemini — запуск нативного antigravity CLI (agy)
|
# ai-gemini - запуск нативного antigravity CLI (agy)
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
agy_bin="$HOME/.local/bin/agy"
|
agy_bin="$HOME/.local/bin/agy"
|
||||||
@@ -840,7 +848,7 @@ chmod +x "$BIN_DIR/ai-gemini"
|
|||||||
# === ai-claude ===
|
# === ai-claude ===
|
||||||
cat > "$BIN_DIR/ai-claude" << 'CLAUDEEOF'
|
cat > "$BIN_DIR/ai-claude" << 'CLAUDEEOF'
|
||||||
#!/usr/bin/env bash
|
#!/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
|
source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true
|
||||||
SYS_PROMPT=$(_build_ai_sys_prompt)
|
SYS_PROMPT=$(_build_ai_sys_prompt)
|
||||||
exec claude --dangerously-skip-permissions --system-prompt "$SYS_PROMPT" "$@"
|
exec claude --dangerously-skip-permissions --system-prompt "$SYS_PROMPT" "$@"
|
||||||
@@ -859,11 +867,11 @@ echo -e "${GREEN} Установка завершена!${NC}"
|
|||||||
echo -e "${GREEN}════════════════════════════════════════════════════${NC}"
|
echo -e "${GREEN}════════════════════════════════════════════════════${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Доступные команды (теперь это независимые скрипты в ~/.local/bin):"
|
echo "Доступные команды (теперь это независимые скрипты в ~/.local/bin):"
|
||||||
echo -e " ${CYAN}ai-claude${NC} — Оригинальный Claude Code (Anthropic)"
|
echo -e " ${CYAN}ai-claude${NC} - Оригинальный Claude Code (Anthropic)"
|
||||||
echo -e " ${CYAN}ai-gpt${NC} — OpenAI Codex (нативный CLI, автоустановка)"
|
echo -e " ${CYAN}ai-gpt${NC} - OpenAI Codex (нативный CLI, автоустановка)"
|
||||||
echo -e " ${CYAN}ai-deepseek${NC} — DeepSeek (API ключ сохраняется)"
|
echo -e " ${CYAN}ai-deepseek${NC} - DeepSeek (API ключ сохраняется)"
|
||||||
echo -e " ${CYAN}ai-kimi${NC} — Kimi K2.6 (нативный CLI, автоустановка)"
|
echo -e " ${CYAN}ai-kimi${NC} - Kimi K2.6 (нативный CLI, автоустановка)"
|
||||||
echo -e " ${CYAN}ai-gemini${NC} — Gemini (нативный agy CLI, автоустановка)"
|
echo -e " ${CYAN}ai-gemini${NC} - Gemini (нативный agy CLI, автоустановка)"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${YELLOW}⚠️ Для Gemini используйте отдельный Google-аккаунт!${NC}"
|
echo -e "${YELLOW}⚠️ Для Gemini используйте отдельный Google-аккаунт!${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/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
|
# Run: bash tests/test_fixes.sh
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@@ -89,14 +89,18 @@ test_global_rules_include_quality_guidelines() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test_native_rule_files_generated() {
|
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/.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/.claude/CLAUDE.md"' \
|
||||||
&& echo "$HELPERS_SECTION" | grep -q 'echo "$global_rendered" > "$HOME/.gemini/GEMINI.md"' \
|
&& echo "$HELPERS_SECTION" | grep -q 'echo "$global_rendered" > "$HOME/.gemini/GEMINI.md"' \
|
||||||
&& ! echo "$HELPERS_SECTION" | grep -q 'echo "$rendered" >'; then
|
&& ! 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
|
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
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user