--- pr: 107 title: fix(docker): install ripgrep and python deps for memory tools --- ## Что сделано Добавлены 2 шага в `Dockerfile` после `npm install -g opencode-ai repomix`: 1. **`@vscode/ripgrep`** — `npm install -g @vscode/ripgrep` (глобально, в `/usr/local/lib/node_modules/`). Нужен для keyword search в `memory-search.ts`. Глобальная установка обходит bind-mount `./.opencode:/root/.config/opencode` который shadow'ит локальные node_modules. 2. **Python deps (`httpx`, `numpy`, `tenacity`)** — `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. ## Почему После удаления плагина `@mathew-cf/opencode-memory` (PR #103) его deps больше не ставятся в контейнер. Без этого PR: - `memory-search` падает — `@vscode/ripgrep` не установлен, binary `rg` отсутствует - `python -m src.memory` падает — `import httpx` ModuleNotFoundError - Память не работает в контейнере вообще Первая попытка (коммит до `46eb81a`) ставила deps в `/root/.opencode/` и `/root/workspace/` — но volume `./app_data/workspaces:/root/workspace` shadow'ит `.venv/` и `src/`, а bind-mount `./.opencode:/root/.config/opencode` shadow'ит node_modules. Исправлено: deps в `/opt/memory/` (не shadow) + глобальный npm. Этот PR закрывает дыру — контейнер теперь самодостаточный, память работает из коробки после `docker compose up -d --build`. ## Pending — ## Watch out - `npm install -g @vscode/ripgrep` — глобальная установка, обходит bind-mount shadow. Binary в `/usr/local/lib/node_modules/@vscode/ripgrep-linux-x64/bin/rg`. - `/opt/memory/` — вне volume shadow, переживает пересборку. `.venv` в `/opt/memory/.venv/`. - `PYTHONPATH=/opt/memory/src` — `import src.memory` работает из любого cwd (TS tools запускают `python3 -m src.memory` с `cwd: context.worktree`). - `PATH=/opt/memory/.venv/bin:$PATH` — `python3` резолвится в `.venv/bin/python3` который видит httpx/numpy/tenacity. - `uv sync --no-dev --frozen` строго по `uv.lock` — только runtime deps, детерминизм. - Closes #108.