* 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>
25 lines
No EOL
2.8 KiB
Markdown
25 lines
No EOL
2.8 KiB
Markdown
# 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 deps** — `npm install -g @vscode/ripgrep` (глобально, в `/usr/local/lib/node_modules/`). Глобальная установка обходит bind-mount `./.opencode:/root/.config/opencode` который shadow'ит локальные node_modules в runtime.
|
||
|
||
2. **Python runtime deps** — `COPY 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. |