diff --git a/app/src/lib/i18n/chunks/de-5.ts b/app/src/lib/i18n/chunks/de-5.ts index fa6430ef5..344d416e7 100644 --- a/app/src/lib/i18n/chunks/de-5.ts +++ b/app/src/lib/i18n/chunks/de-5.ts @@ -208,9 +208,31 @@ const de5: TranslationMap = { 'settings.developerMenu.composioRouting.title': 'Composio Routing (Direktmodus)', 'settings.developerMenu.composioRouting.desc': 'Bring deinen eigenen Composio API-Schlüssel mit und leite Anrufe direkt an backend.composio.dev weiter', + 'settings.developerMenu.mcpServer.title': 'MCP Server', + 'settings.developerMenu.mcpServer.desc': + 'Konfiguriere externe MCP-Clients für die Verbindung mit OpenHuman', 'settings.developerMenu.integrationTriggers.title': 'Integrationsauslöser', 'settings.developerMenu.integrationTriggers.desc': 'Konfiguriere KI-Triage-Einstellungen für Composio-Integrationsauslöser', + 'settings.mcpServer.title': 'MCP-Server', + 'settings.mcpServer.toolsSectionTitle': 'Verfügbare Werkzeuge', + 'settings.mcpServer.toolsSectionDesc': + 'Werkzeuge, die über den MCP-Stdio-Server beim Ausführen von openhuman-core mcp bereitgestellt werden', + 'settings.mcpServer.configSectionTitle': 'Client-Konfiguration', + 'settings.mcpServer.configSectionDesc': + 'Wähle deinen MCP-Client aus, um das richtige Konfigurations-Snippet zu generieren', + 'settings.mcpServer.copySnippet': 'In die Zwischenablage kopieren', + 'settings.mcpServer.copied': 'Kopiert!', + 'settings.mcpServer.openConfigFile': 'Konfigurationsdatei öffnen', + 'settings.mcpServer.binaryPathNotFound': + 'OpenHuman-Binärdatei nicht gefunden. Wenn du aus dem Quellcode arbeitest, baue sie mit: cargo build --bin openhuman-core', + 'settings.mcpServer.openConfigError': 'Konfigurationsdatei konnte nicht geöffnet werden', + 'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop', + 'settings.mcpServer.clientCursor': 'Cursor', + 'settings.mcpServer.clientCodex': 'Codex', + 'settings.mcpServer.clientZed': 'Zed', + 'settings.mcpServer.configFilePath': 'Konfigurationsdatei', + 'settings.mcpServer.clientSelectorAriaLabel': 'MCP-Client-Auswahl', 'settings.appearance.menuDesc': 'Wähle hell, dunkel oder passend zu deinem Systemthema', 'settings.mascot.active': 'Aktiv', 'settings.mascot.characterDesc': 'Charakterbeschreibung', diff --git a/src/openhuman/composio/providers/catalogs.rs b/src/openhuman/composio/providers/catalogs.rs index 180f17ceb..6b9f9bef5 100644 --- a/src/openhuman/composio/providers/catalogs.rs +++ b/src/openhuman/composio/providers/catalogs.rs @@ -31,4 +31,8 @@ pub use super::catalogs_microsoft::{EXCEL_CURATED, ONE_DRIVE_CURATED}; pub use super::catalogs_productivity::{ ASANA_CURATED, DROPBOX_CURATED, JIRA_CURATED, OUTLOOK_CURATED, TODOIST_CURATED, TRELLO_CURATED, }; +// `LINEAR_CURATED` moved into `super::linear::LINEAR_CURATED` alongside +// the native LinearProvider impl. `catalog_for_toolkit("linear")` now +// routes there directly. Removing the re-export keeps a single source +// of truth and matches how `gmail` / `notion` / `clickup` are wired. pub use super::catalogs_social_media::{SPOTIFY_CURATED, TWITTER_CURATED, YOUTUBE_CURATED}; diff --git a/src/openhuman/composio/providers/catalogs_productivity.rs b/src/openhuman/composio/providers/catalogs_productivity.rs index 83ab6920f..64a00ff6e 100644 --- a/src/openhuman/composio/providers/catalogs_productivity.rs +++ b/src/openhuman/composio/providers/catalogs_productivity.rs @@ -106,6 +106,14 @@ pub const OUTLOOK_CURATED: &[CuratedTool] = &[ }, ]; +// ── linear ────────────────────────────────────────────────────────── +// +// `LINEAR_CURATED` lives in `super::linear::tools` alongside the native +// `LinearProvider` impl (per-issue #2400). `catalog_for_toolkit("linear")` +// in `super::mod` routes through that constant directly. Removing the +// catalog-only declaration here keeps a single source of truth and +// matches how `gmail` / `notion` / `clickup` are wired. + // ── jira ──────────────────────────────────────────────────────────── pub const JIRA_CURATED: &[CuratedTool] = &[ CuratedTool { diff --git a/src/openhuman/composio/providers/descriptions.rs b/src/openhuman/composio/providers/descriptions.rs index 488ae0ad3..18453f65f 100644 --- a/src/openhuman/composio/providers/descriptions.rs +++ b/src/openhuman/composio/providers/descriptions.rs @@ -20,7 +20,10 @@ pub fn toolkit_description(slug: &str) -> &'static str { "google_sheets" => "Read, write, and manage Google Sheets spreadsheets", "outlook" => "Send, read, and manage emails in Microsoft Outlook", "microsoft_teams" => "Send messages and manage channels in Microsoft Teams", - "linear" => "Create and manage issues, projects, and cycles in Linear; sync assigned issues into Memory Tree", + "linear" => { + "Create, read, and manage issues, projects, and cycles in Linear; sync \ + assigned issues into Memory Tree" + } "jira" => "Create and manage issues, projects, and sprints in Jira", "trello" => "Create and manage cards, lists, and boards in Trello", "asana" => "Create and manage tasks, projects, and sections in Asana", diff --git a/src/openhuman/composio/providers/mod.rs b/src/openhuman/composio/providers/mod.rs index d1b9d5eb4..60cd08549 100644 --- a/src/openhuman/composio/providers/mod.rs +++ b/src/openhuman/composio/providers/mod.rs @@ -187,6 +187,7 @@ pub fn catalog_for_toolkit(toolkit: &str) -> Option<&'static [CuratedTool]> { "gmail" => Some(gmail::GMAIL_CURATED), "notion" => Some(notion::NOTION_CURATED), "github" => Some(github::GITHUB_CURATED), + "linear" => Some(linear::LINEAR_CURATED), // Catalog-only toolkits "slack" => Some(catalogs::SLACK_CURATED), "discord" => Some(catalogs::DISCORD_CURATED), @@ -197,7 +198,6 @@ pub fn catalog_for_toolkit(toolkit: &str) -> Option<&'static [CuratedTool]> { "outlook" => Some(catalogs::OUTLOOK_CURATED), // MICROSOFT_TEAMS_* slugs extract to "microsoft" via toolkit_from_slug. "microsoft" | "microsoft_teams" => Some(catalogs::MICROSOFT_TEAMS_CURATED), - "linear" => Some(linear::LINEAR_CURATED), "jira" => Some(catalogs::JIRA_CURATED), "trello" => Some(catalogs::TRELLO_CURATED), "asana" => Some(catalogs::ASANA_CURATED), @@ -473,15 +473,14 @@ mod tests { #[test] fn capability_matrix_includes_linear_as_native_memory_provider() { - // Locks in the per-issue #2400 registration: a Linear row must - // appear in the capability matrix with the same native-provider - // flags Gmail/Notion/Slack/ClickUp already carry (`memory_ingest`, - // `periodic_sync`, non-zero `sync_interval_secs`). If a future - // change drops one of the four registration touchpoints + // Per-issue #2400 registration: a Linear row must appear in + // the capability matrix as a native memory-ingest provider, + // matching gmail / notion / slack / clickup. If a future + // change drops one of the five registration touchpoints // (CAPABILITY_TOOLKITS, has_native_provider, - // native_provider_sync_interval, catalog_for_toolkit) this test - // fails loud rather than silently degrading the provider to - // catalog-only status. + // native_provider_sync_interval, catalog_for_toolkit, + // toolkit_description) this test fails loud rather than + // silently degrading the provider to catalog-only status. let matrix = capability_matrix(); let linear = matrix .iter()