---
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` в ОДИН
  путь (`<output>/.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).