@@ -709,7 +709,7 @@ func (r *LocalRuntime) RunStream(ctx context.Context, sess *session.Session) <-c
709709 CreatedAt : time .Now ().Format (time .RFC3339 ),
710710 }
711711 sess .AddMessage (session .NewAgentMessage (a , & assistantMessage ))
712- _ = r . sessionStore . UpdateSession (ctx , sess )
712+ r . saveSession (ctx , sess )
713713 return
714714 }
715715 case <- ctx .Done ():
@@ -840,7 +840,7 @@ func (r *LocalRuntime) RunStream(ctx context.Context, sess *session.Session) <-c
840840 }
841841
842842 sess .AddMessage (session .NewAgentMessage (a , & assistantMessage ))
843- _ = r . sessionStore . UpdateSession (ctx , sess )
843+ r . saveSession (ctx , sess )
844844 slog .Debug ("Added assistant message to session" , "agent" , a .Name (), "total_messages" , len (sess .GetAllMessages ()))
845845 } else {
846846 slog .Debug ("Skipping empty assistant message (no content and no tool calls)" , "agent" , a .Name ())
@@ -1419,7 +1419,7 @@ func (r *LocalRuntime) executeToolWithHandler(
14191419 CreatedAt : time .Now ().Format (time .RFC3339 ),
14201420 }
14211421 sess .AddMessage (session .NewAgentMessage (a , & toolResponseMsg ))
1422- _ = r . sessionStore . UpdateSession (ctx , sess )
1422+ r . saveSession (ctx , sess )
14231423}
14241424
14251425// runTool executes agent tools from toolsets (MCP, filesystem, etc.).
@@ -1510,6 +1510,16 @@ func (r *LocalRuntime) addToolErrorResponse(ctx context.Context, sess *session.S
15101510 CreatedAt : time .Now ().Format (time .RFC3339 ),
15111511 }
15121512 sess .AddMessage (session .NewAgentMessage (a , & toolResponseMsg ))
1513+ r .saveSession (ctx , sess )
1514+ }
1515+
1516+ // saveSession persists the session to the store, but only for root sessions.
1517+ // Sub-sessions (those with a ParentID) are not persisted as standalone entries;
1518+ // they are embedded within the parent session's Messages array.
1519+ func (r * LocalRuntime ) saveSession (ctx context.Context , sess * session.Session ) {
1520+ if sess .IsSubSession () {
1521+ return
1522+ }
15131523 _ = r .sessionStore .UpdateSession (ctx , sess )
15141524}
15151525
@@ -1587,6 +1597,7 @@ func (r *LocalRuntime) handleTaskTransfer(ctx context.Context, sess *session.Ses
15871597 session .WithTitle ("Transferred task" ),
15881598 session .WithToolsApproved (sess .ToolsApproved ),
15891599 session .WithSendUserMessage (false ),
1600+ session .WithParentID (sess .ID ),
15901601 )
15911602
15921603 for event := range r .RunStream (ctx , s ) {
0 commit comments