- merge latest main into the gui settings schema branch
- regenerate root and enterprise lockfiles after dependency changes
- fix stale llm-settings test to use sdk_settings_schema
Co-authored-by: openhands <openhands@all-hands.dev>
- llm-settings.tsx: construct full model name (provider/model) in
CriticalFields onChange, matching the convention used everywhere else
- settings.py: redact set secrets to '<hidden>' instead of None so the
frontend can distinguish 'set but redacted' from 'not set'
- settings.py: reject '<hidden>' sentinel in _apply_settings_payload to
prevent accidental overwrite of real secrets
- Fix llm-settings test to use agent_settings/agent_settings_schema names
Co-authored-by: openhands <openhands@all-hands.dev>
- merge latest main into the GUI settings schema branch
- keep schema-driven LLM settings page and tests after conflict resolution
- update lockfiles to SDK branch head c333aedd
Co-authored-by: openhands <openhands@all-hands.dev>
The secrets_store field on Settings is frozen, so setattr() raised a
validation error when the POST /api/settings payload included that key.
Filter out any frozen field before calling setattr in
_apply_settings_payload. Added a regression test.
Co-authored-by: openhands <openhands@all-hands.dev>
critic_server_url and critic_model_name are now user-facing settings
exposed in the GUI. The backend no longer mutates them based on proxy
detection. _get_agent_settings is now a pure pass-through with model
override only.
SDK pin: b69f7cee
Co-authored-by: openhands <openhands@all-hands.dev>
Replace manual Agent construction with settings.create_agent() when
SDK AgentSettings are available. This makes settings the single
source of truth for LLM, tools, condenser, critic, and agent context.
Key changes:
- _get_default_critic() eliminated — replaced by _apply_critic_proxy()
which sets critic_server_url/critic_model_name on the settings, then
lets the SDK's build_critic() do the construction.
- _create_agent_with_context() settings path: populate tools +
agent_context on settings, call create_agent(), apply runtime-only
overrides (mcp_config, system_prompt) via model_copy.
- Legacy path (no agent_settings) kept for backward compat.
- Tests updated: agent_context now in Agent() constructor,
mcp_config/system_prompt in model_copy.
Co-authored-by: openhands <openhands@all-hands.dev>
Create OpenHandsAgentSettings(AgentSettings) in the OpenHands codebase
that extends the SDK's AgentSettings with a 'security' section containing
confirmation_mode (critical) and security_analyzer (major). The SDK's
export_schema() picks these up automatically via its metadata conventions.
Backend:
- SecuritySettings pydantic model with SDK metadata annotations
- OpenHandsAgentSettings subclass used by _get_sdk_settings_schema()
- _SDK_TO_FLAT_SETTINGS bridges dotted SDK keys to flat Settings attrs
so existing consumers (session init, security-analyzer setup) work
- _extract_sdk_settings_values seeds from flat fields for UI display
Frontend:
- /settings/security route renders the security schema section
- Nav: LLM -> Security -> Condenser -> Critic (both SAAS and OSS)
- Removed empty General page (no schema section exists for it yet)
Tests:
- New test_get_sdk_settings_schema_includes_security_section
- All 119 backend + 10 frontend tests pass
Co-authored-by: openhands <openhands@all-hands.dev>
- Add /settings/general and /settings/security sidebar pages rendering
their respective SDK schema sections
- Reorder nav: General above LLM, Security below LLM (both SAAS + OSS)
- Remove SDK_LEGACY_FIELD_MAP and all legacy field bridging — the only
canonical store for SDK settings is now sdk_settings_values
- Simplify to_agent_settings(), _extract_sdk_settings_values(), and
_apply_settings_payload() to read/write sdk_settings_values only
- Fix inferInitialView to accept an optional schemaOverride so
SdkSectionPage passes filteredSchema (prevents cross-section
minor-value overrides from elevating the view tier on unrelated pages)
- Add SETTINGS$NAV_GENERAL and SETTINGS$NAV_SECURITY i18n keys with
translations for all 14 languages
- Use lock.svg for Security icon and settings.svg for General icon
Co-authored-by: openhands <openhands@all-hands.dev>