Baslangic
Yol 3 SQLite oturum yapıtı ailesi
Yol 3 SQLite Oturum Yapıtı Ailesi
Bu not, clawdbot-d63.1 öğesi src/config/sessions/session-accessor.sqlite.ts içindeki çakışan
sıfırlama/silme arşiv yardımcısının sahibi olurken clawdbot-d63.2 kapsamını belirler.
Bu geçiş sırasında uygulama dosyasında kaydedilmemiş değişiklikler vardı; bu nedenle bu yapıt,
kardeş çalışanla yarışa girmeden tam 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. Bu, son canlı başvuru ortadan kalkana kadar denetim noktası dalını/geri yüklemeyi
ve kullanım toplama durumunu korur.
Geçişten sonraki aile dışı yapıtlar
Oluşturulan konu döküm dosyası varyantları 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 varyantları yalnızca dosya destekli döküm biçimi için bulunur. SQLite, konu başına JSONL dosyaları yerine kanonik 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.
Doctor içe aktarma işlemi, eski birincil JSONL dosyaları ve bunların bitişiğindeki yörünge yardımcı dosyaları için geçiş sahibi olmaya devam eder. Ç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 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, denetim noktası öncesi/sonrası oturum kimlikleri veusageFamilySessionIdsöğesini dahil edin.- Boş dizeleri filtreleyin ve yinelenenleri belirlenimsel olarak kaldırın.
-
Kaldırma sonrası depo için bir başvuru toplayıcı ekleyin:
readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>- Geçerli
session_entriesüzerinde yineleyin, herentry_jsonöğesini ayrıştırın ve ayakta kalan her girdiden aynı aile kimliklerini toplayın.
-
Şu anda kaldırılan tek bir
sessionIdöğesini arşivleyen sıfırlama/silme/bakım çağırıcılarını, kaldırılan girdinin tam ailesini geçirecek şekilde değiştirin. -
Her aile kimliği için SQLite döküm satırlarını çağırıcının gerekçesiyle (
resetveyadeleted) arşivleyin; ardındansessionssatırını yalnızca aile kimliği kaldırma sonrası başvuru kümesinde yoksa silin. -
Döküm olayı silme işlemini mevcut SQLite oturum satırı temizleme yolu üzerinden merkezî tutun. Etkin JSONL okumaları eklemeyin.
Odaklanmış testler
clawdbot-d63.1 kaydedildikten sonra src/config/sessions/session-accessor.conformance.test.ts
veya kardeş yaşam döngüsü testine yalnızca SQLite'a yönelik testler 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.
- Bir Compaction öncesi oturumunu 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 öncül SQLite döküm satırlarını arşivler.- SQLite işaretçisi içeren konu biçimli bir oturum anahtarı, oluşturulmuş herhangi bir konu JSONL okumasına veya yardımcı dosya aramasına neden olmaz.
Odaklanmış doğrulamada şunu kullanın:
node scripts/run-vitest.mjs src/config/sessions/session-accessor.conformance.test.tsBu Codex çalışma ağacı için geniş pnpm geçitleri Crabbox/Testbox üzerinde kalmalıdır.