chore/0.12.0-model-version #151

Merged
clawdie merged 2 commits from chore/0.12.0-model-version into main 2026-06-23 09:03:22 +02:00
Showing only changes of commit aff8c89fba - Show all commits

View file

@ -243,6 +243,7 @@ async fn dispatch(cmd: ColibriCommand, state: &SharedState) -> ColibriResponse {
system_prompt,
local_args,
jail,
HashMap::new(),
)
.await
}
@ -449,6 +450,44 @@ pub async fn autospawn_pi_if_configured(state: &SharedState) {
info!(binary = %pi_binary, ?args, "autospawn-pi: spawning Pi agent on host (DeepSeek-backed)");
// Collect hardware profile via clawdie-hw-probe (non-blocking).
// Pass it to the spawned agent as CLAWDIE_HW_PROFILE so the agent can
// self-describe the host hardware without running probes itself.
let mut extra_env: HashMap<String, String> = HashMap::new();
let probe_binary = "/usr/local/bin/clawdie-hw-probe";
if std::path::Path::new(probe_binary).exists() {
match std::process::Command::new(probe_binary).output() {
Ok(output) if output.status.success() => {
let stdout = String::from_utf8_lossy(&output.stdout).trim().to_string();
if !stdout.is_empty() {
info!(
probe_bytes = output.stdout.len(),
"autospawn-pi: collected hardware profile"
);
extra_env.insert("CLAWDIE_HW_PROFILE".to_string(), stdout);
} else {
warn!("autospawn-pi: clawdie-hw-probe returned empty stdout");
}
}
Ok(output) => {
let stderr = String::from_utf8_lossy(&output.stderr);
warn!(
status = %output.status,
stderr = %stderr.trim(),
"autospawn-pi: clawdie-hw-probe failed (continuing without hw profile)"
);
}
Err(e) => {
warn!(
error = %e,
"autospawn-pi: failed to run clawdie-hw-probe (continuing without hw profile)"
);
}
}
} else {
debug!("autospawn-pi: clawdie-hw-probe not found at {probe_binary}; skipping hw profile");
}
// provider=local → binary is the Pi executable; jail=None → host-spawn.
let resp = cmd_spawn_agent(
state,
@ -458,6 +497,7 @@ pub async fn autospawn_pi_if_configured(state: &SharedState) {
None,
Some(args),
None,
extra_env,
)
.await;
@ -498,6 +538,7 @@ async fn cmd_spawn_agent(
system_prompt: Option<String>,
local_args: Option<Vec<String>>,
jail: Option<JailConfig>,
extra_env: HashMap<String, String>,
) -> ColibriResponse {
let provider = match provider_str.to_lowercase().as_str() {
"deepseek" => Provider::DeepSeek,
@ -531,8 +572,10 @@ async fn cmd_spawn_agent(
..Default::default()
};
// T1.4 PR3a: inject session prompt context as env var when enabled
let mut extra_env = HashMap::new();
// T1.4 PR3a: inject session prompt context as env var when enabled.
// Start with any caller-provided extra env (e.g. CLAWDIE_HW_PROFILE from
// autospawn), then layer in scheduler prompt context on top.
let mut extra_env = extra_env;
if state.config.scheduler_prompt_injection {
if let Some(ref sid) = session_id {
if let Some(session) = state.sessions.get(sid) {