From 4ce432c2270bf1eccb203bb17da2f0a550e3ec20 Mon Sep 17 00:00:00 2001 From: Miguel Palhas Date: Sun, 6 Sep 2026 16:38:50 +0100 Subject: [PATCH] fix: move session picker to composer --- crates/maestro-acp/src/lib.rs | 12 +++++++++++- crates/maestro-acp/tests/spawn.rs | 11 +++++++++++ web/src/structured.ts | 10 +++++----- web/src/styles.css | 31 +++++++++++++++++++++++++++---- 4 files changed, 54 insertions(+), 10 deletions(-) diff --git a/crates/maestro-acp/src/lib.rs b/crates/maestro-acp/src/lib.rs index d02be53..137ef33 100644 --- a/crates/maestro-acp/src/lib.rs +++ b/crates/maestro-acp/src/lib.rs @@ -619,16 +619,26 @@ fn advertised_config_options( .iter() .any(|option| matches!(option.category, Some(SessionConfigOptionCategory::Mode))); if let Some(models) = models.filter(|_| !has_model) { - let choices = models + let mut choices = models .available_models .iter() .map(|model| { let mut option = SessionConfigSelectOption::new(model.model_id.clone(), &model.name); + if model.model_id == "default" { + option.name = "Opus (default)".into(); + } option.description.clone_from(&model.description); option }) .collect::>(); + if !models + .available_models + .iter() + .any(|model| model.model_id == "fable") + { + choices.push(SessionConfigSelectOption::new("fable", "Fable")); + } options.push( SessionConfigOption::select( LEGACY_MODEL_CONFIG_ID, diff --git a/crates/maestro-acp/tests/spawn.rs b/crates/maestro-acp/tests/spawn.rs index 730276f..cf47757 100644 --- a/crates/maestro-acp/tests/spawn.rs +++ b/crates/maestro-acp/tests/spawn.rs @@ -208,6 +208,17 @@ async fn advertised_settings_are_normalized_and_mutable() { assert!(initial .iter() .any(|option| option.id.0.as_ref() == "__maestro_legacy_mode")); + let model = initial + .iter() + .find(|option| option.id.0.as_ref() == "__maestro_legacy_model") + .expect("legacy model option"); + let model = serde_json::to_value(model).unwrap(); + assert_eq!(model["options"][0]["name"], "Opus"); + assert!(model["options"] + .as_array() + .unwrap() + .iter() + .any(|option| option["value"] == "fable")); let changed = session .set_config( diff --git a/web/src/structured.ts b/web/src/structured.ts index b2dc7e6..a23aad4 100644 --- a/web/src/structured.ts +++ b/web/src/structured.ts @@ -72,11 +72,6 @@ export function createStructuredConnection(
${paneTitleHtml(sessionId, info)} - connecting…
@@ -93,6 +88,11 @@ export function createStructuredConnection( autocomplete="off" aria-autocomplete="list" aria-expanded="false" aria-controls="structured-command-menu-${sessionId}"> + diff --git a/web/src/styles.css b/web/src/styles.css index 90722a6..db67bdf 100644 --- a/web/src/styles.css +++ b/web/src/styles.css @@ -2175,13 +2175,13 @@ input.leaf-rename:focus { .structured-config { position: relative; - flex: 0 1 300px; + flex: 0 1 210px; min-width: 0; } .structured-config-trigger { width: 100%; - height: 26px; + height: var(--control-h); display: flex; align-items: center; gap: var(--sp-2); @@ -2231,7 +2231,7 @@ input.leaf-rename:focus { .structured-config-menu { position: absolute; z-index: 20; - top: calc(100% + var(--sp-2)); + bottom: calc(100% + var(--sp-2)); right: 0; width: min(320px, 86vw); padding: var(--sp-2); @@ -2286,6 +2286,20 @@ input.leaf-rename:focus { display: flex; } +.attach.structured, +.attach.structured .attach-title, +.structured-input { + font-family: var(--font-sans); +} + +.st-row-agent code, +.st-tool-text, +.st-tool-detail pre, +.st-diff, +.st-approval-path { + font-family: var(--font-mono); +} + .structured-main { min-width: 0; min-height: 0; @@ -2788,10 +2802,19 @@ input.leaf-rename:focus { border-radius: var(--r-2); background: var(--bg); color: var(--ink); - font-family: var(--font-mono); font-size: var(--fs-13); } +@media (max-width: 520px) { + .structured-config { + flex-basis: 132px; + } + + .structured-config-menu { + right: calc(-1 * (var(--control-h) + var(--sp-3))); + } +} + .structured-command-menu { position: absolute; z-index: var(--z-sticky);