feat(webui): add SkillHub marketplace source

This commit is contained in:
Xubin Ren
2026-07-30 01:13:37 +08:00
parent 42ee34e34d
commit e66eb204d0
20 changed files with 1448 additions and 182 deletions
+10 -3
View File
@@ -10,6 +10,7 @@ import type {
FilePreviewPayload,
ImageGenerationSettingsUpdate,
McpPresetsPayload,
MarketplaceProvider,
NanobotFeaturesPayload,
ModelConfigurationCreate,
ModelConfigurationUpdate,
@@ -343,9 +344,10 @@ export async function deleteSkill(
export async function searchMarketplaceSkills(
token: string,
query: string,
provider: MarketplaceProvider = "all",
base: string = "",
): Promise<SkillsSearchPayload> {
const params = new URLSearchParams({ q: query });
const params = new URLSearchParams({ q: query, provider });
return request<SkillsSearchPayload>(
`${base}/api/webui/skills/search?${params}`,
token,
@@ -356,10 +358,12 @@ export async function searchMarketplaceSkills(
export async function fetchTrendingMarketplaceSkills(
token: string,
provider: MarketplaceProvider = "all",
base: string = "",
): Promise<SkillsTrendingPayload> {
const params = new URLSearchParams({ provider });
return request<SkillsTrendingPayload>(
`${base}/api/webui/skills/trending`,
`${base}/api/webui/skills/trending?${params}`,
token,
undefined,
API_READ_TIMEOUT_MS,
@@ -383,11 +387,14 @@ export async function fetchMarketplaceSkillTrends(
export async function installMarketplaceSkill(
token: string,
provider: Exclude<MarketplaceProvider, "all">,
source: string,
skill: string,
version: string = "",
base: string = "",
): Promise<SkillInstallPayload> {
const params = new URLSearchParams({ source, skill });
const params = new URLSearchParams({ provider, source, skill });
if (version) params.set("version", version);
return request<SkillInstallPayload>(
`${base}/api/webui/skills/install?${params}`,
token,
+12 -1
View File
@@ -219,21 +219,32 @@ export interface MarketplaceSkillSummary {
skill_id: string;
name: string;
source: string;
provider: Exclude<MarketplaceProvider, "all">;
installs: number;
downloads?: number;
url: string;
installed: boolean;
install_supported: boolean;
metric: "installs_24h" | "installs_total";
version?: string;
verified?: boolean;
requires_api_key?: boolean;
rank?: number;
}
export type MarketplaceProvider = "all" | "skills_sh" | "skillhub";
export interface SkillsSearchPayload {
query: string;
skills: MarketplaceSkillSummary[];
provider: MarketplaceProvider;
install_supported: boolean;
}
export interface SkillsTrendingPayload {
skills: MarketplaceSkillSummary[];
period: "24h";
period: "24h" | "trending" | "mixed";
provider: MarketplaceProvider;
install_supported: boolean;
}