mirror of
https://github.com/openai/codex.git
synced 2026-11-11 22:33:20 +00:00
Honor attachment-owned permissions for MCP servers (#40728)
## Why MCP servers attached to executor environments must retain their owner's permission profile instead of inheriting the thread-wide sandbox authority. ## What changed - Resolve and capture a permission profile for each enabled MCP server when publishing the runtime, and reject calls or elicitations when that authority is unavailable. - Use the captured server profile for tool approval decisions, elicitation, and sandbox metadata, including after runtime refreshes. - Materialize `:workspace_roots` from `PathUri` values so permissions preserve the path convention of remote executor environments. - Give threadless app discovery and resource reads an explicit default permission profile. ## Testing Added coverage for per-server elicitation authority, unresolved attachments, runtime refreshes, restricted tool calls, and foreign-platform workspace roots. GitOrigin-RevId: 6b188d4b08b29e9971ff7aa68a7785a0cdf9e394
This commit is contained in:
1 parent
0b94751cc4
commit
4213b38f3c
25 files changed
+805
-136
No files matched your search
@@ -548,15 +548,28 @@ impl PermissionProfile {
|
||||
pub fn materialize_project_roots_with_workspace_roots(
|
||||
self,
|
||||
workspace_roots: &[AbsolutePathBuf],
|
||||
) -> Self {
|
||||
self.materialize_project_roots_with(|policy| {
|
||||
policy.materialize_project_roots_with_workspace_roots(workspace_roots)
|
||||
})
|
||||
}
|
||||
|
||||
pub fn materialize_project_roots_with_path_uris(self, workspace_roots: &[PathUri]) -> Self {
|
||||
self.materialize_project_roots_with(|policy| {
|
||||
policy.materialize_project_roots_with_path_uris(workspace_roots)
|
||||
})
|
||||
}
|
||||
|
||||
fn materialize_project_roots_with(
|
||||
self,
|
||||
materialize: impl FnOnce(FileSystemSandboxPolicy) -> FileSystemSandboxPolicy,
|
||||
) -> Self {
|
||||
match self {
|
||||
Self::Managed {
|
||||
file_system,
|
||||
network,
|
||||
} => {
|
||||
let file_system = file_system
|
||||
.to_sandbox_policy()
|
||||
.materialize_project_roots_with_workspace_roots(workspace_roots);
|
||||
let file_system = materialize(file_system.to_sandbox_policy());
|
||||
Self::Managed {
|
||||
file_system: ManagedFileSystemPermissions::from_sandbox_policy(&file_system),
|
||||
network,
|
||||
|
||||
Reference in new issue
Block a user