* 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>
36 lines
No EOL
2.7 KiB
Markdown
36 lines
No EOL
2.7 KiB
Markdown
---
|
||
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. |