@@ -3,6 +3,7 @@ package agent
33import (
44 "encoding/json"
55 "strings"
6+ "sync"
67
78 "github.com/voocel/mas/llm"
89 "github.com/voocel/mas/runtime"
@@ -132,6 +133,7 @@ type BaseAgent struct {
132133 executor * tools.Executor
133134 history []schema.Message
134135 capabilities * AgentCapabilities
136+ historyMu sync.RWMutex
135137}
136138
137139// NewAgent creates a new agent.
@@ -408,12 +410,20 @@ func (a *BaseAgent) buildMessages() []schema.Message {
408410 messages = append (messages , systemMsg )
409411 }
410412
411- messages = append (messages , a .history ... )
413+ a .historyMu .RLock ()
414+ historyCopy := make ([]schema.Message , len (a .history ))
415+ copy (historyCopy , a .history )
416+ a .historyMu .RUnlock ()
417+
418+ messages = append (messages , historyCopy ... )
412419
413420 return messages
414421}
415422
416423func (a * BaseAgent ) addToHistory (message schema.Message ) {
424+ a .historyMu .Lock ()
425+ defer a .historyMu .Unlock ()
426+
417427 a .history = append (a .history , message )
418428 if len (a .history ) > a .config .MaxHistory {
419429 // Keep recent messages.
@@ -422,11 +432,15 @@ func (a *BaseAgent) addToHistory(message schema.Message) {
422432}
423433
424434func (a * BaseAgent ) ClearHistory () {
435+ a .historyMu .Lock ()
436+ defer a .historyMu .Unlock ()
425437 a .history = make ([]schema.Message , 0 )
426438}
427439
428440func (a * BaseAgent ) GetHistory () []schema.Message {
429441 // Return a copy to prevent external modification.
442+ a .historyMu .RLock ()
443+ defer a .historyMu .RUnlock ()
430444 history := make ([]schema.Message , len (a .history ))
431445 copy (history , a .history )
432446 return history
0 commit comments