* chore(memory): remove plugin block from opencode.json * chore(memory): remove setup-memory.sh and memory-setup.ts * chore(memory): remove opencode-memory from Dockerfile * docs(memory): update AGENTS.md and SKILL.md for new tools * test(memory): drop tests for removed setup-memory.sh and memory-setup.ts * docs(handoff): add handoff and ADR-045 for plugin/rust removal * docs(handoff): set PR number * docs(project-map): update after plugin/rust removal --------- Co-authored-by: opencode-agent <agent@opencode.local>
109 lines
4.5 KiB
Markdown
109 lines
4.5 KiB
Markdown
---
|
||
name: memory
|
||
description: Инструкция по работе с файловой памятью opencode-memory (search + save + retro).
|
||
---
|
||
|
||
# File Memory (opencode-memory)
|
||
|
||
Графовая память (Graphiti/FalkorDB) удалена — была нестабильна и забагована.
|
||
Память работает через файловую систему с keyword + semantic search — 5 TS tools (`.opencode/tools/memory-*.ts`), вызывают `python3 -m src.memory`. Плагин `@mathew-cf/opencode-memory` удалён.
|
||
|
||
## Инструменты
|
||
|
||
| Инструмент | Назначение |
|
||
|---|---|
|
||
| `memory-search({ query, category? })` | Гибридный поиск (ripgrep keyword + Python semantic) |
|
||
| `memory-list({ category? })` | Список категорий / файлов |
|
||
| `memory-save()` | Commit + reindex после записи/редактирования (auto-setup: git init + hook если `OPENCODE_MEMORY_REMOTE` set) |
|
||
| `memory-access({ path })` | Отметить файл как прочитанный (bump `last_accessed`/`access_count`) |
|
||
| `memory-doctor()` | Read-only диагностика: ripgrep, Python `src.memory`, env vars, index |
|
||
|
||
## Категории
|
||
|
||
`preferences` · `repos` · `technical` · `people` · `workflows` · `snippets` · `notes`
|
||
|
||
## Как работать
|
||
|
||
1. **Перед началом работы** — `memory-search` по теме
|
||
2. **В процессе** — сохранять находки сразу (контекст свежий)
|
||
3. **В конце сессии** — retrospective: что узнал → сохранить, что было в памяти → обновить, чего не хватало → создать
|
||
|
||
## Когда сохранять
|
||
|
||
- gotcha / workaround (неочевидное поведение)
|
||
- структура репозитория, команды сборки/тестов
|
||
- quirks инструментов
|
||
- коренные причины багов (root cause)
|
||
- указатели: «для X используй Y, осторожно с Z»
|
||
|
||
## Когда НЕ сохранять
|
||
|
||
- данные, которые живой API возвращает свежими каждый раз
|
||
- текущий статус тасок / PR / спринтов
|
||
- копии вики-страниц и API-документации
|
||
- то, что находится за <1 минуты из первых принципов
|
||
|
||
## Структура файла
|
||
|
||
```
|
||
---
|
||
title: Человекочитаемый заголовок
|
||
tags: [tag1, tag2]
|
||
summary: Описание в одну строку
|
||
created: YYYY-MM-DD
|
||
updated: YYYY-MM-DD
|
||
importance: high | medium | low
|
||
source: откуда информация
|
||
source_date: YYYY-MM-DD
|
||
related: [category/file.md]
|
||
---
|
||
```
|
||
|
||
## Путь для репозиториев
|
||
|
||
Default: `/root/.local/share/opencode/opencode-memory` (переопределяется через `OPENCODE_MEMORY_DIR`).
|
||
|
||
```
|
||
{memory-dir}/repos/{host}/{org}/{repo}.md
|
||
```
|
||
|
||
Используй один путь последовательно во всех примерах — default (`~/opencode-memory`) или override (`app_data/opencode-memory`), но не оба сразу.
|
||
|
||
### Формат записей
|
||
|
||
```
|
||
- [YYYY-MM-DD, PR#N] <суть>
|
||
```
|
||
|
||
Дата и PR-номер в тексте — для RAG-поиска и верификации (какой PR принёс знание).
|
||
|
||
### Что дистиллировать (durable-only)
|
||
|
||
- gotchas / workaround (неочевидное поведение)
|
||
- паттерны, конвенции репозитория
|
||
- указатели: «для X используй Y, осторожно с Z»
|
||
- коренные причины багов (root cause)
|
||
|
||
НЕ дистиллировать: статусы, «сейчас делаем», текущие таски, ephemeral контекст.
|
||
|
||
### ADR — только указатель
|
||
|
||
```
|
||
- [date, PR#N] ADR-NN: <суть> → docs/decisions/NN-title.md
|
||
```
|
||
|
||
Не копируй содержание ADR — только указатель на файл.
|
||
|
||
### Править вместо дублирования
|
||
|
||
Если факт уже записан — обнови запись (bump `updated` в frontmatter). Не создавай дубликаты.
|
||
|
||
### Квитанция ставится всегда
|
||
|
||
Даже если durable-записей нет, квитанция обязательна:
|
||
|
||
```
|
||
- [date, PR#N] — (нет durable-записей)
|
||
```
|
||
|
||
Это подтверждает, что memory-sync фаза выполнена (audit trail).
|