--- pr: 103 title: Remove @mathew-cf/opencode-memory plugin + setup-memory.sh + Rust artifacts --- ## Что сделано Cleanup двойной системы памяти после перехода на единую гибридную (5 TS tools PR #101 + E2E PR #102). Удалено всё, что связано со старой plugin-based системой: 1. **`opencode.json`** — убран блок `plugin` с `@mathew-cf/opencode-memory` (строки 3-10). JSON остался валидным. 2. **`Dockerfile:34`** — `@mathew-cf/opencode-memory` убран из `npm install -g` (`opencode-ai repomix --unsafe-perm`). 3. **Удалены файлы**: - `.opencode/scripts/setup-memory.sh` — заменён на auto-setup в `memory-save.ts` - `.opencode/tools/memory-setup.ts` — заменён на `memory-doctor.ts` (read-only) 4. **Rust артефакты на хосте** (не в git): - `~/.local/share/opencode/opencode-memory/.rag/index.bin` (7.5 MB, Rust binary) - `~/.local/share/opencode/opencode-memory/.rag/meta.json` (12 KB, Rust формат `hidden_size`/`model_id`/`file_hashes` — перетёр бы Python `version`/`files`) - `~/.cache/opencode/packages/@mathew-cf/opencode-memory@latest/` (85 MB) - `~/.cache/opencode/packages/@mathew-cf/opencode-memory/` (85 MB, sibling без `@latest` — тот же плагин, удалён для полноты cleanup) - Итого освобождено: ~177.5 MB - Python `index.json` (210 MB, 4096-dim embeddings) НЕ тронут. 5. **`AGENTS.md`** (project) — таблица Tool Usage Policy обновлена: убран `memory-setup()`, добавлены `memory-doctor`, `memory-save`, `memory-search`, `memory-list`, `memory-access` (kebab-case для TS tools). 6. **`SKILL.md`** (`.opencode/skills/memory/`) — обновлены имена tools (`memory_search` → `memory-search`), описание (плагин удалён, 5 TS tools), default путь памяти (`/root/.local/share/opencode/opencode-memory`). 7. **Тесты** адаптированы под cleanup: - `tests/test_dockerfile.py` — assertions инвертированы: плагин должен ОТСУТСТВОВАТЬ в Dockerfile (issue #98). Regression-guards для `opencode-ai` и `repomix` сохранены. - Удалены `tests/test_setup_memory.py`, `tests/test_memory_setup_tool.py`, `tests/test_memory_setup_tool.ts` — тесты для удалённых `setup-memory.sh` и `memory-setup.ts`. - `tests/test_commit_tool.py` — docstring обновлён (ссылка на `memory-setup.ts` заменена на `spec-status.ts`). ## Почему Двойная система (plugin + 5 TS tools) = каша. Plugin `@mathew-cf/opencode-memory` не вызывался из-за бага wrapper-пути, Rust `rag-cli` binary конфликтовал с Python `index.json` (разные форматы `meta.json` по одному пути). Cleanup ПОСЛЕ того как 5 TS tools работают (PR #101) и E2E тесты проходят (PR #102) — иначе остались бы без памяти. Часть эпика #94 (migration plan), фаза 3 (cleanup). Blocked by #97 (E2E green). ## Pending - Глобальный `/root/.config/opencode/AGENTS.md` и `/root/.config/opencode/skills/memory/SKILL.md` НЕ обновлены — Write tool заблокирован для путей вне workspace (`FileSystem.writeFile` error). Это ручная задача пользователя (копии тех же правок, что в project-файлах). - `OPENAI_EMBEDDING_BATCH_DELAY` НЕ добавлен в `.env.example` — этот env var НЕ существует в коде (`src/memory/embedder.py` использует только `OPENAI_EMBEDDING_BATCH_SIZE` + `Retry-After` из 429-ответа). Добавление мусорной переменной противоречит правилу «не добавлять мёртвый код». Issue #98 задача 8 ссылается на «аудит» — вероятно устаревшая/ошибочная находка. - `~/.local/share/opencode/opencode-memory/.gitignore` — отсутствует. Это локальный репозиторий памяти (отдельный git), `.gitignore` для `.rag/` там не относится к этому PR — задача 5 issue #98, но не блокер (`.rag/` уже не содержит Rust артефактов). ## Watch out - **Кеш `@mathew-cf/opencode-memory/` (без `@latest`)** — кроме `@latest/` существовал sibling-алиас `opencode-memory/` (85 MB, тот же плагин). Удалён тоже — иначе кеш не полностью очищен. Issue #98 явно указывает только `@latest/`, но критерий приёмки «Cache удалён» подразумевает полный cleanup. - **meta.json** — Python `index.py` и Rust `rag-cli` пишут `meta.json` в ОДИН путь (`/.rag/meta.json`) но в РАЗНЫХ форматах. Rust: `{model_id, hidden_size, num_chunks, file_hashes}`. Python: `{version, files:{rel:{sha256, chunks}}}`. Текущий был Rust-формат → удалён; Python пересоздаст при следующем reindex. Если снова поставить плагин — он перетрёт Python meta → broken. - **Тест `test_memory_plugin_in_npm_install`** переименован в `test_memory_plugin_removed_from_npm_install` (assertion инвертирован). Если кто-то откатит cleanup — тест провалится с понятным сообщением. - **Plugin auto-load** — после удаления блока `plugin` из `opencode.json` плагин НЕ грузится при старте opencode (критерий #98 выполнен). - **`memory-doctor` tool** — после cleanup НЕ репортит проблем с plugin/Rust (он их и не проверял — проверяет ripgrep/Python/env/index, которые intact).