From 2b9e32b0d51569d399a9f0bcce52406ca0bf36b6 Mon Sep 17 00:00:00 2001 From: ssongliu Date: Fri, 6 Feb 2026 15:11:23 +0800 Subject: [PATCH] feat: Optimize agent style and prompt information --- agent/app/service/agents.go | 38 ++-- agent/i18n/lang/en.yaml | 15 +- agent/i18n/lang/es-ES.yaml | 13 ++ agent/i18n/lang/ja.yaml | 15 +- agent/i18n/lang/ko.yaml | 15 +- agent/i18n/lang/ms.yaml | 15 +- agent/i18n/lang/pt-BR.yaml | 15 +- agent/i18n/lang/ru.yaml | 15 +- agent/i18n/lang/tr.yaml | 13 ++ agent/i18n/lang/zh-Hant.yaml | 25 ++- agent/i18n/lang/zh.yaml | 29 ++- core/constant/common.go | 2 + frontend/src/lang/modules/en.ts | 2 + frontend/src/lang/modules/es-es.ts | 2 + frontend/src/lang/modules/ja.ts | 2 + frontend/src/lang/modules/ko.ts | 2 + frontend/src/lang/modules/ms.ts | 2 + frontend/src/lang/modules/pt-br.ts | 2 + frontend/src/lang/modules/ru.ts | 2 + frontend/src/lang/modules/tr.ts | 2 + frontend/src/lang/modules/zh-Hant.ts | 2 + frontend/src/lang/modules/zh.ts | 3 +- .../src/views/ai/agents/agent/add/index.vue | 187 ++++++++++++------ frontend/src/views/ai/agents/agent/index.vue | 44 +++-- .../src/views/ai/agents/model/add/index.vue | 2 +- frontend/src/views/ai/agents/model/index.vue | 4 +- .../src/views/container/container/index.vue | 2 +- 27 files changed, 352 insertions(+), 118 deletions(-) diff --git a/agent/app/service/agents.go b/agent/app/service/agents.go index fceb5fe9778f..574736f32bfb 100644 --- a/agent/app/service/agents.go +++ b/agent/app/service/agents.go @@ -43,20 +43,20 @@ func NewIAgentService() IAgentService { func (a AgentService) Create(req dto.AgentCreateReq) (*dto.AgentItem, error) { provider := strings.ToLower(strings.TrimSpace(req.Provider)) if !isSupportedAgentProvider(provider) { - return nil, buserr.WithDetail("ErrInvalidParams", "provider", nil) + return nil, buserr.New("ErrAgentProviderNotSupported") } if req.AccountID == 0 { - return nil, buserr.WithDetail("ErrInvalidParams", "accountId", nil) + return nil, buserr.New("ErrAgentAccountRequired") } account, err := agentAccountRepo.GetFirst(repo.WithByID(req.AccountID)) if err != nil { return nil, err } if !account.Verified { - return nil, buserr.WithDetail("ErrInvalidParams", "account", nil) + return nil, buserr.New("ErrAgentAccountNotVerified") } if account.Provider != "" && provider != "" && account.Provider != provider { - return nil, buserr.WithDetail("ErrInvalidParams", "provider", nil) + return nil, buserr.New("ErrAgentProviderMismatch") } provider = strings.ToLower(strings.TrimSpace(account.Provider)) baseURL := strings.TrimSpace(account.BaseURL) @@ -66,10 +66,10 @@ func (a AgentService) Create(req dto.AgentCreateReq) (*dto.AgentItem, error) { } } if provider == "ollama" && baseURL == "" { - return nil, buserr.WithDetail("ErrInvalidParams", "baseURL", nil) + return nil, buserr.New("ErrAgentBaseURLRequired") } if provider != "ollama" && strings.TrimSpace(account.APIKey) == "" { - return nil, buserr.WithDetail("ErrInvalidParams", "apiKey", nil) + return nil, buserr.New("ErrAgentApiKeyRequired") } if err := checkPortExist(req.WebUIPort); err != nil { return nil, err @@ -110,7 +110,7 @@ func (a AgentService) Create(req dto.AgentCreateReq) (*dto.AgentItem, error) { } if req.EditCompose && strings.TrimSpace(req.DockerCompose) == "" { - return nil, buserr.WithDetail("ErrInvalidParams", "dockerCompose", nil) + return nil, buserr.New("ErrAgentComposeRequired") } installReq := request.AppInstallCreate{ AppDetailId: detail.ID, @@ -178,7 +178,7 @@ func (a AgentService) Page(req dto.SearchWithPage) (int64, []dto.AgentItem, erro func (a AgentService) Delete(req dto.AgentDeleteReq) error { if req.ID == 0 { - return buserr.WithDetail("ErrInvalidParams", "id", nil) + return buserr.New("ErrAgentIDRequired") } agent, err := agentRepo.GetFirst(repo.WithByID(req.ID)) if err != nil { @@ -216,11 +216,11 @@ func (a AgentService) GetProviders() ([]dto.ProviderInfo, error) { func (a AgentService) CreateAccount(req dto.AgentAccountCreateReq) error { provider := strings.ToLower(strings.TrimSpace(req.Provider)) if !isSupportedAgentProvider(provider) { - return buserr.WithDetail("ErrInvalidParams", "provider", nil) + return buserr.New("ErrAgentProviderNotSupported") } apiKey := strings.TrimSpace(req.APIKey) if apiKey == "" { - return buserr.WithDetail("ErrInvalidParams", "apiKey", nil) + return buserr.New("ErrAgentApiKeyRequired") } baseURL := strings.TrimSpace(req.BaseURL) if provider != "ollama" { @@ -229,7 +229,7 @@ func (a AgentService) CreateAccount(req dto.AgentAccountCreateReq) error { } } if provider == "ollama" && baseURL == "" { - return buserr.WithDetail("ErrInvalidParams", "baseURL", nil) + return buserr.New("ErrAgentBaseURLRequired") } if exist, _ := agentAccountRepo.GetFirst(repo.WithByProvider(provider), repo.WithByName(req.Name)); exist != nil && exist.ID > 0 { return buserr.New("ErrRecordExist") @@ -261,7 +261,7 @@ func (a AgentService) UpdateAccount(req dto.AgentAccountUpdateReq) error { } } if provider == "ollama" && baseURL == "" { - return buserr.WithDetail("ErrInvalidParams", "baseURL", nil) + return buserr.New("ErrAgentBaseURLRequired") } if err := a.VerifyAccount(dto.AgentAccountVerifyReq{Provider: provider, BaseURL: baseURL, APIKey: req.APIKey}); err != nil { return err @@ -313,11 +313,11 @@ func (a AgentService) PageAccounts(req dto.AgentAccountSearch) (int64, []dto.Age func (a AgentService) VerifyAccount(req dto.AgentAccountVerifyReq) error { provider := strings.ToLower(strings.TrimSpace(req.Provider)) if !isSupportedAgentProvider(provider) { - return buserr.WithDetail("ErrInvalidParams", "provider", nil) + return buserr.New("ErrAgentProviderNotSupported") } apiKey := strings.TrimSpace(req.APIKey) if apiKey == "" { - return buserr.WithDetail("ErrInvalidParams", "apiKey", nil) + return buserr.New("ErrAgentApiKeyRequired") } baseURL := strings.TrimSpace(req.BaseURL) if baseURL == "" { @@ -326,7 +326,7 @@ func (a AgentService) VerifyAccount(req dto.AgentAccountVerifyReq) error { } } if provider == "ollama" && baseURL == "" { - return buserr.WithDetail("ErrInvalidParams", "baseURL", nil) + return buserr.New("ErrAgentBaseURLRequired") } if provider == "ollama" { return nil @@ -336,10 +336,10 @@ func (a AgentService) VerifyAccount(req dto.AgentAccountVerifyReq) error { func (a AgentService) DeleteAccount(req dto.AgentAccountDeleteReq) error { if req.ID == 0 { - return buserr.WithDetail("ErrInvalidParams", "id", nil) + return buserr.New("ErrAgentAccountIDRequired") } if exists, _ := agentRepo.GetFirst(repo.WithByAccountID(req.ID)); exists != nil && exists.ID > 0 { - return buserr.New("ErrRecordExist") + return buserr.New("ErrAgentAccountBound") } return agentAccountRepo.DeleteByID(req.ID) } @@ -391,11 +391,11 @@ func verifyProvider(provider, baseURL, apiKey string) error { } resp, err := client.Do(request) if err != nil { - return err + return buserr.WithErr("ErrAgentAccountUnavailable", err) } defer resp.Body.Close() if resp.StatusCode >= 400 { - return buserr.WithDetail("ErrInvalidParams", fmt.Sprintf("verify failed: %d", resp.StatusCode), nil) + return buserr.WithErr("ErrAgentAccountUnavailable", fmt.Errorf("verify failed: %s", resp.Status)) } return nil } diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index ebe445ff78f3..d33022b18920 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -38,6 +38,19 @@ ErrGroupIsDefault: 'Default group, cannot be deleted' ErrGroupIsInWebsiteUse: 'The group is being used by another website and cannot be deleted.' Decrypt: "Decrypt" +#agent +ErrAgentAccountBound: 'This account is bound to an agent and cannot be deleted. Please check and try again!' +ErrAgentAccountUnavailable: 'The account connection information is unavailable. Error: {{ .err }}. Please check and try again!' +ErrAgentProviderNotSupported: 'This agent provider is not supported. Please check and try again!' +ErrAgentAccountRequired: 'Please select an agent account and try again.' +ErrAgentAccountNotVerified: 'The account has not been verified. Please check and try again!' +ErrAgentProviderMismatch: 'The account provider does not match. Please check and try again!' +ErrAgentBaseURLRequired: 'Base URL cannot be empty. Please check and try again!' +ErrAgentApiKeyRequired: 'API Key cannot be empty. Please check and try again!' +ErrAgentComposeRequired: 'Custom compose content cannot be empty. Please check and try again!' +ErrAgentIDRequired: 'Agent ID cannot be empty. Please check and try again!' +ErrAgentAccountIDRequired: 'Account ID cannot be empty. Please check and try again!' + #backup Localhost: 'Local Machine' ErrBackupInUsed: 'The backup account has been used in the scheduled task and cannot be deleted.' @@ -527,4 +540,4 @@ PartitionDiskErr: "Failed to partition, {{ .err }}" FormatDiskErr: "Failed to format disk, {{ .err }}" MountDiskErr: "Failed to mount disk, {{ .err }}" UnMountDiskErr: "Failed to unmount disk, {{ .err }}" -XfsNotFound: "xfs filesystem not detected, please install xfsprogs first" \ No newline at end of file +XfsNotFound: "xfs filesystem not detected, please install xfsprogs first" diff --git a/agent/i18n/lang/es-ES.yaml b/agent/i18n/lang/es-ES.yaml index 73125fb55312..9af227e847e7 100644 --- a/agent/i18n/lang/es-ES.yaml +++ b/agent/i18n/lang/es-ES.yaml @@ -38,6 +38,19 @@ ErrGroupIsDefault: 'Grupo predeterminado, no se puede eliminar' ErrGroupIsInWebsiteUse: 'El grupo está siendo usado por otro sitio web y no se puede eliminar.' Decrypt: "Descifrar" +#agent +ErrAgentAccountBound: 'Esta cuenta está vinculada a un agente y no se puede eliminar. Verifique e inténtelo de nuevo!' +ErrAgentAccountUnavailable: 'La información de conexión de la cuenta no está disponible. Error: {{ .err }}. Verifique e inténtelo de nuevo!' +ErrAgentProviderNotSupported: 'Este proveedor de agente no es compatible. Verifique e inténtelo de nuevo!' +ErrAgentAccountRequired: 'Seleccione una cuenta de agente y vuelva a intentarlo.' +ErrAgentAccountNotVerified: 'La cuenta no está verificada. Verifique e inténtelo de nuevo!' +ErrAgentProviderMismatch: 'El proveedor de la cuenta no coincide. Verifique e inténtelo de nuevo!' +ErrAgentBaseURLRequired: 'Base URL no puede estar vacío. Verifique e inténtelo de nuevo!' +ErrAgentApiKeyRequired: 'API Key no puede estar vacío. Verifique e inténtelo de nuevo!' +ErrAgentComposeRequired: 'El contenido personalizado de compose no puede estar vacío. Verifique e inténtelo de nuevo!' +ErrAgentIDRequired: 'El ID del agente no puede estar vacío. Verifique e inténtelo de nuevo!' +ErrAgentAccountIDRequired: 'El ID de la cuenta no puede estar vacío. Verifique e inténtelo de nuevo!' + #backup ErrBackupInUsed: 'La cuenta de respaldo está siendo utilizada en una tarea programada y no se puede eliminar.' ErrBackupCheck: 'Error al probar la conexión de la cuenta de respaldo {{ .err }}' diff --git a/agent/i18n/lang/ja.yaml b/agent/i18n/lang/ja.yaml index 66cfba021293..63b7d001b878 100644 --- a/agent/i18n/lang/ja.yaml +++ b/agent/i18n/lang/ja.yaml @@ -37,6 +37,19 @@ ErrGroupIsDefault: 'デフォルト グループ、削除できません' ErrGroupIsInWebsiteUse: 'グループは別の Web サイトで使用されているため、削除できません。' Decrypt: "復号化" +#agent +ErrAgentAccountBound: 'このアカウントはエージェントに紐付いているため削除できません。確認して再試行してください!' +ErrAgentAccountUnavailable: 'アカウント接続情報を利用できません。エラー: {{ .err }}。確認して再試行してください!' +ErrAgentProviderNotSupported: 'このエージェント提供元はサポートされていません。確認して再試行してください!' +ErrAgentAccountRequired: 'エージェントアカウントを選択して再試行してください。' +ErrAgentAccountNotVerified: 'アカウントの検証が完了していません。確認して再試行してください!' +ErrAgentProviderMismatch: 'アカウントの提供元が一致しません。確認して再試行してください!' +ErrAgentBaseURLRequired: 'Base URL を空にできません。確認して再試行してください!' +ErrAgentApiKeyRequired: 'API Key を空にできません。確認して再試行してください!' +ErrAgentComposeRequired: 'カスタム compose 内容を空にできません。確認して再試行してください!' +ErrAgentIDRequired: 'エージェント ID を空にできません。確認して再試行してください!' +ErrAgentAccountIDRequired: 'アカウント ID を空にできません。確認して再試行してください!' + #backup Localhost: 'ローカルマシン' ErrBackupInUsed: 'バックアップ アカウントはスケジュールされたタスクで使用されているため、削除できません。' @@ -526,4 +539,4 @@ PartitionDiskErr: "パーティションに失敗しました、{{ .err }}" FormatDiskErr: "ディスクのフォーマットに失敗しました、{{ .err }}" MountDiskErr: "ディスクのマウントに失敗しました、{{ .err }}" UnMountDiskErr: "ディスクのアンマウントに失敗しました、{{ .err }}" -XfsNotFound: "xfs ファイルシステムが検出されませんでした、最初に xfsprogs をインストールしてください" \ No newline at end of file +XfsNotFound: "xfs ファイルシステムが検出されませんでした、最初に xfsprogs をインストールしてください" diff --git a/agent/i18n/lang/ko.yaml b/agent/i18n/lang/ko.yaml index 664d048bc085..d8aa7382e842 100644 --- a/agent/i18n/lang/ko.yaml +++ b/agent/i18n/lang/ko.yaml @@ -38,6 +38,19 @@ ErrGroupIsDefault: '기본 그룹, 삭제할 수 없습니다' ErrGroupIsInWebsiteUse: '그룹이 다른 웹사이트에서 사용 중이므로 삭제할 수 없습니다.' Decrypt: "복호화" +#agent +ErrAgentAccountBound: '이 계정은 에이전트에 바인딩되어 있어 삭제할 수 없습니다. 확인 후 다시 시도하세요!' +ErrAgentAccountUnavailable: '계정 연결 정보를 사용할 수 없습니다. 오류: {{ .err }}. 확인 후 다시 시도하세요!' +ErrAgentProviderNotSupported: '이 에이전트 제공자는 지원되지 않습니다. 확인 후 다시 시도하세요!' +ErrAgentAccountRequired: '에이전트 계정을 선택한 후 다시 시도하세요.' +ErrAgentAccountNotVerified: '계정이 검증되지 않았습니다. 확인 후 다시 시도하세요!' +ErrAgentProviderMismatch: '계정 제공자가 일치하지 않습니다. 확인 후 다시 시도하세요!' +ErrAgentBaseURLRequired: 'Base URL은 비워 둘 수 없습니다. 확인 후 다시 시도하세요!' +ErrAgentApiKeyRequired: 'API Key는 비워 둘 수 없습니다. 확인 후 다시 시도하세요!' +ErrAgentComposeRequired: '사용자 정의 compose 내용은 비워 둘 수 없습니다. 확인 후 다시 시도하세요!' +ErrAgentIDRequired: '에이전트 ID는 비워 둘 수 없습니다. 확인 후 다시 시도하세요!' +ErrAgentAccountIDRequired: '계정 ID는 비워 둘 수 없습니다. 확인 후 다시 시도하세요!' + #지원 Localhost: '로컬 머신' ErrBackupInUsed: '백업 계정이 예약된 작업에 사용되었으므로 삭제할 수 없습니다.' @@ -527,4 +540,4 @@ PartitionDiskErr: "파티션 분할에 실패했습니다, {{ .err }}" FormatDiskErr: "디스크 포맷에 실패했습니다, {{ .err }}" MountDiskErr: "디스크 마운트에 실패했습니다, {{ .err }}" UnMountDiskErr: "디스크 마운트 해제에 실패했습니다, {{ .err }}" -XfsNotFound: "xfs 파일 시스템이 감지되지 않았습니다, 먼저 xfsprogs 를 설치하세요" \ No newline at end of file +XfsNotFound: "xfs 파일 시스템이 감지되지 않았습니다, 먼저 xfsprogs 를 설치하세요" diff --git a/agent/i18n/lang/ms.yaml b/agent/i18n/lang/ms.yaml index 1a71cd5bdbb5..01586354a19f 100644 --- a/agent/i18n/lang/ms.yaml +++ b/agent/i18n/lang/ms.yaml @@ -41,6 +41,19 @@ ErrGroupIsDefault: 'Kumpulan lalai, tidak boleh dipadamkan' ErrGroupIsInWebsiteUse: 'Kumpulan sedang digunakan oleh tapak web lain dan tidak boleh dipadamkan.' Decrypt: "Dekripsi" +#agent +ErrAgentAccountBound: 'Akaun ini telah dipautkan kepada ejen dan tidak boleh dipadam. Sila semak dan cuba lagi!' +ErrAgentAccountUnavailable: 'Maklumat sambungan akaun tidak tersedia. Ralat: {{ .err }}. Sila semak dan cuba lagi!' +ErrAgentProviderNotSupported: 'Penyedia ejen ini tidak disokong. Sila semak dan cuba lagi!' +ErrAgentAccountRequired: 'Sila pilih akaun ejen dan cuba lagi.' +ErrAgentAccountNotVerified: 'Akaun belum disahkan. Sila semak dan cuba lagi!' +ErrAgentProviderMismatch: 'Penyedia akaun tidak sepadan. Sila semak dan cuba lagi!' +ErrAgentBaseURLRequired: 'Base URL tidak boleh kosong. Sila semak dan cuba lagi!' +ErrAgentApiKeyRequired: 'API Key tidak boleh kosong. Sila semak dan cuba lagi!' +ErrAgentComposeRequired: 'Kandungan compose tersuai tidak boleh kosong. Sila semak dan cuba lagi!' +ErrAgentIDRequired: 'ID ejen tidak boleh kosong. Sila semak dan cuba lagi!' +ErrAgentAccountIDRequired: 'ID akaun tidak boleh kosong. Sila semak dan cuba lagi!' + #sandaran Localhost: 'Mesin Tempatan' ErrBackupInUsed: 'Akaun sandaran telah digunakan dalam tugas yang dijadualkan dan tidak boleh dipadamkan.' @@ -527,4 +540,4 @@ PartitionDiskErr: "Gagal membahagikan, {{ .err }}" FormatDiskErr: "Gagal memformat cakera, {{ .err }}" MountDiskErr: "Gagal mengkaitkan cakera, {{ .err }}" UnMountDiskErr: "Gagal nyahkaitkan cakera, {{ .err }}" -XfsNotFound: "Sistem fail xfs tidak dikesan, sila pasang xfsprogs terlebih dahulu" \ No newline at end of file +XfsNotFound: "Sistem fail xfs tidak dikesan, sila pasang xfsprogs terlebih dahulu" diff --git a/agent/i18n/lang/pt-BR.yaml b/agent/i18n/lang/pt-BR.yaml index 0fd9b577196a..aaa5a1265f04 100644 --- a/agent/i18n/lang/pt-BR.yaml +++ b/agent/i18n/lang/pt-BR.yaml @@ -41,6 +41,19 @@ ErrGroupIsDefault: 'Grupo padrão, não pode ser excluído' ErrGroupIsInWebsiteUse: 'O grupo está sendo usado por outro site e não pode ser excluído.' Decrypt: "Descriptografar" +#agent +ErrAgentAccountBound: 'Esta conta está vinculada a um agente e não pode ser excluída. Verifique e tente novamente!' +ErrAgentAccountUnavailable: 'As informações de conexão da conta não estão disponíveis. Erro: {{ .err }}. Verifique e tente novamente!' +ErrAgentProviderNotSupported: 'Este provedor de agente não é suportado. Verifique e tente novamente!' +ErrAgentAccountRequired: 'Selecione uma conta de agente e tente novamente.' +ErrAgentAccountNotVerified: 'A conta não foi verificada. Verifique e tente novamente!' +ErrAgentProviderMismatch: 'O provedor da conta não corresponde. Verifique e tente novamente!' +ErrAgentBaseURLRequired: 'Base URL não pode estar vazio. Verifique e tente novamente!' +ErrAgentApiKeyRequired: 'API Key não pode estar vazio. Verifique e tente novamente!' +ErrAgentComposeRequired: 'O conteúdo personalizado do compose não pode estar vazio. Verifique e tente novamente!' +ErrAgentIDRequired: 'ID do agente não pode estar vazio. Verifique e tente novamente!' +ErrAgentAccountIDRequired: 'ID da conta não pode estar vazio. Verifique e tente novamente!' + #backup Localhost: 'Máquina Local' ErrBackupInUsed: 'A conta de backup foi usada na tarefa agendada e não pode ser excluída.' @@ -527,4 +540,4 @@ PartitionDiskErr: "Falha ao particionar, {{ .err }}" FormatDiskErr: "Falha ao formatar disco, {{ .err }}" MountDiskErr: "Falha ao montar disco, {{ .err }}" UnMountDiskErr: "Falha ao desmontar disco, {{ .err }}" -XfsNotFound: "Sistema de arquivos xfs não detectado, por favor instale xfsprogs primeiro" \ No newline at end of file +XfsNotFound: "Sistema de arquivos xfs não detectado, por favor instale xfsprogs primeiro" diff --git a/agent/i18n/lang/ru.yaml b/agent/i18n/lang/ru.yaml index 98cf38a8f9ed..75d49a1a3430 100644 --- a/agent/i18n/lang/ru.yaml +++ b/agent/i18n/lang/ru.yaml @@ -41,6 +41,19 @@ ErrGroupIsDefault: 'Группа по умолчанию, не может быт ErrGroupIsInWebsiteUse: 'Группа используется другим веб-сайтом и не может быть удалена.' Decrypt: "Расшифровать" +#agent +ErrAgentAccountBound: 'Эта учетная запись привязана к агенту и не может быть удалена. Проверьте и повторите попытку!' +ErrAgentAccountUnavailable: 'Информация о подключении учетной записи недоступна. Ошибка: {{ .err }}. Проверьте и повторите попытку!' +ErrAgentProviderNotSupported: 'Этот провайдер агента не поддерживается. Проверьте и повторите попытку!' +ErrAgentAccountRequired: 'Выберите учетную запись агента и повторите попытку.' +ErrAgentAccountNotVerified: 'Учетная запись не прошла проверку. Проверьте и повторите попытку!' +ErrAgentProviderMismatch: 'Провайдер учетной записи не совпадает. Проверьте и повторите попытку!' +ErrAgentBaseURLRequired: 'Base URL не может быть пустым. Проверьте и повторите попытку!' +ErrAgentApiKeyRequired: 'API Key не может быть пустым. Проверьте и повторите попытку!' +ErrAgentComposeRequired: 'Пользовательское содержимое compose не может быть пустым. Проверьте и повторите попытку!' +ErrAgentIDRequired: 'ID агента не может быть пустым. Проверьте и повторите попытку!' +ErrAgentAccountIDRequired: 'ID учетной записи не может быть пустым. Проверьте и повторите попытку!' + #резервное копирование Localhost: 'Локальная машина' ErrBackupInUsed: 'Учетная запись резервного копирования использовалась в запланированной задаче и не может быть удалена.' @@ -527,4 +540,4 @@ PartitionDiskErr: "Не удалось разделить, {{ .err }}" FormatDiskErr: "Не удалось отформатировать диск, {{ .err }}" MountDiskErr: "Не удалось подключить диск, {{ .err }}" UnMountDiskErr: "Не удалось отключить диск, {{ .err }}" -XfsNotFound: "Файловая система xfs не обнаружена, сначала установите xfsprogs" \ No newline at end of file +XfsNotFound: "Файловая система xfs не обнаружена, сначала установите xfsprogs" diff --git a/agent/i18n/lang/tr.yaml b/agent/i18n/lang/tr.yaml index d385af7f5414..a4b11b825f6b 100644 --- a/agent/i18n/lang/tr.yaml +++ b/agent/i18n/lang/tr.yaml @@ -41,6 +41,19 @@ ErrGroupIsDefault: 'Varsayılan grup, silinemez' ErrGroupIsInWebsiteUse: 'Grup başka bir web sitesi tarafından kullanılıyor ve silinemez.' Decrypt: "Şifre Çöz" +#agent +ErrAgentAccountBound: 'Bu hesap bir ajana bağlı ve silinemez. Kontrol edip tekrar deneyin!' +ErrAgentAccountUnavailable: 'Hesap bağlantı bilgileri kullanılamıyor. Hata: {{ .err }}. Kontrol edip tekrar deneyin!' +ErrAgentProviderNotSupported: 'Bu ajan sağlayıcısı desteklenmiyor. Kontrol edip tekrar deneyin!' +ErrAgentAccountRequired: 'Lütfen bir ajan hesabı seçip tekrar deneyin.' +ErrAgentAccountNotVerified: 'Hesap doğrulanmadı. Kontrol edip tekrar deneyin!' +ErrAgentProviderMismatch: 'Hesap sağlayıcısı eşleşmiyor. Kontrol edip tekrar deneyin!' +ErrAgentBaseURLRequired: 'Base URL boş olamaz. Kontrol edip tekrar deneyin!' +ErrAgentApiKeyRequired: 'API Key boş olamaz. Kontrol edip tekrar deneyin!' +ErrAgentComposeRequired: 'Özel compose içeriği boş olamaz. Kontrol edip tekrar deneyin!' +ErrAgentIDRequired: 'Ajan ID boş olamaz. Kontrol edip tekrar deneyin!' +ErrAgentAccountIDRequired: 'Hesap ID boş olamaz. Kontrol edip tekrar deneyin!' + #backup Localhost: 'Yerel Makine' ErrBackupInUsed: 'Yedekleme hesabı zamanlanmış görevde kullanıldı ve silinemez.' diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index 48372a44018b..b36d9a52289e 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -38,6 +38,19 @@ ErrGroupIsDefault: '預設分組,無法刪除' ErrGroupIsInWebsiteUse: '分組正在被其他網站使用,無法刪除' Decrypt: "解密" +#agent +ErrAgentAccountBound: '該帳號已綁定到智能體,無法刪除,請檢查後重試!!' +ErrAgentAccountUnavailable: '帳號連線資訊不可用,錯誤:{{ .err }},請檢查後重試!' +ErrAgentProviderNotSupported: '暫不支援該智能體提供商,請檢查後重試!' +ErrAgentAccountRequired: '請選擇智能體帳號後重試' +ErrAgentAccountNotVerified: '帳號未驗證通過,請檢查後重試!' +ErrAgentProviderMismatch: '帳號提供商不匹配,請檢查後重試!' +ErrAgentBaseURLRequired: 'Base URL 不能為空,請檢查後重試!' +ErrAgentApiKeyRequired: 'API Key 不能為空,請檢查後重試!' +ErrAgentComposeRequired: '自訂編排內容不能為空,請檢查後重試!' +ErrAgentIDRequired: '智能體 ID 不能為空,請檢查後重試!' +ErrAgentAccountIDRequired: '帳號 ID 不能為空,請檢查後重試!' + #backup Localhost: '本機' ErrBackupInUsed: '此備份帳號已在排程任務中使用,無法刪除' @@ -124,7 +137,7 @@ ErrLogFileToLarge: "日誌檔案超過 500M,無法打開" FileDropFailed: "清理文件 {{ .name }} 失敗: {{ .err }}" FileDropSuccess: "清理文件 {{ .name }} 成功,清理 {{ .count }} 個文件,釋放 {{ .size }} 磁碟空間" FileDropSum: "文件清理完成,共清理 {{ .count }} 個文件,共釋放 {{ .size }} 磁碟空間" -ErrBadDecrypt: "壓縮檔解壓密碼錯誤,解壓失敗,請檢查後重試!" +ErrBadDecrypt: "壓縮檔解壓密碼錯誤,解壓失敗,請檢查後重試!!" #website ErrAliasIsExist: '代號已存在' @@ -492,11 +505,11 @@ AppBackupFileIncomplete: '備份檔案不完整缺少 app.json 或 app.tar.gz AppAttributesNotMatch: '應用程式類型或名稱不一致' #alert -ErrAlert: '警告訊息格式錯誤,請檢查後重試!' -ErrAlertPush: '警告訊息推送錯誤,請檢查後重試!' -ErrAlertSave: '警告訊息儲存錯誤,請檢查後重試!' -ErrAlertSync: '警告訊息同步錯誤,請檢查後重試!' -ErrAlertRemote: '警告訊息遠端錯誤,請檢查後重試!' +ErrAlert: '警告訊息格式錯誤,請檢查後重試!!' +ErrAlertPush: '警告訊息推送錯誤,請檢查後重試!!' +ErrAlertSave: '警告訊息儲存錯誤,請檢查後重試!!' +ErrAlertSync: '警告訊息同步錯誤,請檢查後重試!!' +ErrAlertRemote: '警告訊息遠端錯誤,請檢查後重試!!' #task - runtime ErrInstallExtension: "已有安裝任務正在進行,請等待任務結束" diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index f3b0761e1ad2..7a13336e283f 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -38,6 +38,19 @@ ErrGroupIsDefault: "默认分组,无法删除" ErrGroupIsInWebsiteUse: "分组正在被其他网站使用,无法删除" Decrypt: "解密" +#agent +ErrAgentAccountBound: "该账号已经绑定到智能体,无法删除,请检查后重试!!" +ErrAgentAccountUnavailable: "账号连接信息不可用,错误:{{ .err }},请检查后重试!" +ErrAgentProviderNotSupported: "暂不支持该智能体提供商,请检查后重试!" +ErrAgentAccountRequired: "请选择智能体账号后重试" +ErrAgentAccountNotVerified: "账号未验证通过,请检查后重试!" +ErrAgentProviderMismatch: "账号提供商不匹配,请检查后重试!" +ErrAgentBaseURLRequired: "Base URL 不能为空,请检查后重试!" +ErrAgentApiKeyRequired: "API Key 不能为空,请检查后重试!" +ErrAgentComposeRequired: "自定义编排内容不能为空,请检查后重试!" +ErrAgentIDRequired: "智能体 ID 不能为空,请检查后重试!" +ErrAgentAccountIDRequired: "账号 ID 不能为空,请检查后重试!" + #backup Localhost: '本机' ErrBackupInUsed: "该备份账号已在计划任务中使用,无法删除" @@ -125,7 +138,7 @@ ErrLogFileToLarge: "日志文件超过 500M,无法打开" FileDropFailed: "清理文件 {{ .name }} 失败 {{ .err }}" FileDropSuccess: "清理文件 {{ .name }} 成功,清理文件 {{ .count }},释放磁盘空间 {{ .size }}" FileDropSum: "文件清理成功,清理文件共计 {{ .count }},释放磁盘空间共计 {{ .size }}" -ErrBadDecrypt: "压缩包解压密码错误,解压失败,请检查后重试!" +ErrBadDecrypt: "压缩包解压密码错误,解压失败,请检查后重试!!" #website ErrAliasIsExist: "代号已存在" @@ -263,7 +276,7 @@ WafIpGroupNotFound: "WAF IP组未找到,请先到【高级功能-WAF-黑白名 #toolbox ErrNotExistUser: "当前用户不存在,请修改后重试!" -ErrBanAction: "设置失败,当前 {{ .name }} 服务不可用,请检查后重试!" +ErrBanAction: "设置失败,当前 {{ .name }} 服务不可用,请检查后重试!!" ErrClamdscanNotFound: "未检测到 clamdscan 命令,请参考文档安装!" TaskSwapSet: "设置 Swap" SetSwap: "设置 Swap {{ .path }} - {{ .size }}" @@ -494,11 +507,11 @@ AppBackupFileIncomplete: "备份文件不完整 缺少 app.json 或者 app.tar. AppAttributesNotMatch: "应用类型或者名称不一致" #alert -ErrAlert: "告警信息格式错误,请检查后重试!" -ErrAlertPush: "告警信息推送错误,请检查后重试!" -ErrAlertSave: "告警信息保存错误,请检查后重试!" -ErrAlertSync: "告警信息同步错误,请检查后重试!" -ErrAlertRemote: "告警信息远端错误,请检查后重试!" +ErrAlert: "告警信息格式错误,请检查后重试!!" +ErrAlertPush: "告警信息推送错误,请检查后重试!!" +ErrAlertSave: "告警信息保存错误,请检查后重试!!" +ErrAlertSync: "告警信息同步错误,请检查后重试!!" +ErrAlertRemote: "告警信息远端错误,请检查后重试!!" #task - runtime ErrInstallExtension: "已有安装任务正在进行,请等待任务结束" @@ -528,4 +541,4 @@ PartitionDiskErr: "分区失败,{{ .err }}" FormatDiskErr: "格式化磁盘失败,{{ .err }}" MountDiskErr: "挂载磁盘失败,{{ .err }}" UnMountDiskErr: "卸载磁盘失败,{{ .err }}" -XfsNotFound: "未检测到 xfs 文件系统,请先安装 xfsprogs" \ No newline at end of file +XfsNotFound: "未检测到 xfs 文件系统,请先安装 xfsprogs" diff --git a/core/constant/common.go b/core/constant/common.go index a44fdb036121..4086d9f7d187 100644 --- a/core/constant/common.go +++ b/core/constant/common.go @@ -64,6 +64,8 @@ var WebUrlMap = map[string]struct{}{ "/ai/mcp": {}, "/ai/model/tensorrt": {}, "/ai/model/ollama": {}, + "/ai/agents/agent": {}, + "/ai/agents/model": {}, "/containers": {}, "/containers/container/operate": {}, diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 8fcbbbfc40a3..a511c1844d9e 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -687,6 +687,8 @@ const message = { accountName: 'Account Name', accountList: 'Account List', createAccount: 'Create Account', + noAccountHint: 'Choose an existing account or add a new one.', + accountCount: '{0} accounts', syncAgents: 'Sync related agents', syncAgentsHelper: 'Update openclaw.json for agents using this account', appVersion: 'App Version', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index 1239888acb49..529a45b03fa1 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -683,6 +683,8 @@ const message = { accountName: 'Account Name', accountList: 'Account List', createAccount: 'Create Account', + noAccountHint: 'Selecciona una cuenta existente o agrega una nueva.', + accountCount: '{0} cuentas', syncAgents: 'Sync related agents', syncAgentsHelper: 'Update openclaw.json for agents using this account', appVersion: 'App Version', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 543ed5b6e626..80d3e982d6d9 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -672,6 +672,8 @@ const message = { accountName: 'Account Name', accountList: 'Account List', createAccount: 'Create Account', + noAccountHint: '既存のアカウントを選択するか、新規に追加してください。', + accountCount: 'アカウント {0} 件', syncAgents: 'Sync related agents', syncAgentsHelper: 'Update openclaw.json for agents using this account', appVersion: 'App Version', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 7a0a11c7e785..0508d8ef6055 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -669,6 +669,8 @@ const message = { accountName: 'Account Name', accountList: 'Account List', createAccount: 'Create Account', + noAccountHint: '기존 계정을 선택하거나 새로 추가하세요.', + accountCount: '계정 {0}개', syncAgents: 'Sync related agents', syncAgentsHelper: 'Update openclaw.json for agents using this account', appVersion: 'App Version', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 8918f5490875..e9439fa0f34c 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -684,6 +684,8 @@ const message = { accountName: 'Account Name', accountList: 'Account List', createAccount: 'Create Account', + noAccountHint: 'Pilih akaun sedia ada atau tambah yang baharu.', + accountCount: 'Akaun {0}', syncAgents: 'Sync related agents', syncAgentsHelper: 'Update openclaw.json for agents using this account', appVersion: 'App Version', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 02e56d34b494..b4b2e1e47430 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -681,6 +681,8 @@ const message = { accountName: 'Account Name', accountList: 'Account List', createAccount: 'Create Account', + noAccountHint: 'Selecione uma conta existente ou adicione uma nova.', + accountCount: '{0} contas', syncAgents: 'Sync related agents', syncAgentsHelper: 'Update openclaw.json for agents using this account', appVersion: 'App Version', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index fcf47e198f00..75b1248b00fd 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -677,6 +677,8 @@ const message = { accountName: 'Account Name', accountList: 'Account List', createAccount: 'Create Account', + noAccountHint: 'Выберите существующий аккаунт или добавьте новый.', + accountCount: '{0} аккаунтов', syncAgents: 'Sync related agents', syncAgentsHelper: 'Update openclaw.json for agents using this account', appVersion: 'App Version', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index fa9f7435bc9b..e08b28dbd856 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -691,6 +691,8 @@ const message = { accountName: 'Account Name', accountList: 'Account List', createAccount: 'Create Account', + noAccountHint: 'Mevcut bir hesabı seçin veya yeni bir tane ekleyin.', + accountCount: '{0} hesap', syncAgents: 'Sync related agents', syncAgentsHelper: 'Update openclaw.json for agents using this account', appVersion: 'App Version', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index 4a7315469e41..53c68bd4183f 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -659,6 +659,8 @@ const message = { accountName: 'Account Name', accountList: 'Account List', createAccount: 'Create Account', + noAccountHint: '選擇已有帳號,或直接新增', + accountCount: '帳號 {0} 個', syncAgents: 'Sync related agents', syncAgentsHelper: 'Update openclaw.json for agents using this account', appVersion: 'App Version', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index a330ca39bd84..ed259e12ba74 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -660,7 +660,8 @@ const message = { account: '账号', accountName: '账号名称', accountList: '账号列表', - createAccount: '创建账号', + noAccountHint: '选择已有账号,或者直接添加。', + accountCount: '账号 {0} 个', syncAgents: '同步关联智能体', syncAgentsHelper: '更新使用该账号的智能体 openclaw.json', appVersion: '应用版本', diff --git a/frontend/src/views/ai/agents/agent/add/index.vue b/frontend/src/views/ai/agents/agent/add/index.vue index 5d5d2e493db2..b495841a2eb3 100644 --- a/frontend/src/views/ai/agents/agent/add/index.vue +++ b/frontend/src/views/ai/agents/agent/add/index.vue @@ -1,63 +1,81 @@