mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-08-28 19:11:03 +08:00
feat(vscode): add contribute CTA to marketplace (#9099)
Invites users to propose new skills, modes, or MCP servers via github.com/Kilo-Org/kilo-marketplace. Shown as a subtle footer under the card grid and inside the empty search-results state.
This commit is contained in:
@@ -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.
|
||||
@@ -1,7 +1,7 @@
|
||||
# Source Code Links
|
||||
|
||||
<!-- Auto-generated by script/extract-source-links.ts — DO NOT EDIT -->
|
||||
<!-- 79 unique URLs extracted from extension and CLI source -->
|
||||
<!-- 80 unique URLs extracted from extension and CLI source -->
|
||||
|
||||
- <https://api.apertis.ai/v1>
|
||||
<!-- packages/opencode/src/provider/model-cache.ts -->
|
||||
@@ -51,6 +51,8 @@
|
||||
<!-- packages/opencode/src/lsp/server.ts -->
|
||||
- <https://github.com/google-gemini/gemini-cli/blob/main/packages/core/src/utils/editCorrector.ts>
|
||||
<!-- packages/opencode/src/tool/edit.ts -->
|
||||
- <https://github.com/Kilo-Org/kilo-marketplace>
|
||||
<!-- packages/kilo-vscode/webview-ui/src/components/marketplace/MarketplaceContribute.tsx -->
|
||||
- <https://github.com/Kilo-Org/kilocode>
|
||||
<!-- packages/kilo-vscode/webview-ui/src/components/settings/AboutKiloCodeTab.tsx -->
|
||||
- <https://github.com/Kilo-Org/kilocode/issues/6986>
|
||||
|
||||
Generated
+2
@@ -69,4 +69,6 @@ export const dict = {
|
||||
"marketplace.warning.busyMany": "عدة جلسات تعمل وستتوقف",
|
||||
"marketplace.warning.installAnyway": "تثبيت على أي حال",
|
||||
"marketplace.warning.cancel": "إلغاء",
|
||||
"marketplace.contribute.prompt": "هل تفتقد مهارة أو وضعًا أو خادم MCP؟",
|
||||
"marketplace.contribute.cta": "ساهم على GitHub",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -67,4 +67,6 @@ export const dict = {
|
||||
"marketplace.warning.busyMany": "複数のセッションが実行中で中断されます",
|
||||
"marketplace.warning.installAnyway": "それでもインストール",
|
||||
"marketplace.warning.cancel": "キャンセル",
|
||||
"marketplace.contribute.prompt": "スキル、モード、MCP サーバーが見つかりませんか?",
|
||||
"marketplace.contribute.cta": "GitHub で貢献する",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -67,4 +67,6 @@ export const dict = {
|
||||
"marketplace.warning.busyMany": "여러 세션이 실행 중이며 중단됩니다",
|
||||
"marketplace.warning.installAnyway": "그래도 설치",
|
||||
"marketplace.warning.cancel": "취소",
|
||||
"marketplace.contribute.prompt": "스킬, 모드 또는 MCP 서버가 없나요?",
|
||||
"marketplace.contribute.cta": "GitHub에서 기여하기",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -69,4 +69,6 @@ export const dict = {
|
||||
"marketplace.warning.busyMany": "Несколько сеансов выполняются и будут прерваны",
|
||||
"marketplace.warning.installAnyway": "Установить в любом случае",
|
||||
"marketplace.warning.cancel": "Отмена",
|
||||
"marketplace.contribute.prompt": "Не хватает навыка, режима или MCP-сервера?",
|
||||
"marketplace.contribute.cta": "Внести вклад на GitHub",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -69,4 +69,6 @@ export const dict = {
|
||||
"marketplace.warning.busyMany": "มีหลายเซสชันกำลังทำงานและจะถูกขัดจังหวะ",
|
||||
"marketplace.warning.installAnyway": "ติดตั้งต่อไป",
|
||||
"marketplace.warning.cancel": "ยกเลิก",
|
||||
"marketplace.contribute.prompt": "ไม่พบทักษะ โหมด หรือเซิร์ฟเวอร์ MCP ที่ต้องการ?",
|
||||
"marketplace.contribute.cta": "ร่วมสมทบบน GitHub",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -69,4 +69,6 @@ export const dict = {
|
||||
"marketplace.warning.busyMany": "Виконується кілька сесій, їх буде перервано",
|
||||
"marketplace.warning.installAnyway": "Встановити все одно",
|
||||
"marketplace.warning.cancel": "Скасувати",
|
||||
"marketplace.contribute.prompt": "Бракує навички, режиму або MCP-сервера?",
|
||||
"marketplace.contribute.cta": "Зробити внесок на GitHub",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -66,4 +66,6 @@ export const dict = {
|
||||
"marketplace.warning.busyMany": "多个会话正在运行,将被中断",
|
||||
"marketplace.warning.installAnyway": "仍然安装",
|
||||
"marketplace.warning.cancel": "取消",
|
||||
"marketplace.contribute.prompt": "缺少技能、模式或 MCP 服务器?",
|
||||
"marketplace.contribute.cta": "在 GitHub 上贡献",
|
||||
}
|
||||
|
||||
Generated
+2
@@ -66,4 +66,6 @@ export const dict = {
|
||||
"marketplace.warning.busyMany": "多個工作階段正在執行,將被中斷",
|
||||
"marketplace.warning.installAnyway": "仍然安裝",
|
||||
"marketplace.warning.cancel": "取消",
|
||||
"marketplace.contribute.prompt": "缺少技能、模式或 MCP 伺服器?",
|
||||
"marketplace.contribute.cta": "在 GitHub 上貢獻",
|
||||
}
|
||||
|
||||
@@ -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 (
|
||||
<div class="marketplace-contribute">
|
||||
<span>{t("marketplace.contribute.prompt")}</span>
|
||||
<Button variant="ghost" size="small" onClick={open}>
|
||||
{t("marketplace.contribute.cta")}
|
||||
</Button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -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) => {
|
||||
</div>
|
||||
}
|
||||
>
|
||||
<Show when={filtered().length > 0} fallback={<p class="marketplace-empty">{props.emptyMessage}</p>}>
|
||||
<Show
|
||||
when={filtered().length > 0}
|
||||
fallback={
|
||||
<div class="marketplace-empty">
|
||||
<span class="marketplace-empty-message">{props.emptyMessage}</span>
|
||||
<MarketplaceContribute />
|
||||
</div>
|
||||
}
|
||||
>
|
||||
<div class="marketplace-grid">
|
||||
<For each={filtered()}>
|
||||
{(item) => {
|
||||
@@ -144,6 +153,7 @@ export const MarketplaceListView = (props: Props) => {
|
||||
}}
|
||||
</For>
|
||||
</div>
|
||||
<MarketplaceContribute />
|
||||
</Show>
|
||||
</Show>
|
||||
</div>
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user