Add safer TUI defaults for cyber models (#37055)

## What changed

- Propagate the optional `modelSpecialty` field through the model catalog and
  app-server `model/list` response.
- When a newly selected model has the `cyber` specialty, default an active TUI
  thread to workspace-write permissions with on-request approval. Use auto
  review when available, otherwise keep the user as reviewer, while respecting
  configured permission requirements.
- Show a notice when auto review is applied and strengthen the full-access
  warning for cyber models.
- Preserve explicitly selected permissions when only reasoning settings change.

## Testing

- Cover auto-review defaults, requirement-aware fallback behavior, permission
  preservation across reasoning changes, and the new warning notice.

GitOrigin-RevId: 8f25b0082d3051d9ff91f7355921236d0f82f758
This commit is contained in:
Won Park authored and copyberry committed 2026-08-05 08:04:15 +00:00
1 parent 3171166881
commit 757c151a0e
35 files changed
+536 -39

No files matched your search

+1
View File
@@ -261,6 +261,7 @@ fn remote_model_with_auto_review_override(slug: &str, review_model: &str) -> Mod
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: Some(review_model.to_string()),
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
priority: 1,
@@ -90,6 +90,7 @@ fn test_model_info(
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
priority: 1,
@@ -954,6 +955,7 @@ async fn model_switch_to_smaller_model_updates_token_context_window() -> Result<
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
priority: 1,
@@ -534,6 +534,7 @@ fn test_remote_model(slug: &str, priority: i32) -> ModelInfo {
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
}
+2
View File
@@ -669,6 +669,7 @@ async fn remote_model_friendly_personality_instructions_with_feature() -> anyhow
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
};
@@ -790,6 +791,7 @@ async fn user_turn_personality_remote_model_template_includes_update_message() -
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
};
@@ -528,6 +528,7 @@ async fn remote_models_remote_model_uses_unified_exec() -> Result<()> {
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
priority: 1,
@@ -782,6 +783,7 @@ async fn remote_models_apply_legacy_instructions() -> Result<()> {
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
priority: 1,
@@ -1365,6 +1367,7 @@ fn test_remote_model_with_policy(
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
priority,
+1
View File
@@ -2231,6 +2231,7 @@ async fn stdio_image_responses_are_sanitized_for_text_only_model() -> anyhow::Re
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
}],
@@ -71,6 +71,7 @@ fn test_model_info(
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
priority: 1,
+1
View File
@@ -1363,6 +1363,7 @@ async fn view_image_tool_returns_unsupported_message_for_text_only_model() -> an
supports_search_tool: false,
use_responses_lite: false,
auto_review_model_override: None,
model_specialty: None,
tool_mode: None,
multi_agent_version: None,
priority: 1,