Get started
Yol 3 SQLite oturum yapıtı ailesi
Yol 3 SQLite Oturum Yapıtı Ailesi
Bu not, clawdbot-d63.1 kapsamındaki src/config/sessions/session-accessor.sqlite.ts içinde yer alan ve kapsamı örtüşen
sıfırlama/silme arşiv yardımcısından ayrı olarak clawdbot-d63.2 kapsamını tanımlar.
Bu geçiş sırasında uygulama dosyasında kaydedilmemiş değişiklikler bulunduğundan bu yapıt,
diğer çalışanın çalışmasıyla çakışmadan kesin sözleşmeyi ve yama noktalarını kaydeder.
Yetkili aile
SQLite geçişinden sonra etkin oturum dökümleri SQLite satırlarıdır. Bir oturumun arşiv ailesi şunlardan oluşur:
- Girdinin geçerli
sessionIddeğeri içintranscript_events,transcript_event_identitiesvesessionssatırları. entry.compactionCheckpoints[*].preCompaction.sessionIdtarafından başvurulan hersessionIdiçin aynı SQLite döküm satırı kümesi.entry.compactionCheckpoints[*].postCompaction.sessionIdtarafından başvurulan hersessionIdiçin aynı SQLite döküm satırı kümesi.entry.usageFamilySessionIdsiçindeki hersessionIdiçin aynı SQLite döküm satırı kümesi.
Yalnızca kalan herhangi bir session_entries satırı veya kalan herhangi bir girdinin
Compaction ya da kullanım ailesi meta verileri tarafından artık başvurulmayan satırları
arşivleyin. Böylece son canlı başvuru ortadan kalkana kadar kontrol noktası dallandırma/geri
yükleme ve kullanım toplama durumu korunur.
Geçişten sonraki aile dışı yapıtlar
Oluşturulan konu döküm dosyası çeşitleri ve yörünge yardımcı dosyaları etkin SQLite çalışma zamanı durumu değildir. Bunlar eski dosya yapıtlarıdır:
<sessionId>-topic-<thread>.jsonlgibi konu çeşitleri yalnızca dosya tabanlı döküm biçiminde bulunur. SQLite, konu başına JSONL dosyaları yerine standart oturum kimliğini vesession_routes/girdi teslim meta verilerini kullanır..trajectory.jsonlve.trajectory-path.jsongibi yörünge yardımcı dosyaları gerçek JSONLsessionFileyollarından adlandırılır. SQLitesessionFiledeğerlerisqlite:<agentId>:<sessionId>:<storePath>işaretçileridir ve yardımcı dosyaları adlandırmaz.- Arşiv katmanı okuyucuları eski arşivlenmiş JSONL dosyalarını okumaya devam etmelidir; ancak çalışma zamanı saklama işlemi etkin oturum dizinlerini taramamalı veya SQLite oturumları için JSONL döküm dosyalarını yeniden açmamalıdır.
Eski birincil JSONL dosyalarının ve bunların bitişiğindeki yörünge yardımcı dosyalarının geçiş sahibi Doctor içe aktarma işlemidir. Çalışma zamanı SQLite saklama işlemi ikinci bir içe aktarıcı veya dosya geri dönüşü eklememelidir.
Yama noktaları
Paralel bir yol eklemek yerine clawdbot-d63.1 tarafından kullanıma sunulan SQLite
arşiv yardımcısını genişletin.
-
deleteSqliteSessionStateIfUnreferencedyakınına yerel bir toplayıcı ekleyin:collectSqliteSessionArtifactFamily(entry: SessionEntry): Set<string>entry.sessionId, kontrol noktası öncesi/sonrası oturum kimlikleri veusageFamilySessionIdsdeğerini dahil edin.- Boş dizeleri filtreleyin ve yinelenenleri belirlenimsel biçimde kaldırın.
-
Silme sonrası depo için bir başvuru toplayıcı ekleyin:
readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>- Geçerli
session_entriesüzerinde yineleyin, herentry_jsondeğerini ayrıştırın ve ayakta kalan her girdiden aynı aile kimliklerini toplayın.
-
Şu anda kaldırılmış tek bir
sessionIddeğerini arşivleyen sıfırlama/silme/bakım çağrılarını, kaldırılmış girdinin tam ailesini iletecek şekilde değiştirin. -
Her aile kimliği için SQLite döküm satırlarını çağıranın gerekçesiyle (
resetveyadeleted) arşivleyin, ardından yalnızca aile kimliği silme sonrası başvuru kümesinde yoksasessionssatırını silin. -
Döküm olayı silme işlemini mevcut SQLite oturum satırı temizleme yolu üzerinden merkezî tutun. Etkin JSONL okumaları eklemeyin.
Odaklı testler
clawdbot-d63.1 kaydedildikten sonra src/config/sessions/session-accessor.conformance.test.ts dosyasına
veya diğer yaşam döngüsü testine yalnızca SQLite testleri ekleyin:
- Compaction öncesi dökümü bulunan bir girdinin silinmesi hem geçerli oturumu hem de Compaction öncesi oturumu arşivler, ardından her iki SQLite satır kümesini kaldırır.
- Compaction öncesi bir oturumu paylaşan iki girdiden birinin silinmesi, son başvuran girdi kaldırılana kadar paylaşılan ön oturum için hiçbir şeyi arşivlemez.
usageFamilySessionIdsiçeren bir girdinin silinmesi, başka hiçbir girdi bu kullanım ailesine başvurmuyorsa önceki SQLite döküm satırlarını arşivler.- SQLite işaretçisi bulunan konu biçimli bir oturum anahtarı, oluşturulan herhangi bir konu JSONL okumasına veya yardımcı dosya aramasına neden olmaz.
Odaklı doğrulamada şunu kullanın:
node scripts/run-vitest.mjs src/config/sessions/session-accessor.conformance.test.tsSon testler store.session-lifecycle-mutation.test.ts içinde bulunuyorsa aynı sarmalayıcıyla bu
dosyayı açıkça çalıştırın. Bu Codex çalışma ağacı için geniş pnpm
kapıları Crabbox/Testbox üzerinde kalmalıdır.