fabro(01KWFGXZ5P42QRWBYAPVEAXMX6): simplify_gpt (succeeded)

Fabro-Run: 01KWFGXZ5P42QRWBYAPVEAXMX6
Fabro-Completed: 7

⚒️ Generated with [Fabro](https://fabro.sh)
This commit is contained in:
Fabro 2026-07-01 21:34:40 +00:00
parent 88047477db
commit f753ac8fc8
7 changed files with 26 additions and 26 deletions

View file

@ -21,7 +21,7 @@ use tokio::time::timeout as tokio_timeout;
use tokio_util::sync::CancellationToken;
use crate::config::{HookDefinition, HookType, TlsMode};
use crate::secrets::ResolvedHookSecrets;
use crate::secrets::{ResolvedHookSecrets, first_secret_name};
use crate::types::{
HookContext, HookDecision, HookExecutionContext, HookResult, PromptHookResponse,
};
@ -154,7 +154,7 @@ fn resolve_header<E>(
where
E: Env + ?Sized,
{
if let Some(name) = value.names(Namespace::Secrets).into_iter().next() {
if let Some(name) = first_secret_name(value) {
return Err(HeaderResolveError::SecretNotAllowed {
name: name.to_string(),
});

View file

@ -4,6 +4,7 @@ use std::pin::Pin;
use std::sync::Arc;
use fabro_redact::SecretRedactor;
use fabro_types::settings::InterpString;
use fabro_types::settings::interp::Namespace;
use crate::config::{HookDefinition, HookType};
@ -108,34 +109,31 @@ impl ResolvedHookSecrets {
}
}
pub(crate) fn secret_names(value: &InterpString) -> Vec<&str> {
value.names(Namespace::Secrets)
}
pub(crate) fn first_secret_name(value: &InterpString) -> Option<&str> {
secret_names(value).into_iter().next()
}
fn secret_names_for_definition(definition: &HookDefinition) -> Vec<String> {
let Some(hook_type) = definition.resolved_hook_type() else {
return Vec::new();
};
match hook_type.as_ref() {
HookType::Command { command } => command
.names(Namespace::Secrets)
.into_iter()
.map(str::to_string)
.collect(),
HookType::Http { url, .. } => url
.names(Namespace::Secrets)
HookType::Command { command } => secret_names(command)
.into_iter()
.map(str::to_string)
.collect(),
HookType::Http { url, .. } => secret_names(url).into_iter().map(str::to_string).collect(),
HookType::Prompt { prompt, model } | HookType::Agent { prompt, model, .. } => {
let mut names: Vec<String> = prompt
.names(Namespace::Secrets)
let mut names: Vec<String> = secret_names(prompt)
.into_iter()
.map(str::to_string)
.collect();
if let Some(model) = model {
names.extend(
model
.names(Namespace::Secrets)
.into_iter()
.map(str::to_string),
);
names.extend(secret_names(model).into_iter().map(str::to_string));
}
names
}

View file

@ -26,7 +26,7 @@ pub enum SandboxCreateSpec {
Local,
#[cfg(feature = "docker")]
Docker {
config: DockerSandboxOptions,
config: Box<DockerSandboxOptions>,
github_app: Option<GitHubCredentials>,
run_id: Option<RunId>,
clone_origin_url: Option<String>,

View file

@ -99,7 +99,7 @@ impl SandboxProvider for DockerSandboxProvider {
};
let sandbox =
DockerSandbox::new(config, github_app, run_id, clone_origin_url, clone_branch)?;
DockerSandbox::new(*config, github_app, run_id, clone_origin_url, clone_branch)?;
sandbox.initialize().await?;
let container_id = sandbox.container_identifier()?.to_string();
self.get(&container_id).await?.ok_or_else(|| {

View file

@ -27,7 +27,7 @@ pub enum SandboxSpec {
},
#[cfg(feature = "docker")]
Docker {
config: DockerSandboxOptions,
config: Box<DockerSandboxOptions>,
github_app: Option<GitHubCredentials>,
run_id: Option<RunId>,
clone_origin_url: Option<String>,
@ -204,7 +204,7 @@ impl SandboxSpec {
clone_branch,
} => {
let mut sandbox = DockerSandbox::new(
config.clone(),
config.as_ref().clone(),
github_app.clone(),
*run_id,
clone_origin_url.clone(),
@ -271,7 +271,7 @@ mod tests {
#[test]
fn docker_run_sandbox_persists_layout_metadata_for_cloned_repo() {
let spec = SandboxSpec::Docker {
config: DockerSandboxOptions::default(),
config: Box::new(DockerSandboxOptions::default()),
github_app: None,
run_id: None,
clone_origin_url: Some("git@github.com:brynary/rack-test.git".to_string()),
@ -306,10 +306,10 @@ mod tests {
#[test]
fn docker_run_sandbox_omits_primary_repo_metadata_for_empty_workspace() {
let spec = SandboxSpec::Docker {
config: DockerSandboxOptions {
config: Box::new(DockerSandboxOptions {
skip_clone: true,
..DockerSandboxOptions::default()
},
}),
github_app: None,
run_id: None,
clone_origin_url: Some("https://gitlab.com/acme/widgets".to_string()),

View file

@ -890,7 +890,7 @@ fn preflight_sandbox_spec(
let mut config = resolve_docker_config(resolved_run);
config.skip_clone = true;
SandboxSpec::Docker {
config,
config: Box::new(config),
github_app,
run_id: None,
clone_origin_url,

View file

@ -429,7 +429,9 @@ impl RunSession {
SandboxSpec::Local { working_directory }
}
SandboxProviderKind::Docker => SandboxSpec::Docker {
config: resolve_docker_config(resolved, |name| secret_lookup(name))?,
config: Box::new(resolve_docker_config(resolved, |name| {
secret_lookup(name)
})?),
github_app: services.github_app.clone(),
run_id: Some(record.run_id),
clone_origin_url: record.repo_origin_url().map(str::to_string),