chore: update dependencies (#12979)

This commit is contained in:
CityFun
2026-06-09 18:53:37 +08:00
committed by GitHub
parent ed30567a22
commit 94cb014598
34 changed files with 1289 additions and 730 deletions

View File

@@ -106,8 +106,13 @@ type IAgentService interface {
}
type batchUpgradePlan struct {
agent model.Agent
req request.AppInstallUpgrade
ctx batchAgentInstallContext
req request.AppInstallUpgrade
}
type batchAgentInstallContext struct {
agent model.Agent
install model.AppInstall
}
const (
@@ -333,9 +338,9 @@ func (a AgentService) BatchUpgrade(req dto.AgentBatchUpgradeReq) ([]dto.AgentBat
}
for _, plan := range plans {
result := dto.AgentBatchUpgradeResult{
AgentID: plan.agent.ID,
AgentName: plan.agent.Name,
AppInstallID: plan.agent.AppInstallID,
AgentID: plan.ctx.agent.ID,
AgentName: plan.ctx.agent.Name,
AppInstallID: plan.ctx.agent.AppInstallID,
}
if err := upgradeInstall(plan.req); err != nil {
result.Message = err.Error()
@@ -361,9 +366,7 @@ func (a AgentService) BatchInstallSkill(req dto.AgentBatchSkillInstallReq) ([]dt
return nil, fmt.Errorf("only .zip skill packages can be installed")
}
skillName := sanitizeLocalSkillDirName(req.SkillName, packagePath, req.SkillName)
agents, err := agentRepo.List(func(db *gorm.DB) *gorm.DB {
return db.Where("agent_type = ?", req.AgentType).Order("id ASC")
})
agents, err := listBatchAgents(req.AgentType)
if err != nil {
return nil, err
}
@@ -374,23 +377,14 @@ func (a AgentService) BatchInstallSkill(req dto.AgentBatchSkillInstallReq) ([]dt
AgentName: agent.Name,
AppInstallID: agent.AppInstallID,
}
if agent.AppInstallID == 0 {
result.Message = "agent app install id is empty"
results = append(results, result)
continue
}
install, err := appInstallRepo.GetFirst(repo.WithByID(agent.AppInstallID))
if err != nil {
result.Message = err.Error()
ctx, message := loadBatchAgentInstall(agent, req.AgentType)
if message != "" {
result.Message = message
results = append(results, result)
continue
}
install := ctx.install
result.AppInstallID = install.ID
if install.App.Key != req.AgentType {
result.Message = fmt.Sprintf("app key %s does not match agent type %s", install.App.Key, req.AgentType)
results = append(results, result)
continue
}
if install.Status == constant.StatusInstalling || install.Status == constant.StatusUpgrading {
result.Message = fmt.Sprintf("agent status is %s", install.Status)
results = append(results, result)
@@ -407,8 +401,8 @@ func (a AgentService) BatchInstallSkill(req dto.AgentBatchSkillInstallReq) ([]dt
results = append(results, result)
continue
}
currentAgent := agent
currentInstall := install
currentAgent := ctx.agent
currentInstall := ctx.install
installTask.AddSubTask("Install local skill", func(t *task.Task) error {
mgr := cmd.NewCommandMgr(cmd.WithTask(*t), cmd.WithContext(t.TaskCtx), cmd.WithTimeout(20*time.Minute))
return installLocalSkillPackage(mgr, currentInstall.ContainerName, currentAgent.AgentType, currentAgent.ConfigPath, packagePath, skillName)
@@ -429,9 +423,7 @@ func (a AgentService) BatchOperate(req dto.AgentBatchOperateReq) ([]dto.AgentBat
if operate != constant.Start && operate != constant.Stop && operate != constant.Restart && operate != constant.Delete {
return nil, fmt.Errorf("operate %s is not supported", req.Operate)
}
agents, err := agentRepo.List(func(db *gorm.DB) *gorm.DB {
return db.Where("agent_type = ?", req.AgentType).Order("id ASC")
})
agents, err := listBatchAgents(req.AgentType)
if err != nil {
return nil, err
}
@@ -455,23 +447,14 @@ func (a AgentService) BatchOperate(req dto.AgentBatchOperateReq) ([]dto.AgentBat
results = append(results, result)
continue
}
if agent.AppInstallID == 0 {
result.Message = "agent app install id is empty"
results = append(results, result)
continue
}
install, err := appInstallRepo.GetFirst(repo.WithByID(agent.AppInstallID))
if err != nil {
result.Message = err.Error()
ctx, message := loadBatchAgentInstall(agent, req.AgentType)
if message != "" {
result.Message = message
results = append(results, result)
continue
}
install := ctx.install
result.AppInstallID = install.ID
if install.App.Key != req.AgentType {
result.Message = fmt.Sprintf("app key %s does not match agent type %s", install.App.Key, req.AgentType)
results = append(results, result)
continue
}
if message := batchOperateSkipMessage(operate, install.Status); message != "" {
result.Success = true
result.Skipped = true
@@ -493,10 +476,30 @@ func (a AgentService) BatchOperate(req dto.AgentBatchOperateReq) ([]dto.AgentBat
return results, nil
}
func buildBatchUpgradePlans(req dto.AgentBatchUpgradeReq) ([]batchUpgradePlan, []dto.AgentBatchUpgradeResult, error) {
agents, err := agentRepo.List(func(db *gorm.DB) *gorm.DB {
return db.Where("agent_type = ?", req.AgentType).Order("id ASC")
func listBatchAgents(agentType string) ([]model.Agent, error) {
return agentRepo.List(func(db *gorm.DB) *gorm.DB {
return db.Where("agent_type = ?", agentType).Order("id ASC")
})
}
func loadBatchAgentInstall(agent model.Agent, agentType string) (batchAgentInstallContext, string) {
ctx := batchAgentInstallContext{agent: agent}
if agent.AppInstallID == 0 {
return ctx, "agent app install id is empty"
}
install, err := appInstallRepo.GetFirst(repo.WithByID(agent.AppInstallID))
if err != nil {
return ctx, err.Error()
}
ctx.install = install
if install.App.Key != agentType {
return ctx, fmt.Sprintf("app key %s does not match agent type %s", install.App.Key, agentType)
}
return ctx, ""
}
func buildBatchUpgradePlans(req dto.AgentBatchUpgradeReq) ([]batchUpgradePlan, []dto.AgentBatchUpgradeResult, error) {
agents, err := listBatchAgents(req.AgentType)
if err != nil {
return nil, nil, err
}
@@ -508,23 +511,14 @@ func buildBatchUpgradePlans(req dto.AgentBatchUpgradeReq) ([]batchUpgradePlan, [
AgentName: agent.Name,
AppInstallID: agent.AppInstallID,
}
if agent.AppInstallID == 0 {
result.Message = "agent app install id is empty"
results = append(results, result)
continue
}
install, err := appInstallRepo.GetFirst(repo.WithByID(agent.AppInstallID))
if err != nil {
result.Message = err.Error()
ctx, message := loadBatchAgentInstall(agent, req.AgentType)
if message != "" {
result.Message = message
results = append(results, result)
continue
}
install := ctx.install
result.AppInstallID = install.ID
if install.App.Key != req.AgentType {
result.Message = fmt.Sprintf("app key %s does not match agent type %s", install.App.Key, req.AgentType)
results = append(results, result)
continue
}
if install.Status == constant.StatusInstalling || install.Status == constant.StatusUpgrading {
result.Message = fmt.Sprintf("agent status is %s", install.Status)
results = append(results, result)
@@ -549,7 +543,7 @@ func buildBatchUpgradePlans(req dto.AgentBatchUpgradeReq) ([]batchUpgradePlan, [
continue
}
plans = append(plans, batchUpgradePlan{
agent: agent,
ctx: ctx,
req: request.AppInstallUpgrade{
InstallID: install.ID,
DetailID: detail.ID,

View File

@@ -28,6 +28,7 @@ const clawhubGlobalRegistry = "https://clawhub.com"
const clawhubChinaRegistry = "https://mirror-cn.clawhub.com"
const localSkillHubSource = "local-hub"
const localSkillHubPublishedStatus = "published"
const clawHubSkillTmpSubDir = "1panel/tmp/clawhub-skills"
const hermesManagedSkillsDir = "/opt/data/skills"
type openclawSkillsList struct {
@@ -337,18 +338,7 @@ func validateLocalSkillPackagePath(packagePath string) (string, error) {
if err != nil {
return "", err
}
root := filepath.Join(global.CONF.Base.InstallDir, "1panel", "uploads", "skills-hub")
absRoot, err := filepath.Abs(root)
if err != nil {
return "", err
}
resolvedRoot, err := filepath.EvalSymlinks(absRoot)
if err != nil {
// upload directory may not exist yet on agent host; treat as invalid
return "", fmt.Errorf("invalid local skill package path")
}
rel, err := filepath.Rel(resolvedRoot, resolvedPath)
if err != nil || rel == "." || strings.HasPrefix(rel, ".."+string(os.PathSeparator)) || rel == ".." {
if !isLocalSkillPackageAllowedPath(resolvedPath) {
return "", fmt.Errorf("invalid local skill package path")
}
info, err := os.Stat(resolvedPath)
@@ -361,6 +351,32 @@ func validateLocalSkillPackagePath(packagePath string) (string, error) {
return resolvedPath, nil
}
func isLocalSkillPackageAllowedPath(resolvedPath string) bool {
roots := []string{
filepath.Join(global.CONF.Base.InstallDir, "1panel", "uploads", "skills-hub"),
filepath.Join(global.CONF.Base.InstallDir, filepath.FromSlash(clawHubSkillTmpSubDir)),
}
for _, root := range roots {
if isPathInsideResolvedRoot(resolvedPath, root) {
return true
}
}
return false
}
func isPathInsideResolvedRoot(resolvedPath, root string) bool {
absRoot, err := filepath.Abs(root)
if err != nil {
return false
}
resolvedRoot, err := filepath.EvalSymlinks(absRoot)
if err != nil {
return false
}
rel, err := filepath.Rel(resolvedRoot, resolvedPath)
return err == nil && rel != "." && rel != ".." && !strings.HasPrefix(rel, ".."+string(os.PathSeparator))
}
func normalizeLocalSkillInstallRoot(extractRoot, installRoot, skillName string) (string, string, error) {
entries, err := os.ReadDir(extractRoot)
if err != nil {

View File

@@ -16,7 +16,7 @@ require (
github.com/glebarez/sqlite v1.11.0
github.com/go-acme/lego/v5 v5.2.2
github.com/go-gormigrate/gormigrate/v2 v2.1.6
github.com/go-playground/validator/v10 v10.30.2
github.com/go-playground/validator/v10 v10.30.3
github.com/go-redis/redis v6.15.9+incompatible
github.com/go-resty/resty/v2 v2.17.2
github.com/go-sql-driver/mysql v1.10.0
@@ -50,12 +50,12 @@ require (
github.com/tomasen/fcgi_client v0.0.0-20180423082037-2bb3d819fd19
github.com/upyun/go-sdk v2.1.0+incompatible
go.mongodb.org/mongo-driver/v2 v2.6.0
golang.org/x/crypto v0.52.0
golang.org/x/crypto v0.53.0
golang.org/x/net v0.55.0
golang.org/x/oauth2 v0.36.0
golang.org/x/sync v0.20.0
golang.org/x/sys v0.45.0
golang.org/x/text v0.37.0
golang.org/x/sync v0.21.0
golang.org/x/sys v0.46.0
golang.org/x/text v0.38.0
golang.org/x/time v0.15.0
google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478
gopkg.in/ini.v1 v1.67.2
@@ -121,7 +121,6 @@ require (
github.com/go-acme/alidns-20150109/v5 v5.4.1 // indirect
github.com/go-acme/esa-20240910/v3 v3.2.2 // indirect
github.com/go-acme/tencentclouddnspod v1.3.24 // indirect
github.com/go-ini/ini v1.67.0 // indirect
github.com/go-jose/go-jose/v4 v4.1.4 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect

View File

@@ -228,9 +228,8 @@ github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73 h1:OGNva6Whs
github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz8=
github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/docker/cli v29.5.2+incompatible h1:ubykJ1Y8LmNRGJ2BuMQ0kHOt/RO1YzGNswqWMJgivuQ=
github.com/docker/cli v29.5.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM=
@@ -304,12 +303,8 @@ github.com/go-acme/tencentclouddnspod v1.3.24/go.mod h1:RKcB2wSoZncjBA0OEFj59s1k
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gormigrate/gormigrate/v2 v2.1.5 h1:1OyorA5LtdQw12cyJDEHuTrEV3GiXiIhS4/QTTa/SM8=
github.com/go-gormigrate/gormigrate/v2 v2.1.5/go.mod h1:mj9ekk/7CPF3VjopaFvWKN2v7fN3D9d3eEOAXRhi/+M=
github.com/go-gormigrate/gormigrate/v2 v2.1.6 h1:VtX+l1Stj2v5RGubVQk0LS/8EPGXR+ldcOyCmlmKoyg=
github.com/go-gormigrate/gormigrate/v2 v2.1.6/go.mod h1:PZpedQc4tWaxn6kvXicwhinh3L0seLpMc5ReKRX5id4=
github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=
github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA=
github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
@@ -339,8 +334,8 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-playground/validator/v10 v10.30.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ=
github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc=
github.com/go-playground/validator/v10 v10.30.3 h1:4MU6YkEwx7GbcPJOZxrtbu+QfF3pJLJuaYTeAH0DYy8=
github.com/go-playground/validator/v10 v10.30.3/go.mod h1:4Axh7oCNGcoGkqLoE4YWt6n20mcEIsPRlB7vPk3lpyc=
github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/go-resty/resty/v2 v2.17.2 h1:FQW5oHYcIlkCNrMD2lloGScxcHJ0gkjshV3qcQAyHQk=
@@ -613,8 +608,6 @@ github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLT
github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
github.com/minio/minio-go/v7 v7.1.0 h1:QEt5IStDpxgGjEdtOgpiZ5QhmSl3ax7qy61vi2SwHO8=
github.com/minio/minio-go/v7 v7.1.0/go.mod h1:Dm7WS1AgLmBa0NcQD6SeJnJf+K/EUW3GR7Ks6olB3OA=
github.com/minio/minio-go/v7 v7.2.0 h1:RCJM0R1XOsRs+A3x3UCaf3ZYbByDaLjFeAi+YCQEPhs=
github.com/minio/minio-go/v7 v7.2.0/go.mod h1:EU9hENAStx/xXduNdrGO5e4X5vk19NtgB+RIPjZO8o0=
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
@@ -980,8 +973,8 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988=
golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc=
golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1107,8 +1100,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1184,8 +1177,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -1199,8 +1192,8 @@ golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc=
golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1217,8 +1210,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

View File

@@ -74,7 +74,6 @@ const docTemplate = `{
"description": "OK",
"schema": {
"additionalProperties": {
"format": "int64",
"type": "integer"
},
"type": "object"
@@ -911,6 +910,167 @@ const docTemplate = `{
]
}
},
"/ai/agents/batch/install": {
"post": {
"consumes": [
"application/json"
],
"parameters": [
{
"description": "request",
"in": "body",
"name": "request",
"required": true,
"schema": {
"$ref": "#/definitions/dto.AgentBatchInstallReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.AgentItem"
}
}
},
"security": [
{
"ApiKeyAuth": []
},
{
"Timestamp": []
}
],
"summary": "Batch install Agent",
"tags": [
"AI"
]
}
},
"/ai/agents/batch/operate": {
"post": {
"consumes": [
"application/json"
],
"parameters": [
{
"description": "request",
"in": "body",
"name": "request",
"required": true,
"schema": {
"$ref": "#/definitions/dto.AgentBatchOperateReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"items": {
"$ref": "#/definitions/dto.AgentBatchOperateResult"
},
"type": "array"
}
}
},
"security": [
{
"ApiKeyAuth": []
},
{
"Timestamp": []
}
],
"summary": "Batch operate Agent",
"tags": [
"AI"
]
}
},
"/ai/agents/batch/skill/install": {
"post": {
"consumes": [
"application/json"
],
"parameters": [
{
"description": "request",
"in": "body",
"name": "request",
"required": true,
"schema": {
"$ref": "#/definitions/dto.AgentBatchSkillInstallReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"items": {
"$ref": "#/definitions/dto.AgentBatchSkillInstallResult"
},
"type": "array"
}
}
},
"security": [
{
"ApiKeyAuth": []
},
{
"Timestamp": []
}
],
"summary": "Batch install Agent Skill",
"tags": [
"AI"
]
}
},
"/ai/agents/batch/upgrade": {
"post": {
"consumes": [
"application/json"
],
"parameters": [
{
"description": "request",
"in": "body",
"name": "request",
"required": true,
"schema": {
"$ref": "#/definitions/dto.AgentBatchUpgradeReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"items": {
"$ref": "#/definitions/dto.AgentBatchUpgradeResult"
},
"type": "array"
}
}
},
"security": [
{
"ApiKeyAuth": []
},
{
"Timestamp": []
}
],
"summary": "Batch upgrade Agent",
"tags": [
"AI"
]
}
},
"/ai/agents/channel/delete": {
"post": {
"consumes": [
@@ -28131,6 +28291,53 @@ const docTemplate = `{
},
"type": "object"
},
"dto.AgentAccountInfo": {
"properties": {
"apiKey": {
"type": "string"
},
"apiType": {
"type": "string"
},
"baseUrl": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"id": {
"type": "integer"
},
"masterAccountId": {
"type": "integer"
},
"models": {
"items": {
"$ref": "#/definitions/dto.AgentAccountModel"
},
"type": "array"
},
"name": {
"type": "string"
},
"provider": {
"type": "string"
},
"providerName": {
"type": "string"
},
"remark": {
"type": "string"
},
"rememberApiKey": {
"type": "boolean"
},
"verified": {
"type": "boolean"
}
},
"type": "object"
},
"dto.AgentAccountModel": {
"properties": {
"contextWindow": {
@@ -45142,4 +45349,4 @@ var SwaggerInfo = &swag.Spec{
func init() {
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
}
}

View File

@@ -70,7 +70,6 @@
"description": "OK",
"schema": {
"additionalProperties": {
"format": "int64",
"type": "integer"
},
"type": "object"
@@ -907,6 +906,167 @@
]
}
},
"/ai/agents/batch/install": {
"post": {
"consumes": [
"application/json"
],
"parameters": [
{
"description": "request",
"in": "body",
"name": "request",
"required": true,
"schema": {
"$ref": "#/definitions/dto.AgentBatchInstallReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.AgentItem"
}
}
},
"security": [
{
"ApiKeyAuth": []
},
{
"Timestamp": []
}
],
"summary": "Batch install Agent",
"tags": [
"AI"
]
}
},
"/ai/agents/batch/operate": {
"post": {
"consumes": [
"application/json"
],
"parameters": [
{
"description": "request",
"in": "body",
"name": "request",
"required": true,
"schema": {
"$ref": "#/definitions/dto.AgentBatchOperateReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"items": {
"$ref": "#/definitions/dto.AgentBatchOperateResult"
},
"type": "array"
}
}
},
"security": [
{
"ApiKeyAuth": []
},
{
"Timestamp": []
}
],
"summary": "Batch operate Agent",
"tags": [
"AI"
]
}
},
"/ai/agents/batch/skill/install": {
"post": {
"consumes": [
"application/json"
],
"parameters": [
{
"description": "request",
"in": "body",
"name": "request",
"required": true,
"schema": {
"$ref": "#/definitions/dto.AgentBatchSkillInstallReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"items": {
"$ref": "#/definitions/dto.AgentBatchSkillInstallResult"
},
"type": "array"
}
}
},
"security": [
{
"ApiKeyAuth": []
},
{
"Timestamp": []
}
],
"summary": "Batch install Agent Skill",
"tags": [
"AI"
]
}
},
"/ai/agents/batch/upgrade": {
"post": {
"consumes": [
"application/json"
],
"parameters": [
{
"description": "request",
"in": "body",
"name": "request",
"required": true,
"schema": {
"$ref": "#/definitions/dto.AgentBatchUpgradeReq"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"items": {
"$ref": "#/definitions/dto.AgentBatchUpgradeResult"
},
"type": "array"
}
}
},
"security": [
{
"ApiKeyAuth": []
},
{
"Timestamp": []
}
],
"summary": "Batch upgrade Agent",
"tags": [
"AI"
]
}
},
"/ai/agents/channel/delete": {
"post": {
"consumes": [
@@ -28127,6 +28287,53 @@
},
"type": "object"
},
"dto.AgentAccountInfo": {
"properties": {
"apiKey": {
"type": "string"
},
"apiType": {
"type": "string"
},
"baseUrl": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"id": {
"type": "integer"
},
"masterAccountId": {
"type": "integer"
},
"models": {
"items": {
"$ref": "#/definitions/dto.AgentAccountModel"
},
"type": "array"
},
"name": {
"type": "string"
},
"provider": {
"type": "string"
},
"providerName": {
"type": "string"
},
"remark": {
"type": "string"
},
"rememberApiKey": {
"type": "boolean"
},
"verified": {
"type": "boolean"
}
},
"type": "object"
},
"dto.AgentAccountModel": {
"properties": {
"contextWindow": {

View File

@@ -10,7 +10,7 @@ require (
github.com/gin-gonic/gin v1.12.0
github.com/glebarez/sqlite v1.11.0
github.com/go-gormigrate/gormigrate/v2 v2.1.6
github.com/go-playground/validator/v10 v10.30.2
github.com/go-playground/validator/v10 v10.30.3
github.com/go-resty/resty/v2 v2.17.2
github.com/go-webauthn/webauthn v0.17.4
github.com/google/uuid v1.6.0
@@ -31,11 +31,11 @@ require (
github.com/swaggo/files/v2 v2.0.2
github.com/swaggo/swag v1.16.6
github.com/xlzd/gotp v0.1.0
golang.org/x/crypto v0.52.0
golang.org/x/crypto v0.53.0
golang.org/x/net v0.55.0
golang.org/x/sys v0.45.0
golang.org/x/term v0.43.0
golang.org/x/text v0.37.0
golang.org/x/sys v0.46.0
golang.org/x/term v0.44.0
golang.org/x/text v0.38.0
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
gorm.io/gorm v1.31.1
@@ -101,9 +101,9 @@ require (
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/arch v0.26.0 // indirect
golang.org/x/image v0.39.0 // indirect
golang.org/x/mod v0.35.0 // indirect
golang.org/x/sync v0.20.0 // indirect
golang.org/x/tools v0.44.0 // indirect
golang.org/x/mod v0.36.0 // indirect
golang.org/x/sync v0.21.0 // indirect
golang.org/x/tools v0.45.0 // indirect
google.golang.org/protobuf v1.36.11 // indirect
modernc.org/libc v1.72.0 // indirect
modernc.org/mathutil v1.7.1 // indirect

View File

@@ -22,12 +22,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho=
github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo=
github.com/fxamacker/cbor/v2 v2.9.1 h1:2rWm8B193Ll4VdjsJY28jxs70IdDsHRWgQYAI80+rMQ=
github.com/fxamacker/cbor/v2 v2.9.1/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
github.com/fxamacker/cbor/v2 v2.9.2 h1:X4Ksno9+x3cz0TZv69ec1hxP/+tymuR8PXQJyDwfh78=
github.com/fxamacker/cbor/v2 v2.9.2/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM=
@@ -42,8 +38,6 @@ github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec
github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw=
github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ=
github.com/go-gormigrate/gormigrate/v2 v2.1.5 h1:1OyorA5LtdQw12cyJDEHuTrEV3GiXiIhS4/QTTa/SM8=
github.com/go-gormigrate/gormigrate/v2 v2.1.5/go.mod h1:mj9ekk/7CPF3VjopaFvWKN2v7fN3D9d3eEOAXRhi/+M=
github.com/go-gormigrate/gormigrate/v2 v2.1.6 h1:VtX+l1Stj2v5RGubVQk0LS/8EPGXR+ldcOyCmlmKoyg=
github.com/go-gormigrate/gormigrate/v2 v2.1.6/go.mod h1:PZpedQc4tWaxn6kvXicwhinh3L0seLpMc5ReKRX5id4=
github.com/go-openapi/jsonpointer v0.23.0 h1:c25HFTJ6uWGmoe5BQI6p72p4o7KnlWYsy1MeFlAumsw=
@@ -79,18 +73,14 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.30.2 h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ=
github.com/go-playground/validator/v10 v10.30.2/go.mod h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc=
github.com/go-playground/validator/v10 v10.30.3 h1:4MU6YkEwx7GbcPJOZxrtbu+QfF3pJLJuaYTeAH0DYy8=
github.com/go-playground/validator/v10 v10.30.3/go.mod h1:4Axh7oCNGcoGkqLoE4YWt6n20mcEIsPRlB7vPk3lpyc=
github.com/go-resty/resty/v2 v2.17.2 h1:FQW5oHYcIlkCNrMD2lloGScxcHJ0gkjshV3qcQAyHQk=
github.com/go-resty/resty/v2 v2.17.2/go.mod h1:kCKZ3wWmwJaNc7S29BRtUhJwy7iqmn+2mLtQrOyQlVA=
github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro=
github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/go-webauthn/webauthn v0.16.4 h1:R9jqR/cYZa7hRquFF7Za/8qoH/K/TIs1/Q/4CyGN+1Q=
github.com/go-webauthn/webauthn v0.16.4/go.mod h1:SU2ljAgToTV/YLPI0C05QS4qn+e04WpB5g1RMfcZfS4=
github.com/go-webauthn/webauthn v0.17.4 h1:KFTSz3R2RYDiUn/0cDi3XTJgFenSG74eKTTHlqWhlxk=
github.com/go-webauthn/webauthn v0.17.4/go.mod h1:pZk63EE/BdztlmyS4Yc+9H5g4a8blNlbtGmdHQHbZX8=
github.com/go-webauthn/x v0.2.3 h1:8oArS+Rc1SWFLXhE17KZNx258Z4kUSyaDgsSncCO5RA=
github.com/go-webauthn/x v0.2.3/go.mod h1:tM04GF3V6VYq79AZMl7vbj4q6pz9r7L2criWRzbWhPk=
github.com/go-webauthn/x v0.2.6 h1:TEyDuQAIiEgYpx60nKiBJIX/5nSUC8LxNbH+uf5U9uk=
github.com/go-webauthn/x v0.2.6/go.mod h1:45bA7YEqyQhRcQJ/TiBb46Ww8yqHBGvgEhQ3WWF0aDo=
github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU=
@@ -233,34 +223,34 @@ golang.org/x/arch v0.26.0 h1:jZ6dpec5haP/fUv1kLCbuJy6dnRrfX6iVK08lZBFpk4=
golang.org/x/arch v0.26.0/go.mod h1:0X+GdSIP+kL5wPmpK7sdkEVTt2XoYP0cSjQSbZBwOi8=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988=
golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc=
golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
golang.org/x/image v0.39.0 h1:skVYidAEVKgn8lZ602XO75asgXBgLj9G/FE3RbuPFww=
golang.org/x/image v0.39.0/go.mod h1:sIbmppfU+xFLPIG0FoVUTvyBMmgng1/XAMhQ2ft0hpA=
golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc=
golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8=
golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View File

@@ -140,8 +140,23 @@ BatchInstallAgent: "Batch install agent"
DispatchAgentInstallTasks: "Dispatch agent install tasks"
BatchUpgradeAgent: "Batch upgrade agent"
DispatchAgentUpgradeTasks: "Dispatch agent upgrade tasks"
BatchAgentInstallDispatchFailed: "Node {{ .node }} failed to dispatch {{ .agentType }} install task Message: {{ .err }}"
BatchAgentInstallSubmitted: "Node {{ .node }} dispatched {{ .agentType }} install task successfully!"
BatchAgentUpgradeDispatchFailed: "Node {{ .node }} failed to dispatch {{ .agentType }} upgrade task Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "Node {{ .node }} {{ .agent }} is already at the target version, skipped"
BatchAgentUpgradeSubmitted: "Node {{ .node }} dispatched {{ .agent }} upgrade task successfully!"
BatchAgentUpgradeFailed: "Node {{ .node }} failed to dispatch {{ .agent }} upgrade task Message: {{ .err }}"
BatchInstallAgentSkill: "Batch distribute Skill"
DispatchAgentSkillInstallTasks: "Dispatch Skill install tasks"
BatchAgentSkillDispatchFailed: "Node {{ .node }} failed to dispatch {{ .skill }} to {{ .target }} Message: {{ .err }}"
BatchAgentNoAgentsFound: "Node {{ .node }} found no {{ .agentType }} agents, skipped"
BatchAgentSkillSkipped: "Node {{ .node }} {{ .agent }} skipped Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "Node {{ .node }} dispatched {{ .skill }} install task to {{ .agent }} successfully!"
BatchAgentSkillInstallFailed: "Node {{ .node }} failed to dispatch {{ .skill }} install task to {{ .agent }} Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "Node {{ .node }} failed to dispatch {{ .agentType }} {{ .operate }} task Message: {{ .err }}"
BatchAgentOperateSkipped: "Node {{ .node }} {{ .agent }} skipped Message: {{ .msg }}"
BatchAgentOperateSubmitted: "Node {{ .node }} dispatched {{ .agent }} {{ .operate }} task successfully!"
BatchAgentOperateFailed: "Node {{ .node }} failed to dispatch {{ .agent }} {{ .operate }} task Message: {{ .err }}"
BatchStartAgent: "Batch start agent"
DispatchAgentStartTasks: "Dispatch agent start tasks"
BatchStopAgent: "Batch stop agent"

View File

@@ -140,8 +140,23 @@ BatchInstallAgent: "Instalación masiva de agentes"
DispatchAgentInstallTasks: "Enviar tareas de instalación de agentes"
BatchUpgradeAgent: "Actualización masiva de agentes"
DispatchAgentUpgradeTasks: "Enviar tareas de actualización de agentes"
BatchAgentInstallDispatchFailed: "Nodo {{ .node }} no pudo distribuir la tarea de instalación de {{ .agentType }} Message: {{ .err }}"
BatchAgentInstallSubmitted: "Nodo {{ .node }} distribuyó la tarea de instalación de {{ .agentType }} correctamente!"
BatchAgentUpgradeDispatchFailed: "Nodo {{ .node }} no pudo distribuir la tarea de actualización de {{ .agentType }} Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "Nodo {{ .node }} {{ .agent }} ya está en la versión objetivo, omitido"
BatchAgentUpgradeSubmitted: "Nodo {{ .node }} distribuyó la tarea de actualización de {{ .agent }} correctamente!"
BatchAgentUpgradeFailed: "Nodo {{ .node }} no pudo distribuir la tarea de actualización de {{ .agent }} Message: {{ .err }}"
BatchInstallAgentSkill: "Distribuir Skill por lotes"
DispatchAgentSkillInstallTasks: "Enviar tareas de instalación de Skill"
BatchAgentSkillDispatchFailed: "Nodo {{ .node }} no pudo distribuir {{ .skill }} a {{ .target }} Message: {{ .err }}"
BatchAgentNoAgentsFound: "Nodo {{ .node }} no encontró agentes {{ .agentType }}, omitido"
BatchAgentSkillSkipped: "Nodo {{ .node }} {{ .agent }} omitido Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "Nodo {{ .node }} distribuyó la tarea de instalación de {{ .skill }} a {{ .agent }} correctamente!"
BatchAgentSkillInstallFailed: "Nodo {{ .node }} no pudo distribuir la tarea de instalación de {{ .skill }} a {{ .agent }} Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "Nodo {{ .node }} no pudo distribuir la tarea {{ .operate }} de {{ .agentType }} Message: {{ .err }}"
BatchAgentOperateSkipped: "Nodo {{ .node }} {{ .agent }} omitido Message: {{ .msg }}"
BatchAgentOperateSubmitted: "Nodo {{ .node }} distribuyó la tarea {{ .operate }} de {{ .agent }} correctamente!"
BatchAgentOperateFailed: "Nodo {{ .node }} no pudo distribuir la tarea {{ .operate }} de {{ .agent }} Message: {{ .err }}"
BatchStartAgent: "Inicio masivo de agentes"
DispatchAgentStartTasks: "Enviar tareas de inicio de agentes"
BatchStopAgent: "Detención masiva de agentes"

View File

@@ -135,8 +135,23 @@ BatchInstallAgent: "エージェントの一括インストール"
DispatchAgentInstallTasks: "エージェントインストールタスクを配信"
BatchUpgradeAgent: "エージェントの一括アップグレード"
DispatchAgentUpgradeTasks: "エージェントアップグレードタスクを配信"
BatchAgentInstallDispatchFailed: "ノード {{ .node }} で {{ .agentType }} のインストールタスクを配信できませんでした Message: {{ .err }}"
BatchAgentInstallSubmitted: "ノード {{ .node }} で {{ .agentType }} のインストールタスクを配信しました!"
BatchAgentUpgradeDispatchFailed: "ノード {{ .node }} で {{ .agentType }} のアップグレードタスクを配信できませんでした Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "ノード {{ .node }} の {{ .agent }} は既にターゲットバージョンです。スキップしました"
BatchAgentUpgradeSubmitted: "ノード {{ .node }} で {{ .agent }} のアップグレードタスクを配信しました!"
BatchAgentUpgradeFailed: "ノード {{ .node }} で {{ .agent }} のアップグレードタスクを配信できませんでした Message: {{ .err }}"
BatchInstallAgentSkill: "Skill 一括配布"
DispatchAgentSkillInstallTasks: "Skill インストールタスクを配信"
BatchAgentSkillDispatchFailed: "ノード {{ .node }} で {{ .skill }} を {{ .target }} に配信できませんでした Message: {{ .err }}"
BatchAgentNoAgentsFound: "ノード {{ .node }} に {{ .agentType }} エージェントが見つかりません。スキップしました"
BatchAgentSkillSkipped: "ノード {{ .node }} の {{ .agent }} をスキップしました Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "ノード {{ .node }} で {{ .skill }} のインストールタスクを {{ .agent }} に配信しました!"
BatchAgentSkillInstallFailed: "ノード {{ .node }} で {{ .skill }} のインストールタスクを {{ .agent }} に配信できませんでした Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "ノード {{ .node }} で {{ .agentType }} の{{ .operate }}タスクを配信できませんでした Message: {{ .err }}"
BatchAgentOperateSkipped: "ノード {{ .node }} の {{ .agent }} をスキップしました Message: {{ .msg }}"
BatchAgentOperateSubmitted: "ノード {{ .node }} で {{ .agent }} の{{ .operate }}タスクを配信しました!"
BatchAgentOperateFailed: "ノード {{ .node }} で {{ .agent }} の{{ .operate }}タスクを配信できませんでした Message: {{ .err }}"
BatchStartAgent: "エージェントの一括起動"
DispatchAgentStartTasks: "エージェント起動タスクを配信"
BatchStopAgent: "エージェントの一括停止"

View File

@@ -134,8 +134,23 @@ BatchInstallAgent: "에이전트 일괄 설치"
DispatchAgentInstallTasks: "에이전트 설치 작업 배포"
BatchUpgradeAgent: "에이전트 일괄 업그레이드"
DispatchAgentUpgradeTasks: "에이전트 업그레이드 작업 배포"
BatchAgentInstallDispatchFailed: "{{ .node }} 노드에서 {{ .agentType }} 설치 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentInstallSubmitted: "{{ .node }} 노드에서 {{ .agentType }} 설치 작업을 배포했습니다!"
BatchAgentUpgradeDispatchFailed: "{{ .node }} 노드에서 {{ .agentType }} 업그레이드 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "{{ .node }} 노드 {{ .agent }}은(는) 이미 대상 버전이라 건너뜁니다"
BatchAgentUpgradeSubmitted: "{{ .node }} 노드에서 {{ .agent }} 업그레이드 작업을 배포했습니다!"
BatchAgentUpgradeFailed: "{{ .node }} 노드에서 {{ .agent }} 업그레이드 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchInstallAgentSkill: "Skill 일괄 배포"
DispatchAgentSkillInstallTasks: "Skill 설치 작업 배포"
BatchAgentSkillDispatchFailed: "{{ .node }} 노드에서 {{ .skill }}을(를) {{ .target }}에 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentNoAgentsFound: "{{ .node }} 노드에서 {{ .agentType }} 에이전트를 찾지 못해 건너뜁니다"
BatchAgentSkillSkipped: "{{ .node }} 노드 {{ .agent }} 건너뜀 Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "{{ .node }} 노드에서 {{ .skill }} 설치 작업을 {{ .agent }}에 배포했습니다!"
BatchAgentSkillInstallFailed: "{{ .node }} 노드에서 {{ .skill }} 설치 작업을 {{ .agent }}에 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "{{ .node }} 노드에서 {{ .agentType }} {{ .operate }} 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchAgentOperateSkipped: "{{ .node }} 노드 {{ .agent }} 건너뜀 Message: {{ .msg }}"
BatchAgentOperateSubmitted: "{{ .node }} 노드에서 {{ .agent }} {{ .operate }} 작업을 배포했습니다!"
BatchAgentOperateFailed: "{{ .node }} 노드에서 {{ .agent }} {{ .operate }} 작업을 배포하지 못했습니다 Message: {{ .err }}"
BatchStartAgent: "에이전트 일괄 시작"
DispatchAgentStartTasks: "에이전트 시작 작업 배포"
BatchStopAgent: "에이전트 일괄 중지"

View File

@@ -129,8 +129,23 @@ BatchInstallAgent: "Pasang ejen secara pukal"
DispatchAgentInstallTasks: "Hantar tugas pemasangan ejen"
BatchUpgradeAgent: "Naik taraf ejen secara pukal"
DispatchAgentUpgradeTasks: "Hantar tugas naik taraf ejen"
BatchAgentInstallDispatchFailed: "Nod {{ .node }} gagal menghantar tugas pemasangan {{ .agentType }} Message: {{ .err }}"
BatchAgentInstallSubmitted: "Nod {{ .node }} berjaya menghantar tugas pemasangan {{ .agentType }}!"
BatchAgentUpgradeDispatchFailed: "Nod {{ .node }} gagal menghantar tugas naik taraf {{ .agentType }} Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "Nod {{ .node }} {{ .agent }} sudah pada versi sasaran, dilangkau"
BatchAgentUpgradeSubmitted: "Nod {{ .node }} berjaya menghantar tugas naik taraf {{ .agent }}!"
BatchAgentUpgradeFailed: "Nod {{ .node }} gagal menghantar tugas naik taraf {{ .agent }} Message: {{ .err }}"
BatchInstallAgentSkill: "Hantar Skill secara pukal"
DispatchAgentSkillInstallTasks: "Hantar tugas pemasangan Skill"
BatchAgentSkillDispatchFailed: "Nod {{ .node }} gagal menghantar {{ .skill }} ke {{ .target }} Message: {{ .err }}"
BatchAgentNoAgentsFound: "Nod {{ .node }} tidak menemui ejen {{ .agentType }}, dilangkau"
BatchAgentSkillSkipped: "Nod {{ .node }} {{ .agent }} dilangkau Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "Nod {{ .node }} berjaya menghantar tugas pemasangan {{ .skill }} ke {{ .agent }}!"
BatchAgentSkillInstallFailed: "Nod {{ .node }} gagal menghantar tugas pemasangan {{ .skill }} ke {{ .agent }} Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "Nod {{ .node }} gagal menghantar tugas {{ .operate }} {{ .agentType }} Message: {{ .err }}"
BatchAgentOperateSkipped: "Nod {{ .node }} {{ .agent }} dilangkau Message: {{ .msg }}"
BatchAgentOperateSubmitted: "Nod {{ .node }} berjaya menghantar tugas {{ .operate }} {{ .agent }}!"
BatchAgentOperateFailed: "Nod {{ .node }} gagal menghantar tugas {{ .operate }} {{ .agent }} Message: {{ .err }}"
BatchStartAgent: "Mula ejen secara pukal"
DispatchAgentStartTasks: "Hantar tugas mula ejen"
BatchStopAgent: "Henti ejen secara pukal"

View File

@@ -134,8 +134,23 @@ BatchInstallAgent: "Instalar agentes em lote"
DispatchAgentInstallTasks: "Distribuir tarefas de instalação de agentes"
BatchUpgradeAgent: "Atualizar agentes em lote"
DispatchAgentUpgradeTasks: "Distribuir tarefas de atualização de agentes"
BatchAgentInstallDispatchFailed: "Nó {{ .node }} falhou ao distribuir a tarefa de instalação de {{ .agentType }} Message: {{ .err }}"
BatchAgentInstallSubmitted: "Nó {{ .node }} distribuiu a tarefa de instalação de {{ .agentType }} com sucesso!"
BatchAgentUpgradeDispatchFailed: "Nó {{ .node }} falhou ao distribuir a tarefa de atualização de {{ .agentType }} Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "Nó {{ .node }} {{ .agent }} já está na versão de destino, ignorado"
BatchAgentUpgradeSubmitted: "Nó {{ .node }} distribuiu a tarefa de atualização de {{ .agent }} com sucesso!"
BatchAgentUpgradeFailed: "Nó {{ .node }} falhou ao distribuir a tarefa de atualização de {{ .agent }} Message: {{ .err }}"
BatchInstallAgentSkill: "Distribuir Skill em lote"
DispatchAgentSkillInstallTasks: "Distribuir tarefas de instalação de Skill"
BatchAgentSkillDispatchFailed: "Nó {{ .node }} falhou ao distribuir {{ .skill }} para {{ .target }} Message: {{ .err }}"
BatchAgentNoAgentsFound: "Nó {{ .node }} não encontrou agentes {{ .agentType }}, ignorado"
BatchAgentSkillSkipped: "Nó {{ .node }} {{ .agent }} ignorado Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "Nó {{ .node }} distribuiu a tarefa de instalação de {{ .skill }} para {{ .agent }} com sucesso!"
BatchAgentSkillInstallFailed: "Nó {{ .node }} falhou ao distribuir a tarefa de instalação de {{ .skill }} para {{ .agent }} Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "Nó {{ .node }} falhou ao distribuir a tarefa {{ .operate }} de {{ .agentType }} Message: {{ .err }}"
BatchAgentOperateSkipped: "Nó {{ .node }} {{ .agent }} ignorado Message: {{ .msg }}"
BatchAgentOperateSubmitted: "Nó {{ .node }} distribuiu a tarefa {{ .operate }} de {{ .agent }} com sucesso!"
BatchAgentOperateFailed: "Nó {{ .node }} falhou ao distribuir a tarefa {{ .operate }} de {{ .agent }} Message: {{ .err }}"
BatchStartAgent: "Iniciar agentes em lote"
DispatchAgentStartTasks: "Distribuir tarefas de início de agentes"
BatchStopAgent: "Parar agentes em lote"

View File

@@ -134,8 +134,23 @@ BatchInstallAgent: "Пакетная установка агентов"
DispatchAgentInstallTasks: "Отправить задачи установки агентов"
BatchUpgradeAgent: "Пакетное обновление агентов"
DispatchAgentUpgradeTasks: "Отправить задачи обновления агентов"
BatchAgentInstallDispatchFailed: "Узел {{ .node }} не смог отправить задачу установки {{ .agentType }} Message: {{ .err }}"
BatchAgentInstallSubmitted: "Узел {{ .node }} успешно отправил задачу установки {{ .agentType }}!"
BatchAgentUpgradeDispatchFailed: "Узел {{ .node }} не смог отправить задачу обновления {{ .agentType }} Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "Узел {{ .node }} {{ .agent }} уже на целевой версии, пропущено"
BatchAgentUpgradeSubmitted: "Узел {{ .node }} успешно отправил задачу обновления {{ .agent }}!"
BatchAgentUpgradeFailed: "Узел {{ .node }} не смог отправить задачу обновления {{ .agent }} Message: {{ .err }}"
BatchInstallAgentSkill: "Пакетная отправка Skill"
DispatchAgentSkillInstallTasks: "Отправить задачи установки Skill"
BatchAgentSkillDispatchFailed: "Узел {{ .node }} не смог отправить {{ .skill }} в {{ .target }} Message: {{ .err }}"
BatchAgentNoAgentsFound: "Узел {{ .node }} не нашел агентов {{ .agentType }}, пропущено"
BatchAgentSkillSkipped: "Узел {{ .node }} {{ .agent }} пропущен Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "Узел {{ .node }} успешно отправил задачу установки {{ .skill }} в {{ .agent }}!"
BatchAgentSkillInstallFailed: "Узел {{ .node }} не смог отправить задачу установки {{ .skill }} в {{ .agent }} Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "Узел {{ .node }} не смог отправить задачу {{ .operate }} для {{ .agentType }} Message: {{ .err }}"
BatchAgentOperateSkipped: "Узел {{ .node }} {{ .agent }} пропущен Message: {{ .msg }}"
BatchAgentOperateSubmitted: "Узел {{ .node }} успешно отправил задачу {{ .operate }} для {{ .agent }}!"
BatchAgentOperateFailed: "Узел {{ .node }} не смог отправить задачу {{ .operate }} для {{ .agent }} Message: {{ .err }}"
BatchStartAgent: "Пакетный запуск агентов"
DispatchAgentStartTasks: "Отправить задачи запуска агентов"
BatchStopAgent: "Пакетная остановка агентов"

View File

@@ -133,8 +133,23 @@ BatchInstallAgent: "Aracıları toplu kur"
DispatchAgentInstallTasks: "Aracı kurulum görevlerini gönder"
BatchUpgradeAgent: "Aracıları toplu yükselt"
DispatchAgentUpgradeTasks: "Aracı yükseltme görevlerini gönder"
BatchAgentInstallDispatchFailed: "{{ .node }} düğümü {{ .agentType }} kurulum görevini gönderemedi Message: {{ .err }}"
BatchAgentInstallSubmitted: "{{ .node }} düğümü {{ .agentType }} kurulum görevini başarıyla gönderdi!"
BatchAgentUpgradeDispatchFailed: "{{ .node }} düğümü {{ .agentType }} yükseltme görevini gönderemedi Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "{{ .node }} düğümü {{ .agent }} zaten hedef sürümde, atlandı"
BatchAgentUpgradeSubmitted: "{{ .node }} düğümü {{ .agent }} yükseltme görevini başarıyla gönderdi!"
BatchAgentUpgradeFailed: "{{ .node }} düğümü {{ .agent }} yükseltme görevini gönderemedi Message: {{ .err }}"
BatchInstallAgentSkill: "Skill toplu dağıt"
DispatchAgentSkillInstallTasks: "Skill kurulum görevlerini gönder"
BatchAgentSkillDispatchFailed: "{{ .node }} düğümü {{ .skill }} öğesini {{ .target }} hedefine gönderemedi Message: {{ .err }}"
BatchAgentNoAgentsFound: "{{ .node }} düğümünde {{ .agentType }} aracısı bulunamadı, atlandı"
BatchAgentSkillSkipped: "{{ .node }} düğümü {{ .agent }} atlandı Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "{{ .node }} düğümü {{ .skill }} kurulum görevini {{ .agent }} hedefine başarıyla gönderdi!"
BatchAgentSkillInstallFailed: "{{ .node }} düğümü {{ .skill }} kurulum görevini {{ .agent }} hedefine gönderemedi Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "{{ .node }} düğümü {{ .agentType }} {{ .operate }} görevini gönderemedi Message: {{ .err }}"
BatchAgentOperateSkipped: "{{ .node }} düğümü {{ .agent }} atlandı Message: {{ .msg }}"
BatchAgentOperateSubmitted: "{{ .node }} düğümü {{ .agent }} {{ .operate }} görevini başarıyla gönderdi!"
BatchAgentOperateFailed: "{{ .node }} düğümü {{ .agent }} {{ .operate }} görevini gönderemedi Message: {{ .err }}"
BatchStartAgent: "Aracıları toplu başlat"
DispatchAgentStartTasks: "Aracı başlatma görevlerini gönder"
BatchStopAgent: "Aracıları toplu durdur"

View File

@@ -134,8 +134,23 @@ BatchInstallAgent: "批量安裝智能體"
DispatchAgentInstallTasks: "下發智能體安裝任務"
BatchUpgradeAgent: "批量升級智能體"
DispatchAgentUpgradeTasks: "下發智能體升級任務"
BatchAgentInstallDispatchFailed: "{{ .node }} 節點下發 {{ .agentType }} 安裝任務失敗 Message: {{ .err }}"
BatchAgentInstallSubmitted: "{{ .node }} 節點下發 {{ .agentType }} 安裝任務成功!"
BatchAgentUpgradeDispatchFailed: "{{ .node }} 節點下發 {{ .agentType }} 升級任務失敗 Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "{{ .node }} 節點 {{ .agent }} 已是目標版本,跳過"
BatchAgentUpgradeSubmitted: "{{ .node }} 節點下發 {{ .agent }} 升級任務成功!"
BatchAgentUpgradeFailed: "{{ .node }} 節點下發 {{ .agent }} 升級任務失敗 Message: {{ .err }}"
BatchInstallAgentSkill: "批量下發 Skill"
DispatchAgentSkillInstallTasks: "下發 Skill 安裝任務"
BatchAgentSkillDispatchFailed: "{{ .node }} 節點下發 {{ .skill }} 到 {{ .target }} 失敗 Message: {{ .err }}"
BatchAgentNoAgentsFound: "{{ .node }} 節點未發現 {{ .agentType }} 智能體,跳過"
BatchAgentSkillSkipped: "{{ .node }} 節點 {{ .agent }} 跳過 Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "{{ .node }} 節點下發 {{ .skill }} 到 {{ .agent }} 安裝任務成功!"
BatchAgentSkillInstallFailed: "{{ .node }} 節點下發 {{ .skill }} 到 {{ .agent }} 安裝任務失敗 Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "{{ .node }} 節點下發 {{ .agentType }} {{ .operate }}任務失敗 Message: {{ .err }}"
BatchAgentOperateSkipped: "{{ .node }} 節點 {{ .agent }} 跳過 Message: {{ .msg }}"
BatchAgentOperateSubmitted: "{{ .node }} 節點下發 {{ .agent }} {{ .operate }}任務成功!"
BatchAgentOperateFailed: "{{ .node }} 節點下發 {{ .agent }} {{ .operate }}任務失敗 Message: {{ .err }}"
BatchStartAgent: "批量啟動智能體"
DispatchAgentStartTasks: "下發智能體啟動任務"
BatchStopAgent: "批量停止智能體"

View File

@@ -140,8 +140,23 @@ BatchInstallAgent: "批量安装智能体"
DispatchAgentInstallTasks: "下发智能体安装任务"
BatchUpgradeAgent: "批量升级智能体"
DispatchAgentUpgradeTasks: "下发智能体升级任务"
BatchAgentInstallDispatchFailed: "{{ .node }} 节点下发 {{ .agentType }} 安装任务失败 Message: {{ .err }}"
BatchAgentInstallSubmitted: "{{ .node }} 节点下发 {{ .agentType }} 安装任务成功!"
BatchAgentUpgradeDispatchFailed: "{{ .node }} 节点下发 {{ .agentType }} 升级任务失败 Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "{{ .node }} 节点 {{ .agent }} 已是目标版本,跳过"
BatchAgentUpgradeSubmitted: "{{ .node }} 节点下发 {{ .agent }} 升级任务成功!"
BatchAgentUpgradeFailed: "{{ .node }} 节点下发 {{ .agent }} 升级任务失败 Message: {{ .err }}"
BatchInstallAgentSkill: "批量下发 Skill"
DispatchAgentSkillInstallTasks: "下发 Skill 安装任务"
BatchAgentSkillDispatchFailed: "{{ .node }} 节点下发 {{ .skill }} 到 {{ .target }} 失败 Message: {{ .err }}"
BatchAgentNoAgentsFound: "{{ .node }} 节点未发现 {{ .agentType }} 智能体,跳过"
BatchAgentSkillSkipped: "{{ .node }} 节点 {{ .agent }} 跳过 Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "{{ .node }} 节点下发 {{ .skill }} 到 {{ .agent }} 安装任务成功!"
BatchAgentSkillInstallFailed: "{{ .node }} 节点下发 {{ .skill }} 到 {{ .agent }} 安装任务失败 Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "{{ .node }} 节点下发 {{ .agentType }} {{ .operate }}任务失败 Message: {{ .err }}"
BatchAgentOperateSkipped: "{{ .node }} 节点 {{ .agent }} 跳过 Message: {{ .msg }}"
BatchAgentOperateSubmitted: "{{ .node }} 节点下发 {{ .agent }} {{ .operate }}任务成功!"
BatchAgentOperateFailed: "{{ .node }} 节点下发 {{ .agent }} {{ .operate }}任务失败 Message: {{ .err }}"
BatchStartAgent: "批量启动智能体"
DispatchAgentStartTasks: "下发智能体启动任务"
BatchStopAgent: "批量停止智能体"

View File

@@ -21,7 +21,7 @@ module.exports = {
},
/* 继承某些已有的规则 */
extends: [
'plugin:vue/vue3-recommended',
'plugin:vue/recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
'plugin:prettier/recommended',
@@ -59,7 +59,6 @@ module.exports = {
// vue (https://eslint.vuejs.org/rules)
'vue/no-v-html': 'off', // 禁止使用 v-html
'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的变量<template>被标记为未使用此规则仅在启用该no-unused-vars规则时有效。
'vue/v-slot-style': 'error', // 强制执行 v-slot 指令样式
'vue/no-mutating-props': 'off', // 不允许组件 prop的改变明天找原因
'vue/custom-event-name-casing': 'off', // 为自定义事件名称强制使用特定大小写

File diff suppressed because it is too large Load Diff

View File

@@ -32,7 +32,7 @@
"@xterm/addon-fit": "^0.10.0",
"@xterm/xterm": "^5.5.0",
"anser": "^2.3.2",
"axios": "^1.16.1",
"axios": "^1.17.0",
"codemirror": "^6.0.2",
"crypto-js": "^4.2.0",
"dompurify": "^3.4.2",
@@ -59,19 +59,20 @@
"vue-router": "^4.5.1"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.3.0",
"@types/node": "^25.9.1",
"@types/uuid": "^11.0.0",
"@typescript-eslint/eslint-plugin": "^8.58.1",
"@typescript-eslint/parser": "^8.58.1",
"@vitejs/plugin-vue": "^6.0.7",
"@vitejs/plugin-vue-jsx": "^5.1.5",
"@vue/compiler-sfc": "^3.5.34",
"@vue/compiler-sfc": "^3.5.35",
"autoprefixer": "^10.4.7",
"esbuild": "^0.28.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-vue": "^9.33.0",
"eslint-plugin-vue": "^10.9.2",
"lint-staged": "^17.0.5",
"postcss": "^8.5.14",
"postcss-html": "^1.8.1",
@@ -79,14 +80,15 @@
"rollup-plugin-visualizer": "^5.5.4",
"sass": "^1.100.0",
"standard-version": "^9.5.0",
"tailwindcss": "^3.4.1",
"tailwindcss": "^4.3.0",
"typescript": "^6.0.3",
"unplugin-auto-import": "^0.16.7",
"unplugin-vue-components": "^32.1.0",
"vite": "^8.0.13",
"vite": "^8.0.16",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-eslint2": "^5.0.3",
"vite-svg-loader": "^5.1.1",
"vue-eslint-parser": "^10.4.1",
"vue-tsc": "^3.3.1"
},
"trustedDependencies": [

View File

@@ -1,6 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
'@tailwindcss/postcss': {},
autoprefixer: {},
},
};

View File

@@ -706,6 +706,9 @@ const message = {
allNodes: 'All Nodes',
targetVersion: 'Target Version',
skill: 'Skill',
skillSource: 'Skill Source',
skillKeyword: 'Skill Keyword',
clawHubSkillPlaceholder: 'Search and select a Skill first',
batchInstallTaskSubmitted: 'Batch install task has been submitted',
batchUpgradeTaskSubmitted: 'Batch upgrade task has been submitted',
batchSkillInstallTaskSubmitted: 'Batch Skill distribution task has been submitted',
@@ -1013,6 +1016,10 @@ const message = {
responseBodySize: 'Response Body Size',
responseBodyTruncated: 'Response Body Truncated',
responseBodyHash: 'Response Body Hash',
readableContent: 'Readable Content',
rawResponse: 'Raw Response',
replyContent: 'Reply Content',
reasoningContent: 'Reasoning Content',
statusTitle: 'AI Gateway Status',
serviceEnabled: 'Service Auto-start',
proxyEnabled: 'Gateway Enabled',

View File

@@ -712,6 +712,9 @@ const message = {
allNodes: 'Todos los nodos',
targetVersion: 'Versión de destino',
skill: 'Skill',
skillSource: 'Origen de Skill',
skillKeyword: 'Palabra clave de Skill',
clawHubSkillPlaceholder: 'Busque y seleccione una Skill primero',
batchInstallTaskSubmitted: 'Tarea de instalación por lotes enviada',
batchUpgradeTaskSubmitted: 'Tarea de actualización por lotes enviada',
batchSkillInstallTaskSubmitted: 'Tarea de distribución de Skill por lotes enviada',
@@ -1028,6 +1031,10 @@ const message = {
responseBodySize: 'Tamaño del cuerpo de respuesta',
responseBodyTruncated: 'Cuerpo de respuesta truncado',
responseBodyHash: 'Hash del cuerpo de respuesta',
readableContent: 'Contenido legible',
rawResponse: 'Respuesta original',
replyContent: 'Contenido de respuesta',
reasoningContent: 'Contenido de razonamiento',
statusTitle: 'Estado del gateway de IA',
serviceEnabled: 'Inicio automático del servicio',
proxyEnabled: 'Gateway habilitado',

View File

@@ -707,6 +707,9 @@ const message = {
allNodes: 'すべてのノード',
targetVersion: 'ターゲットバージョン',
skill: 'Skill',
skillSource: 'Skill ソース',
skillKeyword: 'Skill キーワード',
clawHubSkillPlaceholder: '先に Skill を検索して選択してください',
batchInstallTaskSubmitted: '一括インストールタスクを送信しました',
batchUpgradeTaskSubmitted: '一括アップグレードタスクを送信しました',
batchSkillInstallTaskSubmitted: 'Skill 一括配布タスクを送信しました',
@@ -1018,6 +1021,10 @@ const message = {
responseBodySize: 'レスポンス本文サイズ',
responseBodyTruncated: 'レスポンス本文の切り詰め',
responseBodyHash: 'レスポンス本文 Hash',
readableContent: '読みやすい内容',
rawResponse: '生レスポンス',
replyContent: '返信内容',
reasoningContent: '思考内容',
statusTitle: 'AI ゲートウェイ状態',
serviceEnabled: 'サービス自動起動',
proxyEnabled: 'ゲートウェイ有効',

View File

@@ -699,6 +699,9 @@ const message = {
allNodes: '모든 노드',
targetVersion: '대상 버전',
skill: 'Skill',
skillSource: 'Skill 소스',
skillKeyword: 'Skill 키워드',
clawHubSkillPlaceholder: '먼저 Skill을 검색하고 선택하세요',
batchInstallTaskSubmitted: '일괄 설치 작업이 전송되었습니다',
batchUpgradeTaskSubmitted: '일괄 업그레이드 작업이 전송되었습니다',
batchSkillInstallTaskSubmitted: 'Skill 일괄 배포 작업이 전송되었습니다',
@@ -1002,6 +1005,10 @@ const message = {
responseBodySize: '응답 본문 크기',
responseBodyTruncated: '응답 본문 잘림 여부',
responseBodyHash: '응답 본문 Hash',
readableContent: '읽기 쉬운 내용',
rawResponse: '원본 응답',
replyContent: '응답 내용',
reasoningContent: '추론 내용',
statusTitle: 'AI 게이트웨이 상태',
serviceEnabled: '서비스 자동 시작',
proxyEnabled: '게이트웨이 활성화',

View File

@@ -714,6 +714,9 @@ const message = {
allNodes: 'Semua nod',
targetVersion: 'Versi sasaran',
skill: 'Skill',
skillSource: 'Sumber Skill',
skillKeyword: 'Kata kunci Skill',
clawHubSkillPlaceholder: 'Cari dan pilih Skill dahulu',
batchInstallTaskSubmitted: 'Tugas pemasangan pukal telah dihantar',
batchUpgradeTaskSubmitted: 'Tugas naik taraf pukal telah dihantar',
batchSkillInstallTaskSubmitted: 'Tugas penghantaran Skill pukal telah dihantar',
@@ -1027,6 +1030,10 @@ const message = {
responseBodySize: 'Saiz Badan Respons',
responseBodyTruncated: 'Badan Respons Dipotong',
responseBodyHash: 'Hash Badan Respons',
readableContent: 'Kandungan Boleh Dibaca',
rawResponse: 'Respons Asal',
replyContent: 'Kandungan Balasan',
reasoningContent: 'Kandungan Penaakulan',
statusTitle: 'Status gateway AI',
serviceEnabled: 'Auto mula perkhidmatan',
proxyEnabled: 'Gateway diaktifkan',

View File

@@ -708,6 +708,9 @@ const message = {
allNodes: 'Todos os nós',
targetVersion: 'Versão de destino',
skill: 'Skill',
skillSource: 'Origem da Skill',
skillKeyword: 'Palavra-chave da Skill',
clawHubSkillPlaceholder: 'Pesquise e selecione uma Skill primeiro',
batchInstallTaskSubmitted: 'Tarefa de instalação em lote enviada',
batchUpgradeTaskSubmitted: 'Tarefa de atualização em lote enviada',
batchSkillInstallTaskSubmitted: 'Tarefa de distribuição de Skill enviada',
@@ -1023,6 +1026,10 @@ const message = {
responseBodySize: 'Tamanho do corpo da resposta',
responseBodyTruncated: 'Corpo da resposta truncado',
responseBodyHash: 'Hash do corpo da resposta',
readableContent: 'Conteúdo legível',
rawResponse: 'Resposta bruta',
replyContent: 'Conteúdo da resposta',
reasoningContent: 'Conteúdo de raciocínio',
statusTitle: 'Status do gateway de IA',
serviceEnabled: 'Inicialização automática do serviço',
proxyEnabled: 'Gateway habilitado',

View File

@@ -706,6 +706,9 @@ const message = {
allNodes: 'Все узлы',
targetVersion: 'Целевая версия',
skill: 'Skill',
skillSource: 'Источник Skill',
skillKeyword: 'Ключевое слово Skill',
clawHubSkillPlaceholder: 'Сначала найдите и выберите Skill',
batchInstallTaskSubmitted: 'Задача пакетной установки отправлена',
batchUpgradeTaskSubmitted: 'Задача пакетного обновления отправлена',
batchSkillInstallTaskSubmitted: 'Задача пакетной отправки Skill отправлена',
@@ -1017,6 +1020,10 @@ const message = {
responseBodySize: 'Размер тела ответа',
responseBodyTruncated: 'Тело ответа обрезано',
responseBodyHash: 'Hash тела ответа',
readableContent: 'Читаемое содержимое',
rawResponse: 'Исходный ответ',
replyContent: 'Содержимое ответа',
reasoningContent: 'Содержимое рассуждений',
statusTitle: 'Статус AI-шлюза',
serviceEnabled: 'Автозапуск сервиса',
proxyEnabled: 'Шлюз включен',

View File

@@ -710,6 +710,9 @@ const message = {
allNodes: 'Tüm düğümler',
targetVersion: 'Hedef sürüm',
skill: 'Skill',
skillSource: 'Skill Kaynağı',
skillKeyword: 'Skill Anahtar Kelimesi',
clawHubSkillPlaceholder: 'Önce bir Skill arayın ve seçin',
batchInstallTaskSubmitted: 'Toplu kurulum görevi gönderildi',
batchUpgradeTaskSubmitted: 'Toplu yükseltme görevi gönderildi',
batchSkillInstallTaskSubmitted: 'Skill toplu dağıtım görevi gönderildi',
@@ -1025,6 +1028,10 @@ const message = {
responseBodySize: 'Yanıt Gövdesi Boyutu',
responseBodyTruncated: 'Yanıt Gövdesi Kısaltıldı',
responseBodyHash: 'Yanıt Gövdesi Hash',
readableContent: 'Okunabilir İçerik',
rawResponse: 'Ham Yanıt',
replyContent: 'Yanıt İçeriği',
reasoningContent: 'Akıl Yürütme İçeriği',
statusTitle: 'AI Ağ Geçidi durumu',
serviceEnabled: 'Servis otomatik başlatma',
proxyEnabled: 'Ağ geçidi etkin',

View File

@@ -676,6 +676,9 @@ const message = {
allNodes: '所有節點',
targetVersion: '目標版本',
skill: 'Skill',
skillSource: 'Skill 來源',
skillKeyword: 'Skill 關鍵詞',
clawHubSkillPlaceholder: '請先搜尋並選擇 Skill',
batchInstallTaskSubmitted: '批量安裝任務已下發',
batchUpgradeTaskSubmitted: '批量升級任務已下發',
batchSkillInstallTaskSubmitted: '批量下發 Skill 任務已下發',
@@ -964,6 +967,10 @@ const message = {
responseBodySize: '響應體大小',
responseBodyTruncated: '響應體是否截斷',
responseBodyHash: '響應體 Hash',
readableContent: '可讀內容',
rawResponse: '原始響應',
replyContent: '回覆內容',
reasoningContent: '思考內容',
statusTitle: 'AI 閘道狀態',
serviceEnabled: '服務自啟',
proxyEnabled: '閘道啟用',

View File

@@ -673,6 +673,9 @@ const message = {
allNodes: '所有节点',
targetVersion: '目标版本',
skill: 'Skill',
skillSource: 'Skill 来源',
skillKeyword: 'Skill 关键词',
clawHubSkillPlaceholder: '请先搜索并选择 Skill',
batchInstallTaskSubmitted: '批量安装任务已下发',
batchUpgradeTaskSubmitted: '批量升级任务已下发',
batchSkillInstallTaskSubmitted: '批量下发 Skill 任务已下发',
@@ -955,6 +958,10 @@ const message = {
responseBodySize: '响应体大小',
responseBodyTruncated: '响应体是否截断',
responseBodyHash: '响应体 Hash',
readableContent: '可读内容',
rawResponse: '原始响应',
replyContent: '回复内容',
reasoningContent: '思考内容',
statusTitle: 'AI 网关状态',
serviceEnabled: '服务自启',
proxyEnabled: '网关启用',

View File

@@ -1,3 +1,22 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/utilities.css" layer(utilities) source(none);
@config "../../tailwind.config.js";
@source "../**/*.{vue,js,ts,jsx,tsx}";
@source not inline("[-:T]");
@source not inline("[a-z:@A-Z0-9_/.-]");
@theme {
--default-ring-width: 3px;
--default-ring-color: var(--color-blue-500);
}
@layer base {
*,
::after,
::before,
::backdrop,
::file-selector-button {
border-color: var(--color-gray-200, currentColor);
}
}

View File

@@ -207,16 +207,20 @@ defineExpose({ acceptParams });
<style lang="scss" scoped>
.download-item.completed {
@apply bg-green-50/50;
background-color: rgb(240 253 244 / 0.5);
}
.progress-bar {
:deep(.el-progress-bar__outer) {
@apply rounded-full bg-gray-100;
border-radius: 9999px;
background-color: rgb(243 244 246);
}
:deep(.el-progress-bar__inner) {
@apply rounded-full transition-all duration-300;
border-radius: 9999px;
transition-property: all;
transition-duration: 300ms;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
}