|
### 🧠 Долговечное вспоминание
Воспоминания хранятся как проверяемые Markdown-файлы в `NOEMA_ROOT` (по умолчанию `~/.agent-memory/`). `noema_recall` загружает релевантный контекст в начале сессии; `noema_search`, `noema_browse`, `noema_catalog` и `noema_recall_graph` отвечают за поиск, исследование и аудит.
|
### 📥 Импорт из других инструментов
`noema_import` читает файлы памяти девяти других ИИ-инструментов программирования — Codex, Claude Code, opencode, Cursor, Grok, WorkBuddy, Antigravity, Trae, Qoder — разделяет их на секции и сохраняет каждую как долговечное воспоминание. Реестр с ключом по содержимому устраняет дубликаты между запусками и между инструментами, использующими общие файлы.
|
|
### 🛠️ Управление на странице настроек
Страница настроек Noema Memory настраивает команду сервера, корень памяти, бюджеты, тайм-ауты простоя/вызовов и раздел инструкций — а карточка «Управление воспоминаниями» позволяет напрямую искать, просматривать, добавлять, проверять и удалять сохранённые воспоминания.
|
### 🩺 Поддержание работы
Сервер памяти остаётся запущенным: тайм-аут простоя по умолчанию отключён, а цикл поддержания работы перезапускает дочерний `noema-mcp` в фоновом режиме при сбое или завершении, с настраиваемым интервалом проверки и задержкой перезапуска.
|
|
### 🔍 Умное извлечение сущностей
Движок извлечения Noema сочетает сегментацию слов jieba с высокоточными сигналами — английские имена собственные, имена и технические термины на CJK, темы в кавычках и повторения — с фильтрами стоп-слов и путей, благодаря чему каталог тем PageIndex остаётся чистым.
|
### ⚡ Горячая перезагрузка
После первого запуска плагину больше никогда не требуется перезапуск: `pnpm run build` горячо перезагружает хостовый плагин через Cordis HMR, а `ppnpm run build:client` горячо подменяет браузерный бандл по SSE-каналу client-hmr.
|
## Установка в DSH
```sh
dsh plugin --profile web add @zseven-w/dsh-noema@latest
dsh web
```
Или, для локальной разработки прямо из дерева исходников:
```sh
dsh plugin --profile web add link:/path/to/dsh-noema
dsh web
```
Протокол `link:` создаёт символическую ссылку зависимости профиля на этот репозиторий, поэтому пересборки видны сразу, и Cordis HMR может отслеживать скомпилированный вывод.
Плагин включает бинарник `noema-mcp` через необязательные npm-пакеты для каждой платформы. Чтобы собрать его самостоятельно, выполните `cargo build --release -p noema-mcp` внутри входящего в состав подмодуля `noema` или укажите в настройке Server command любой собранный `noema-mcp`.
## Инструменты памяти
Инструменты, обращённые к модели, повторяют поверхность Noema MCP:
| Инструмент | Что он делает |
| --- | --- |
| `noema_recall` | Вспоминает релевантные воспоминания по запросу с бюджетом токенов. |
| `noema_search` | Полнотекстовый поиск по сохранённым воспоминаниям. |
| `noema_browse` | Просматривает каталог PageIndex по теме или сущности. |
| `noema_catalog` | Выводит весь каталог памяти как markdown. |
| `noema_recall_graph` | Многошаговое вспоминание через связи и общие сущности. |
| `noema_neighbors` | Один шаг по графу от воспоминания. |
| `noema_explain` | Объясняет, почему воспоминание было или не было вспомнено. |
| `noema_remember` | Сохраняет долговечный факт, решение, ограничение или предпочтение. |
| `noema_review_list` | Перечисляет кандидатов, ожидающих проверки. |
| `noema_review_decide` | Принимает, отклоняет, редактирует или объединяет кандидата. |
| `noema_forget` | Помечает надгробием или полностью удаляет воспоминание. |
| `noema_policy_get` / `noema_policy_set` | Читает или обновляет политику записи. |
| `noema_status` | Статус сервера и арендатора: счётчики, здоровье индекса, корень хранилища. |
| `noema_import` | Импортирует воспоминания из других ИИ-инструментов программирования. |
Каждый инструмент возвращает единый конверт `{ ok, tool, text }`, где `text` несёт полный вывод сервера.
## Импорт воспоминаний из других инструментов
| Идентификатор источника | Глобальные файлы | Файлы рабочей области |
| --- | --- | --- |
| `codex` | `~/.codex/AGENTS.md` + конвейер памяти Codex: `~/.codex/memories/MEMORY.md`, `memory_summary.md`, `rollout_summaries/*.md`, `extensions/ad_hoc/notes/*.md` (`raw_memories.md` пропускается — это некурируемая лента) | `AGENTS.md`, `AGENTS.local.md` |
| `claude-code` | `~/.claude/CLAUDE.md`, `~/.claude/CLAUDE.local.md`, `~/.claude/MEMORY.md` | `CLAUDE.md`, `CLAUDE.local.md`, `MEMORY.md` |
| `opencode` | `~/.config/opencode/AGENTS.md` | `AGENTS.md` |
| `cursor` | `~/.cursor/rules/*.mdc`, `~/.cursorrules` | `.cursor/rules/*.mdc`, `.cursorrules` |
| `grok` | `~/.grok/AGENTS.md` + кросс-сессионная память Grok: `~/.grok/memory/MEMORY.md`, `MEMORY.md` по проектам и сводки `sessions/*.md` | `AGENTS.md` |
| `workbuddy` | `~/.codebuddy/CODEBUDDY.md` (файл памяти WorkBuddy), `~/.workbuddy/AGENTS.md`, `~/.workbuddy/memory.md`, `~/.config/workbuddy/AGENTS.md`, `~/Library/Application Support/WorkBuddy/AGENTS.md` | `AGENTS.md`, `CODEBUDDY.md` |
| `antigravity` | `~/.antigravity/AGENTS.md`, `~/.config/antigravity/AGENTS.md`, `~/Library/Application Support/Antigravity/AGENTS.md` (по мере возможности; документированного глобального хранилища памяти пока нет) | `AGENTS.md`, `AGENTS.local.md` |
| `trae` | `~/.trae/AGENTS.md`, `~/.trae/memory/`, `~/.trae/rules/` (плюс варианты `~/.trae-cn`) | `AGENTS.md`, `.trae/rules/` |
| `qoder` | `~/.qoder-cn/AGENTS.md`, `~/.qoder-cn/rules/`, корни автопамяти `~/.qoder-cn/memory/` и `~/.qoder-cn/projects/*/memory/` (плюс варианты `~/.qoder`) | `AGENTS.md`, `AGENTS.local.md`, `.qoder/rules/` |
- Аргумент `source` выбирает один инструмент; опустите его, чтобы запустить все источники, включённые в настройках.
- Аргумент `path` выбирает корень рабочей области для файлов на уровне проекта (по умолчанию — рабочая область сессии; файлы рабочей области загружаются только когда включена настройка Import workspace files).
- Импорты дедуплицируются через реестр по пути `$DSH_HOME/storages/dsh-noema-imports.json` с ключом «путь к файлу + содержимое секции» — когда несколько инструментов используют один и тот же проектный `AGENTS.md`, каждая секция импортируется ровно один раз. `force: true` импортирует всё заново.
- Страница настроек предоставляет флажки для каждого источника, переключатель импорта при запуске, лимит размера файла и кнопку «Импортировать сейчас» со сводкой последнего запуска.
## Настройки
Откройте **Настройки → Noema Memory**:
| Настройка | По умолчанию | Значение |
| --- | --- | --- |
| Включить память | вкл | Главный переключатель для инструментов `noema_*`. |
| Инструкции по памяти | вкл | Раздел системного промпта, обучающий использованию памяти. |
| Запускать сервер при старте | вкл | Запускать при старте DSH, а не при первом использовании. |
| Автоматически принимать новые воспоминания | вкл | `noema_remember` сохраняет сразу. |
| Команда сервера | `bundled` | Входящий бинарник `noema-mcp` или пользовательский путь/команда исполняемого файла. |
| Рабочий каталог | — | cwd для сервера (нужен для `cargo run`). |
| Корень памяти (NOEMA_ROOT) | — | Где хранятся воспоминания; пусто = `~/.agent-memory`. |
| Бюджет токенов вспоминания | 1200 | `budget_tokens` по умолчанию для `noema_recall`. |
| Тайм-аут простоя (ms) | 0 | Останавливать сервер после простоя; 0 = никогда. |
| Поддержание работы | вкл | Перезапускать сервер в фоновом режиме при сбое или завершении. |
| Интервал поддержания (ms) | 5000 | Минимальная задержка между фоновыми проверками здоровья. |
| Тайм-аут вызова (ms) | 30000 | Предельный срок одного вызова инструмента. |
| Задержка перезапуска (ms) | 1000 | Откат между остановкой/сбоем и следующим запуском. |
Карточка статуса показывает здоровье сервера с действиями перезапуска/остановки, а раздел импорта управляет девятью источниками памяти.
## Горячая перезагрузка
Механизм HMR в DSH полностью пригоден к использованию после того, как плагин был загружен хотя бы раз:
- **Хостовый плагин** — включите запись Cordis HMR в patch профиля, указав корень наблюдения на вывод `lib/` этого пакета, и сохраните зависимость `link:`. Выполните `pnpm run build`, и работающий DSH автоматически перезагрузит запись плагина (дочерний сервер Noema перезапускается при перезагрузке) — без перезапуска сервера.
```yaml
# ~/.dsh/profiles/