Get started
Nhóm cấu phần phiên SQLite của đường dẫn 3
Họ hiện vật phiên SQLite của Đường dẫn 3
Ghi chú này xác định phạm vi của clawdbot-d63.2, trong khi clawdbot-d63.1 phụ trách trình trợ giúp lưu trữ
đặt lại/xóa bị chồng lấn trong src/config/sessions/session-accessor.sqlite.ts.
Tệp triển khai đang có thay đổi chưa lưu trong lượt này, vì vậy hiện vật này ghi lại
hợp đồng và các điểm vá chính xác mà không gây xung đột với worker song song.
Họ có thẩm quyền
Sau khi chuyển sang SQLite, bản chép lời của các phiên đang hoạt động là các hàng SQLite. Họ lưu trữ của một phiên gồm:
- Các hàng
transcript_events,transcript_event_identitiesvàsessionschosessionIdhiện tại của mục. - Cùng tập hợp hàng bản chép lời SQLite cho mọi
sessionIdđượcentry.compactionCheckpoints[*].preCompaction.sessionIdtham chiếu. - Cùng tập hợp hàng bản chép lời SQLite cho mọi
sessionIdđượcentry.compactionCheckpoints[*].postCompaction.sessionIdtham chiếu. - Cùng tập hợp hàng bản chép lời SQLite cho mọi
sessionIdtrongentry.usageFamilySessionIds.
Chỉ lưu trữ các hàng không còn được bất kỳ hàng session_entries nào còn lại
hoặc siêu dữ liệu Compaction hay họ mức sử dụng của bất kỳ mục nào còn lại tham chiếu.
Điều này bảo toàn trạng thái nhánh/khôi phục điểm kiểm tra và tổng hợp mức sử dụng cho đến
khi tham chiếu đang hoạt động cuối cùng không còn nữa.
Các hiện vật ngoài họ sau khi chuyển đổi
Các biến thể tệp bản chép lời chủ đề được tạo và các tệp phụ quỹ đạo không phải là trạng thái thời gian chạy SQLite đang hoạt động. Chúng là các hiện vật tệp cũ:
- Các biến thể chủ đề như
<sessionId>-topic-<thread>.jsonlchỉ tồn tại đối với định dạng bản chép lời dựa trên tệp. SQLite sử dụng mã định danh phiên chuẩn cùng siêu dữ liệu phân phốisession_routes/mục thay cho các tệp JSONL theo từng chủ đề. - Các tệp phụ quỹ đạo như
.trajectory.jsonlvà.trajectory-path.jsonđược đặt tên từ các đường dẫnsessionFileJSONL thực. Các giá trịsessionFilecủa SQLite là các dấu mốcsqlite:<agentId>:<sessionId>:<storePath>và không chỉ định tệp phụ. - Các trình đọc tầng lưu trữ phải tiếp tục đọc các tệp JSONL cũ đã lưu trữ, nhưng cơ chế lưu giữ thời gian chạy không được quét các thư mục phiên đang hoạt động hoặc mở lại các tệp bản chép lời JSONL cho phiên SQLite.
Quy trình nhập của Doctor vẫn là bên sở hữu việc di chuyển các tệp JSONL chính cũ và các tệp phụ quỹ đạo liền kề của chúng. Cơ chế lưu giữ SQLite trong thời gian chạy không nên thêm trình nhập thứ hai hoặc phương án dự phòng bằng tệp.
Các điểm vá
Mở rộng trình trợ giúp lưu trữ SQLite do clawdbot-d63.1 đưa vào thay vì
thêm một đường dẫn song song.
-
Thêm một bộ thu thập cục bộ gần
deleteSqliteSessionStateIfUnreferenced:collectSqliteSessionArtifactFamily(entry: SessionEntry): Set<string>- Bao gồm
entry.sessionId, các mã định danh phiên trước/sau điểm kiểm tra vàusageFamilySessionIds. - Lọc các chuỗi rỗng và loại bỏ trùng lặp theo cách tất định.
-
Thêm một bộ thu thập tham chiếu cho kho sau khi xóa:
readReferencedSqliteSessionArtifactFamilyIds(database): Set<string>- Lặp qua
session_entrieshiện tại, phân tích từngentry_jsonvà thu thập các mã định danh cùng họ từ mọi mục còn tồn tại.
-
Thay đổi các bên gọi đặt lại/xóa/bảo trì hiện đang lưu trữ một
sessionIdđã bị xóa để truyền toàn bộ họ của mục đã bị xóa. -
Với mỗi mã định danh họ, lưu trữ các hàng bản chép lời SQLite với lý do của bên gọi (
resethoặcdeleted), sau đó chỉ xóa hàngsessionskhi mã định danh họ không có trong tập hợp tham chiếu sau khi xóa. -
Duy trì việc xóa sự kiện bản chép lời tập trung thông qua đường dẫn dọn dẹp hàng phiên SQLite hiện có. Không thêm thao tác đọc JSONL đang hoạt động.
Các kiểm thử tập trung
Thêm các kiểm thử chỉ dành cho SQLite vào src/config/sessions/session-accessor.conformance.test.ts
hoặc kiểm thử vòng đời song song sau khi clawdbot-d63.1 commit:
- Việc xóa một mục có bản chép lời trước Compaction sẽ lưu trữ cả phiên hiện tại lẫn phiên trước Compaction, sau đó xóa cả hai tập hợp hàng SQLite.
- Việc xóa một trong hai mục dùng chung một phiên trước Compaction không lưu trữ gì cho phiên trước dùng chung cho đến khi mục tham chiếu cuối cùng bị xóa.
- Việc xóa một mục có
usageFamilySessionIdssẽ lưu trữ các hàng bản chép lời SQLite của phiên tiền nhiệm khi không có mục nào khác tham chiếu họ mức sử dụng đó. - Một khóa phiên có dạng chủ đề với dấu mốc SQLite không gây ra bất kỳ thao tác đọc JSONL chủ đề được tạo nào hoặc tra cứu tệp phụ nào.
Bằng chứng tập trung nên sử dụng:
node scripts/run-vitest.mjs src/config/sessions/session-accessor.conformance.test.tsNếu các kiểm thử cuối cùng nằm trong store.session-lifecycle-mutation.test.ts, hãy chạy rõ ràng
tệp đó bằng cùng trình bao bọc. Các cổng pnpm diện rộng nên tiếp tục chạy trên
Crabbox/Testbox cho worktree Codex này.