feat(#442): categorized env keys screen with add/remove, search, and gateway restart (#464)

* feat(#442): categorized env keys screen with add/remove, search, and gateway restart

- Group env vars by category (LLM Providers, Tool API Keys, Messaging
  Platforms, Agent Settings, Other) with collapsible AnimatedVisibility
  sections matching MCP screen pattern
- Add new env var form (PUT /api/env) with key/value inputs
- Delete env var via DELETE /api/env with EnvVarDeleteRequest body
- Reveal/hide/edit inline per-card controls
- Search bar filtering across key names and descriptions
- Gateway restart banner with one-click action when changes are dirty
- Track keysChanged flag showing restart prompt after mutations
- Wire delete endpoint in HermesApiService using @HTTP(hasBody=true)
- Add EnvVarDeleteRequest data model class

* fix(#442): update test to match new categorized KeysViewModel API

* fix(#442): satisfy ktlint multiline-expression-wrapping rule

---------

Co-authored-by: Hermes Agent <hermes@agent.local>
This commit is contained in:
M57andHermes Agent authored and GitHub committed 2026-07-03 23:04:06 +03:00
1 parent 5be4075d95
commit e74fe46a5f
6 files changed
+659 -147

No files matched your search

+9
View File
@@ -705,6 +705,15 @@
<string name="keys_empty_desc">Environment keys from Hermes will appear here.</string>
<string name="keys_label_not_configured">Not configured</string>
<string name="keys_action_toggle_visibility">Toggle Visibility</string>
<string name="keys_search_placeholder">Search keys…</string>
<string name="keys_add_header">Add new key</string>
<string name="keys_add_key_label">Key</string>
<string name="keys_add_value_label">Value</string>
<string name="keys_add_action">Add key</string>
<string name="keys_restart_title">Gateway restart required</string>
<string name="keys_restart_desc">Environment changes take effect after a gateway restart.</string>
<string name="keys_restart_action">Restart gateway</string>
<string name="content_desc_delete_key">Delete key</string>
<!-- Channels Screen -->
<string name="channels_empty_title">No channels configured</string>