mirror of
https://github.com/openai/codex.git
synced 2026-10-23 18:08:45 +00:00
Add experimental attached thread forks (#56351)
## What changed - Add `attachToSource` to `thread/fork` to persist a fork attached to its source without emitting `thread/started`. Attached forks require local storage and cannot use `ephemeral` or `deferGoalContinuation`. - Hide attached threads from ordinary listings and add `attachedToThreadId` to `thread/list` for explicit discovery, including empty threads. Keep this relationship separate from spawned-agent parent and ancestor filters. - Persist attachment metadata in rollouts and SQLite so it survives restarts and database recovery. Reject source deletion until its attached threads are deleted. ## Testing Add coverage for legacy and paginated history, restart and missing or corrupt database recovery, filtered listings and pagination, resume, conflicting options, and deletion safeguards across store instances. GitOrigin-RevId: 589f3174fc36f6054e75d65818360695645a5913
This commit is contained in:
@@ -3285,6 +3285,9 @@ pub struct SessionMeta {
|
||||
pub id: ThreadId,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub forked_from_id: Option<ThreadId>,
|
||||
/// Marks a persisted fork as attached to `forked_from_id`.
|
||||
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
|
||||
pub attached_thread: bool,
|
||||
/// Exclusive ordinal inherited from the logical fork parent, independent of `history_base`.
|
||||
/// Revert may replace the physical history base while retaining this fork boundary.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
@@ -3359,6 +3362,7 @@ impl Default for SessionMeta {
|
||||
session_id: id.into(),
|
||||
id,
|
||||
forked_from_id: None,
|
||||
attached_thread: false,
|
||||
forked_from_ordinal_exclusive: None,
|
||||
parent_thread_id: None,
|
||||
timestamp: String::new(),
|
||||
|
||||
Reference in New Issue
Block a user