feat(apps): unify CLI apps and MCP (#3991)

* refactor(cli): load bundled apps from catalog

* feat(plugins): unify CLI and MCP settings

* feat(plugins): add settings category filter

* style(plugins): refine settings catalog

* refactor(cli): load nanobot apps from repo catalog

* feat(store): add capability store entry

* feat(apps): rename capability store

* fix(apps): verify clean app removal

* fix(apps): keep main sidebar on apps view

* feat(apps): add shared app manifest protocol

* fix(apps): dismiss app status message

* refactor(apps): move CLI adapter under apps

* refactor(apps): drop legacy cli apps package
This commit is contained in:
Xubin Ren
2026-05-25 20:07:02 +08:00
committed by GitHub
parent 179acfe104
commit 418cb23da2
32 changed files with 2026 additions and 903 deletions
+26 -9
View File
@@ -63,7 +63,8 @@
"language": {
"label": "Language",
"ariaLabel": "Change language"
}
},
"apps": "Apps"
},
"settings": {
"backToChat": "Back to chat",
@@ -83,7 +84,8 @@
"cliApps": "CLI Apps",
"mcp": "MCP",
"runtime": "Runtime",
"advanced": "Advanced"
"advanced": "Advanced",
"apps": "Apps"
},
"sections": {
"interface": "Interface",
@@ -96,12 +98,13 @@
"imageDefaults": "Defaults",
"webSearch": "Web search",
"webBehavior": "Behavior",
"cliApps": "CLI Apps",
"mcp": "MCP",
"cliApps": "CLI apps",
"mcp": "MCP services",
"identity": "Identity",
"safety": "Safety",
"capabilities": "Capabilities",
"integrations": "Integrations"
"integrations": "Integrations",
"apps": "Apps"
},
"models": {
"selectModel": "Select model",
@@ -380,6 +383,20 @@
"selectSize": "Select size",
"configureProvider": "Configure provider",
"missingCredential": "Configure this provider before enabling image generation."
},
"apps": {
"description": "Add app CLIs and MCP services nanobot can use from chat.",
"cliLabel": "CLI",
"mcpLabel": "MCP",
"filterAll": "All",
"filterCli": "CLI apps",
"filterMcp": "MCP services",
"enabledSummary": "{{count}} enabled",
"caption": "{{cli}} CLI · {{mcp}} MCP",
"searchPlaceholder": "Search Apps",
"featured": "Featured",
"loading": "Loading Apps...",
"empty": "No apps match this filter."
}
},
"chat": {
@@ -596,10 +613,10 @@
}
},
"mentions": {
"ariaLabel": "Apps and MCP",
"label": "Plugins",
"cliGroup": "CLI Apps",
"mcpGroup": "MCP servers",
"ariaLabel": "Apps",
"label": "Apps",
"cliGroup": "CLI apps",
"mcpGroup": "MCP services",
"cliBadge": "CLI",
"mcpBadge": "MCP",
"cliDescription": "Use @{{name}} as a local CLI app",
+23 -6
View File
@@ -63,7 +63,8 @@
"language": {
"label": "Idioma",
"ariaLabel": "Cambiar idioma"
}
},
"apps": "Apps"
},
"settings": {
"backToChat": "Volver al chat",
@@ -83,7 +84,8 @@
"runtime": "Runtime",
"advanced": "Advanced",
"cliApps": "Apps CLI",
"mcp": "MCP"
"mcp": "MCP",
"apps": "Apps"
},
"sections": {
"interface": "Interfaz",
@@ -101,7 +103,8 @@
"capabilities": "Capacidades",
"integrations": "Integrations",
"cliApps": "Apps CLI",
"mcp": "MCP"
"mcp": "Servicios MCP",
"apps": "Apps"
},
"rows": {
"theme": "Tema",
@@ -380,6 +383,20 @@
},
"legal": {
"thirdPartyBrands": "Los nombres, logotipos y marcas de productos pertenecen a sus respectivos propietarios. Su uso es solo identificativo y no implica respaldo."
},
"apps": {
"description": "Añade CLI de apps y servicios MCP que nanobot puede usar desde el chat.",
"cliLabel": "CLI",
"mcpLabel": "MCP",
"filterAll": "Todo",
"filterCli": "Apps CLI",
"filterMcp": "Servicios MCP",
"enabledSummary": "{{count}} activados",
"caption": "{{cli}} CLI · {{mcp}} MCP",
"searchPlaceholder": "Buscar apps",
"featured": "Destacadas",
"loading": "Cargando apps...",
"empty": "Ninguna app coincide con este filtro."
}
},
"chat": {
@@ -607,10 +624,10 @@
"io": "No se pudo leer este archivo"
},
"mentions": {
"ariaLabel": "Apps y MCP",
"label": "Plugins",
"ariaLabel": "Apps",
"label": "Apps",
"cliGroup": "Apps CLI",
"mcpGroup": "Servidores MCP",
"mcpGroup": "Servicios MCP",
"cliBadge": "CLI",
"mcpBadge": "MCP",
"cliDescription": "Usar @{{name}} como app CLI local",
+23 -6
View File
@@ -63,7 +63,8 @@
"language": {
"label": "Langue",
"ariaLabel": "Changer de langue"
}
},
"apps": "Apps"
},
"settings": {
"backToChat": "Retour à la discussion",
@@ -83,7 +84,8 @@
"runtime": "Runtime",
"advanced": "Advanced",
"cliApps": "Apps CLI",
"mcp": "MCP"
"mcp": "MCP",
"apps": "Apps"
},
"sections": {
"interface": "Interface",
@@ -101,7 +103,8 @@
"capabilities": "Capacités",
"integrations": "Integrations",
"cliApps": "Apps CLI",
"mcp": "MCP"
"mcp": "Services MCP",
"apps": "Apps"
},
"rows": {
"theme": "Thème",
@@ -380,6 +383,20 @@
},
"legal": {
"thirdPartyBrands": "Les noms, logos et marques de produits appartiennent à leurs propriétaires respectifs. Leur utilisation sert uniquement à l'identification et n'implique aucune approbation."
},
"apps": {
"description": "Ajoutez des CLI dapps et des services MCP que nanobot peut utiliser dans le chat.",
"cliLabel": "CLI",
"mcpLabel": "MCP",
"filterAll": "Tout",
"filterCli": "Apps CLI",
"filterMcp": "Services MCP",
"enabledSummary": "{{count}} activés",
"caption": "{{cli}} CLI · {{mcp}} MCP",
"searchPlaceholder": "Rechercher des apps",
"featured": "En vedette",
"loading": "Chargement des apps...",
"empty": "Aucune app ne correspond à ce filtre."
}
},
"chat": {
@@ -607,10 +624,10 @@
"io": "Impossible de lire ce fichier"
},
"mentions": {
"ariaLabel": "Apps et MCP",
"label": "Plugins",
"ariaLabel": "Apps",
"label": "Apps",
"cliGroup": "Apps CLI",
"mcpGroup": "Serveurs MCP",
"mcpGroup": "Services MCP",
"cliBadge": "CLI",
"mcpBadge": "MCP",
"cliDescription": "Utiliser @{{name}} comme app CLI locale",
+25 -8
View File
@@ -63,7 +63,8 @@
"language": {
"label": "Bahasa",
"ariaLabel": "Ganti bahasa"
}
},
"apps": "Aplikasi"
},
"settings": {
"backToChat": "Kembali ke obrolan",
@@ -83,7 +84,8 @@
"runtime": "Runtime",
"advanced": "Advanced",
"cliApps": "Aplikasi CLI",
"mcp": "MCP"
"mcp": "MCP",
"apps": "Aplikasi"
},
"sections": {
"interface": "Antarmuka",
@@ -100,8 +102,9 @@
"safety": "Safety",
"capabilities": "Kapabilitas",
"integrations": "Integrations",
"cliApps": "Aplikasi CLI",
"mcp": "MCP"
"cliApps": "App CLI",
"mcp": "Layanan MCP",
"apps": "Aplikasi"
},
"rows": {
"theme": "Tema",
@@ -380,6 +383,20 @@
},
"legal": {
"thirdPartyBrands": "Nama produk, logo, dan merek adalah milik pemiliknya masing-masing. Penggunaan hanya untuk identifikasi dan tidak menyiratkan dukungan."
},
"apps": {
"description": "Tambahkan CLI app dan layanan MCP yang dapat digunakan nanobot dari chat.",
"cliLabel": "CLI",
"mcpLabel": "MCP",
"filterAll": "Semua",
"filterCli": "App CLI",
"filterMcp": "Layanan MCP",
"enabledSummary": "{{count}} aktif",
"caption": "{{cli}} CLI · {{mcp}} MCP",
"searchPlaceholder": "Cari aplikasi",
"featured": "Unggulan",
"loading": "Memuat aplikasi...",
"empty": "Tidak ada aplikasi yang cocok dengan filter ini."
}
},
"chat": {
@@ -607,10 +624,10 @@
"io": "Tidak dapat membaca file ini"
},
"mentions": {
"ariaLabel": "Aplikasi dan MCP",
"label": "Plugin",
"cliGroup": "Aplikasi CLI",
"mcpGroup": "Server MCP",
"ariaLabel": "Aplikasi",
"label": "Aplikasi",
"cliGroup": "App CLI",
"mcpGroup": "Layanan MCP",
"cliBadge": "CLI",
"mcpBadge": "MCP",
"cliDescription": "Gunakan @{{name}} sebagai aplikasi CLI lokal",
+23 -6
View File
@@ -63,7 +63,8 @@
"language": {
"label": "言語",
"ariaLabel": "言語を変更"
}
},
"apps": "アプリ"
},
"settings": {
"backToChat": "チャットに戻る",
@@ -83,7 +84,8 @@
"runtime": "Runtime",
"advanced": "Advanced",
"cliApps": "CLI アプリ",
"mcp": "MCP"
"mcp": "MCP",
"apps": "アプリ"
},
"sections": {
"interface": "インターフェース",
@@ -101,7 +103,8 @@
"capabilities": "機能",
"integrations": "Integrations",
"cliApps": "CLI アプリ",
"mcp": "MCP"
"mcp": "MCP サービス",
"apps": "アプリ"
},
"rows": {
"theme": "テーマ",
@@ -380,6 +383,20 @@
},
"legal": {
"thirdPartyBrands": "製品名、ロゴ、ブランドはそれぞれの所有者に帰属します。使用は識別のみを目的とし、承認を意味するものではありません。"
},
"apps": {
"description": "チャットから nanobot が使えるアプリ CLI と MCP サービスを追加します。",
"cliLabel": "CLI",
"mcpLabel": "MCP",
"filterAll": "すべて",
"filterCli": "CLI アプリ",
"filterMcp": "MCP サービス",
"enabledSummary": "{{count}} 件有効",
"caption": "{{cli}} CLI · {{mcp}} MCP",
"searchPlaceholder": "アプリを検索",
"featured": "おすすめ",
"loading": "アプリを読み込み中...",
"empty": "このフィルターに一致するアプリはありません。"
}
},
"chat": {
@@ -607,10 +624,10 @@
"io": "このファイルを読み込めません"
},
"mentions": {
"ariaLabel": "アプリと MCP",
"label": "プラグイン",
"ariaLabel": "アプリ",
"label": "アプリ",
"cliGroup": "CLI アプリ",
"mcpGroup": "MCP サーバー",
"mcpGroup": "MCP サービス",
"cliBadge": "CLI",
"mcpBadge": "MCP",
"cliDescription": "@{{name}} をローカル CLI アプリとして使用",
+23 -6
View File
@@ -63,7 +63,8 @@
"language": {
"label": "언어",
"ariaLabel": "언어 변경"
}
},
"apps": "앱"
},
"settings": {
"backToChat": "채팅으로 돌아가기",
@@ -83,7 +84,8 @@
"runtime": "Runtime",
"advanced": "Advanced",
"cliApps": "CLI 앱",
"mcp": "MCP"
"mcp": "MCP",
"apps": "앱"
},
"sections": {
"interface": "인터페이스",
@@ -101,7 +103,8 @@
"capabilities": "기능",
"integrations": "Integrations",
"cliApps": "CLI 앱",
"mcp": "MCP"
"mcp": "MCP 서비스",
"apps": "앱"
},
"rows": {
"theme": "테마",
@@ -380,6 +383,20 @@
},
"legal": {
"thirdPartyBrands": "제품 이름, 로고 및 브랜드는 각 소유자의 자산입니다. 사용은 식별 목적일 뿐 보증이나 제휴를 의미하지 않습니다."
},
"apps": {
"description": "채팅에서 nanobot이 사용할 수 있는 앱 CLI와 MCP 서비스를 추가합니다.",
"cliLabel": "CLI",
"mcpLabel": "MCP",
"filterAll": "전체",
"filterCli": "CLI 앱",
"filterMcp": "MCP 서비스",
"enabledSummary": "{{count}}개 활성화됨",
"caption": "{{cli}} CLI · {{mcp}} MCP",
"searchPlaceholder": "앱 검색",
"featured": "추천",
"loading": "앱 불러오는 중...",
"empty": "이 필터와 일치하는 앱이 없습니다."
}
},
"chat": {
@@ -607,10 +624,10 @@
"io": "이 파일을 읽을 수 없습니다"
},
"mentions": {
"ariaLabel": "앱 및 MCP",
"label": "플러그인",
"ariaLabel": "앱",
"label": "",
"cliGroup": "CLI 앱",
"mcpGroup": "MCP 서",
"mcpGroup": "MCP 서비스",
"cliBadge": "CLI",
"mcpBadge": "MCP",
"cliDescription": "@{{name}}을 로컬 CLI 앱으로 사용",
+23 -6
View File
@@ -63,7 +63,8 @@
"language": {
"label": "Ngôn ngữ",
"ariaLabel": "Đổi ngôn ngữ"
}
},
"apps": "Ứng dụng"
},
"settings": {
"backToChat": "Quay lại trò chuyện",
@@ -83,7 +84,8 @@
"runtime": "Runtime",
"advanced": "Advanced",
"cliApps": "Ứng dụng CLI",
"mcp": "MCP"
"mcp": "MCP",
"apps": "Ứng dụng"
},
"sections": {
"interface": "Giao diện",
@@ -101,7 +103,8 @@
"capabilities": "Khả năng",
"integrations": "Integrations",
"cliApps": "Ứng dụng CLI",
"mcp": "MCP"
"mcp": "Dịch vụ MCP",
"apps": "Ứng dụng"
},
"rows": {
"theme": "Giao diện",
@@ -380,6 +383,20 @@
},
"legal": {
"thirdPartyBrands": "Tên sản phẩm, logo và thương hiệu thuộc về chủ sở hữu tương ứng. Việc sử dụng chỉ nhằm nhận diện và không ngụ ý được xác nhận."
},
"apps": {
"description": "Thêm CLI ứng dụng và dịch vụ MCP để nanobot dùng trong trò chuyện.",
"cliLabel": "CLI",
"mcpLabel": "MCP",
"filterAll": "Tất cả",
"filterCli": "Ứng dụng CLI",
"filterMcp": "Dịch vụ MCP",
"enabledSummary": "{{count}} đã bật",
"caption": "{{cli}} CLI · {{mcp}} MCP",
"searchPlaceholder": "Tìm ứng dụng",
"featured": "Nổi bật",
"loading": "Đang tải ứng dụng...",
"empty": "Không có ứng dụng nào khớp với bộ lọc này."
}
},
"chat": {
@@ -607,10 +624,10 @@
"io": "Không thể đọc tệp này"
},
"mentions": {
"ariaLabel": "Ứng dụng và MCP",
"label": "Plugin",
"ariaLabel": "Ứng dụng",
"label": "Ứng dụng",
"cliGroup": "Ứng dụng CLI",
"mcpGroup": "Máy chủ MCP",
"mcpGroup": "Dịch vụ MCP",
"cliBadge": "CLI",
"mcpBadge": "MCP",
"cliDescription": "Dùng @{{name}} như ứng dụng CLI cục bộ",
+23 -6
View File
@@ -63,7 +63,8 @@
"language": {
"label": "语言",
"ariaLabel": "切换语言"
}
},
"apps": "应用"
},
"settings": {
"backToChat": "返回对话",
@@ -83,7 +84,8 @@
"cliApps": "CLI 应用",
"mcp": "MCP",
"runtime": "运行时",
"advanced": "高级"
"advanced": "高级",
"apps": "应用"
},
"sections": {
"interface": "界面",
@@ -97,11 +99,12 @@
"webSearch": "网页搜索",
"webBehavior": "行为",
"cliApps": "CLI 应用",
"mcp": "MCP",
"mcp": "MCP 服务",
"identity": "身份",
"safety": "安全",
"capabilities": "能力",
"integrations": "集成"
"integrations": "集成",
"apps": "应用"
},
"models": {
"selectModel": "选择模型",
@@ -380,6 +383,20 @@
"selectSize": "选择尺寸",
"configureProvider": "配置服务商",
"missingCredential": "启用图片生成前,请先配置这个服务商。"
},
"apps": {
"description": "添加 nanobot 可在聊天中使用的 App CLI 和 MCP 服务。",
"cliLabel": "CLI",
"mcpLabel": "MCP",
"filterAll": "全部",
"filterCli": "CLI 应用",
"filterMcp": "MCP 服务",
"enabledSummary": "已启用 {{count}} 个",
"caption": "{{cli}} CLI · {{mcp}} MCP",
"searchPlaceholder": "搜索应用",
"featured": "精选",
"loading": "正在加载应用...",
"empty": "没有符合筛选条件的应用。"
}
},
"chat": {
@@ -595,8 +612,8 @@
}
},
"mentions": {
"ariaLabel": "应用和 MCP",
"label": "插件",
"ariaLabel": "应用",
"label": "应用",
"cliGroup": "CLI 应用",
"mcpGroup": "MCP 服务",
"cliBadge": "CLI",
+22 -5
View File
@@ -63,7 +63,8 @@
"language": {
"label": "語言",
"ariaLabel": "切換語言"
}
},
"apps": "應用"
},
"settings": {
"backToChat": "返回對話",
@@ -83,7 +84,8 @@
"runtime": "Runtime",
"advanced": "Advanced",
"cliApps": "CLI 應用",
"mcp": "MCP"
"mcp": "MCP",
"apps": "應用"
},
"sections": {
"interface": "介面",
@@ -101,7 +103,8 @@
"capabilities": "功能",
"integrations": "Integrations",
"cliApps": "CLI 應用",
"mcp": "MCP"
"mcp": "MCP 服務",
"apps": "應用"
},
"rows": {
"theme": "主題",
@@ -380,6 +383,20 @@
},
"legal": {
"thirdPartyBrands": "產品名稱、標誌與品牌均屬於其各自擁有者。使用僅為識別用途,並不代表背書。"
},
"apps": {
"description": "新增 nanobot 可在聊天中使用的 App CLI 與 MCP 服務。",
"cliLabel": "CLI",
"mcpLabel": "MCP",
"filterAll": "全部",
"filterCli": "CLI 應用",
"filterMcp": "MCP 服務",
"enabledSummary": "已啟用 {{count}} 個",
"caption": "{{cli}} CLI · {{mcp}} MCP",
"searchPlaceholder": "搜尋應用",
"featured": "精選",
"loading": "正在載入應用...",
"empty": "沒有符合篩選條件的應用。"
}
},
"chat": {
@@ -607,8 +624,8 @@
"io": "無法讀取這個檔案"
},
"mentions": {
"ariaLabel": "應用和 MCP",
"label": "插件",
"ariaLabel": "應用",
"label": "應用",
"cliGroup": "CLI 應用",
"mcpGroup": "MCP 服務",
"cliBadge": "CLI",