mirror of
https://github.com/openai/codex.git
synced 2026-05-16 17:23:57 +00:00
- make ThreadStore::update_thread_metadata accept a broad range of metadata patches - keep ThreadStore::append_items as raw canonical history append (no metadata side effects) - in the local store, write these metadata updates to a combination of sqlite and rollout jsonl files for backwards-compat. It special cases which fields need to go into jsonl vs sqlite vs whatever, confining the awkwardness to just this implementation - in remote stores we can simply persist the metadata directly to a database, no special casing required. - move the "implicit metadata updates triggered by appending rollout items" from the RolloutRecorder (which is local-threadstore-specific) to the LiveThread layer above the ThreadStore, inside of a private helper utility called ThreadMetadataSync. LiveThread calls ThreadStore append_items and update_metadata separately. - Add a generic update metadata method to ThreadManager that works on both live threads and "cold" threads - Call that ThreadManager method from app server code, so app server doesn't need to worry about whether the thread is live or not
36 lines
1.8 KiB
Markdown
36 lines
1.8 KiB
Markdown
# Thread Store
|
|
|
|
`codex-thread-store` is the storage boundary for Codex threads. It defines the
|
|
`ThreadStore` trait plus local and in-memory implementations. Other storage
|
|
implementations may live outside this repository.
|
|
|
|
## Responsibilities
|
|
|
|
- `ThreadStore::append_items` is the raw canonical history append API. It does
|
|
not infer metadata from item contents.
|
|
- `ThreadStore::update_thread_metadata` is the only thread metadata write API.
|
|
It accepts a single literal metadata patch shape, regardless of whether the
|
|
caller is applying a user/API mutation or facts derived above the store from
|
|
appended history.
|
|
- `LiveThread` is the preferred API for active session persistence. It owns a
|
|
per-thread metadata sync helper, applies the rollout persistence policy,
|
|
appends canonical history, and then sends metadata patches through
|
|
`ThreadStore::update_thread_metadata`.
|
|
- `ThreadManager` routes metadata mutations for loaded and cold threads through
|
|
one entrypoint. Loaded threads use their `LiveThread`; cold threads go
|
|
directly to the store.
|
|
- `LocalThreadStore` persists history through `codex-rollout` JSONL files and
|
|
persists queryable metadata through the SQLite state database when available.
|
|
Local explicit metadata mutations also maintain JSONL/name-index compatibility
|
|
so reading old or SQLite-less local storage keeps working.
|
|
- `RolloutRecorder` is the local JSONL writer. It writes already-canonical
|
|
items for `ThreadStore::append_items`; it no longer decides metadata updates
|
|
for live thread-store appends.
|
|
- `core/session` creates or resumes `LiveThread` handles and does not need to
|
|
know whether persistence is backed by local files or another store.
|
|
|
|
## Direction
|
|
|
|
New metadata observation semantics should live above `ThreadStore`. Stores
|
|
persist explicit metadata fields, but raw history appends remain history-only.
|