- Зачем: прокси для агента — выбор конкретной машины. Автоматическая
правка ~/.codex/.env и ~/.claude/settings.json оказалась слишком
навязчивой.
- Что: шаблоны перенесены в proxy-client/.config/proxy-client/examples/
(codex.env, claude-settings.json) и попадают на машину вместе с
остальными примерами. install.sh больше не трогает настройки Codex и
Claude, его тесты на это удалены. Инструкция по копированию — в README
proxy-client.
- Проверка: tests/test_install.sh и tests/test_proxy_client_install.sh
проходят.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Зачем: opencode сам читает ~/.agents/skills и ~/.claude/skills. Ссылка
загружала тот же набор третий раз, и opencode выдавал сотни
предупреждений о повторяющихся именах скиллов.
- Что: install.sh больше не создаёт ссылку и удаляет прежнюю, если она
указывает на общие скиллы. README и AGENTS.md обновлены.
- Проверка: tests/test_install.sh проходит. После удаления ссылки
opencode debug skill показывает тот же набор скиллов, теперь из
~/.agents/skills.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Зачем: прокси из окружения запуска до API не доходил. Запросы Codex
отправляет общий демон app-server, и маршрут зависел от того, кто запустил
демон первым. Нужно было и обратное: Codex и Claude должны работать без
прокси, даже если запускающее приложение его задало.
- Что: шаблоны codex/proxy.env (копируется в ~/.codex/.env) и
claude/proxy-settings.json (блок env добавляется в ~/.claude/settings.json).
По умолчанию прокси 127.0.0.1:12334. install.sh не трогает выбор, уже
сделанный на машине. В README описано, как переключить машину на работу
без прокси.
- Проверка: tests/test_install.sh и tests/test_proxy_env_sync.py проходят.
Вручную: значения из ~/.codex/.env и из env в настройках Claude перекрывают
унаследованные переменные; codex doctor проходит через Xray; очищенные
адреса вместе с NO_PROXY=* дают прямое подключение.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Профили дублировали работу permission-reviewer статическими списками:
их deny обходили ревьюер и давали отказы без причины (git push). Теперь
решения об ask принимает плагин; статикой оставлены только deny на чтение
секретов - детерминированная гарантия, LLM-ревьюеру не доверяем.
- opencode.json: default_agent -> build, убраны статические списки
и deny на git push (решение за ревьюером)
- permission-reviewer.jsonc: actorProfiles переключены на встроенные
build/plan
- install.sh: блок линковки agents заменён чисткой старого симлинка;
добавлено копирование permission-reviewer.jsonc в ~/.config/opencode
(плагин читает его только оттуда - раньше тюнинг не применялся)
- тесты: проверка чистки симлинка и копирования конфига ревьюера
- Зачем:
- приложение должно явно работать через прокси и сохранять настройку после обновлений.
- Что:
- добавлены отдельный ярлык ChatGPT Proxy и запускатель на основе proxy-client.
- исключено смешение прямого и проксированного режимов существующего процесса.
- установка, документация и автоматические проверки дополнены новым Stow-пакетом.
- Проверка:
- bash tests/test_chatgpt_proxy_launcher.sh.
- bash tests/test_proxy_launchers.sh.
- bash tests/test_install.sh.
- Зачем:
- конфликт с уже существующим конфигом приходилось разбирать руками:
stow печатал "All operations aborted" и откатывал все пакеты сразу.
- Что:
- backup_conflicting_kitty_files заменена на общую
backup_conflicting_stow_targets по списку AVAILABLE_PACKAGES.
- обход повторяет логику stow: отсутствующая цель и каталоги-симлинки
пропускаются вместе с поддеревом, поэтому свёрнутые пакеты
(~/.codex, ~/.vscode-server) не обходятся и не бэкапятся.
- в фикстуру тестов добавлен пакет wezterm, добавлены тесты на конфликт
в HOME и на неприкосновенность содержимого свёрнутого пакета.
- Проверка:
- bash tests/test_install.sh
- Зачем:
- при существующем ~/.config/kitty/kitty.conf stow печатал
"All operations aborted" и откатывал все пакеты, а install.sh падал
по pipefail, не дойдя до настройки claude, opencode и .bashrc.
- Что:
- добавлена backup_conflicting_kitty_files: неуправляемые файлы и чужие
симлинки в ~/.config/kitty уносятся в .bak с временной меткой перед stow.
- собственные симлинки пакета пропускаются, поэтому повторный запуск
install.sh не плодит бэкапы.
- добавлены тесты на существующий файл, чужой симлинк и повторный запуск.
- из таблицы пакетов README убран zed: он не в PACKAGES с ab4c7c7.
- Проверка:
- bash tests/test_install.sh
- Зачем:
- конфиг kitty не был под контролем версий, а свёрнутый stow-каталог
приводил бы к попаданию рантайм-файлов kitty в репозиторий.
- Что:
- добавлен пакет kitty с минимальным kitty.conf и current-theme.conf
вместо 112 КБ sample-конфига от старой версии.
- в install.sh kitty добавлен в PACKAGES, а ~/.config/kitty создаётся
заранее настоящим каталогом, чтобы stow линковал по файлам.
- тест folding переведён с невыпиленного zed на kitty, устаревшая
проверка ~/.config/zed в тесте миграции заменена на assert_not_exists.
- Проверка:
- bash tests/test_install.sh
- Зачем:
- свежая установка могла превратить ~/.local в ссылку на пакет и записать Xray в репозиторий.
- Что:
- перед Stow теперь гарантируются настоящие ~/.local/bin и ~/.config/proxy-client без раскрытия посторонних ссылок.
- добавлены регрессионные проверки свежего HOME и посторонней ссылки ~/.local.
- README перестроены вокруг установки, выбора режима и ежедневного использования.
- Проверка:
- bash tests/test_install.sh.
- bash tests/test_proxy_launchers.sh.
- bash -n install.sh tests/test_install.sh.
- git diff --cached --check.
- Зачем:
- прежнее имя выпячивало Xray, хотя клиент поддерживает также внешний прокси, а два каталога конфигурации были неочевидны.
- Что:
- пакет, CLI, конфигурация, состояние, тесты и документация переименованы в proxy-client.
- машинный конфиг, профиль и два явных примера собраны в одном пользовательском каталоге.
- свежая установка защищена от сворачивания каталога конфигурации внутрь репозитория.
- Проверка:
- bash tests/test_proxy_client_full.sh.
- bash tests/test_install.sh.
- ручные start, status и xray run -test; незавершённая сетевая приёмка записана в handoff.
- Зачем:
- Claude Code перезаписывает settings.json при каждом «always allow», что создавало
конфликт с managed-копией из dotfiles при повторном запуске install.sh.
- Что:
- settings.json удалён из репозитория, Claude Code владеет им полностью.
- создан settings.local.json (базовые permissions + statusLine), деплоится через симлинк.
- install.sh: копирование + шаблон заменены на ln -sf с бэкапом и guard для edge cases.
- check.sh: проверка обновлена под симлинк вместо «файл + chmod 444».
- тесты: старый тест копирования заменён на 4 новых (симлинк, бэкап, директория, stow-миграция).
- Проверка:
- bash tests/test_install.sh (15 тестов).
- bash agents/.agents/skills/dotfiles-check/check.sh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Зачем:
- нужно было убрать падение install.sh на абсолютных WSL-симлинках и существующей runtime-директории opencode.
- Что:
- убран `--restow` из вызова stow, чтобы install не падал на ссылках `~/.aws` и `~/.azure`.
- настройка `~/.config/opencode` переведена на ручную установку с backup существующего `opencode.json` и сохранением runtime-файлов.
- в tests/test_install.sh добавлены сценарии для WSL-симлинков и существующей директории opencode.
- Проверка:
- bash -n install.sh
- bash -n tests/test_install.sh
- ./tests/test_install.sh
- Зачем:
- нужно было убрать баги install.sh и сделать регрессии воспроизводимыми.
- Что:
- исправлена установка через stow в HOME, миграция ~/.claude и копирование settings.json без разрушения рабочей директории.
- стабилизирована WSL-логика через проверки интерактивности и защиту от дублирования boot command.
- добавлен tests/test_install.sh с regression-сценариями для install.sh.
- Проверка:
- bash -n install.sh
- bash -n tests/test_install.sh
- ./tests/test_install.sh