Commit Graph

154 Commits

Author SHA1 Message Date
Виталий Никитенко
0e15033351 refactor: убрать multi-agent из /el-review — инлайн-ревью силами Claude
Убран вызов встроенного /review (multi-agent workflow). Теперь Claude
читает дифф сам и выдаёт только критические проблемы с готовыми diff-фиксами.

- Никаких sub-agent'ов и deep cross-file investigations
- Только баги, утечки, падения, гонки, нарушения инвариантов
- Исключены: форматирование, нейминг, стиль, рефакторинг
- Готовый diff на каждую проблему, коротко, на русском

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 09:19:39 +03:00
Виталий Никитенко
a74597dba6 feat: добавить ai-opencode лаунчер (OpenCode Go + routatic-proxy)
- Новый лаунчер ai-opencode с routatic-proxy на 127.0.0.1:3456
- Автоустановка routatic-proxy под linux/darwin amd64/arm64
- Модели: deepseek-v4-pro (opus/sonnet), kimi-k2.6 (haiku)
- AI_RESET_KEY, OPENCODE_GO_API_KEY env fallback, управление opencode_key
- Документация: EFFORT_MAPPING.md, QUICK_START.md, README.md
- Статус-проверка в setup.sh: ai-opencode, opencode_key, opencode.ai
- Тесты: 4 новых теста для ai-opencode в test_fixes.sh

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 08:41:38 +03:00
Виталий Никитенко
cf0cd749e9 chore: убрать правило про типографику из глобальных правил агентов
Удалён пункт Typography (дефис-минус вместо длинных тире),
последующие пункты перенумерованы.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-22 14:42:41 +03:00
Виталий Никитенко
c4fea61d74 refactor: пункт 1 больше не трогает сеть, управление VLESS только в пункте 9
Пункты 1/7/8 вызывали AI_SETUP_VLESS=0, что запускало откат сетевых настроек
(stop xray, сброс прокси GNOME, перепись Firefox user.js, IPv6 on), хотя они
относятся только к установке AI-инструментов. Добавлен режим skip (дефолт):
сеть не трогается, лаунчеры синхронизируются с текущим состоянием xray.
Включение/отключение VLESS - только пункт 9.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-22 14:41:29 +03:00
24416e88e4 refactor: убрать MiniMax/Llama из ai-openrouter, заменить на GLM 5.2
- слот HAIKU переведён с MiniMax M3 на GLM 5.2 (z-ai/glm-5.2)
- слот FABLE (Llama 4 Maverick) удалён полностью
- README и заголовок ai-setup.sh обновлены соответственно

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-21 20:48:02 +03:00
b99b9fcb7d Add AI launcher sound notifications 2026-06-21 09:46:33 +03:00
c0f27600cb feat: сброс ключа через AI_RESET_KEY и переввод при 429
- ai-deepseek, ai-glm, ai-openrouter: AI_RESET_KEY=1 принудительно
  удаляет сохранённый ключ перед запуском
- при 429 предлагается ввести новый ключ вместо немедленного выхода
- OpenRouter сбрасывает ключ без reauth (там нет переменной reauth)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-20 11:27:22 +03:00
41aadbc50f fix: автоматическая установка jq и неинтерактивный пункт 1 setup
- устанавливать jq автоматически, необходим для statusline-command.sh
- не спрашивать GitHub PAT в пункте 1, пропускать marketplace без GITHUB_TOKEN
- добавлена документация по Unicode-рендерингу статусной строки

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-20 11:00:41 +03:00
Виталий Никитенко
3e15729a81 refactor: вынести вопрос про VLESS из пункта 1 в отдельный пункт меню (9)
Пункты 1 (AI-инструменты), 7 (Обновить), 8 (Android CLI) теперь запускают
ai-setup.sh с AI_SETUP_VLESS=0 без вопросов. Пункт 9 (VLESS) спрашивает
включить/отключить и передаёт AI_SETUP_VLESS=1/0 соответственно.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 06:46:14 +03:00
Виталий Никитенко
83a7790235 feat: добавить ai-glm - лаунчер Claude Code через Zhipu AI GLM 5.2
Новый лаунчер ai-glm запускает Claude Code через официальный Anthropic-совместимый
API Zhipu AI (api.z.ai). Модели: glm-5.2 (opus/sonnet), glm-5.2[1m] (haiku).
Обновлены документация, статус, тесты и EFFORT_MAPPING.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 06:41:41 +03:00
Виталий Никитенко
463a3f0bc6 feat: добавить study-git и study-red в исключения ru-bypass
Добавлены домены study-git.eltex-co.ru и study-red.eltex-co.ru в builtin kill switch exceptions и /etc/hosts блок.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 08:09:21 +03:00
Виталий Никитенко
61a4421ed2 fix: статусбар показывает реальный email активного Claude-аккаунта
Статусбар слепо доверял accounts/current и показывал legacy-имя даже когда
активна сессия другого аккаунта. Теперь сверяем accessToken из
<current>.credentials.json с активным ~/.claude/.credentials.json и при
расхождении резолвим аккаунт по токену: локальный матч плюс account-email.sh
вместо haiku-велосипеда. Kimi-блок показывает alias (account1/account2).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 06:41:33 +03:00
1cb4853dca refactor: нативный persistence effort, выпил мёртвого кэша effort_*
EFFORT_MAPPING, statusline и _apply_effort переведены на нативное
хранение уровня в settings.json лаунчера. Убран CLAUDE_CODE_EFFORT_LEVEL
(он блокировал /effort внутри сессии) и кэш ~/.cache/ai-setup/effort_*,
который никто не читал и который врал относительно реального уровня.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 05:21:12 +03:00
7a5a977aca feat: поддержка API-ключей в add/switch-account, не только Claude.ai
Хуки add-account и switch-account теперь ветвятся по AI_LAUNCHER:
claude - циклический обход сохранённых Claude.ai аккаунтов,
kimi - добавление и переключение API-ключей по кругу.
Skills обновлены под "account or API key".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 05:21:12 +03:00
2632f4af11 feat: добавить поддержку Google Android CLI и android-cli skill
- Установка android CLI из dl.google.com для linux/mac/windows
- Запуск android init для деплоя skills в агентов
- Кастомный skill android-cli в home-configs/claude/skills/
- Пункт меню 8) Android CLI в setup.sh
- Тесты и документация

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-14 09:52:26 +03:00
38b5f2710c docs: sync README/QUICK_START/EFFORT_MAPPING with current code
- Update ai-openrouter models in ai-setup.sh output and header
- Fix effort persistence wording (statusbar -> launcher)
- Unify KS_EXCEPTIONS -> KILL_SWITCH_EXCEPTIONS in docs and setup.sh prompt
- Clarify menu item 7 only updates AI launchers
- Add IPv6 note after ks-off.sh
- Scope UFW before.rules insertion to *filter section

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 09:16:37 +03:00
6c2844ce92 feat: добавить поддержку Kimi K2.7 Code в ai-kimi
- Opus/Sonnet: kimi-k2.7 (флагманский программист)
- Haiku/Subagent: kimi-k2.6 (быстрый универсал)
- Проверка ключа тестирует kimi-k2.7
- Обновлён EFFORT_MAPPING.md и тесты

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-12 21:42:28 +03:00
dfa706e7a0 feat: поддержка баланса OpenRouter в statusline + обновление модели-пикера
- Добавлен _openrouter_balance() в ai-api-helpers.sh
- Statusline теперь показывает баланс для openrouter лаунчера
- Обновлены дефолтные модели в ai-openrouter (Grok 4.20 как opus и т.д.)
- Улучшена изоляция конфигов для deepseek/kimi/openrouter

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-12 11:19:29 +03:00
648c9f068b fix: кэш процентов usage по аккаунту, а не только по модели
Лимиты привязаны к аккаунту, но кэш rate_limits ключевался только по
model_id. При /switch-account (та же модель) проценты смешивались между
аккаунтами. Добавил account в ключ кэша — у каждого аккаунта свои проценты.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 09:28:05 +03:00
f3d1b6d5c5 fix: определение Claude-аккаунта по токену вместо auth status
Корень багов с потерей токенов: claude auth status читает
oauthAccount.emailAddress из ~/.claude.json, который рассинхронизирован
с реальным токеном в .credentials.json. Из-за этого хуки определяли
текущий аккаунт неверно и сохраняли активный токен под чужим именем,
затирая credentials другого аккаунта.

- account-email.sh (новый): определяет email по OAuth-токену —
  локальный матчинг с accounts/, затем API /api/oauth/profile
- switch-account-hook.sh: current выводится из токена, а не из
  auth status/хрупкого файла current — порча файлов исключена.
  Перезапуск не нужен: на Linux Claude Code перечитывает
  .credentials.json на лету
- add-account-hook.sh: email нового аккаунта тоже через хелпер
- skill add-account: убрано упоминание перезапуска
- ai-setup.sh: деплой account-email.sh (секция 6.7.05)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 09:06:44 +03:00
fe439fd4a6 feat: автодобавление Claude-аккаунта через /add-account
- новый хук add-account-hook.sh: сохраняет текущий аккаунт по реальному
  email (claude auth status), запускает OAuth-логин в фоне и после успеха
  сам сохраняет новый аккаунт в ~/.claude/accounts + делает его current
- switch-account-hook.sh: активный аккаунт определяется через
  claude auth status, а не через хрупкий файл current - защита от порчи
  сохранённых credentials при рассинхроне токена
- скилл add-account: краткая инструкция после срабатывания хука
- ai-setup.sh: деплой add-account-hook + регистрация в UserPromptSubmit

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 08:19:46 +03:00
f8465580e0 feat: полная изоляция моделей между ai-* и гибридный persistence effort
Раньше все ai-* лаунчеры делили один ~/.claude и общий settings.json, из-за
чего кастомная модель (openai/gpt-5.5) из ai-openrouter протекала в пикер
ai-claude. Теперь каждый сторонний провайдер изолирован в своём
CLAUDE_CONFIG_DIR (~/.config/ai-setup/cfg/<launcher>) - свои settings.json и
.claude.json, ноль протечек. ai-claude остаётся на ~/.claude (нативный логин).

Пикеры /model приведены к требуемому виду:
- ai-deepseek: только DeepSeek V4 Pro (opus) и DeepSeek V4 Flash (haiku),
  дефолт Pro; через availableModels + ANTHROPIC_DEFAULT_*_MODEL_NAME
- ai-kimi: только Kimi K2.6 (opus)
- ai-claude: только нативные модели Claude
Общие skills и CLAUDE.md шарятся симлинком из ~/.claude.

Persistence effort - гибрид:
- low/medium/high/xhigh живут нативно в settings.json лаунчера, /effort
  внутри сессии работает свободно и уровень сохраняется
- max нельзя сохранить в settings.json (session-only), поэтому он
  восстанавливается через CLAUDE_CODE_EFFORT_LEVEL; в такой max-сессии
  /effort залочен (ограничение Claude Code), выход - AI_EFFORT=<lvl> ai-*
Текущий уровень ловит статусбар в ~/.cache/ai-setup/effort_<launcher>.

Удалён устаревший effort-save-hook (заменён нативным persistence + гибридом),
почищен из ~/.claude/settings.json и осиротевший кэш model_*.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 07:33:30 +03:00
07983ea84e fix: денежный зелёный цвет баланса DeepSeek (78 вместо 183) 2026-06-11 22:49:32 +03:00
222bb129eb feat: брендовые цвета имён моделей, персистентность model между сессиями
- _brand_color: цвет имени модели по AI_LAUNCHER
  deepseek=синий(69), claude=оранжевый(173), kimi=голубой(81),
  openrouter=фиолетовый(135), остальные=кремовый(223)
- _restore_model / _restore_model_str: сохранение и восстановление
  model_id в кэше лаунчера (~/.cache/ai-setup/model_<launcher>)
- effort-save-hook также сохраняет model_id при завершении сессии
- ai-claude/ai-openrouter используют восстановленную модель при старте

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-11 22:45:49 +03:00
54742d6a36 feat: гармоничная палитра статусной строки и радужный effort max
Цветовая палитра (все из 256-color, мягкие оттенки):
  CWD/Branch:      серый (250)
  Model/Account:    кремовый (223)
  Effort [low]:     золотой (220)
  Effort [medium]:  бирюзовый (43)
  Effort [high]:    небесно-голубой (39)
  Effort [xhigh]:   лавандовый (171)
  Effort [max]:     радуга (210/220/114/43/171) — скобки участвуют
  DeepSeek баланс:  светло-фиолетовый (147)
  Rate/ctx <40%:    мягкий зелёный (114)
  Rate/ctx 40-60%:  золотистый (221)
  Rate/ctx >=60%:   мягкий красный (210)

- _effort_color выводит [level] целиком (для max — посимвольно)
- Effort persistence: StatusLine сохраняет effort в кэш лаунчера
- Мультивалютный баланс DeepSeek с символами ($ и ¥)
- Автоопределение аккаунта Claude.ai по OAuth токену

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-11 22:21:19 +03:00
44e3ea90f9 fix: изоляция effort между ai-* лаунчерами и персистентность
- _restore_effort: каждый лаунчер читает свой effort из
  ~/.cache/ai-setup/effort_<launcher> и записывает в settings.json
- effort-save-hook.sh: сохраняет effortLevel из settings.json в кэш
  при завершении сессии (через Claude Code hooks)
- Все лаунчеры (claude/deepseek/kimi/openrouter) экспортируют
  AI_LAUNCHER для идентификации в statusline и хуках
- _deepseek_balance: мультивалютный вывод (USD + CNY с символами $ и ¥)
- Дефолтные effort: claude=xhigh, deepseek/kimi/openrouter=high

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-11 22:21:13 +03:00
3f61f15507 fix: автоопределение аккаунта, изоляция effort, фикс разлогина
- switch-account-hook.sh: сохранять обновлённые OAuth-токены обратно в файл
  аккаунта перед переключением — предотвращает 401 после обратного свитча
- statusline-command.sh:
  - effort.level из stdin (сессия), а не из общего settings.json —
    ai-claude и ai-deepseek больше не пересекаются
  - автоопределение аккаунта по access-токену в .credentials.json
  - фолбек: если аккаунт не найден — запрос к haiku напрямую через
    Anthropic (в обход DeepSeek) для определения email
  - показ аккаунта только для claude-* моделей
2026-06-11 21:20:44 +03:00
Виталий Никитенко
23256d9579 feat: аккаунт между веткой и моделью, exit 0 в switch-account хуке
- statusline: [account] выводится между [branch] и model, тот же оранжевый цвет
- switch-account-hook: exit 0 вместо exit 2, чтобы Claude ответил и перерисовал статусбар
- switch-account skill: инструкция отвечать одним символом ✓

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 08:55:05 +03:00
cff3ed880d fix: убрать все хаки обновления статусной строки
Claude Code не предоставляет API для обновления статусной строки в idle.
SIGWINCH, TIOCSWINSZ, запись в TTY, write в stdin - ничего не работает.
Статусная строка обновится при следующем LLM запросе автоматически.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:35:31 +03:00
08f23e857e feat: прямая перерисовка статусной строки через TTY escape-коды
SIGWINCH и TIOCSWINSZ не заставляют Claude Code обновить статусную строку.
Запускаем statusline-command.sh с кешем и пишем результат напрямую
в TTY claude через \0337 (save cursor) / \033[999B / \033[2K / \0338.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:22:36 +03:00
986abf5101 fix: resize через TIOCSWINSZ ioctl на TTY вместо kill -WINCH
SIGWINCH напрямую игнорируется. TIOCSWINSZ на TTY claude посылает
SIGWINCH через kernel к foreground process group.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:20:35 +03:00
7187aa6669 fix: SIGWINCH с задержкой 0.3s в фоне после exit 2
SIGWINCH до exit 2 игнорируется - claude ещё рисует блокировку.
Запускаем sleep+kill в фоне, они живут после завершения хука.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:18:29 +03:00
c86110fbd6 fix: SIGWINCH точно в процесс claude (дедушка хука sh->claude)
bash(хук) -> sh -c -> claude. Шлём SIGWINCH через ppid от sh_pid.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:17:06 +03:00
76fb86f910 feat: статусная строка обновляется сразу после /switch-account
Посылаем SIGWINCH родительскому процессу claude после переключения -
это заставляет TUI перерисовать UI включая статусную строку.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:11:44 +03:00
50c26736f1 fix: хук читает поле prompt (не user_prompt) - реальный Claude Code
Документация врала: реальный UserPromptSubmit шлёт поле prompt, а не user_prompt.
Хук получал пустую строку и выходил с exit 0, пропуская блокировку.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:06:10 +03:00
71ef0f76f3 fix: switch-account - скилл-заглушка + exit 2 для блокировки LLM
Без скилла Claude Code выдаёт "Unknown command" до запуска хука.
Скилл нужен как регистрация команды, но тело пустое - хук перехватывает
через exit 2 (stderr) до вызова LLM. Откат изменения в ai-setup.sh
которое скрывало скилл от деплоя.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:03:20 +03:00
88061f310a fix: switch-account не деплоится как скилл, только как хук
Скилл switch-account загружался в LLM раньше чем срабатывал UserPromptSubmit
хук - из-за этого каждый /switch-account съедал токены. Теперь ai-setup.sh
пропускает "hook-backed skills" при деплое в ~/.claude/skills/, хук перехватывает
команду до LLM и возвращает decision:block.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 20:59:29 +03:00
c6161c3332 feat: переключение аккаунтов через хук без токенов LLM
- UserPromptSubmit хук перехватывает /switch-account до LLM, переключает
  credentials по кругу и возвращает decision:block - нулевой расход токенов
- Статусная строка: effort и имя аккаунта в квадратных скобках [high·work]
- ai-setup.sh деплоит хук switch-account-hook.sh и прописывает его в settings.json
- Скилл switch-account оставлен как fallback-документация для setup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 20:58:06 +03:00
57d171a592 scripts/fuck-rkn.sh 2026-06-09 23:59:57 +07:00
Виталий Никитенко
aed7468068 fix: ru-bypass больше не раздувает /etc/hosts дублями
- sed удаляет всё от маркера до конца файла, а не только строку с маркером
- заодно чистит старые дубли без маркера (eltex.loc, eltex-co.ru)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:36:26 +03:00
Виталий Никитенко
4ae5ca149a feat: автоопределение BIN_DIR — ~/bin если есть в PATH, иначе ~/.local/bin
- BIN_DIR теперь определяется по наличию ~/bin в PATH (для Mint, где нет .bashrc)
- source путей в генерируемых скриптах заменены на self-referential (через BASH_SOURCE)
- agy_bin подменяется post-generation sed при нестандартном BIN_DIR
- add_path_to_rc() формирует PATH динамически с учётом BIN_DIR
- при миграции на ~/bin старые скрипты из ~/.local/bin удаляются

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 13:39:29 +03:00
Виталий Никитенко
cb8c3c9544 fix: автоотключение IPv6 при настройке kill switch
IPv6-трафик обходит UFW (который работает только с IPv4) — kill switch
не защищает от утечек по IPv6.

Изменения:
- ru-bypass.sh: молча отключает IPv6 (sysctl + /etc/sysctl.d) при
  каждом запуске, если есть глобальные IPv6-адреса
- ks-on.sh: тоже отключает IPv6, но без интерактивного вопроса
  (раньше спрашивал «Отключить IPv6? [Y/n]»)
- ai-setup.sh (direct mode): не восстанавливает IPv6, если
  UFW kill switch активен (раньше безусловно включал обратно,
  из-за чего после каждого запуска setup.sh IPv6 снова утекал)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 12:48:32 +03:00
Виталий Никитенко
d2bbcc7e33 fix: kill switch — UFW before.rules с актуальным DEV, прямые iptables, /etc/hosts для *.eltex.loc и elph
Три корневые проблемы и их исправления:

1. MANAGE_BUILTINS=no в /etc/default/ufw — цепочка ufw-before-output
   не вызывалась из OUTPUT, правила before.rules не применялись.
   → автофикс no→yes + прямые правила iptables (не зависят от UFW).

2. UFW-правила создавались однократно по маркеру — при смене DEV
   (wlp1s0→enp4s0) продолжали ссылаться на старый интерфейс.
   → теперь при каждом запуске удаляются и пересоздаются с актуальным DEV.

3. DNS через VPN для локальных доменов возвращал внешние IP вместо
   внутренних (RFC1918) — трафик уходил в VPN и не достигал серверов.
   → /etc/hosts с фиксированными IP для *.eltex.loc, mattermost, elph.
   → замена dig +short на getent hosts (уважает /etc/hosts).

Добавлены built-in KILL_SWITCH_EXCEPTIONS:
  mattermost.eltex-co.ru elph.eltex-co.ru 10.80.0.15

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 12:44:20 +03:00
Виталий Никитенко
e955c928d3 fix: сохранение конфига в /etc/ru-bypass.conf для systemd/NM dispatcher
ru-bypass.sh теперь сохраняет параметры (GATEWAY, DEV, LOCAL_DNS, AMNEZIA_SERVER,
KILL_SWITCH_EXCEPTIONS) в /etc/ru-bypass.conf при каждом запуске, и читает их
оттуда при старте из systemd/NM dispatcher (без env). ENV-переменные имеют приоритет.

setup.sh: read -e -i для KS_EXCEPTIONS - редактирование значения инлайн вместо
показа текущего значения в скобках.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 12:14:47 +03:00
Виталий Никитенко
775bca1cee fix: чтение KS_EXCEPTIONS из профиля сети
Ключ при записи KILL_SWITCH_EXCEPTIONS, а при чтении искался KS_EXCEPTIONS —
исключения kill switch не загружались при повторном запуске setup.sh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 09:32:16 +03:00
Виталий Никитенко
2079768318 fix: system-prompt через файл, кеш rate_limits при старте, SessionStart хук
- Все лаунчеры (ai-claude, ai-deepseek, ai-kimi, ai-openrouter): промпт
  пишется во временный файл через --system-prompt-file вместо аргумента
  командной строки. Решает E2BIG при промптах > 128KB (MAX_ARG_STRLEN)
  из проектов с большими .md файлами.

- statusline: кешируем rate_limits по model_id (раздельные файлы для
  claude/kimi/openrouter). При старте сессии показываем данные из кеша
  + ctx:0%. Убирает пустую статусную строку до первого запроса.

- settings.json: добавляем SessionStart хук при setup, триггерит
  вызов statusLine при открытии сессии.

- ai-claude: --model sonnet зафиксирован, убрали exec для корректной
  работы trap (cleanup временного файла).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 09:24:03 +03:00
Виталий Никитенко
cf34698116 Revert "fix: статусная строка — DeepSeek per-request стоимость вместо статичного баланса"
This reverts commit 6c7324bfd8.
2026-06-08 07:56:25 +03:00
Виталий Никитенко
6c7324bfd8 fix: статусная строка — DeepSeek per-request стоимость вместо статичного баланса
DeepSeek: накопленная стоимость сессии по DeepSeek-ценам (V4: $0.55/$2.19, V3: $0.27/$1.10)
Anthropic/Kimi/прочие: рейт-лимиты (5h, 7d) без долларов
Все: заполнение контекста (ctx%)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 07:51:52 +03:00
Виталий Никитенко
beca4de9cd refactor: разделил AMNEZIA_SERVER и KILL_SWITCH_EXCEPTIONS
- AMNEZIA_SERVER — только IP/домены серверов Amnezia (для поднятия VPN)
- KILL_SWITCH_EXCEPTIONS — дополнительные исключения (git, etc.)
- Обе переменные поддерживают IP и домены (DNS-резолвинг)
- setup.sh: раздельные промпты в меню

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 07:01:51 +03:00
Виталий Никитенко
398e57c648 fix: kill switch не блокировал не-.ru трафик + Amnezia не могла подключиться
- ru-bypass.sh: добавлен ufw default deny outgoing (раньше нигде не выполнялся)
- ru-bypass.sh: добавлен ufw allow out on amn0 (разрешён трафик через VPN)
- ru-bypass.sh: поддержка AMNEZIA_SERVER — IP добавляется в ipset и маршруты
- ks-on.sh: default deny + allow amn0 при восстановлении kill switch
- setup.sh: меню запрашивает/сохраняет/передаёт AMNEZIA_SERVER
- test_network.sh: DEV читается из конфига вместо жёсткого wl[pi]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 06:51:48 +03:00