permissions: move workspace roots onto thread state

This commit is contained in:
Michael Bolin
2026-05-13 08:38:19 -07:00
parent 3d517fbd00
commit ada4bdc2dc
168 changed files with 3263 additions and 3357 deletions
+1
View File
@@ -20,6 +20,7 @@ codex-protocol = { workspace = true }
codex-rollout = { workspace = true }
codex-state = { workspace = true }
codex-utils-path = { workspace = true }
codex-utils-absolute-path = { workspace = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
thiserror = { workspace = true }
@@ -22,6 +22,7 @@ pub(super) async fn create_thread(
codex_home: store.config.codex_home.clone(),
sqlite_home: store.config.sqlite_home.clone(),
cwd,
workspace_roots: params.metadata.workspace_roots,
model_provider_id: params.metadata.model_provider.clone(),
generate_memories: matches!(params.metadata.memory_mode, ThreadMemoryMode::Enabled),
};
@@ -44,6 +44,7 @@ pub(super) async fn list_threads(
codex_home: store.config.codex_home.clone(),
sqlite_home: store.config.sqlite_home.clone(),
cwd: store.config.codex_home.clone(),
workspace_roots: Vec::new(),
model_provider_id: store.config.default_model_provider_id.clone(),
generate_memories: false,
};
@@ -62,6 +62,7 @@ pub(super) async fn resume_thread(
codex_home: store.config.codex_home.clone(),
sqlite_home: store.config.sqlite_home.clone(),
cwd,
workspace_roots: params.metadata.workspace_roots,
model_provider_id: params.metadata.model_provider.clone(),
generate_memories: matches!(params.metadata.memory_mode, ThreadMemoryMode::Enabled),
};
+4
View File
@@ -526,6 +526,7 @@ mod tests {
include_archived: false,
metadata: ThreadPersistenceMetadata {
cwd: Some(home.path().to_path_buf()),
workspace_roots: Vec::new(),
model_provider: "different-provider".to_string(),
memory_mode: ThreadMemoryMode::Enabled,
},
@@ -581,6 +582,7 @@ mod tests {
include_archived: false,
metadata: ThreadPersistenceMetadata {
cwd: Some(home.path().to_path_buf()),
workspace_roots: Vec::new(),
model_provider: "different-provider".to_string(),
memory_mode: ThreadMemoryMode::Enabled,
},
@@ -795,6 +797,7 @@ mod tests {
include_archived: true,
metadata: ThreadPersistenceMetadata {
cwd: None,
workspace_roots: Vec::new(),
model_provider: "test-provider".to_string(),
memory_mode: ThreadMemoryMode::Enabled,
},
@@ -1025,6 +1028,7 @@ mod tests {
fn thread_metadata() -> ThreadPersistenceMetadata {
ThreadPersistenceMetadata {
cwd: Some(std::env::current_dir().expect("cwd")),
workspace_roots: Vec::new(),
model_provider: "test-provider".to_string(),
memory_mode: ThreadMemoryMode::Enabled,
}
@@ -1510,6 +1510,7 @@ mod tests {
fn test_thread_metadata() -> ThreadPersistenceMetadata {
ThreadPersistenceMetadata {
cwd: Some(std::env::current_dir().expect("cwd")),
workspace_roots: Vec::new(),
model_provider: "test-provider".to_string(),
memory_mode: ThreadMemoryMode::Enabled,
}
@@ -533,6 +533,7 @@ mod tests {
include_archived: false,
metadata: ThreadPersistenceMetadata {
cwd: None,
workspace_roots: Vec::new(),
model_provider: "test-provider".to_string(),
memory_mode: ThreadMemoryMode::Enabled,
},
+4
View File
@@ -14,6 +14,7 @@ use codex_protocol::protocol::SessionSource;
use codex_protocol::protocol::ThreadMemoryMode as MemoryMode;
use codex_protocol::protocol::ThreadSource;
use codex_protocol::protocol::TokenUsage;
use codex_utils_absolute_path::AbsolutePathBuf;
use serde::Deserialize;
use serde::Deserializer;
use serde::Serialize;
@@ -59,6 +60,9 @@ pub struct ThreadPersistenceMetadata {
///
/// `None` means the thread has no filesystem/environment context.
pub cwd: Option<PathBuf>,
/// Thread-scoped workspace roots used to materialize permission profiles.
#[serde(default)]
pub workspace_roots: Vec<AbsolutePathBuf>,
/// Model provider associated with the thread.
pub model_provider: String,
/// Memory mode associated with the live thread.