diff --git a/ai-setup.sh b/ai-setup.sh index 5faaffc..385c3c3 100755 --- a/ai-setup.sh +++ b/ai-setup.sh @@ -212,6 +212,22 @@ cat > "$CONFIG_DIR/global_rules.md" << 'RULESEOF' 5. **Контекст проекта:** При начале работы обращай пристальное внимание на содержимое всех предоставленных `.md` файлов проекта (они передаются тебе автоматически), чтобы сразу погрузиться в контекст и специфику текущего репозитория. + +## Инженерные правила качества + +Данные правила адаптированы из `multica-ai/andrej-karpathy-skills/CLAUDE.md` и совместимы с глобальными правилами выше. + +1. **Думай перед кодом:** + Не делай скрытых предположений. Явно называй важные допущения, неопределенности и технические компромиссы. Если задача допускает несколько несовместимых трактовок и безопасное разумное предположение невозможно - остановись и спроси. Если есть более простой путь - скажи об этом и используй его, когда он решает задачу. + +2. **Сначала простота:** + Пиши минимальный код, который решает поставленную задачу. Не добавляй функции "на будущее", одноразовые абстракции, лишнюю конфигурируемость и обработку невозможных сценариев. Если решение получилось заметно сложнее, чем нужно, упрости его. + +3. **Точечные изменения:** + Трогай только то, что нужно для задачи. Не улучшай соседний код, комментарии и форматирование без необходимости. Следуй существующему стилю проекта. Если видишь не связанный с задачей мертвый код - упомяни его, но не удаляй без просьбы. Удаляй только те неиспользуемые импорты, переменные и функции, которые появились из-за твоих изменений. + +4. **Работа от проверяемой цели:** + Для нетривиальных задач формулируй короткий план и критерии успеха. Исправляя баг, по возможности сначала воспроизведи его или добавь проверку, затем добейся прохождения тестов. После изменений запускай релевантные проверки и явно сообщай, что было проверено. RULESEOF success "Глобальные правила обновлены: $CONFIG_DIR/global_rules.md" @@ -427,19 +443,25 @@ _open_browser() { _build_ai_sys_prompt() { local global_rules="$HOME/.config/ai-setup/global_rules.md" + local global_rendered="" + [ -f "$global_rules" ] && global_rendered="$(cat "$global_rules" 2>/dev/null)" + + # Нативные глобальные правила: только global_rules.md, без проектного контекста. + # Проектные *.md файлы агент должен читать из текущего репозитория сам, если умеет. + # Для агентов без надежного нативного чтения проектный контекст добавляется ниже в prompt. + mkdir -p "$HOME/.codex" "$HOME/.kimi-code" "$HOME/.claude" "$HOME/.gemini" + echo "$global_rendered" > "$HOME/.codex/AGENTS.md" + echo "$global_rendered" > "$HOME/.kimi-code/AGENTS.md" + echo "$global_rendered" > "$HOME/.claude/CLAUDE.md" + echo "$global_rendered" > "$HOME/.gemini/GEMINI.md" + local sp="=== ГЛОБАЛЬНЫЕ ПРАВИЛА ===\n" - [ -f "$global_rules" ] && sp+="$(cat "$global_rules" 2>/dev/null)\n\n" + [ -n "$global_rendered" ] && sp+="$global_rendered\n\n" sp+="=== ПРАВИЛА ПРОЕКТА ===\n" for f in *.md; do [ -f "$f" ] && sp+="\n--- Файл $f ---\n$(cat "$f")\n" done - # Единый source of truth — сохраняем для всех агентов - local rendered - rendered="$(echo -e "$sp")" - mkdir -p "$HOME/.codex" "$HOME/.kimi-code" - echo "$rendered" > "$HOME/.codex/AGENTS.md" - echo "$rendered" > "$HOME/.kimi-code/AGENTS.md" - echo "$rendered" + echo -e "$sp" } HELPEREOF chmod +x "$HELPERS_FILE" diff --git a/tests/test_fixes.sh b/tests/test_fixes.sh index 30724e5..5be4b6c 100755 --- a/tests/test_fixes.sh +++ b/tests/test_fixes.sh @@ -14,6 +14,7 @@ fail() { echo "[FAIL] $1"; FAIL=$((FAIL+1)); } GPT_SECTION=$(awk '/^cat > "\$BIN_DIR\/ai-gpt"/,/^GPTEOF/' "$SCRIPT") KIMI_SECTION=$(awk '/^cat > "\$BIN_DIR\/ai-kimi"/,/^KIMIEOF/' "$SCRIPT") GEMINI_SECTION=$(awk '/^cat > "\$BIN_DIR\/ai-gemini"/,/^GEMINIEOF/' "$SCRIPT") +HELPERS_SECTION=$(awk '/^cat > "\$HELPERS_FILE"/,/^HELPEREOF/' "$SCRIPT") # ── ai-gpt: auto-install codex ──────────────────────────────────────────── test_gpt_autoinstall() { @@ -72,6 +73,29 @@ test_gemini_native_launcher() { fi } +# ── global rules: Karpathy-style guidelines and native rule files ─────────── +test_global_rules_include_quality_guidelines() { + if grep -q 'Инженерные правила качества' "$SCRIPT" \ + && grep -q 'multica-ai/andrej-karpathy-skills/CLAUDE.md' "$SCRIPT" \ + && grep -q 'Точечные изменения' "$SCRIPT"; then + ok "global rules: include Karpathy-style quality guidelines" + else + fail "global rules: missing Karpathy-style quality guidelines" + fi +} + +test_native_rule_files_generated() { + if 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" + else + fail "global rules: native rule files must not include project prompt render" + fi +} + # ── Fix 7: trap quotes $TMP correctly ──────────────────────────────────────── test_fix7_trap_tmp() { if grep -q "trap 'rm -rf \"\$TMP\"' EXIT" "$SCRIPT"; then @@ -98,6 +122,8 @@ test_kimi_autoinstall test_kimi_no_proxy test_kimi_artemox_config test_gemini_native_launcher +test_global_rules_include_quality_guidelines +test_native_rule_files_generated test_fix7_trap_tmp echo ""