From c951e75b39ea7ef64b5057e837826f4383d3092b Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Jul 2026 19:04:10 +0800 Subject: [PATCH] fix: async knowledge writeIndex + 60s tool execution timeout --- internal/agent/core/agent.go | 16 ++++++++++++++++ internal/knowledge/knowledge.go | 8 +++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/internal/agent/core/agent.go b/internal/agent/core/agent.go index d1e9797..9aa659a 100644 --- a/internal/agent/core/agent.go +++ b/internal/agent/core/agent.go @@ -1027,6 +1027,22 @@ func (a *Agent) executeToolCall(tc agentAPI.ToolCall) (ret string) { ret = fmt.Sprintf("工具 %s 执行崩溃: %v", tc.Name, r) } }() + + done := make(chan string, 1) + go func() { + done <- a.executeToolCallInner(tc) + }() + + select { + case result := <-done: + return result + case <-time.After(60 * time.Second): + log.Printf("[agent] tool %s timed out after 60s", tc.Name) + return fmt.Sprintf("工具 %s 执行超时(60秒),已取消", tc.Name) + } +} + +func (a *Agent) executeToolCallInner(tc agentAPI.ToolCall) string { switch { case strings.HasPrefix(tc.Name, "memory_"): return a.executeMemoryTool(tc) diff --git a/internal/knowledge/knowledge.go b/internal/knowledge/knowledge.go index a90d60d..444b672 100644 --- a/internal/knowledge/knowledge.go +++ b/internal/knowledge/knowledge.go @@ -177,9 +177,11 @@ func (s *Store) Add(name, content string) error { }) s.summaries = append(s.summaries, name+" "+content) - if err := s.writeIndex(); err != nil { - log.Printf("[knowledge] write index error after adding %s: %v", name, err) - } + go func() { + if err := s.writeIndex(); err != nil { + log.Printf("[knowledge] write index error after adding %s: %v", name, err) + } + }() log.Printf("[knowledge] added: %s (%d bytes)", name, len(content)) return nil }