diff --git a/.changeset/marketplace-contribute-cta.md b/.changeset/marketplace-contribute-cta.md new file mode 100644 index 0000000000..c805880e0a --- /dev/null +++ b/.changeset/marketplace-contribute-cta.md @@ -0,0 +1,5 @@ +--- +"kilo-code": minor +--- + +Add a "Contribute on GitHub" call-to-action in the Marketplace view so users can easily propose a new skill, mode, or MCP server. The CTA appears as a subtle footer below the card grid and inside the empty search-results state, linking to the `kilo-marketplace` repository. diff --git a/packages/kilo-docs/source-links.md b/packages/kilo-docs/source-links.md index 6ba0ad51c3..d003e3781e 100644 --- a/packages/kilo-docs/source-links.md +++ b/packages/kilo-docs/source-links.md @@ -1,7 +1,7 @@ # Source Code Links - + - @@ -51,6 +51,8 @@ - +- + - - diff --git a/packages/kilo-i18n/src/ar.ts b/packages/kilo-i18n/src/ar.ts index 8c9611cc32..ee2a0ffdaf 100644 --- a/packages/kilo-i18n/src/ar.ts +++ b/packages/kilo-i18n/src/ar.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "عدة جلسات تعمل وستتوقف", "marketplace.warning.installAnyway": "تثبيت على أي حال", "marketplace.warning.cancel": "إلغاء", + "marketplace.contribute.prompt": "هل تفتقد مهارة أو وضعًا أو خادم MCP؟", + "marketplace.contribute.cta": "ساهم على GitHub", } diff --git a/packages/kilo-i18n/src/br.ts b/packages/kilo-i18n/src/br.ts index b876ead09e..38bfb6ae82 100644 --- a/packages/kilo-i18n/src/br.ts +++ b/packages/kilo-i18n/src/br.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Várias sessões estão em execução e serão interrompidas", "marketplace.warning.installAnyway": "Instalar mesmo assim", "marketplace.warning.cancel": "Cancelar", + "marketplace.contribute.prompt": "Está faltando uma skill, modo ou servidor MCP?", + "marketplace.contribute.cta": "Contribuir no GitHub", } diff --git a/packages/kilo-i18n/src/bs.ts b/packages/kilo-i18n/src/bs.ts index b74b790c3a..63aad6b807 100644 --- a/packages/kilo-i18n/src/bs.ts +++ b/packages/kilo-i18n/src/bs.ts @@ -74,4 +74,6 @@ export const dict = { "marketplace.warning.busyMany": "Nekoliko sesija je pokrenuto i bit će prekinuto", "marketplace.warning.installAnyway": "Instaliraj svejedno", "marketplace.warning.cancel": "Otkaži", + "marketplace.contribute.prompt": "Nedostaje vještina, način rada ili MCP server?", + "marketplace.contribute.cta": "Doprinesi na GitHub-u", } diff --git a/packages/kilo-i18n/src/da.ts b/packages/kilo-i18n/src/da.ts index cbada5ccba..53442d3736 100644 --- a/packages/kilo-i18n/src/da.ts +++ b/packages/kilo-i18n/src/da.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Flere sessioner kører og vil blive afbrudt", "marketplace.warning.installAnyway": "Installer alligevel", "marketplace.warning.cancel": "Annuller", + "marketplace.contribute.prompt": "Mangler du en skill, tilstand eller MCP-server?", + "marketplace.contribute.cta": "Bidrag på GitHub", } diff --git a/packages/kilo-i18n/src/de.ts b/packages/kilo-i18n/src/de.ts index 5323d53238..190ceff2d6 100644 --- a/packages/kilo-i18n/src/de.ts +++ b/packages/kilo-i18n/src/de.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Mehrere Sitzungen laufen und werden unterbrochen", "marketplace.warning.installAnyway": "Trotzdem installieren", "marketplace.warning.cancel": "Abbrechen", + "marketplace.contribute.prompt": "Fehlt ein Skill, Modus oder MCP-Server?", + "marketplace.contribute.cta": "Auf GitHub beitragen", } diff --git a/packages/kilo-i18n/src/en.ts b/packages/kilo-i18n/src/en.ts index 4047f1e211..2e1f38828c 100644 --- a/packages/kilo-i18n/src/en.ts +++ b/packages/kilo-i18n/src/en.ts @@ -71,4 +71,6 @@ export const dict = { "marketplace.warning.busyMany": "Several sessions are running and will be interrupted", "marketplace.warning.installAnyway": "Install anyway", "marketplace.warning.cancel": "Cancel", + "marketplace.contribute.prompt": "Missing a skill, mode, or MCP server?", + "marketplace.contribute.cta": "Contribute on GitHub", } diff --git a/packages/kilo-i18n/src/es.ts b/packages/kilo-i18n/src/es.ts index ce1f6b681b..62fa5ec0ac 100644 --- a/packages/kilo-i18n/src/es.ts +++ b/packages/kilo-i18n/src/es.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Varias sesiones están en ejecución y se interrumpirán", "marketplace.warning.installAnyway": "Instalar de todas formas", "marketplace.warning.cancel": "Cancelar", + "marketplace.contribute.prompt": "¿Falta una skill, modo o servidor MCP?", + "marketplace.contribute.cta": "Contribuir en GitHub", } diff --git a/packages/kilo-i18n/src/fr.ts b/packages/kilo-i18n/src/fr.ts index a5fe80cc44..43e34edc4d 100644 --- a/packages/kilo-i18n/src/fr.ts +++ b/packages/kilo-i18n/src/fr.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Plusieurs sessions sont en cours et seront interrompues", "marketplace.warning.installAnyway": "Installer quand même", "marketplace.warning.cancel": "Annuler", + "marketplace.contribute.prompt": "Il manque une skill, un mode ou un serveur MCP ?", + "marketplace.contribute.cta": "Contribuer sur GitHub", } diff --git a/packages/kilo-i18n/src/ja.ts b/packages/kilo-i18n/src/ja.ts index d648941a8d..f75cccfb4a 100644 --- a/packages/kilo-i18n/src/ja.ts +++ b/packages/kilo-i18n/src/ja.ts @@ -67,4 +67,6 @@ export const dict = { "marketplace.warning.busyMany": "複数のセッションが実行中で中断されます", "marketplace.warning.installAnyway": "それでもインストール", "marketplace.warning.cancel": "キャンセル", + "marketplace.contribute.prompt": "スキル、モード、MCP サーバーが見つかりませんか?", + "marketplace.contribute.cta": "GitHub で貢献する", } diff --git a/packages/kilo-i18n/src/ko.ts b/packages/kilo-i18n/src/ko.ts index 8f34191c5d..23c9fe1740 100644 --- a/packages/kilo-i18n/src/ko.ts +++ b/packages/kilo-i18n/src/ko.ts @@ -67,4 +67,6 @@ export const dict = { "marketplace.warning.busyMany": "여러 세션이 실행 중이며 중단됩니다", "marketplace.warning.installAnyway": "그래도 설치", "marketplace.warning.cancel": "취소", + "marketplace.contribute.prompt": "스킬, 모드 또는 MCP 서버가 없나요?", + "marketplace.contribute.cta": "GitHub에서 기여하기", } diff --git a/packages/kilo-i18n/src/nl.ts b/packages/kilo-i18n/src/nl.ts index d306f4fdd8..00072f1984 100644 --- a/packages/kilo-i18n/src/nl.ts +++ b/packages/kilo-i18n/src/nl.ts @@ -71,4 +71,6 @@ export const dict = { "marketplace.warning.busyMany": "Er zijn meerdere sessies actief en deze zullen worden onderbroken", "marketplace.warning.installAnyway": "Toch installeren", "marketplace.warning.cancel": "Annuleren", + "marketplace.contribute.prompt": "Mist er een skill, modus of MCP-server?", + "marketplace.contribute.cta": "Bijdragen op GitHub", } diff --git a/packages/kilo-i18n/src/no.ts b/packages/kilo-i18n/src/no.ts index 482e7604c8..85cfce2679 100644 --- a/packages/kilo-i18n/src/no.ts +++ b/packages/kilo-i18n/src/no.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Flere økter kjører og vil bli avbrutt", "marketplace.warning.installAnyway": "Installer uansett", "marketplace.warning.cancel": "Avbryt", + "marketplace.contribute.prompt": "Mangler du en skill, modus eller MCP-server?", + "marketplace.contribute.cta": "Bidra på GitHub", } diff --git a/packages/kilo-i18n/src/pl.ts b/packages/kilo-i18n/src/pl.ts index 081bbef035..48d436413c 100644 --- a/packages/kilo-i18n/src/pl.ts +++ b/packages/kilo-i18n/src/pl.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Kilka sesji jest uruchomionych i zostanie przerwanych", "marketplace.warning.installAnyway": "Zainstaluj mimo to", "marketplace.warning.cancel": "Anuluj", + "marketplace.contribute.prompt": "Brakuje skilla, trybu lub serwera MCP?", + "marketplace.contribute.cta": "Wnieś wkład na GitHubie", } diff --git a/packages/kilo-i18n/src/ru.ts b/packages/kilo-i18n/src/ru.ts index b3390b0018..0ac0e661fd 100644 --- a/packages/kilo-i18n/src/ru.ts +++ b/packages/kilo-i18n/src/ru.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Несколько сеансов выполняются и будут прерваны", "marketplace.warning.installAnyway": "Установить в любом случае", "marketplace.warning.cancel": "Отмена", + "marketplace.contribute.prompt": "Не хватает навыка, режима или MCP-сервера?", + "marketplace.contribute.cta": "Внести вклад на GitHub", } diff --git a/packages/kilo-i18n/src/th.ts b/packages/kilo-i18n/src/th.ts index f33f59806d..d8a03606c7 100644 --- a/packages/kilo-i18n/src/th.ts +++ b/packages/kilo-i18n/src/th.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "มีหลายเซสชันกำลังทำงานและจะถูกขัดจังหวะ", "marketplace.warning.installAnyway": "ติดตั้งต่อไป", "marketplace.warning.cancel": "ยกเลิก", + "marketplace.contribute.prompt": "ไม่พบทักษะ โหมด หรือเซิร์ฟเวอร์ MCP ที่ต้องการ?", + "marketplace.contribute.cta": "ร่วมสมทบบน GitHub", } diff --git a/packages/kilo-i18n/src/tr.ts b/packages/kilo-i18n/src/tr.ts index bcef0dc3a6..0a3a39d3db 100644 --- a/packages/kilo-i18n/src/tr.ts +++ b/packages/kilo-i18n/src/tr.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Birden fazla oturum çalışıyor ve kesintiye uğrayacak", "marketplace.warning.installAnyway": "Yine de yükle", "marketplace.warning.cancel": "İptal", + "marketplace.contribute.prompt": "Bir yetenek, mod veya MCP sunucusu mu eksik?", + "marketplace.contribute.cta": "GitHub'da katkıda bulun", } diff --git a/packages/kilo-i18n/src/uk.ts b/packages/kilo-i18n/src/uk.ts index 458772d31b..cb3b1090ce 100644 --- a/packages/kilo-i18n/src/uk.ts +++ b/packages/kilo-i18n/src/uk.ts @@ -69,4 +69,6 @@ export const dict = { "marketplace.warning.busyMany": "Виконується кілька сесій, їх буде перервано", "marketplace.warning.installAnyway": "Встановити все одно", "marketplace.warning.cancel": "Скасувати", + "marketplace.contribute.prompt": "Бракує навички, режиму або MCP-сервера?", + "marketplace.contribute.cta": "Зробити внесок на GitHub", } diff --git a/packages/kilo-i18n/src/zh.ts b/packages/kilo-i18n/src/zh.ts index 67ede7176f..d444f4e8ee 100644 --- a/packages/kilo-i18n/src/zh.ts +++ b/packages/kilo-i18n/src/zh.ts @@ -66,4 +66,6 @@ export const dict = { "marketplace.warning.busyMany": "多个会话正在运行,将被中断", "marketplace.warning.installAnyway": "仍然安装", "marketplace.warning.cancel": "取消", + "marketplace.contribute.prompt": "缺少技能、模式或 MCP 服务器?", + "marketplace.contribute.cta": "在 GitHub 上贡献", } diff --git a/packages/kilo-i18n/src/zht.ts b/packages/kilo-i18n/src/zht.ts index 46171c6fd6..275727428b 100644 --- a/packages/kilo-i18n/src/zht.ts +++ b/packages/kilo-i18n/src/zht.ts @@ -66,4 +66,6 @@ export const dict = { "marketplace.warning.busyMany": "多個工作階段正在執行,將被中斷", "marketplace.warning.installAnyway": "仍然安裝", "marketplace.warning.cancel": "取消", + "marketplace.contribute.prompt": "缺少技能、模式或 MCP 伺服器?", + "marketplace.contribute.cta": "在 GitHub 上貢獻", } diff --git a/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceContribute.tsx b/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceContribute.tsx new file mode 100644 index 0000000000..efad57c4ba --- /dev/null +++ b/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceContribute.tsx @@ -0,0 +1,19 @@ +import { Button } from "@kilocode/kilo-ui/button" +import { useVSCode } from "../../context/vscode" +import { useLanguage } from "../../context/language" + +const REPO_URL = "https://github.com/Kilo-Org/kilo-marketplace" + +export const MarketplaceContribute = () => { + const vscode = useVSCode() + const { t } = useLanguage() + const open = () => vscode.postMessage({ type: "openExternal", url: REPO_URL }) + return ( +
+ {t("marketplace.contribute.prompt")} + +
+ ) +} diff --git a/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceListView.tsx b/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceListView.tsx index 5f08b965e6..62ea13eed6 100644 --- a/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceListView.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceListView.tsx @@ -12,6 +12,7 @@ import type { import { useLanguage } from "../../context/language" import { isInstalled } from "./utils" import { ItemCard } from "./ItemCard" +import { MarketplaceContribute } from "./MarketplaceContribute" interface StatusOption { value: string @@ -124,7 +125,15 @@ export const MarketplaceListView = (props: Props) => { } > - 0} fallback={

{props.emptyMessage}

}> + 0} + fallback={ +
+ {props.emptyMessage} + +
+ } + >
{(item) => { @@ -144,6 +153,7 @@ export const MarketplaceListView = (props: Props) => { }}
+
diff --git a/packages/kilo-vscode/webview-ui/src/components/marketplace/marketplace.css b/packages/kilo-vscode/webview-ui/src/components/marketplace/marketplace.css index bf56c52d0c..4c833147c5 100644 --- a/packages/kilo-vscode/webview-ui/src/components/marketplace/marketplace.css +++ b/packages/kilo-vscode/webview-ui/src/components/marketplace/marketplace.css @@ -77,9 +77,39 @@ } .marketplace-empty { + display: flex; + flex-direction: column; + align-items: center; + gap: 12px; + padding: 32px 16px; text-align: center; color: var(--text-weak); - padding: 24px; +} + +.marketplace-empty-message { + font-size: 13px; +} + +/* Contribute CTA (footer + inside empty state) */ + +.marketplace-contribute { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + gap: 8px; + padding: 12px 0; + margin-top: 12px; + border-top: 1px solid var(--border-base, var(--vscode-widget-border, transparent)); + color: var(--text-weak); + font-size: 12px; +} + +/* Inside the empty state, drop the border — message is already the lead-in. */ +.marketplace-empty .marketplace-contribute { + border-top: none; + margin-top: 0; + padding-top: 0; } /* Grid */