(req dto.AgentPluginInstallReq)
| 353 | } |
| 354 | |
| 355 | func (a AgentService) InstallPlugin(req dto.AgentPluginInstallReq) error { |
| 356 | agent, install, err := a.loadAgentAndInstall(req.AgentID) |
| 357 | if err != nil { |
| 358 | return err |
| 359 | } |
| 360 | if err := task.CheckScopeTaskIsExecuting(task.TaskScopeAI, req.AgentID); err != nil { |
| 361 | return err |
| 362 | } |
| 363 | spec, pluginID, err := resolvePluginMeta(req.Type) |
| 364 | if err != nil { |
| 365 | return err |
| 366 | } |
| 367 | installTask, err := task.NewTaskWithOps(req.Type, task.TaskInstall, task.TaskScopeAI, req.TaskID, req.AgentID) |
| 368 | if err != nil { |
| 369 | return err |
| 370 | } |
| 371 | installTask.AddSubTask("Install OpenClaw plugin", func(t *task.Task) error { |
| 372 | mgr := cmd.NewCommandMgr(cmd.WithTask(*t), cmd.WithContext(t.TaskCtx), cmd.WithTimeout(10*time.Minute)) |
| 373 | if req.Type == "qqbot" { |
| 374 | legacyPluginPath := path.Join(openclawPluginBaseDir, "qqbot") |
| 375 | if err := mgr.Run("docker", "exec", install.ContainerName, "test", "-d", legacyPluginPath); err == nil { |
| 376 | if err := uninstallOpenclawPlugin(mgr, install.ContainerName, "qqbot"); err != nil { |
| 377 | return err |
| 378 | } |
| 379 | time.Sleep(2 * time.Second) |
| 380 | } |
| 381 | } |
| 382 | if err := installOpenclawPlugin(mgr, install.ContainerName, spec, pluginID); err != nil { |
| 383 | return err |
| 384 | } |
| 385 | conf, err := readOpenclawConfig(agent.ConfigPath) |
| 386 | if err != nil { |
| 387 | return err |
| 388 | } |
| 389 | appendPluginAllow(conf, pluginID) |
| 390 | return writeOpenclawConfigRaw(agent.ConfigPath, conf) |
| 391 | }, nil) |
| 392 | go func() { |
| 393 | if err := installTask.Execute(); err != nil { |
| 394 | global.LOG.Errorf("install openclaw plugin failed: %v", err) |
| 395 | } |
| 396 | }() |
| 397 | return nil |
| 398 | } |
| 399 | |
| 400 | func (a AgentService) UpgradePlugin(req dto.AgentPluginUpgradeReq) error { |
| 401 | agent, install, err := a.loadAgentAndInstall(req.AgentID) |
nothing calls this directly
no test coverage detected