feat: support skills hub server frontend (#13074)

This commit is contained in:
王贺
2026-06-18 16:57:53 +08:00
committed by GitHub
parent 5591fe50f0
commit efd84b1e1b
11 changed files with 198 additions and 1 deletions

View File

@@ -1109,7 +1109,7 @@ func (f *FileService) ReadLogByLine(req request.FileReadByLineReq) (*response.Fi
logFilePath, _ = ini_conf.GetIniValue(configPath, "supervisord", "logfile")
case constant.Supervisor:
logFilePath = path.Join(global.Dir.DataDir, "tools", "supervisord", "log", req.Name)
case "ai-proxy":
case "ai-proxy", "skills-hub":
safeName := path.Base(req.Name)
if safeName != req.Name || strings.Contains(safeName, "..") {
return nil, buserr.New("ErrInvalidParams")

View File

@@ -1103,6 +1103,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Skill List',
serverTab: 'Server',
upload: 'Upload Skill',
importSkill: 'Import Skill',
repositoryAddress: 'Repository Address',
@@ -1160,6 +1162,23 @@ const message = {
noInstallTarget: 'No custom agent is available. Configure an install target first.',
postInstallConfirm:
'This target has a post-install command. Confirm the command is trusted before running.',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: 'Are you sure you want to {0} the Skills Hub server?',
serverAccessSetting: 'Service Access Settings',
serverInfo: 'Server Information',
tokenSetting: 'Token Settings',
externalUrl: 'External URL',
externalUrlRequired: 'Enter the external URL first.',
skillctlDownloadUrl: 'skillctl download URL',
skillctlArchitecture: 'Server Architecture',
registryUrl: 'Registry URL',
loginCommand: 'Login Command',
installCommand: 'Install Command',
createToken: 'Create Token',
tokenCreated: 'Token Created',
tokenVisibleOnce: 'The token is shown only once. Copy and save it now.',
disableTokenConfirm: 'Disable this token? skillctl clients using it will no longer install skills.',
deleteTokenConfirm: 'Delete this token? This cannot be undone.',
status: {
pending: 'Pending',
approved: 'Approved',

View File

@@ -1120,6 +1120,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Lista de Skills',
serverTab: 'Servidor',
upload: 'Subir Skill',
importSkill: 'Importar Skill',
repositoryAddress: 'Dirección del repositorio',
@@ -1178,6 +1180,24 @@ const message = {
noInstallTarget: 'No hay agentes personalizados disponibles. Configure primero un destino de instalación.',
postInstallConfirm:
'Este destino tiene un comando posterior a la instalación. Confirme que el comando es confiable antes de ejecutarlo.',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: '¿Seguro que desea {0} el servidor Skills Hub?',
serverAccessSetting: 'Configuración de acceso al servicio',
serverInfo: 'Información del servidor',
tokenSetting: 'Configuración de Token',
externalUrl: 'URL externa',
externalUrlRequired: 'Introduzca primero la URL externa.',
skillctlDownloadUrl: 'URL de descarga de skillctl',
skillctlArchitecture: 'Arquitectura del servidor',
registryUrl: 'URL del Registry',
loginCommand: 'Comando de inicio de sesión',
installCommand: 'Comando de instalación',
createToken: 'Crear Token',
tokenCreated: 'Token creado',
tokenVisibleOnce: 'El token en texto claro solo se muestra una vez. Cópielo y guárdelo ahora.',
disableTokenConfirm:
'¿Desactivar este Token? Después de desactivarlo, skillctl que use este Token ya no podrá instalar Skills.',
deleteTokenConfirm: '¿Eliminar este Token? Esta acción no se puede deshacer.',
status: {
pending: 'Pendiente',
approved: 'Aprobado',

View File

@@ -1110,6 +1110,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Skill リスト',
serverTab: 'サーバー',
upload: 'Skill をアップロード',
importSkill: 'Skill をインポート',
repositoryAddress: 'リポジトリアドレス',
@@ -1169,6 +1171,24 @@ const message = {
noInstallTarget: '利用可能なカスタムエージェントがありません。先にインストール先を設定してください。',
postInstallConfirm:
'この対象にはインストール後コマンドが設定されています。実行前に信頼できるコマンドか確認してください。',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: 'Skills Hub サーバーを{0}しますか?',
serverAccessSetting: 'サービスアクセス設定',
serverInfo: 'サーバー情報',
tokenSetting: 'Token 設定',
externalUrl: '外部アクセス URL',
externalUrlRequired: '先に外部アクセス URL を入力してください。',
skillctlDownloadUrl: 'skillctl ダウンロード URL',
skillctlArchitecture: 'サーバーアーキテクチャ',
registryUrl: 'Registry URL',
loginCommand: 'ログインコマンド',
installCommand: 'インストールコマンド',
createToken: 'Token を作成',
tokenCreated: 'Token が作成されました',
tokenVisibleOnce: 'Token の平文は一度だけ表示されます。すぐにコピーして保存してください。',
disableTokenConfirm:
'この Token を無効にしますか?無効にすると、この Token を使用する skillctl は Skill をインストールできなくなります。',
deleteTokenConfirm: 'この Token を削除しますか?削除後は元に戻せません。',
status: {
pending: 'レビュー待ち',
approved: '承認済み',

View File

@@ -1094,6 +1094,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Skill 목록',
serverTab: '서버',
upload: 'Skill 업로드',
importSkill: 'Skill 가져오기',
repositoryAddress: '저장소 주소',
@@ -1152,6 +1154,24 @@ const message = {
noInstallTarget: '사용 가능한 사용자 지정 에이전트가 없습니다. 먼저 설치 대상을 구성하세요.',
postInstallConfirm:
'이 대상에는 설치 후 명령이 구성되어 있습니다. 실행 전에 신뢰할 수 있는 명령인지 확인하세요.',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: 'Skills Hub 서버를 {0}하시겠습니까?',
serverAccessSetting: '서비스 접근 설정',
serverInfo: '서버 정보',
tokenSetting: 'Token 설정',
externalUrl: '외부 접근 주소',
externalUrlRequired: '먼저 외부 접근 주소를 입력하세요.',
skillctlDownloadUrl: 'skillctl 다운로드 주소',
skillctlArchitecture: '서버 아키텍처',
registryUrl: 'Registry 주소',
loginCommand: '로그인 명령',
installCommand: '설치 명령',
createToken: 'Token 생성',
tokenCreated: 'Token 생성됨',
tokenVisibleOnce: 'Token 원문은 한 번만 표시됩니다. 즉시 복사하여 저장하세요.',
disableTokenConfirm:
'이 Token을 비활성화하시겠습니까? 비활성화하면 이 Token을 사용하는 skillctl은 더 이상 Skill을 설치할 수 없습니다.',
deleteTokenConfirm: '이 Token을 삭제하시겠습니까? 삭제 후 복구할 수 없습니다.',
status: {
pending: '검토 대기',
approved: '승인됨',

View File

@@ -1119,6 +1119,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Senarai Skill',
serverTab: 'Pelayan',
upload: 'Muat naik Skill',
importSkill: 'Import Skill',
repositoryAddress: 'Alamat repositori',
@@ -1176,6 +1178,24 @@ const message = {
noInstallTarget: 'Tiada agen tersuai tersedia. Konfigurasikan sasaran pemasangan dahulu.',
postInstallConfirm:
'Sasaran ini mempunyai arahan selepas pemasangan. Sahkan arahan tersebut dipercayai sebelum dijalankan.',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: 'Sahkan operasi {0} untuk pelayan Skills Hub?',
serverAccessSetting: 'Tetapan akses perkhidmatan',
serverInfo: 'Maklumat pelayan',
tokenSetting: 'Tetapan Token',
externalUrl: 'Alamat akses luaran',
externalUrlRequired: 'Masukkan alamat akses luaran dahulu.',
skillctlDownloadUrl: 'Alamat muat turun skillctl',
skillctlArchitecture: 'Seni bina pelayan',
registryUrl: 'Alamat Registry',
loginCommand: 'Arahan log masuk',
installCommand: 'Arahan pemasangan',
createToken: 'Cipta Token',
tokenCreated: 'Token telah dicipta',
tokenVisibleOnce: 'Teks jelas Token hanya dipaparkan sekali. Sila salin dan simpan segera.',
disableTokenConfirm:
'Sahkan nyahdayakan Token ini? Selepas dinyahdayakan, skillctl yang menggunakan Token ini tidak lagi boleh memasang Skill.',
deleteTokenConfirm: 'Sahkan padam Token ini? Selepas dipadam, ia tidak boleh dipulihkan.',
status: {
pending: 'Menunggu semakan',
approved: 'Diluluskan',

View File

@@ -1115,6 +1115,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Lista de Skills',
serverTab: 'Servidor',
upload: 'Enviar Skill',
importSkill: 'Importar Skill',
repositoryAddress: 'Endereço do repositório',
@@ -1173,6 +1175,24 @@ const message = {
noInstallTarget: 'Nenhum agente personalizado disponível. Configure primeiro um destino de instalação.',
postInstallConfirm:
'Este destino tem um comando pós-instalação. Confirme que o comando é confiável antes de executá-lo.',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: 'Tem certeza de que deseja {0} o servidor Skills Hub?',
serverAccessSetting: 'Configurações de acesso ao serviço',
serverInfo: 'Informações do servidor',
tokenSetting: 'Configurações de Token',
externalUrl: 'URL externa',
externalUrlRequired: 'Insira a URL externa primeiro.',
skillctlDownloadUrl: 'URL de download do skillctl',
skillctlArchitecture: 'Arquitetura do servidor',
registryUrl: 'URL do Registry',
loginCommand: 'Comando de login',
installCommand: 'Comando de instalação',
createToken: 'Criar Token',
tokenCreated: 'Token criado',
tokenVisibleOnce: 'O token em texto claro é exibido apenas uma vez. Copie e salve agora.',
disableTokenConfirm:
'Desativar este Token? Após desativado, o skillctl que usa este Token não poderá mais instalar Skills.',
deleteTokenConfirm: 'Excluir este Token? Esta ação não pode ser desfeita.',
status: {
pending: 'Pendente',
approved: 'Aprovado',

View File

@@ -1109,6 +1109,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Список Skills',
serverTab: 'Сервер',
upload: 'Загрузить Skill',
importSkill: 'Импортировать Skill',
repositoryAddress: 'Адрес репозитория',
@@ -1168,6 +1170,24 @@ const message = {
noInstallTarget: 'Нет доступных пользовательских агентов. Сначала настройте цель установки.',
postInstallConfirm:
'Для этой цели настроена команда после установки. Перед выполнением убедитесь, что команда надежна.',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: 'Подтвердить действие «{0}» для сервера Skills Hub?',
serverAccessSetting: 'Настройки доступа к сервису',
serverInfo: 'Информация о сервере',
tokenSetting: 'Настройки Token',
externalUrl: 'Внешний URL',
externalUrlRequired: 'Сначала введите внешний URL.',
skillctlDownloadUrl: 'URL для скачивания skillctl',
skillctlArchitecture: 'Архитектура сервера',
registryUrl: 'URL Registry',
loginCommand: 'Команда входа',
installCommand: 'Команда установки',
createToken: 'Создать Token',
tokenCreated: 'Token создан',
tokenVisibleOnce: 'Значение Token показывается только один раз. Скопируйте и сохраните его сейчас.',
disableTokenConfirm:
'Отключить этот Token? После отключения skillctl, использующий этот Token, больше не сможет устанавливать Skills.',
deleteTokenConfirm: 'Удалить этот Token? Это действие нельзя отменить.',
status: {
pending: 'Ожидает проверки',
approved: 'Одобрен',

View File

@@ -1117,6 +1117,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Skill Listesi',
serverTab: 'Sunucu',
upload: 'Skill yükle',
importSkill: 'Skill içe aktar',
repositoryAddress: 'Depo adresi',
@@ -1175,6 +1177,24 @@ const message = {
noInstallTarget: 'Kullanılabilir özel ajan yok. Önce bir kurulum hedefi yapılandırın.',
postInstallConfirm:
'Bu hedefte kurulum sonrası komut yapılandırılmış. Çalıştırmadan önce komutun güvenilir olduğunu doğrulayın.',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: 'Skills Hub Server için {0} işlemini onaylıyor musunuz?',
serverAccessSetting: 'Hizmet erişim ayarları',
serverInfo: 'Sunucu bilgileri',
tokenSetting: 'Token ayarları',
externalUrl: 'Dış erişim adresi',
externalUrlRequired: 'Önce dış erişim adresini girin.',
skillctlDownloadUrl: 'skillctl indirme adresi',
skillctlArchitecture: 'Sunucu mimarisi',
registryUrl: 'Registry adresi',
loginCommand: 'Giriş komutu',
installCommand: 'Kurulum komutu',
createToken: 'Token oluştur',
tokenCreated: 'Token oluşturuldu',
tokenVisibleOnce: 'Token açık metni yalnızca bir kez gösterilir. Lütfen hemen kopyalayıp kaydedin.',
disableTokenConfirm:
'Bu Token devre dışı bırakılsın mı? Devre dışı bırakıldıktan sonra bu Tokenı kullanan skillctl artık Skill kuramaz.',
deleteTokenConfirm: 'Bu Token silinsin mi? Silindikten sonra geri alınamaz.',
status: {
pending: 'İnceleme bekliyor',
approved: 'Onaylandı',

View File

@@ -1056,6 +1056,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Skill 列表',
serverTab: '服務端',
upload: '上傳 Skill',
importSkill: '匯入 Skill',
repositoryAddress: '倉庫地址',
@@ -1110,6 +1112,23 @@ const message = {
deleteTargetConfirm: '確認刪除該自訂智能體?刪除後使用者不能繼續選擇該安裝目標。',
noInstallTarget: '暫無可用的自訂智能體,請先設定安裝目標。',
postInstallConfirm: '該目標設定了安裝後命令,執行前請確認該命令可信。',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: '確認{0} Skills Hub 服務端?',
serverAccessSetting: '服務訪問設定',
serverInfo: '服務端資訊',
tokenSetting: 'Token 設定',
externalUrl: '外部訪問地址',
externalUrlRequired: '請先輸入外部訪問地址。',
skillctlDownloadUrl: 'skillctl 下載地址',
skillctlArchitecture: '伺服器架構',
registryUrl: 'Registry 地址',
loginCommand: '登入命令',
installCommand: '安裝命令',
createToken: '建立 Token',
tokenCreated: 'Token 已建立',
tokenVisibleOnce: 'Token 明文僅顯示一次,請及時複製保存。',
disableTokenConfirm: '確認停用該 Token停用後使用該 Token 的 skillctl 將無法繼續安裝 Skill。',
deleteTokenConfirm: '確認刪除該 Token刪除後不可恢復。',
status: {
pending: '待審核',
approved: '已審核',

View File

@@ -1045,6 +1045,8 @@ const message = {
},
skillsHub: {
title: 'Skills Hub',
skillList: 'Skill 列表',
serverTab: '服务端',
upload: '上传 Skill',
importSkill: '导入 Skill',
repositoryAddress: '仓库地址',
@@ -1099,6 +1101,23 @@ const message = {
deleteTargetConfirm: '确认删除该自定义智能体?删除后用户不能继续选择该安装目标。',
noInstallTarget: '暂无可用的自定义智能体,请先配置安装目标。',
postInstallConfirm: '该目标配置了安装后命令,执行前请确认该命令可信。',
serverStatusTitle: 'Skills Hub Server',
serverServiceOperateConfirm: '确认{0} Skills Hub 服务端?',
serverAccessSetting: '服务访问设置',
serverInfo: '服务端信息',
tokenSetting: 'Token 设置',
externalUrl: '外部访问地址',
externalUrlRequired: '请先输入外部访问地址。',
skillctlDownloadUrl: 'skillctl 下载地址',
skillctlArchitecture: '服务器架构',
registryUrl: 'Registry 地址',
loginCommand: '登录命令',
installCommand: '安装命令',
createToken: '创建 Token',
tokenCreated: 'Token 已创建',
tokenVisibleOnce: 'Token 明文仅展示一次,请及时复制保存。',
disableTokenConfirm: '确认停用该 Token停用后使用该 Token 的 skillctl 将无法继续安装 Skill。',
deleteTokenConfirm: '确认删除该 Token删除后不可恢复。',
status: {
pending: '待审核',
approved: '已审核',