Skip to content

Commit f5e75d4

Browse files
feat: The skill marketplace supports ClawHub China acceleration. (#12396)
1 parent 32fed45 commit f5e75d4

File tree

14 files changed

+78
-30
lines changed

14 files changed

+78
-30
lines changed

agent/app/dto/agents.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ type AgentConfigFile struct {
544544

545545
type AgentSkillSearchReq struct {
546546
AgentID uint `json:"agentId" validate:"required"`
547-
Source string `json:"source" validate:"required,oneof=clawhub skillhub"`
547+
Source string `json:"source" validate:"required,oneof=clawhub-global clawhub-cn skillhub"`
548548
Keyword string `json:"keyword" validate:"required"`
549549
}
550550

@@ -574,7 +574,7 @@ type AgentSkillUpdateReq struct {
574574

575575
type AgentSkillInstallReq struct {
576576
AgentID uint `json:"agentId" validate:"required"`
577-
Source string `json:"source" validate:"required,oneof=clawhub skillhub"`
577+
Source string `json:"source" validate:"required,oneof=clawhub-global clawhub-cn skillhub"`
578578
Slug string `json:"slug" validate:"required"`
579579
TaskID string `json:"taskID" validate:"required"`
580580
}

agent/app/service/agents_skills.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ import (
1313
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
1414
)
1515

16+
const clawhubGlobalRegistry = "https://clawhub.com"
17+
const clawhubChinaRegistry = "https://mirror-cn.clawhub.com"
18+
1619
type openclawSkillsList struct {
1720
Skills []openclawSkillListItem `json:"skills"`
1821
}
@@ -74,7 +77,7 @@ func (a AgentService) SearchSkills(req dto.AgentSkillSearchReq) ([]dto.AgentSkil
7477
case "skillhub":
7578
return parseSkillhubSearchResult(output)
7679
default:
77-
return parseClawhubSearchResult(output), nil
80+
return parseClawhubSearchResult(output, req.Source), nil
7881
}
7982
}
8083

@@ -152,7 +155,13 @@ func loadOpenclawSkillSearchOutput(containerName, source, keyword string) (strin
152155
case "skillhub":
153156
return runDockerExecWithStdout(30*time.Second, containerName, "skillhub", "search", keyword, "--json")
154157
default:
155-
return runDockerExecWithStdout(30*time.Second, containerName, "clawhub", "search", keyword)
158+
return runDockerExecWithStdout(
159+
30*time.Second,
160+
containerName,
161+
"sh",
162+
"-c",
163+
fmt.Sprintf("CLAWHUB_REGISTRY=%q clawhub search %q", resolveClawhubRegistry(source), keyword),
164+
)
156165
}
157166
}
158167

@@ -182,7 +191,7 @@ func parseSkillhubSearchResult(output string) ([]dto.AgentSkillSearchItem, error
182191
return items, nil
183192
}
184193

185-
func parseClawhubSearchResult(output string) []dto.AgentSkillSearchItem {
194+
func parseClawhubSearchResult(output, source string) []dto.AgentSkillSearchItem {
186195
lines := strings.Split(strings.TrimSpace(output), "\n")
187196
items := make([]dto.AgentSkillSearchItem, 0, len(lines))
188197
for _, line := range lines {
@@ -194,18 +203,19 @@ func parseClawhubSearchResult(output string) []dto.AgentSkillSearchItem {
194203
Slug: matches[1],
195204
Name: matches[2],
196205
Score: matches[3],
197-
Source: "clawhub",
206+
Source: source,
198207
})
199208
}
200209
return items
201210
}
202211

203212
func buildOpenclawSkillInstallCommand(source, slug string) string {
204213
switch source {
205-
case "clawhub":
214+
case "clawhub-global", "clawhub-cn":
206215
return fmt.Sprintf(
207-
"mkdir -p %s && clawhub --workdir /home/node/.openclaw --dir skills install %q",
216+
"mkdir -p %s && CLAWHUB_REGISTRY=%q clawhub --workdir /home/node/.openclaw --dir skills install %q",
208217
openclawManagedSkillsDir,
218+
resolveClawhubRegistry(source),
209219
slug,
210220
)
211221
default:
@@ -218,6 +228,15 @@ func buildOpenclawSkillInstallCommand(source, slug string) string {
218228
}
219229
}
220230

231+
func resolveClawhubRegistry(source string) string {
232+
switch source {
233+
case "clawhub-cn":
234+
return clawhubChinaRegistry
235+
default:
236+
return clawhubGlobalRegistry
237+
}
238+
}
239+
221240
func getOpenclawSkillKey(containerName, name string) (string, error) {
222241
output, err := runDockerExecWithStdout(30*time.Second, containerName, "sh", "-c", fmt.Sprintf("openclaw skills info %q --json 2>&1", name))
223242
if err != nil {

frontend/src/api/interface/ai.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ export namespace AI {
801801

802802
export interface AgentSkillSearchReq {
803803
agentId: number;
804-
source: 'clawhub' | 'skillhub';
804+
source: 'clawhub-global' | 'clawhub-cn' | 'skillhub';
805805
keyword: string;
806806
}
807807

@@ -831,7 +831,7 @@ export namespace AI {
831831

832832
export interface AgentSkillInstallReq {
833833
agentId: number;
834-
source: 'clawhub' | 'skillhub';
834+
source: 'clawhub-global' | 'clawhub-cn' | 'skillhub';
835835
slug: string;
836836
taskID: string;
837837
}

frontend/src/lang/modules/en.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,8 @@ const message = {
712712
skillsMarket: 'Skill Market',
713713
skillsMarketHint: 'Select a source and search for skills',
714714
skillsMarketEmpty: 'No matching skills found',
715-
skillsMarketSourceClawhub: 'ClawHub (Official)',
715+
skillsMarketSourceClawhubGlobal: 'ClawHub (Global)',
716+
skillsMarketSourceClawhubChina: 'ClawHub (China)',
716717
skillsMarketSourceSkillhub: 'SkillHub (Tencent)',
717718
skillsScore: 'Score',
718719
versionUnsupportedTitle: 'This feature is not supported in the current version',

frontend/src/lang/modules/es-es.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,8 @@ const message = {
721721
skillsMarket: 'Mercado de habilidades',
722722
skillsMarketHint: 'Seleccione una fuente y busque habilidades',
723723
skillsMarketEmpty: 'No se encontraron habilidades relacionadas',
724-
skillsMarketSourceClawhub: 'ClawHub (Oficial)',
724+
skillsMarketSourceClawhubGlobal: 'ClawHub (Global)',
725+
skillsMarketSourceClawhubChina: 'ClawHub (China)',
725726
skillsMarketSourceSkillhub: 'SkillHub (Tencent)',
726727
skillsScore: 'Puntuación',
727728
versionUnsupportedTitle: 'Esta función no es compatible con la versión actual',

frontend/src/lang/modules/ja.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,8 @@ const message = {
713713
skillsMarket: '技能マーケット',
714714
skillsMarketHint: 'ソースを選択して技能を検索してください',
715715
skillsMarketEmpty: '関連する技能が見つかりませんでした',
716-
skillsMarketSourceClawhub: 'ClawHub(公式)',
716+
skillsMarketSourceClawhubGlobal: 'ClawHub(グローバル)',
717+
skillsMarketSourceClawhubChina: 'ClawHub(中国)',
717718
skillsMarketSourceSkillhub: 'SkillHub(Tencent)',
718719
skillsScore: 'スコア',
719720
versionUnsupportedTitle: '現在のバージョンではこの機能はサポートされていません',

frontend/src/lang/modules/ko.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,8 @@ const message = {
705705
skillsMarket: '기술 마켓',
706706
skillsMarketHint: '소스를 선택하고 기술을 검색하세요',
707707
skillsMarketEmpty: '관련 기술을 찾을 수 없습니다',
708-
skillsMarketSourceClawhub: 'ClawHub (공식)',
708+
skillsMarketSourceClawhubGlobal: 'ClawHub (글로벌)',
709+
skillsMarketSourceClawhubChina: 'ClawHub (중국)',
709710
skillsMarketSourceSkillhub: 'SkillHub (Tencent)',
710711
skillsScore: '점수',
711712
versionUnsupportedTitle: '현재 버전에서는 이 기능을 지원하지 않습니다',

frontend/src/lang/modules/ms.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,7 +720,8 @@ const message = {
720720
skillsMarket: 'Pasaran kemahiran',
721721
skillsMarketHint: 'Pilih sumber dan cari kemahiran',
722722
skillsMarketEmpty: 'Tiada kemahiran berkaitan ditemui',
723-
skillsMarketSourceClawhub: 'ClawHub (Rasmi)',
723+
skillsMarketSourceClawhubGlobal: 'ClawHub (Global)',
724+
skillsMarketSourceClawhubChina: 'ClawHub (China)',
724725
skillsMarketSourceSkillhub: 'SkillHub (Tencent)',
725726
skillsScore: 'Skor',
726727
versionUnsupportedTitle: 'Ciri ini tidak disokong dalam versi semasa',

frontend/src/lang/modules/pt-br.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,8 @@ const message = {
715715
skillsMarket: 'Mercado de habilidades',
716716
skillsMarketHint: 'Selecione uma fonte e pesquise habilidades',
717717
skillsMarketEmpty: 'Nenhuma habilidade correspondente encontrada',
718-
skillsMarketSourceClawhub: 'ClawHub (Oficial)',
718+
skillsMarketSourceClawhubGlobal: 'ClawHub (Global)',
719+
skillsMarketSourceClawhubChina: 'ClawHub (China)',
719720
skillsMarketSourceSkillhub: 'SkillHub (Tencent)',
720721
skillsScore: 'Pontuação',
721722
versionUnsupportedTitle: 'Este recurso não é compatível com a versão atual',

frontend/src/lang/modules/ru.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,8 @@ const message = {
712712
skillsMarket: 'Рынок навыков',
713713
skillsMarketHint: 'Выберите источник и выполните поиск навыков',
714714
skillsMarketEmpty: 'Подходящие навыки не найдены',
715-
skillsMarketSourceClawhub: 'ClawHub (Официальный)',
715+
skillsMarketSourceClawhubGlobal: 'ClawHub (Глобальный)',
716+
skillsMarketSourceClawhubChina: 'ClawHub (Китай)',
716717
skillsMarketSourceSkillhub: 'SkillHub (Tencent)',
717718
skillsScore: 'Оценка',
718719
versionUnsupportedTitle: 'Эта функция не поддерживается в текущей версии',

0 commit comments

Comments
 (0)