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.
Penyiapan dan prasyarat
- Directory source ada tetapi
pi-rewind-hooktidak tercantum disrc/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-turndanrewind-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
- Pengaturan user
~/.selesai/agent/settings.json
Semua pengaturan Rewind berada di bawah rewind.*.
Pengaturan
| Kunci / path | Tipe, default, dan nilai | Deskripsi |
|---|---|---|
rewind.silentCheckpoints | boolean Default: false | Sembunyikan footer/status dan notifikasi checkpoint. |
rewind.retention.maxSnapshots | number Default: (unlimited) | Batas opsional pada commit snapshot unik yang tidak dipin dan tetap reachable. |
rewind.retention.maxAgeDays | number Default: (unlimited) | Batas usia opsional dalam hari untuk commit snapshot yang tidak dipin. |
rewind.retention.pinLabeledEntries | boolean Default: false | Pertahankan snapshot yang terikat ke node labeled agar tidak dipangkas oleh maxSnapshots/maxAgeDays. |
rewind.retention.scanMode | string 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.startupBudgetMs | number Default: (unlimited) | Anggaran waktu startup opsional untuk sweep retensi. Sweep yang melebihi dilewati dan ditunda. |
Kontrol command, tool, dan shortcut
| Kunci / path | Deskripsi |
|---|---|
/fork and /tree | Rewind dipicu otomatis saat navigasi fork dan tree. |
Bukti source
src/extensions/pi-rewind-hook/index.tssrc/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/forkdan/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 nodebashExecutionberada 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.