* fix(docker): install @mathew-cf/opencode-memory plugin in Dockerfile * test(docker): add Dockerfile npm install test * docs(handoff): set PR number 57 in handoff + ADR-024 --------- Co-authored-by: opencode-agent <agent@slaid098.dev>
4.8 KiB
4.8 KiB
| pr | title |
|---|---|
| 57 | install @mathew-cf/opencode-memory plugin in Dockerfile |
PR #57: install @mathew-cf/opencode-memory plugin in Dockerfile
Что сделано
Dockerfile:34— в строкуnpm install -g opencode-ai repomix --unsafe-permдобавлен@mathew-cf/opencode-memory. Итоговая строка:
Единственное изменение в Dockerfile, больше ничего не трогалось.RUN npm install -g opencode-ai repomix @mathew-cf/opencode-memory --unsafe-permtests/test_dockerfile.py— новый файл, 6 тестов:test_dockerfile_exists— файл существует на repo roottest_memory_plugin_in_npm_install—npm install -gстрока содержит@mathew-cf/opencode-memory(parsed check по строкам сnpm install -g)test_memory_plugin_in_npm_install_raw— raw text содержит@mathew-cf/opencode-memory(belt-and-suspenders)test_opencode_ai_present—npm install -gстрока содержитopencode-ai(regression guard — не удалить случайно)test_opencode_ai_present_raw— raw text содержитopencode-aitest_single_npm_install_line_has_all_packages— все три пакета (opencode-ai,repomix,@mathew-cf/opencode-memory) в одной строке install (anti-split: запрещает разбивать install по нескольким RUN layer'ам)- Проверки raw-text grep (без Docker build), по паттерну
test_docker_compose.py(parsed + raw, belt-and-suspenders).
- ADR-024 + этот handoff.
Почему
После миграции opencode-config на linux-1 обнаружено: @mathew-cf/opencode-memory MCP plugin НЕ установлен в контейнере. opencode.json ссылается на плагин:
"@mathew-cf/opencode-memory",
{ "memoryDir": "{env:OPENCODE_MEMORY_DIR}" }
Но без npm install -g opencode молча пропускает плагин — MCP tools недоступны:
memory_save— memory-syncer subagent не может коммитить в memory repomemory_search— нет semantic/keyword searchmemory_list— нет browsing по категориям
Добавление пакета в существующую строку npm install -g — минимальное изменение: один layer, все три пакета ставятся за один RUN, без нового layer'а.
Pending
— (нет)
Watch out
- RAG CLI требует GLIBC 2.39, node:20-slim имеет GLIBC 2.36 — semantic search НЕ работает.
@mathew-cf/opencode-memoryтянет@mathew-cf/rag-cliкак dependency для semantic search. RAG CLI (native binary) требует GLIBC 2.39, аnode:20-slim(Debian Bookworm) поставляется с GLIBC 2.36. Semantic search через RAG падает с ошибкой совместимости glibc. Memory plugin работает с keyword search (grep) без RAG — этого достаточно дляmemory_searchиmemory_list. Semantic search — опциональная фича, это известная проблема, НЕ блокер. Workaround: keyword search покрывает базовые сценарии. Полный fix semantic search потребует другого base image (например,node:20-bookwormс обновлённым glibc, илиnode:20на Debian Trixie с GLIBC 2.40) — вне scope этого PR. - Все три пакета в одной строке install — тест
test_single_npm_install_line_has_all_packagesнамеренно запрещает разбивку install по нескольким RUN layer'ам. Разбиение добавило бы лишние image layers и скрыло бы, какой пакет отсутствует, при grep-проверке Dockerfile. - Anti-regression тесты (raw + parsed) — дублирующие raw-проверки добавлены намеренно (как в
test_docker_compose.py): parsed-check может пропустить edge case (многострочный install, кавычки), raw-check ловит строку напрямую. Оба должны оставаться. opencode-airegression guard — тестtest_opencode_ai_present(+ raw) защищает от случайного удаленияopencode-aiпри редактировании строки install.opencode-ai— основной пакет, без него контейнер не запустится (ENTRYPOINTopencode).- ADR number = 024 (sequential, следующий после 023), НЕ PR number.