opencode-config/docs/handoff/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

36 lines
No EOL
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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.