feat: add Hermes Agent as 6th supported app type (Phase 1)

Register AppType::Hermes across the entire Rust backend:
- Add Hermes variant to AppType enum with additive mode and MCP support
- Add hermes field to McpApps, SkillApps, CommonConfigSnippets, and all
  per-app structs (McpRoot, PromptRoot, VisibleApps, AppSettings)
- Create minimal hermes_config.rs with get_hermes_dir() respecting
  settings override, matching the pattern of other app config modules
- Update all match arms in commands, services, deeplink, proxy, mcp,
  session_manager, and test files
- Extract shared build_additive_app_settings() to eliminate duplication
  between OpenClaw and Hermes deep link handling
- Combine identical OpenClaw/Hermes proxy match arms into unified arms
This commit is contained in:
Jason
2026-04-15 16:22:35 +08:00
parent 701e7d9581
commit 81af0a57f9
27 changed files with 272 additions and 103 deletions
+2
View File
@@ -554,6 +554,7 @@ command = "echo"
codex: false, // 初始未启用
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
@@ -682,6 +683,7 @@ fn import_from_claude_merges_into_config() {
codex: false,
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
+8
View File
@@ -217,6 +217,7 @@ fn set_mcp_enabled_for_codex_writes_live_config() {
codex: false, // 初始未启用
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
@@ -281,6 +282,7 @@ fn enabling_codex_mcp_skips_when_codex_dir_missing() {
codex: false,
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
@@ -325,6 +327,7 @@ fn upsert_mcp_server_disabling_app_removes_from_claude_live_config() {
codex: false,
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
@@ -358,6 +361,7 @@ fn upsert_mcp_server_disabling_app_removes_from_claude_live_config() {
codex: false,
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
@@ -490,6 +494,7 @@ fn enabling_gemini_mcp_skips_when_gemini_dir_missing() {
codex: false,
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
@@ -544,6 +549,7 @@ fn enabling_claude_mcp_skips_when_claude_config_absent() {
codex: false,
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
@@ -604,6 +610,7 @@ fn sync_all_enabled_removes_known_disabled_but_preserves_unknown_live_entries()
codex: false,
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
@@ -625,6 +632,7 @@ fn sync_all_enabled_removes_known_disabled_but_preserves_unknown_live_entries()
codex: false,
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
+1
View File
@@ -75,6 +75,7 @@ command = "say"
codex: true, // 启用 Codex
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,
+1
View File
@@ -163,6 +163,7 @@ command = "say"
codex: true,
gemini: false,
opencode: false,
hermes: false,
},
description: None,
homepage: None,