@@ -1950,3 +1950,34 @@ func TestMergeExcludedTools(t *testing.T) {
19501950 assert .ElementsMatch (t , []string {"run_skill" , "shell" , "read_skill" }, result )
19511951 })
19521952}
1953+
1954+ func TestRunStream_EmptyMessages_SendUserMessage (t * testing.T ) {
1955+ t .Parallel ()
1956+
1957+ // session.New() defaults to SendUserMessage=true with no messages.
1958+ // With an empty instruction the system prompt is also empty, so
1959+ // GetMessages returns an empty slice.
1960+ // Before the fix, messages[len(messages)-1] panicked with index -1.
1961+ stream := newStreamBuilder ().
1962+ AddContent ("hello" ).
1963+ AddStopWithUsage (5 , 5 ).
1964+ Build ()
1965+
1966+ prov := & mockProvider {id : "test/mock-model" , stream : stream }
1967+ root := agent .New ("root" , "" , agent .WithModel (prov ))
1968+ tm := team .New (team .WithAgents (root ))
1969+
1970+ rt , err := NewLocalRuntime (tm , WithSessionCompaction (false ), WithModelStore (mockModelStore {}))
1971+ require .NoError (t , err )
1972+
1973+ sess := session .New () // SendUserMessage=true, no messages
1974+ sess .Title = "Unit Test"
1975+
1976+ // Must not panic.
1977+ evCh := rt .RunStream (t .Context (), sess )
1978+ var events []Event
1979+ for ev := range evCh {
1980+ events = append (events , ev )
1981+ }
1982+ require .NotEmpty (t , events )
1983+ }
0 commit comments