ENGitHubУстановить

🇬🇧 English version — каноническая версия.

Память

Ива хранит память в vault из обычного Markdown. Дословные разговоры остаются в daily/, устойчивая правда живёт в типизированных Card, а выжимки сворачиваются от дней к неделям, месяцам и годам. Маленький CORE.md входит в каждый промпт.

Ночь

По умолчанию в 04:00 по локальному времени один TypeScript Schedule запускает scripts/memory/night.ts. Код отвечает за чтение, проверку, файловые правки, коммиты, повторы и пределы. Настроенная модель только возвращает предложения: инструкция шага описывает ответ словами и одним коротким примером, модель отвечает JSON-объектом в тексте, ночь разбирает его мягко — одинаково у всех провайдеров.

Время меняется одной настройкой MEMORY_NIGHT_TIME=HH:mm в .env и сборкой: iva update --force (в чекауте — npm run build и iva restart). Правка .env без сборки не двигает Schedule или догон: /menu → ⏰ показывает действующее время и ожидающую настройки. Ночь по-прежнему исключает текущий локальный день. Откат возвращает время той сборки; старые сборки без настройки работают в 04:00.

Ночь собирает поток текста до проверки ответа, в том числе у подписки ChatGPT, где поток обязателен. Перед следующим вызовом она учитывает итоговый расход; обрыв потока означает отказ шага. Вызов Codex ночью просит низкое усилие рассуждения, не меняя настройку чата.

У ночи четыре шага:

  1. Извлечь из сырого дня выжимку, ссылки на Card и факты с доказательствами.
  2. Дописать датированные факты в Card и предложить новый Compiled Truth целиком.
  3. Записать двусторонние связи, только если существуют оба файла.
  4. Предложить ограниченные правки CORE.md из собственных цитат владельца.

Большой вход режется по границам реплик. Предел всей ночи: 40 вызовов и 300 000 оценочных входных токенов. Если провайдер не вернул полный числовой usage, следующий вызов запрещён. День готов после общего коммита выжимки и совместимой отметки в сыром дне для путей, разрешённых политикой git владельца. Новые файлы, исключённые через .gitignore, .git/info/exclude или глобальные правила git, остаются на диске и не останавливают ночь; журнал явно перечисляет их как находящиеся вне git-бэкапа. Уже отслеживаемые файлы продолжают коммититься, даже если родительский каталог позже исключили. Если все пути исключены, готовность дня сохраняется локально, без бэкапа этих файлов.

Кэш дня в data/memory/night/ делает перезапуск идемпотентным. При совпавшем префиксе поздний хвост отправляет модели только новые реплики. Если изменилась старая разобранная реплика, ночь ничего не пишет и просит владельца явно удалить кэш перед переразбором.

Ошибка подключения к провайдеру, таймаут заголовков или оборванный поток завершают запуск с ошибкой. Незавершённый день не становится готовым, попытка отказа схемы не расходуется. Следующая ночь продолжает сохранённый шаг: принятые факты остаются в Card, день ждёт завершения. Автоматического транспортного повтора внутри ночного вызова и подмены модели нет. Восстановите настроенного провайдера; прежде чем заявлять потерю данных, проверьте iva jobs, журнал задания, сырой день и его кэш. Сохраните эти файлы: удаление кэша ради таймаута уничтожает прогресс продолжения, а iva jobs ack memory-night только подтверждает прочтение сбоя. Если байты сырого дня или Card действительно пропали, сохраните историю Git и диагностический пакет для разбора.

Для фоновой работы пользователя Watch/Brief уже проверяют сбои пользовательских таймеров и установленных плагинных/MCP-служб. Произвольный отвязанный скрипт или живой зависший процесс вне этих проверок; о сбое сообщается, автоматического перезапуска нет. Прочитайте статус юнита и журнал, сохраните checkpoint и исправьте причину до продолжения. Совпадающие имена входных файлов требуют отдельных временных путей самого задания. Постоянная способность живёт в плагине, регулярная задача — в Routine, а не в дополнительном watchdog ядра Ивы.

Неделя ждёт состояния всех семи дней, включая явное отсутствие данных. Месяц берёт полные недели внутри месяца и только дни месяца из краевых недель. Год ждёт двенадцать месяцев.

Card и CORE

Принятый факт дописывается без перезаписи:

- YYYY-MM-DD: факт · [[daily/YYYY-MM-DD]] HH:MM

Доказательство должно идти из собственной реплики владельца. Модель возвращает новый Compiled Truth целиком; ночь заменяет его, только если файл Card совпадает с хешем, прочитанным для вызова. Вытесненная правда уходит в архив Card; одновременная ручная правка владельца побеждает и оставляет truth_pending. write_card поддерживает явные операции fact, truth и подтверждённый владельцем merge. Обычный write_file не пишет память (daily/, summaries/, выжимки периодов, cards/); остальные пути vault, например library/, пишутся и коммитятся, а CORE.md проходит через отдельный писатель с капом и коммитом.

write_card показывает минимальный JSON-вызов каждой операции до исполнения и повторяет нужный пример, когда обязательные поля операции отсутствуют или неверны. Ошибки проверки схемы тоже содержат форму исправленного вызова, сведения о поле и типе и подсказку исправить аргументы вместо повторения неверного вызова или поиска в исходниках. Подставь данные Card, опускай незаданные optional-поля, а tags и aliases передавай массивами строк. Пример merge показывает форму вызова и не подтверждает согласие владельца. Проверки и существующий предел повторяющихся отказов продолжают действовать.

Brain и поиск

В 05:00 scripts/memory/brain.ts выполняет детерминированное обслуживание на TypeScript: коммитит оставшиеся ручные правки, пересобирает .graph/vault-graph.json, проверяет размер CORE и отправляет vault в remote, если он настроен. Модель не вызывается, Card не переписываются.

memory_search использует FTS5 из SQLite в Node и отдельный файл графа. При настройке hybrid-режим дополнительно объединяет результаты эмбеддингов.

Git и чистка

Vault — отдельный git-репозиторий. Ночные изменения, прямые операции Card, правки CORE и чистка оставляют узкие коммиты. Потоковый чистильщик scripts/vault-cleanup.ts схлопывает повторный рост description и ограничивает раздутые старые описания, не загружая повреждённый vault целиком в память. Один TypeScript-вход используют /menu и обновлятор.

Весь код памяти и промпты лежат в scripts/memory/; в vault находятся только данные. Старые .claude/ и MOC.md можно оставить, но ночь их больше не читает и не обновляет.

Исходный Markdown ↗