diff --git a/package-manager-template/groups/data-engineering/mcp servers/data-processor/metadata.en.yml b/package-manager-template/groups/data-engineering/mcp servers/data-processor/metadata.en.yml index bc75efa1bf..2721615084 100644 --- a/package-manager-template/groups/data-engineering/mcp servers/data-processor/metadata.en.yml +++ b/package-manager-template/groups/data-engineering/mcp servers/data-processor/metadata.en.yml @@ -2,4 +2,6 @@ name: "Data Processor" description: "An MCP server for processing and transforming data files with support for various formats" type: "mcp server" version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" tags: ["data-processing", "etl", "transformation", "data-engineering"] \ No newline at end of file diff --git a/package-manager-template/groups/data-engineering/metadata.en.yml b/package-manager-template/groups/data-engineering/metadata.en.yml index c0d3e2c183..9b8021d60d 100644 --- a/package-manager-template/groups/data-engineering/metadata.en.yml +++ b/package-manager-template/groups/data-engineering/metadata.en.yml @@ -1,4 +1,6 @@ name: "Data Engineering Tools" description: "A collection of data engineering roles and tools" version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" tags: ["data-engineering", "data", "analytics"] \ No newline at end of file diff --git a/package-manager-template/groups/data-engineering/modes/data-engineer-mode/metadata.en.yml b/package-manager-template/groups/data-engineering/modes/data-engineer-mode/metadata.en.yml index ec0ed6e79d..a32cec1da3 100644 --- a/package-manager-template/groups/data-engineering/modes/data-engineer-mode/metadata.en.yml +++ b/package-manager-template/groups/data-engineering/modes/data-engineer-mode/metadata.en.yml @@ -2,4 +2,6 @@ name: "Data Engineer" description: "A mode focused on building and maintaining data pipelines, ETL processes, and data infrastructure" type: "mode" version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" tags: ["data-engineering", "etl", "pipelines", "infrastructure"] \ No newline at end of file diff --git a/package-manager-template/mcp servers/example-server/metadata.en.yml b/package-manager-template/mcp servers/example-server/metadata.en.yml index ffed52a931..9ed7f0b597 100644 --- a/package-manager-template/mcp servers/example-server/metadata.en.yml +++ b/package-manager-template/mcp servers/example-server/metadata.en.yml @@ -1,4 +1,6 @@ name: "Example MCP Server" description: "An example MCP server for testing package manager functionality" type: "mcp server" -version: "1.0.0" \ No newline at end of file +version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" \ No newline at end of file diff --git a/package-manager-template/mcp servers/file-analyzer/metadata.en.yml b/package-manager-template/mcp servers/file-analyzer/metadata.en.yml index f4fc488460..f39b7a3957 100644 --- a/package-manager-template/mcp servers/file-analyzer/metadata.en.yml +++ b/package-manager-template/mcp servers/file-analyzer/metadata.en.yml @@ -2,5 +2,7 @@ name: "File Analyzer MCP Server" description: "An MCP server that analyzes files for code quality, security issues, and performance optimizations" type: "mcp server" version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" tags: ["file-analyzer", "code-quality", "security", "performance"] sourceUrl: "https://github.com/roo-team/file-analyzer-server" \ No newline at end of file diff --git a/package-manager-template/metadata.en.yml b/package-manager-template/metadata.en.yml index 0e2f5790cf..704053b3bd 100644 --- a/package-manager-template/metadata.en.yml +++ b/package-manager-template/metadata.en.yml @@ -1,3 +1,5 @@ name: "Package Manager Template" description: "A template repository for creating package manager sources" version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" diff --git a/package-manager-template/modes/developer-mode/metadata.en.yml b/package-manager-template/modes/developer-mode/metadata.en.yml index 40b625063f..8881a1eae5 100644 --- a/package-manager-template/modes/developer-mode/metadata.en.yml +++ b/package-manager-template/modes/developer-mode/metadata.en.yml @@ -2,5 +2,7 @@ name: "Full-Stack Developer Mode" description: "A mode for a full-stack developer with expertise in web development, databases, and APIs" type: "mode" version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" tags: ["developer", "full-stack", "web", "database", "api"] sourceUrl: "https://github.com/roo-team/developer-resources" \ No newline at end of file diff --git a/package-manager-template/packages/data-platform/mcp servers/data-validator/metadata.en.yml b/package-manager-template/packages/data-platform/mcp servers/data-validator/metadata.en.yml index fee752115f..215d194083 100644 --- a/package-manager-template/packages/data-platform/mcp servers/data-validator/metadata.en.yml +++ b/package-manager-template/packages/data-platform/mcp servers/data-validator/metadata.en.yml @@ -2,5 +2,7 @@ name: "Data Validator" description: "An MCP server for validating data quality, schema compliance, and business rules" type: "mcp server" version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" tags: ["validation", "data-quality", "schema", "rules-engine", "data-platform"] sourceUrl: "https://github.com/example/data-platform/mcp servers/data-validator" \ No newline at end of file diff --git a/package-manager-template/packages/data-platform/metadata.en.yml b/package-manager-template/packages/data-platform/metadata.en.yml index 6c01a09217..6a4dfadd05 100644 --- a/package-manager-template/packages/data-platform/metadata.en.yml +++ b/package-manager-template/packages/data-platform/metadata.en.yml @@ -2,4 +2,6 @@ name: "Data Platform Package" description: "A complete data platform solution including roles, servers, and storage systems" type: "package" version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" tags: ["data-platform", "enterprise", "data-engineering", "complete-solution"] \ No newline at end of file diff --git a/package-manager-template/packages/data-platform/modes/platform-admin-mode/metadata.en.yml b/package-manager-template/packages/data-platform/modes/platform-admin-mode/metadata.en.yml index 66225959bd..f22755795a 100644 --- a/package-manager-template/packages/data-platform/modes/platform-admin-mode/metadata.en.yml +++ b/package-manager-template/packages/data-platform/modes/platform-admin-mode/metadata.en.yml @@ -2,5 +2,7 @@ name: "Data Platform Administrator" description: "Administrative mode responsible for managing and maintaining the data platform infrastructure" type: "mode" version: "1.0.0" +author: "JB Brown" +authorUrl: "https://www.linkedin.com/in/jbbrown1/" tags: ["admin", "platform", "infrastructure", "data-platform"] sourceUrl: "https://github.com/example/data-platform/modes/platform-admin" \ No newline at end of file diff --git a/src/i18n/locales/ca/package_manager.json b/src/i18n/locales/ca/package_manager.json index da78b9c758..33c4a754cf 100644 --- a/src/i18n/locales/ca/package_manager.json +++ b/src/i18n/locales/ca/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Paquet", "type_other": "Altres", "by_author": "per {{author}}", + "authors_profile": "Perfil de l'autor", "remove_tag_filter": "Eliminar filtre d'etiqueta: {{tag}}", "filter_by_tag": "Filtrar per etiqueta: {{tag}}", "component_details": "Detalls del component", diff --git a/src/i18n/locales/de/package_manager.json b/src/i18n/locales/de/package_manager.json index af94a26951..a51604d329 100644 --- a/src/i18n/locales/de/package_manager.json +++ b/src/i18n/locales/de/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Paket", "type_other": "Sonstiges", "by_author": "von {{author}}", + "authors_profile": "Autorenprofil", "remove_tag_filter": "Tag-Filter entfernen: {{tag}}", "filter_by_tag": "Nach Tag filtern: {{tag}}", "component_details": "Komponentendetails", diff --git a/src/i18n/locales/en/package_manager.json b/src/i18n/locales/en/package_manager.json index 437988fdef..20c28daa5a 100644 --- a/src/i18n/locales/en/package_manager.json +++ b/src/i18n/locales/en/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Package", "type_other": "Other", "by_author": "by {{author}}", + "authors_profile": "Author's Profile", "remove_tag_filter": "Remove tag filter: {{tag}}", "filter_by_tag": "Filter by tag: {{tag}}", "component_details": "Component Details", diff --git a/src/i18n/locales/es/package_manager.json b/src/i18n/locales/es/package_manager.json index ba74596280..88e717bb2a 100644 --- a/src/i18n/locales/es/package_manager.json +++ b/src/i18n/locales/es/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Paquete", "type_other": "Otro", "by_author": "por {{author}}", + "authors_profile": "Perfil del Autor", "remove_tag_filter": "Eliminar filtro de etiqueta: {{tag}}", "filter_by_tag": "Filtrar por etiqueta: {{tag}}", "component_details": "Detalles del Componente", diff --git a/src/i18n/locales/fr/package_manager.json b/src/i18n/locales/fr/package_manager.json index 4db0f0c9d2..81a87dccd0 100644 --- a/src/i18n/locales/fr/package_manager.json +++ b/src/i18n/locales/fr/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Paquet", "type_other": "Autre", "by_author": "par {{author}}", + "authors_profile": "Profil de l'auteur", "remove_tag_filter": "Supprimer le filtre de tag : {{tag}}", "filter_by_tag": "Filtrer par tag : {{tag}}", "component_details": "Détails du composant", diff --git a/src/i18n/locales/hi/package_manager.json b/src/i18n/locales/hi/package_manager.json index ce7a9959c6..c0b3a94264 100644 --- a/src/i18n/locales/hi/package_manager.json +++ b/src/i18n/locales/hi/package_manager.json @@ -14,6 +14,7 @@ "type_package": "पैकेज", "type_other": "अन्य", "by_author": "लेखक: {{author}}", + "authors_profile": "लेखक का प्रोफ़ाइल", "remove_tag_filter": "टैग फ़िल्टर हटाएं: {{tag}}", "filter_by_tag": "टैग से फ़िल्टर करें: {{tag}}", "component_details": "कंपोनेंट विवरण", diff --git a/src/i18n/locales/it/package_manager.json b/src/i18n/locales/it/package_manager.json index 196cef365c..64e60c34f4 100644 --- a/src/i18n/locales/it/package_manager.json +++ b/src/i18n/locales/it/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Pacchetto", "type_other": "Altro", "by_author": "di {{author}}", + "authors_profile": "Profilo dell'autore", "remove_tag_filter": "Rimuovi filtro tag: {{tag}}", "filter_by_tag": "Filtra per tag: {{tag}}", "component_details": "Dettagli componente", diff --git a/src/i18n/locales/ja/package_manager.json b/src/i18n/locales/ja/package_manager.json index 9ee16dc45a..e3e97e9c37 100644 --- a/src/i18n/locales/ja/package_manager.json +++ b/src/i18n/locales/ja/package_manager.json @@ -14,6 +14,7 @@ "type_package": "パッケージ", "type_other": "その他", "by_author": "作成者:{{author}}", + "authors_profile": "作成者のプロフィール", "remove_tag_filter": "タグフィルターを削除:{{tag}}", "filter_by_tag": "タグでフィルター:{{tag}}", "component_details": "コンポーネントの詳細", diff --git a/src/i18n/locales/ko/package_manager.json b/src/i18n/locales/ko/package_manager.json index 9a554c02d8..c0be4045ea 100644 --- a/src/i18n/locales/ko/package_manager.json +++ b/src/i18n/locales/ko/package_manager.json @@ -14,6 +14,7 @@ "type_package": "패키지", "type_other": "기타", "by_author": "작성자: {{author}}", + "authors_profile": "작성자 프로필", "remove_tag_filter": "태그 필터 제거: {{tag}}", "filter_by_tag": "태그로 필터링: {{tag}}", "component_details": "컴포넌트 상세정보", diff --git a/src/i18n/locales/pl/package_manager.json b/src/i18n/locales/pl/package_manager.json index 233840b5aa..abdfd04556 100644 --- a/src/i18n/locales/pl/package_manager.json +++ b/src/i18n/locales/pl/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Pakiet", "type_other": "Inne", "by_author": "autor: {{author}}", + "authors_profile": "Profil autora", "remove_tag_filter": "Usuń filtr tagu: {{tag}}", "filter_by_tag": "Filtruj po tagu: {{tag}}", "component_details": "Szczegóły komponentu", diff --git a/src/i18n/locales/pt-BR/package_manager.json b/src/i18n/locales/pt-BR/package_manager.json index ddf3e60942..281ffc32a2 100644 --- a/src/i18n/locales/pt-BR/package_manager.json +++ b/src/i18n/locales/pt-BR/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Pacote", "type_other": "Outro", "by_author": "por {{author}}", + "authors_profile": "Perfil do Autor", "remove_tag_filter": "Remover filtro de tag: {{tag}}", "filter_by_tag": "Filtrar por tag: {{tag}}", "component_details": "Detalhes do Componente", diff --git a/src/i18n/locales/tr/package_manager.json b/src/i18n/locales/tr/package_manager.json index 0f3822d51f..08e7f066ff 100644 --- a/src/i18n/locales/tr/package_manager.json +++ b/src/i18n/locales/tr/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Paket", "type_other": "Diğer", "by_author": "yazar: {{author}}", + "authors_profile": "Yazar Profili", "remove_tag_filter": "Etiket filtresini kaldır: {{tag}}", "filter_by_tag": "Etikete göre filtrele: {{tag}}", "component_details": "Bileşen Detayları", diff --git a/src/i18n/locales/vi/package_manager.json b/src/i18n/locales/vi/package_manager.json index cb0a71b9f8..4c1c8834d3 100644 --- a/src/i18n/locales/vi/package_manager.json +++ b/src/i18n/locales/vi/package_manager.json @@ -14,6 +14,7 @@ "type_package": "Gói", "type_other": "Khác", "by_author": "bởi {{author}}", + "authors_profile": "Hồ sơ tác giả", "remove_tag_filter": "Xóa bộ lọc thẻ: {{tag}}", "filter_by_tag": "Lọc theo thẻ: {{tag}}", "component_details": "Chi tiết thành phần", diff --git a/src/i18n/locales/zh-CN/package_manager.json b/src/i18n/locales/zh-CN/package_manager.json index e46a8209a4..d949869b64 100644 --- a/src/i18n/locales/zh-CN/package_manager.json +++ b/src/i18n/locales/zh-CN/package_manager.json @@ -14,6 +14,7 @@ "type_package": "包", "type_other": "其他", "by_author": "作者:{{author}}", + "authors_profile": "作者主页", "remove_tag_filter": "移除标签过滤器:{{tag}}", "filter_by_tag": "按标签过滤:{{tag}}", "component_details": "组件详情", diff --git a/src/i18n/locales/zh-TW/package_manager.json b/src/i18n/locales/zh-TW/package_manager.json index 30b02562cd..f90a66609d 100644 --- a/src/i18n/locales/zh-TW/package_manager.json +++ b/src/i18n/locales/zh-TW/package_manager.json @@ -14,6 +14,7 @@ "type_package": "套件", "type_other": "其他", "by_author": "作者:{{author}}", + "authors_profile": "作者個人檔案", "remove_tag_filter": "移除標籤篩選:{{tag}}", "filter_by_tag": "依標籤篩選:{{tag}}", "component_details": "元件詳細資訊", diff --git a/src/i18n/setup.ts b/src/i18n/setup.ts index 058f357b46..2d567e5096 100644 --- a/src/i18n/setup.ts +++ b/src/i18n/setup.ts @@ -24,7 +24,7 @@ if (!isTestEnv) { const fs = require("fs") const path = require("path") - const localesDir = path.join(__dirname, "i18n", "locales") + const localesDir = path.join(__dirname, "locales") try { // Find all language directories diff --git a/src/services/package-manager/MetadataScanner.ts b/src/services/package-manager/MetadataScanner.ts index 1659abaaca..c815daa982 100644 --- a/src/services/package-manager/MetadataScanner.ts +++ b/src/services/package-manager/MetadataScanner.ts @@ -280,6 +280,8 @@ export class MetadataScanner { path: fullPath, lastUpdated: await this.getLastModifiedDate(componentDir), items: [], // Initialize empty items array for all components + author: metadata.author, + authorUrl: metadata.authorUrl, } } diff --git a/src/services/package-manager/schemas.ts b/src/services/package-manager/schemas.ts index 4c9033abf1..b41b545c2d 100644 --- a/src/services/package-manager/schemas.ts +++ b/src/services/package-manager/schemas.ts @@ -9,6 +9,8 @@ export const baseMetadataSchema = z.object({ description: z.string(), version: z.string().regex(/^\d+\.\d+\.\d+$/, "Version must be in semver format (e.g., 1.0.0)"), tags: z.array(z.string()).optional(), + author: z.string().optional(), + authorUrl: z.string().url("Author URL must be a valid URL").optional(), }) /** diff --git a/src/services/package-manager/types.ts b/src/services/package-manager/types.ts index 80eb956d1a..bea06ebe35 100644 --- a/src/services/package-manager/types.ts +++ b/src/services/package-manager/types.ts @@ -25,6 +25,8 @@ export interface BaseMetadata { description: string version: string tags?: string[] + author?: string + authorUrl?: string } /** @@ -72,6 +74,7 @@ export interface PackageManagerItem { repoUrl: string sourceName?: string author?: string + authorUrl?: string tags?: string[] version?: string lastUpdated?: string diff --git a/webview-ui/src/components/package-manager/components/PackageManagerItemCard.tsx b/webview-ui/src/components/package-manager/components/PackageManagerItemCard.tsx index e595b7b99c..186bc9b11a 100644 --- a/webview-ui/src/components/package-manager/components/PackageManagerItemCard.tsx +++ b/webview-ui/src/components/package-manager/components/PackageManagerItemCard.tsx @@ -6,7 +6,7 @@ import { groupItemsByType, GroupedItems } from "../utils/grouping" import { ExpandableSection } from "./ExpandableSection" import { TypeGroup } from "./TypeGroup" import { ViewState } from "../PackageManagerViewStateManager" -import { t } from "../../../../../src/i18n" +import { t } from "@/i18n" interface PackageManagerItemCardProps { item: PackageManagerItem @@ -95,11 +95,39 @@ export const PackageManagerItemCard: React.FC = ({

{item.name}

- {item.author && ( + {item.authorUrl && isValidUrl(item.authorUrl) ? ( +

+ {item.author ? ( + + ) : ( + + )} +

+ ) : item.author ? (

{t("package_manager:item_card.by_author", { author: item.author })}

- )} + ) : null}
{getTypeLabel(item.type)} diff --git a/webview-ui/src/components/package-manager/components/TypeGroup.tsx b/webview-ui/src/components/package-manager/components/TypeGroup.tsx index 47179d64da..0315e93346 100644 --- a/webview-ui/src/components/package-manager/components/TypeGroup.tsx +++ b/webview-ui/src/components/package-manager/components/TypeGroup.tsx @@ -1,6 +1,6 @@ import React from "react" import { cn } from "@/lib/utils" -import { t } from "../../../../../src/i18n" +import { t } from "@/i18n" interface TypeGroupProps { type: string diff --git a/webview-ui/src/i18n.ts b/webview-ui/src/i18n.ts new file mode 100644 index 0000000000..e525756648 --- /dev/null +++ b/webview-ui/src/i18n.ts @@ -0,0 +1,20 @@ +import i18next from "i18next" +import { initReactI18next } from "react-i18next" +import packageManagerEn from "../../src/i18n/locales/en/package_manager.json" + +// Initialize i18next +i18next.use(initReactI18next).init({ + resources: { + en: { + package_manager: packageManagerEn, + }, + }, + lng: "en", + fallbackLng: "en", + interpolation: { + escapeValue: false, + }, +}) + +export const t = i18next.t +export default i18next