Lewati ke konten

Checkpoint rewind

Extension pi-rewind-hook merekam checkpoint state file yang tepat dan memulihkannya selama navigasi /fork dan /tree. Extension ini tidak dibundel dalam manifest boot Selesai default dan harus dianggap sebagai ekstensi opsional.

Ekstensi opsional

Tidak dimuat otomatis. Pasang atau aktifkan secara terpisah sebelum digunakan.

Permukaan runtime
Otomatis

Penyiapan dan prasyarat

  • Directory source ada tetapi pi-rewind-hook tidak tercantum di src/extensions/package.json, sehingga Selesai tidak memuatnya secara otomatis.
  • Untuk menggunakannya, instal sebagai extension Pi/Selesai dari npm:pi-rewind-hook (atau muat secara eksplisit jika Anda mengelola daftar extension sendiri).
  • Memerlukan repository git. Tidak berfungsi di luar git worktree.
  • Memerlukan versi Pi/Selesai dan runtime Node.js yang kompatibel.

Yang disiapkan

  • Hook ke event lifecycle sesi (session_start, session_tree, session_before_fork, session_before_tree, turn_start, turn_end, agent_end, session_compact, session_shutdown) untuk merekam snapshot worktree.
  • Menyimpan metadata dalam entri custom sesi tersembunyi rewind-turn dan rewind-op.
  • Menggunakan satu git reachability ref, refs/pi-rewind/store, untuk menjaga snapshot commit tetap hidup.

Yang dapat dikonfigurasi

Rewind opsional membaca semua pengaturan dari kunci rewind di settings.json. Tidak ada command /rewind mandiri.

Lokasi dan preseden konfigurasi

  1. Pengaturan user
    ~/.selesai/agent/settings.json
    Semua pengaturan Rewind berada di bawah rewind.*.

Pengaturan

Kunci / pathTipe, default, dan nilaiDeskripsi
rewind.silentCheckpointsboolean
Default: false
Sembunyikan footer/status dan notifikasi checkpoint.
rewind.retention.maxSnapshotsnumber
Default: (unlimited)
Batas opsional pada commit snapshot unik yang tidak dipin dan tetap reachable.
rewind.retention.maxAgeDaysnumber
Default: (unlimited)
Batas usia opsional dalam hari untuk commit snapshot yang tidak dipin.
rewind.retention.pinLabeledEntriesboolean
Default: false
Pertahankan snapshot yang terikat ke node labeled agar tidak dipangkas oleh maxSnapshots/maxAgeDays.
rewind.retention.scanModestring
Default: "ancestor-only"
Nilai yang diizinkan: "ancestor-only", "repo-sessions"
Mode discovery retensi: hanya ikuti silsilah sesi saat ini, atau pindai root sesi yang ditemukan.
rewind.retention.startupBudgetMsnumber
Default: (unlimited)
Anggaran waktu startup opsional untuk sweep retensi. Sweep yang melebihi dilewati dan ditunda.

Kontrol command, tool, dan shortcut

Kunci / pathDeskripsi
/fork and /treeRewind dipicu otomatis saat navigasi fork dan tree.

Bukti source

  • src/extensions/pi-rewind-hook/index.ts
  • src/extensions/pi-rewind-hook/README.md

Yang dapat dilakukan

  • Selama /fork, pilih pesan dan pilih opsi restore: Conversation only, Restore all, Code only, atau Undo last file rewind ketika exact rewind point tersedia.
  • Selama navigasi /tree, pilih Keep current files, Restore files to that point, atau Undo last file rewind ketika node target memiliki checkpoint tepat.
  • Menjaga checkpoint otomatis di batas user pre-prompt, batas assistant turn_end, dan operasi stateful terpilih.

Perintah, tool, dan shortcut

  • Tidak ada perintah /rewind. Rewind dipicu secara otomatis sebagai bagian dari alur /fork dan /tree.
  • Extension ini tidak mendaftarkan command, tool, atau shortcut apa pun.

Batasan dan keamanan

  • Hanya berfungsi di dalam repository git.
  • Memulihkan state file tepat untuk file yang di-track dan file untracked yang tidak di-ignore. Ia menghapus path yang ada di snapshot saat ini tetapi tidak ada di snapshot target, lalu memulihkan snapshot target ke worktree tanpa staging git index yang sebenarnya.
  • Submodule didukung hanya jika path-nya tetap sama, worktree-nya bersih dan terinisialisasi, dan setiap commit target sudah tersedia secara lokal. Rewind melakukan checkout commit target tersebut tanpa fetching. Exact restore ditolak dengan error yang jelas untuk state submodule yang kotor atau tidak tersedia, path submodule yang ditambah/dihapus, dan submodule bersarang; file yang belum di-commit di dalam submodule bukan bagian dari snapshot.
  • File yang di-ignore, direktori kosong, checkpoint tepat untuk node toolResult, dan checkpoint tepat untuk node bashExecution berada di luar model snapshot.
  • Retention hanya memengaruhi reachability objek git. Metadata JSONL sesi adalah append-only dan tidak pernah dikompakkan oleh Rewind.
  • Snapshot commit dapat diprune jika retention diaktifkan dan tidak dipin; Rewind memvalidasi keberadaan commit sebelum menawarkan restore.
  • Session ledger, bukan ref refs/pi-rewind/store, adalah otoritatif untuk checkpoint mana yang berlaku untuk setiap node sesi.

Source evidence

Selesai version: 0.10.0