feat(skills): curated GitHub catalog redesign (#3016)

* feat(skills): remove ClawHub catalog integration

Drop the ClawHub registry as a skills catalog source across web server,
shared UI, VS Code, docs, and locales. The catalog now serves git-based
sources only: the curated Anthropic repo and user-defined repositories.
Also removes the now-unused adm-zip dependency.

* feat(skills): redesign catalog around curated GitHub repositories

Replace the single-source dropdown with a card grid of curated GitHub
repositories (Anthropic, OpenAI, Cursor pstack/skills, Matt Pocock) plus
user-defined sources. Source cards show skill counts, GitHub stars, and
last-updated time; a global search covers all loaded sources.

Server: curated sources gain GitHub repo metadata (stars, pushed_at)
fetched best-effort with a 3-hour in-memory and on-disk cache; scans
run through a concurrency-limited, deduplicated cache with 3-hour TTL
persisted across restarts. Refresh still bypasses the cache.

Shared UI: source cards, global search with clear button, per-skill
GitHub links, install/installed states. VS Code curated list updated
to match. All new copy translated across 12 locales.

* fix(skills): address catalog review findings

- GitHub metadata fetch timeout drops to 1.5s (under the catalog
  client's 3s deadline) and failed lookups cache briefly (5 min) so
  repeated catalog loads do not re-hit a failing API.
- Disk cache files are written with owner-only permissions (0o600);
  rename preserves the mode.
- loadSource deduplicates concurrent in-flight requests per source and
  the shared isLoadingSource flag now clears only when the last active
  source load finishes.
This commit is contained in:
Bohdan Triapitsyn
2026-08-20 01:40:10 +03:00
committed by GitHub
parent 90d8868bfc
commit 1ed3f1f575
45 changed files with 1143 additions and 1286 deletions
@@ -845,16 +845,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': 'Manuell',
'settings.skills.catalog.page.mode.external': 'Extern',
'settings.skills.catalog.page.title': 'Fähigkeitskatalog',
'settings.skills.catalog.page.subtitle': 'Installiere fertige Skills aus kuratierten Repositories oder füge eine eigene Quelle hinzu.',
'settings.skills.catalog.page.section.sources': 'Quellen',
'settings.skills.catalog.page.searchAllPlaceholder': 'Skills in allen Quellen suchen…',
'settings.skills.catalog.page.search.clear': 'Suche löschen',
'settings.skills.catalog.page.source.skillsCount': 'Skills: {count}',
'settings.skills.catalog.page.source.stars': 'Sterne: {count}',
'settings.skills.catalog.page.source.updated': 'Aktualisiert {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Eigene Quelle hinzufügen',
'settings.skills.catalog.page.source.addOwnDescription': 'Beliebiges Git-Repository mit Skills',
'settings.skills.catalog.page.source.viewRepo': 'Repository auf GitHub öffnen',
'settings.skills.catalog.page.skill.viewOnGithub': 'Skill auf GitHub ansehen',
'settings.skills.catalog.page.list.searchTitle': 'Suchergebnisse',
'settings.skills.catalog.page.section.sourceRepository': 'Quell-Repository',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Quelle auswählen',
'settings.skills.catalog.page.actions.refreshTitle': 'Aktualisieren',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Katalog entfernen',
'settings.skills.catalog.page.actions.addCatalog': 'Katalog hinzufügen',
'settings.skills.catalog.page.actions.removeCatalog': 'Katalog entfernen',
'settings.skills.catalog.page.actions.loadMoreSkills': 'Weitere Fähigkeiten laden',
'settings.skills.catalog.page.loading.catalog': 'Wird geladen...',
'settings.skills.catalog.page.loading.skills': 'Fähigkeiten werden geladen...',
'settings.skills.catalog.page.loading.more': 'Wird geladen...',
'settings.skills.catalog.page.foundCount': '{count} Fähigkeit(en) gefunden',
'settings.skills.catalog.page.error.catalogTitle': 'Katalogfehler',
'settings.skills.catalog.page.empty.noSkillsTitle': 'Keine Fähigkeiten gefunden',
@@ -862,7 +872,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': 'installiert ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'nicht installierbar',
'settings.skills.catalog.page.badge.unknown': 'unbekannt',
'settings.skills.catalog.page.byOwnerPrefix': 'von',
'settings.skills.catalog.page.removeDialog.title': 'Katalog entfernen',
'settings.skills.catalog.page.removeDialog.description': 'Sind Sie sicher, dass Sie diesen Katalog entfernen möchten?',
'settings.openchamber.passkeys.title': 'Passkeys',
@@ -897,16 +897,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': 'Manual',
'settings.skills.catalog.page.mode.external': 'External',
'settings.skills.catalog.page.title': 'Skills Catalog',
'settings.skills.catalog.page.subtitle': 'Install ready-made skills from curated repositories, or add your own source.',
'settings.skills.catalog.page.section.sources': 'Sources',
'settings.skills.catalog.page.searchAllPlaceholder': 'Search skills across all sources…',
'settings.skills.catalog.page.search.clear': 'Clear search',
'settings.skills.catalog.page.source.skillsCount': '{count} skills',
'settings.skills.catalog.page.source.stars': '{count} stars',
'settings.skills.catalog.page.source.updated': 'Updated {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Add your own source',
'settings.skills.catalog.page.source.addOwnDescription': 'Any Git repository with skills',
'settings.skills.catalog.page.source.viewRepo': 'Open repository on GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'View skill on GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Search results',
'settings.skills.catalog.page.section.sourceRepository': 'Source Repository',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Select source',
'settings.skills.catalog.page.actions.refreshTitle': 'Refresh',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Remove Catalog',
'settings.skills.catalog.page.actions.addCatalog': 'Add Catalog',
'settings.skills.catalog.page.actions.removeCatalog': 'Remove Catalog',
'settings.skills.catalog.page.actions.loadMoreSkills': 'Load More Skills',
'settings.skills.catalog.page.loading.catalog': 'Loading...',
'settings.skills.catalog.page.loading.skills': 'Loading skills...',
'settings.skills.catalog.page.loading.more': 'Loading...',
'settings.skills.catalog.page.foundCount': '{count} skill(s) found',
'settings.skills.catalog.page.error.catalogTitle': 'Catalog error',
'settings.skills.catalog.page.empty.noSkillsTitle': 'No skills found',
@@ -914,7 +924,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': 'installed ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'not installable',
'settings.skills.catalog.page.badge.unknown': 'unknown',
'settings.skills.catalog.page.byOwnerPrefix': 'by',
'settings.skills.catalog.page.removeDialog.title': 'Remove Catalog',
'settings.skills.catalog.page.removeDialog.description': 'Are you sure you want to remove this catalog?',
'settings.openchamber.passkeys.title': 'Passkeys',
@@ -865,16 +865,26 @@ export const settingsDict = {
"settings.skills.catalog.page.mode.manual": "Manual",
"settings.skills.catalog.page.mode.external": "Externo",
"settings.skills.catalog.page.title": "Catálogo de habilidades",
'settings.skills.catalog.page.subtitle': 'Instala skills listos desde repositorios curados o añade tu propia fuente.',
'settings.skills.catalog.page.section.sources': 'Fuentes',
'settings.skills.catalog.page.searchAllPlaceholder': 'Buscar skills en todas las fuentes…',
'settings.skills.catalog.page.search.clear': 'Borrar búsqueda',
'settings.skills.catalog.page.source.skillsCount': 'Skills: {count}',
'settings.skills.catalog.page.source.stars': 'Estrellas: {count}',
'settings.skills.catalog.page.source.updated': 'Actualizado {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Añadir tu propia fuente',
'settings.skills.catalog.page.source.addOwnDescription': 'Cualquier repositorio Git con skills',
'settings.skills.catalog.page.source.viewRepo': 'Abrir repositorio en GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'Ver skill en GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Resultados de búsqueda',
"settings.skills.catalog.page.section.sourceRepository": "Repositorio de origen",
"settings.skills.catalog.page.field.selectSourcePlaceholder": "Seleccionar origen",
"settings.skills.catalog.page.actions.refreshTitle": "Actualizar",
"settings.skills.catalog.page.actions.removeCatalogTitle": "Eliminar catálogo",
"settings.skills.catalog.page.actions.addCatalog": "Añadir catálogo",
"settings.skills.catalog.page.actions.removeCatalog": "Eliminar catálogo",
"settings.skills.catalog.page.actions.loadMoreSkills": "Cargar más habilidades",
"settings.skills.catalog.page.loading.catalog": "Cargando...",
"settings.skills.catalog.page.loading.skills": "Cargando habilidades...",
"settings.skills.catalog.page.loading.more": "Cargando...",
"settings.skills.catalog.page.foundCount": "{count} habilidad(es) encontrada(s)",
"settings.skills.catalog.page.error.catalogTitle": "Error del catálogo",
"settings.skills.catalog.page.empty.noSkillsTitle": "No se encontraron habilidades",
@@ -882,7 +892,6 @@ export const settingsDict = {
"settings.skills.catalog.page.badge.installed": "instalado ({scope})",
"settings.skills.catalog.page.badge.notInstallable": "no instalable",
"settings.skills.catalog.page.badge.unknown": "desconocido",
"settings.skills.catalog.page.byOwnerPrefix": "por",
"settings.skills.catalog.page.removeDialog.title": "Eliminar catálogo",
"settings.skills.catalog.page.removeDialog.description": "¿Estás seguro de que quieres eliminar este catálogo?",
"settings.openchamber.passkeys.title": "Claves de paso",
@@ -783,16 +783,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': 'Manuel',
'settings.skills.catalog.page.mode.external': 'Externe',
'settings.skills.catalog.page.title': 'Catalogue de skills',
'settings.skills.catalog.page.subtitle': "Installez des skills prêts à l'emploi depuis des dépôts curatés ou ajoutez votre propre source.",
'settings.skills.catalog.page.section.sources': 'Sources',
'settings.skills.catalog.page.searchAllPlaceholder': 'Rechercher des skills dans toutes les sources…',
'settings.skills.catalog.page.search.clear': 'Effacer la recherche',
'settings.skills.catalog.page.source.skillsCount': 'Skills : {count}',
'settings.skills.catalog.page.source.stars': 'Étoiles : {count}',
'settings.skills.catalog.page.source.updated': 'Mis à jour {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Ajouter votre propre source',
'settings.skills.catalog.page.source.addOwnDescription': "N'importe quel dépôt Git avec des skills",
'settings.skills.catalog.page.source.viewRepo': 'Ouvrir le dépôt sur GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'Voir le skill sur GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Résultats de recherche',
'settings.skills.catalog.page.section.sourceRepository': 'Dépôt source',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Sélectionnez la source',
'settings.skills.catalog.page.actions.refreshTitle': 'Rafraîchir',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Supprimer le catalogue',
'settings.skills.catalog.page.actions.addCatalog': 'Ajouter un catalogue',
'settings.skills.catalog.page.actions.removeCatalog': 'Supprimer le catalogue',
'settings.skills.catalog.page.actions.loadMoreSkills': 'Charger plus de skills',
'settings.skills.catalog.page.loading.catalog': 'Chargement...',
'settings.skills.catalog.page.loading.skills': 'Chargement des skills...',
'settings.skills.catalog.page.loading.more': 'Chargement...',
'settings.skills.catalog.page.foundCount': '{count} skill(s) trouvé(s)',
'settings.skills.catalog.page.error.catalogTitle': 'Erreur de catalogue',
'settings.skills.catalog.page.empty.noSkillsTitle': 'Aucun skill trouvé',
@@ -800,7 +810,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': 'installé ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'non installable',
'settings.skills.catalog.page.badge.unknown': 'inconnu',
'settings.skills.catalog.page.byOwnerPrefix': 'par',
'settings.skills.catalog.page.removeDialog.title': 'Supprimer le catalogue',
'settings.skills.catalog.page.removeDialog.description': 'Êtes-vous sûr de vouloir supprimer ce catalogue ?',
'settings.openchamber.passkeys.title': 'Mots-clés',
@@ -898,16 +898,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': '手動',
'settings.skills.catalog.page.mode.external': '外部',
'settings.skills.catalog.page.title': 'スキルカタログ',
'settings.skills.catalog.page.subtitle': 'キュレーションされたリポジトリからすぐ使えるスキルをインストール、または独自のソースを追加。',
'settings.skills.catalog.page.section.sources': 'ソース',
'settings.skills.catalog.page.searchAllPlaceholder': 'すべてのソースのスキルを検索…',
'settings.skills.catalog.page.search.clear': '検索をクリア',
'settings.skills.catalog.page.source.skillsCount': 'スキル数: {count}',
'settings.skills.catalog.page.source.stars': 'スター: {count}',
'settings.skills.catalog.page.source.updated': '更新: {time}',
'settings.skills.catalog.page.source.addOwnTitle': '独自のソースを追加',
'settings.skills.catalog.page.source.addOwnDescription': 'スキルを含む任意の Git リポジトリ',
'settings.skills.catalog.page.source.viewRepo': 'GitHub でリポジトリを開く',
'settings.skills.catalog.page.skill.viewOnGithub': 'GitHub でスキルを表示',
'settings.skills.catalog.page.list.searchTitle': '検索結果',
'settings.skills.catalog.page.section.sourceRepository': 'ソースリポジトリ',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'ソースを選択',
'settings.skills.catalog.page.actions.refreshTitle': '更新',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'カタログを削除',
'settings.skills.catalog.page.actions.addCatalog': 'カタログを追加',
'settings.skills.catalog.page.actions.removeCatalog': 'カタログを削除',
'settings.skills.catalog.page.actions.loadMoreSkills': 'さらに Skill を読み込む',
'settings.skills.catalog.page.loading.catalog': '読み込み中...',
'settings.skills.catalog.page.loading.skills': 'Skill を読み込み中...',
'settings.skills.catalog.page.loading.more': '読み込み中...',
'settings.skills.catalog.page.foundCount': '{count} 個の Skill が見つかりました',
'settings.skills.catalog.page.error.catalogTitle': 'カタログエラー',
'settings.skills.catalog.page.empty.noSkillsTitle': 'Skill が見つかりません',
@@ -915,7 +925,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': 'インストール済み ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'インストール不可',
'settings.skills.catalog.page.badge.unknown': '不明',
'settings.skills.catalog.page.byOwnerPrefix': '提供',
'settings.skills.catalog.page.removeDialog.title': 'カタログを削除',
'settings.skills.catalog.page.removeDialog.description': 'このカタログを削除してもよろしいですか?',
'settings.openchamber.passkeys.title': 'パスキー',
@@ -865,16 +865,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': '수동',
'settings.skills.catalog.page.mode.external': 'External',
'settings.skills.catalog.page.title': '스킬 카탈로그',
'settings.skills.catalog.page.subtitle': '선별된 저장소에서 바로 사용 가능한 스킬을 설치하거나 직접 소스를 추가하세요.',
'settings.skills.catalog.page.section.sources': '소스',
'settings.skills.catalog.page.searchAllPlaceholder': '모든 소스에서 스킬 검색…',
'settings.skills.catalog.page.search.clear': '검색 지우기',
'settings.skills.catalog.page.source.skillsCount': '스킬: {count}개',
'settings.skills.catalog.page.source.stars': '스타: {count}',
'settings.skills.catalog.page.source.updated': '업데이트: {time}',
'settings.skills.catalog.page.source.addOwnTitle': '직접 소스 추가',
'settings.skills.catalog.page.source.addOwnDescription': '스킬이 있는 아무 Git 저장소',
'settings.skills.catalog.page.source.viewRepo': 'GitHub에서 저장소 열기',
'settings.skills.catalog.page.skill.viewOnGithub': 'GitHub에서 스킬 보기',
'settings.skills.catalog.page.list.searchTitle': '검색 결과',
'settings.skills.catalog.page.section.sourceRepository': '카탈로그 저장소',
'settings.skills.catalog.page.field.selectSourcePlaceholder': '저장소 선택',
'settings.skills.catalog.page.actions.refreshTitle': '새로고침',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Catalog 제거',
'settings.skills.catalog.page.actions.addCatalog': 'Catalog 추가',
'settings.skills.catalog.page.actions.removeCatalog': 'Catalog 제거',
'settings.skills.catalog.page.actions.loadMoreSkills': '스킬 더 불러오기',
'settings.skills.catalog.page.loading.catalog': '로딩 중...',
'settings.skills.catalog.page.loading.skills': '스킬 불러오는 중...',
'settings.skills.catalog.page.loading.more': '로딩 중...',
'settings.skills.catalog.page.foundCount': '스킬 {count}개 발견',
'settings.skills.catalog.page.error.catalogTitle': 'Catalog 오류',
'settings.skills.catalog.page.empty.noSkillsTitle': '스킬을 찾을 수 없습니다',
@@ -882,7 +892,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': '설치됨({scope})',
'settings.skills.catalog.page.badge.notInstallable': '설치할 수 없음',
'settings.skills.catalog.page.badge.unknown': '알 수 없음',
'settings.skills.catalog.page.byOwnerPrefix': '작성자',
'settings.skills.catalog.page.removeDialog.title': 'Catalog 제거',
'settings.skills.catalog.page.removeDialog.description': '이 카탈로그를 제거하시겠습니까?',
'settings.openchamber.passkeys.title': 'Passkeys',
@@ -1825,21 +1825,18 @@ export const settingsDict = {
'settings.skills.catalog.installSkill.toast.installFailed': 'Nie udało się zainstalować umiejętności',
'settings.skills.catalog.installSkill.toast.installed': 'Umiejętność została zainstalowana',
'settings.skills.catalog.page.actions.addCatalog': 'Dodaj katalog',
'settings.skills.catalog.page.actions.loadMoreSkills': 'Załaduj więcej umiejętności',
'settings.skills.catalog.page.actions.refreshTitle': 'Odśwież',
'settings.skills.catalog.page.actions.removeCatalog': 'Usuń katalog',
'settings.skills.catalog.page.actions.removeCatalogTitle': 'Usuń katalog',
'settings.skills.catalog.page.badge.installed': 'zainstalowano ({scope})',
'settings.skills.catalog.page.badge.notInstallable': 'nie można zainstalować',
'settings.skills.catalog.page.badge.unknown': 'nieznane',
'settings.skills.catalog.page.byOwnerPrefix': 'autor:',
'settings.skills.catalog.page.empty.noSkillsDescription': 'Spróbuj innego wyszukiwania lub odśwież katalog',
'settings.skills.catalog.page.empty.noSkillsTitle': 'Nie znaleziono umiejętności',
'settings.skills.catalog.page.error.catalogTitle': 'Błąd katalogu',
'settings.skills.catalog.page.field.selectSourcePlaceholder': 'Wybierz źródło',
'settings.skills.catalog.page.foundCount': 'Znaleziono {count} umiejętności',
'settings.skills.catalog.page.loading.catalog': 'Ładowanie...',
'settings.skills.catalog.page.loading.more': 'Ładowanie...',
'settings.skills.catalog.page.loading.skills': 'Ładowanie umiejętności...',
'settings.skills.catalog.page.mode.external': 'Zewnętrzny',
'settings.skills.catalog.page.mode.manual': 'Ręczny',
@@ -1847,6 +1844,18 @@ export const settingsDict = {
'settings.skills.catalog.page.removeDialog.title': 'Usuń katalog',
'settings.skills.catalog.page.section.sourceRepository': 'Repozytorium źródłowe',
'settings.skills.catalog.page.title': 'Katalog umiejętności',
'settings.skills.catalog.page.subtitle': 'Instaluj gotowe umiejętności z kuratorowanych repozytoriów lub dodaj własne źródło.',
'settings.skills.catalog.page.section.sources': 'Źródła',
'settings.skills.catalog.page.searchAllPlaceholder': 'Szukaj umiejętności we wszystkich źródłach…',
'settings.skills.catalog.page.search.clear': 'Wyczyść wyszukiwanie',
'settings.skills.catalog.page.source.skillsCount': 'Umiejętności: {count}',
'settings.skills.catalog.page.source.stars': 'Gwiazdki: {count}',
'settings.skills.catalog.page.source.updated': 'Zaktualizowano {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Dodaj własne źródło',
'settings.skills.catalog.page.source.addOwnDescription': 'Dowolne repozytorium Git z umiejętnościami',
'settings.skills.catalog.page.source.viewRepo': 'Otwórz repozytorium na GitHubie',
'settings.skills.catalog.page.skill.viewOnGithub': 'Zobacz umiejętność na GitHubie',
'settings.skills.catalog.page.list.searchTitle': 'Wyniki wyszukiwania',
'settings.skills.catalog.shared.actions.install': 'Zainstaluj',
'settings.skills.catalog.shared.actions.installing': 'Instalowanie...',
'settings.skills.catalog.shared.actions.scan': 'Skanuj',
@@ -865,16 +865,26 @@ export const settingsDict = {
"settings.skills.catalog.page.mode.manual": "Manual",
"settings.skills.catalog.page.mode.external": "Externo",
"settings.skills.catalog.page.title": "Catálogo de habilidades",
'settings.skills.catalog.page.subtitle': 'Instale skills prontas de repositórios curados ou adicione sua própria fonte.',
'settings.skills.catalog.page.section.sources': 'Fontes',
'settings.skills.catalog.page.searchAllPlaceholder': 'Pesquisar skills em todas as fontes…',
'settings.skills.catalog.page.search.clear': 'Limpar pesquisa',
'settings.skills.catalog.page.source.skillsCount': 'Skills: {count}',
'settings.skills.catalog.page.source.stars': 'Estrelas: {count}',
'settings.skills.catalog.page.source.updated': 'Atualizado {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Adicionar sua própria fonte',
'settings.skills.catalog.page.source.addOwnDescription': 'Qualquer repositório Git com skills',
'settings.skills.catalog.page.source.viewRepo': 'Abrir repositório no GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'Ver skill no GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Resultados da pesquisa',
"settings.skills.catalog.page.section.sourceRepository": "Repositório de origem",
"settings.skills.catalog.page.field.selectSourcePlaceholder": "Selecionar origem",
"settings.skills.catalog.page.actions.refreshTitle": "Atualizar",
"settings.skills.catalog.page.actions.removeCatalogTitle": "Excluir catálogo",
"settings.skills.catalog.page.actions.addCatalog": "Adicionar catálogo",
"settings.skills.catalog.page.actions.removeCatalog": "Excluir catálogo",
"settings.skills.catalog.page.actions.loadMoreSkills": "Carregar mais habilidades",
"settings.skills.catalog.page.loading.catalog": "Carregando...",
"settings.skills.catalog.page.loading.skills": "Carregando habilidades...",
"settings.skills.catalog.page.loading.more": "Carregando...",
"settings.skills.catalog.page.foundCount": "{count} habilidade(es) encontrada(s)",
"settings.skills.catalog.page.error.catalogTitle": "Erro do catálogo",
"settings.skills.catalog.page.empty.noSkillsTitle": "Nenhuma habilidade encontrada",
@@ -882,7 +892,6 @@ export const settingsDict = {
"settings.skills.catalog.page.badge.installed": "instalado ({scope})",
"settings.skills.catalog.page.badge.notInstallable": "não instalável",
"settings.skills.catalog.page.badge.unknown": "desconhecido",
"settings.skills.catalog.page.byOwnerPrefix": "por",
"settings.skills.catalog.page.removeDialog.title": "Excluir catálogo",
"settings.skills.catalog.page.removeDialog.description": "Tem certeza de que deseja excluir este catálogo?",
"settings.openchamber.passkeys.title": "Chaves de acesso",
@@ -865,16 +865,26 @@ export const settingsDict = {
"settings.skills.catalog.page.mode.manual": "Вручну",
"settings.skills.catalog.page.mode.external": "зовнішній",
"settings.skills.catalog.page.title": "Каталог навичок",
'settings.skills.catalog.page.subtitle': 'Встановлюйте готові скіли з курованих репозиторіїв або додайте власне джерело.',
'settings.skills.catalog.page.section.sources': 'Джерела',
'settings.skills.catalog.page.searchAllPlaceholder': 'Пошук скілів у всіх джерелах…',
'settings.skills.catalog.page.search.clear': 'Очистити пошук',
'settings.skills.catalog.page.source.skillsCount': 'Скілів: {count}',
'settings.skills.catalog.page.source.stars': 'Зірок: {count}',
'settings.skills.catalog.page.source.updated': 'Оновлено {time}',
'settings.skills.catalog.page.source.addOwnTitle': 'Додати власне джерело',
'settings.skills.catalog.page.source.addOwnDescription': 'Будь-який git-репозиторій зі скілами',
'settings.skills.catalog.page.source.viewRepo': 'Відкрити репозиторій на GitHub',
'settings.skills.catalog.page.skill.viewOnGithub': 'Переглянути скіл на GitHub',
'settings.skills.catalog.page.list.searchTitle': 'Результати пошуку',
"settings.skills.catalog.page.section.sourceRepository": "Репозиторій вихідного коду",
"settings.skills.catalog.page.field.selectSourcePlaceholder": "Виберіть джерело",
"settings.skills.catalog.page.actions.refreshTitle": "Оновити",
"settings.skills.catalog.page.actions.removeCatalogTitle": "Видалити каталог",
"settings.skills.catalog.page.actions.addCatalog": "Додати каталог",
"settings.skills.catalog.page.actions.removeCatalog": "Видалити каталог",
"settings.skills.catalog.page.actions.loadMoreSkills": "Завантажити додаткові навички",
"settings.skills.catalog.page.loading.catalog": "Завантаження...",
"settings.skills.catalog.page.loading.skills": "Завантаження навичок...",
"settings.skills.catalog.page.loading.more": "Завантаження...",
"settings.skills.catalog.page.foundCount": "Знайдено навички {count}",
"settings.skills.catalog.page.error.catalogTitle": "Помилка каталогу",
"settings.skills.catalog.page.empty.noSkillsTitle": "Навички не знайдено",
@@ -882,7 +892,6 @@ export const settingsDict = {
"settings.skills.catalog.page.badge.installed": "встановлено ({scope})",
"settings.skills.catalog.page.badge.notInstallable": "не встановлюється",
"settings.skills.catalog.page.badge.unknown": "невідомий",
"settings.skills.catalog.page.byOwnerPrefix": "за",
"settings.skills.catalog.page.removeDialog.title": "Видалити каталог",
"settings.skills.catalog.page.removeDialog.description": "Ви впевнені, що хочете видалити цей каталог?",
"settings.openchamber.passkeys.title": "Ключі доступу",
@@ -865,16 +865,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': '手动',
'settings.skills.catalog.page.mode.external': '外部',
'settings.skills.catalog.page.title': '技能目录',
'settings.skills.catalog.page.subtitle': '从精选仓库安装现成技能,或添加你自己的来源。',
'settings.skills.catalog.page.section.sources': '来源',
'settings.skills.catalog.page.searchAllPlaceholder': '在所有来源中搜索技能…',
'settings.skills.catalog.page.search.clear': '清除搜索',
'settings.skills.catalog.page.source.skillsCount': '技能数:{count}',
'settings.skills.catalog.page.source.stars': '星标:{count}',
'settings.skills.catalog.page.source.updated': '更新于 {time}',
'settings.skills.catalog.page.source.addOwnTitle': '添加自己的来源',
'settings.skills.catalog.page.source.addOwnDescription': '任何包含技能的 Git 仓库',
'settings.skills.catalog.page.source.viewRepo': '在 GitHub 上打开仓库',
'settings.skills.catalog.page.skill.viewOnGithub': '在 GitHub 上查看技能',
'settings.skills.catalog.page.list.searchTitle': '搜索结果',
'settings.skills.catalog.page.section.sourceRepository': '来源仓库',
'settings.skills.catalog.page.field.selectSourcePlaceholder': '选择来源',
'settings.skills.catalog.page.actions.refreshTitle': '刷新',
'settings.skills.catalog.page.actions.removeCatalogTitle': '移除目录',
'settings.skills.catalog.page.actions.addCatalog': '添加目录',
'settings.skills.catalog.page.actions.removeCatalog': '移除目录',
'settings.skills.catalog.page.actions.loadMoreSkills': '加载更多技能',
'settings.skills.catalog.page.loading.catalog': '加载中...',
'settings.skills.catalog.page.loading.skills': '正在加载技能...',
'settings.skills.catalog.page.loading.more': '加载中...',
'settings.skills.catalog.page.foundCount': '找到 {count} 个技能',
'settings.skills.catalog.page.error.catalogTitle': '目录错误',
'settings.skills.catalog.page.empty.noSkillsTitle': '未找到技能',
@@ -882,7 +892,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': '已安装({scope})',
'settings.skills.catalog.page.badge.notInstallable': '不可安装',
'settings.skills.catalog.page.badge.unknown': '未知',
'settings.skills.catalog.page.byOwnerPrefix': '作者',
'settings.skills.catalog.page.removeDialog.title': '移除目录',
'settings.skills.catalog.page.removeDialog.description': '确定要移除此目录吗?',
'settings.openchamber.passkeys.title': 'Passkeys',
@@ -862,16 +862,26 @@ export const settingsDict = {
'settings.skills.catalog.page.mode.manual': '手動',
'settings.skills.catalog.page.mode.external': '外部',
'settings.skills.catalog.page.title': 'Skills 目錄',
'settings.skills.catalog.page.subtitle': '從精選儲存庫安裝現成技能,或新增你自己的來源。',
'settings.skills.catalog.page.section.sources': '來源',
'settings.skills.catalog.page.searchAllPlaceholder': '在所有來源中搜尋技能…',
'settings.skills.catalog.page.search.clear': '清除搜尋',
'settings.skills.catalog.page.source.skillsCount': '技能數:{count}',
'settings.skills.catalog.page.source.stars': '星標:{count}',
'settings.skills.catalog.page.source.updated': '更新於 {time}',
'settings.skills.catalog.page.source.addOwnTitle': '新增自己的來源',
'settings.skills.catalog.page.source.addOwnDescription': '任何包含技能的 Git 儲存庫',
'settings.skills.catalog.page.source.viewRepo': '在 GitHub 上開啟儲存庫',
'settings.skills.catalog.page.skill.viewOnGithub': '在 GitHub 上檢視技能',
'settings.skills.catalog.page.list.searchTitle': '搜尋結果',
'settings.skills.catalog.page.section.sourceRepository': '來源儲存庫',
'settings.skills.catalog.page.field.selectSourcePlaceholder': '選擇來源',
'settings.skills.catalog.page.actions.refreshTitle': '重新整理',
'settings.skills.catalog.page.actions.removeCatalogTitle': '移除目錄',
'settings.skills.catalog.page.actions.addCatalog': '新增目錄',
'settings.skills.catalog.page.actions.removeCatalog': '移除目錄',
'settings.skills.catalog.page.actions.loadMoreSkills': '載入更多 Skills',
'settings.skills.catalog.page.loading.catalog': '載入中...',
'settings.skills.catalog.page.loading.skills': '正在載入 skills...',
'settings.skills.catalog.page.loading.more': '載入中...',
'settings.skills.catalog.page.foundCount': '找到 {count} 個 skill(s)',
'settings.skills.catalog.page.error.catalogTitle': '目錄錯誤',
'settings.skills.catalog.page.empty.noSkillsTitle': '找不到 skills',
@@ -879,7 +889,6 @@ export const settingsDict = {
'settings.skills.catalog.page.badge.installed': '已安裝({scope})',
'settings.skills.catalog.page.badge.notInstallable': '不可安裝',
'settings.skills.catalog.page.badge.unknown': '未知',
'settings.skills.catalog.page.byOwnerPrefix': '作者',
'settings.skills.catalog.page.removeDialog.title': '移除目錄',
'settings.skills.catalog.page.removeDialog.description': '確定要移除此目錄嗎?',
'settings.openchamber.passkeys.title': 'Passkeys',