opencode-config/docs/decisions/048-pr-107-dockerfile-memory-deps.md
Sergey 9ebb6d2864
fix(docker): install ripgrep and python deps for memory tools (#107)
* fix(docker): install ripgrep and python deps for memory tools

* docs(handoff): set PR number 107

* docs(project-map): update after dockerfile memory deps changes

* fix(docker): install deps in non-shadow paths /opt/memory and global npm

* docs(handoff): align with /opt/memory and global npm fix

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-27 02:59:17 +03:00

2.8 KiB
Raw Permalink Blame History

ADR-048: Dockerfile — install ripgrep and python deps for memory tools

Статус

Accepted (2026-07-26)

Контекст

После удаления плагина @mathew-cf/opencode-memory (PR #103, ADR-045) его зависимости больше не ставятся в Docker-контейнер. Memory-инструменты (memory-search.ts, python -m src.memory) теперь живут в самом репо (.opencode/tools/ + src/memory/), но их runtime-deps (@vscode/ripgrep, httpx, numpy, tenacity) не попадали в образ. Результат: memory-search падал на отсутствии binary rg, python -m src.memory — на import httpx. Память в контейнере не работала вообще.

Решение

Добавить в Dockerfile два слоя установки deps после npm install -g opencode-ai repomix:

  1. Node runtime depsnpm install -g @vscode/ripgrep (глобально, в /usr/local/lib/node_modules/). Глобальная установка обходит bind-mount ./.opencode:/root/.config/opencode который shadow'ит локальные node_modules в runtime.

  2. Python runtime depsCOPY pyproject.toml uv.lock /opt/memory/ + COPY src/ /opt/memory/src/ + uv sync --no-dev --frozen в /opt/memory/ (вне shadow-пути /root/workspace/). ENV PYTHONPATH=/opt/memory/src + ENV PATH=/opt/memory/.venv/bin:$PATH делают python3 -m src.memory рабочим из любого cwd. Volume ./app_data/workspaces:/root/workspace не shadow'ит /opt/memory/.

Контейнер становится самодостаточным: память работает из коробки после docker compose up -d --build.

Альтернативы

  • Вернуть плагин @mathew-cf/opencode-memory — отвергнуто в PR #103 (плагин удалён, инструменты мигрированы в репо).
  • Ставить deps через apt-get@vscode/ripgrep и Python-пакеты не в Debian repos нужных версий; uv/npm дают детерминизм через lock-файлы.
  • Копировать весь .opencode/ и src/ — раздувает образ; достаточно только manifest + lock для установки deps на этапе build.
  • Deps в /root/.opencode/ + /root/workspace/ (первая попытка) — отвергнуто: bind-mount ./.opencode:/root/.config/opencode и volume ./app_data/workspaces:/root/workspace shadow'ят node_modules и .venv/ в runtime. Deps установлены но не доступны. Исправлено: /opt/memory/ (не shadow) + глобальный npm.