Skill: Recover Overwritten Notes (восстановление затёртых заметок)

Trigger: пользователь говорит «затёр заметку», «перезаписал файл», «потерял текст», «заметка стала пустой / короче», «верни старую версию», «восстанови заметку», "note got overwritten", "restore previous version"

Зачем

trip2g хранит каждую версию каждой заметки. Если заметку случайно перезаписали (контент пропал, текущая версия неправильная) — старый текст не потерян. Достаём любую прошлую версию двумя admin-GraphQL запросами через MCP my_brain_trip2g.

Требования

Нужны admin-инструменты на API-ключе (graphql_request / graphql_introspection в MCP my_brain_trip2g).

Проверь, что инструмент my_brain_trip2g: graphql_request доступен. Если его нет — попроси пользователя включить Enable MCP admin tools на ключе в Admin → API Keys (см. instructions/request_admin_rights), затем продолжай.

Шаг 1. Найди перезапись

Список всех сохранённых версий заметки (новые сверху). path — путь заметки в vault относительно secondbrain/, с .md.

my_brain_trip2g: graphql_request {
  query: "query($p: String!) {
    admin {
      noteVersionHistory(filter: { path: $p }) {
        totalCount
        nodes { versionId version contentLength createdAt }
      }
    }
  }",
  variables: { "p": "folder/my-note.md" }
}

Смотри contentLength по датам. Резкое падение (напр. 4821 → 318 байт) = момент перезаписи. Версия перед падением — последняя хорошая копия. Запомни её versionId.

Шаг 2. Достань контент

my_brain_trip2g: graphql_request {
  query: "query($id: Int64!) {
    admin {
      noteVersion(versionId: $id) { versionId path version content createdAt }
    }
  }",
  variables: { "id": 171 }
}

content — сырой markdown нужной версии.

Шаг 3. Верни в заметку

Запиши content обратно в файл заметки:

terminal: cat > "/opt/data/secondbrain/folder/my-note.md" <<'EOF'
<сюда content из noteVersion>
EOF

Синк в trip2g автоматический (session hook после ответа). Дай пользователю ссылку {TRIP2G_URL}/folder/my-note.

Пагинация

Для заметок с большой историей — limit и offset (по умолчанию 50, totalCount = сколько всего версий):

noteVersionHistory(filter: { path: "folder/my-note.md", limit: 20, offset: 40 })

Важно

  • Поля схемы: noteVersionHistorynodes { versionId version contentLength createdAt }, totalCount; noteVersion(versionId){ versionId path version content createdAt }.
  • version — порядковый номер (1, 2, 3…), versionId — глобальный id версии (его передаём в noteVersion).
  • Если пользователь не помнит точный путь — сперва найди заметку через my_brain_trip2g: search или листинг /opt/data/secondbrain/.
  • Залогируй восстановление в daily note: что вернул, из какой версии, дата перезаписи.