mirror of
https://github.com/openai/codex.git
synced 2026-11-12 21:20:34 +00:00
## Why Managed command policies need to require a human decision independently of automatic review, hook allowances, and saved approvals. ## What changed - Support `decision = "prompt-user"` in managed `requirements.toml` prefix rules, requiring a fresh, one-time human decision for matching commands. - Add experimental `humanCommand` approval requests for clients advertising both `experimentalApi` and `requiredHumanApproval`. Accept only `accept`, `decline`, or `cancel`; reject commands when no capable client is available. - Restrict responses to capable clients that received the request, and replay pending prompts to compatible clients on reconnect. - Enable the capability in the TUI and update protocol schemas and client bindings. ## Testing Add coverage for fresh decisions overriding saved allowances, hook allowances, and automatic review, plus child-thread approval routing and rejection of responses from incompatible or unrelated clients. GitOrigin-RevId: 0b95ff6aab7f8a04b7298c8a4329d1fddf6a603e
31 lines
918 B
Rust
31 lines
918 B
Rust
use serde::Deserialize;
|
|
use serde::Serialize;
|
|
|
|
use crate::error::Error;
|
|
use crate::error::Result;
|
|
|
|
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub enum Decision {
|
|
/// Command may run without further approval.
|
|
Allow,
|
|
/// Request approval from the configured reviewer; rejected with `approval_policy="never"`.
|
|
Prompt,
|
|
/// Requires a fresh human decision, independent of the configured reviewer.
|
|
#[serde(rename = "prompt-user")]
|
|
PromptUser,
|
|
/// Command is blocked without further consideration.
|
|
Forbidden,
|
|
}
|
|
|
|
impl Decision {
|
|
pub fn parse(raw: &str) -> Result<Self> {
|
|
match raw {
|
|
"allow" => Ok(Self::Allow),
|
|
"prompt" => Ok(Self::Prompt),
|
|
"forbidden" => Ok(Self::Forbidden),
|
|
other => Err(Error::InvalidDecision(other.to_string())),
|
|
}
|
|
}
|
|
}
|