feat: SQLite session store and tool-calling agent loop
This commit is contained in:
parent
c1c7b0e005
commit
d7e138068e
6 changed files with 513 additions and 2 deletions
50
internal/store/store_test.go
Normal file
50
internal/store/store_test.go
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/crypto/openclaw/internal/llm"
|
||||
)
|
||||
|
||||
func TestStoreRoundTrip(t *testing.T) {
|
||||
s, err := Open(filepath.Join(t.TempDir(), "t.db"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer s.Close()
|
||||
ctx := context.Background()
|
||||
ss, err := s.CreateSession(ctx, "first")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
s.AppendMessage(ctx, ss.ID, llm.Message{Role: llm.RoleUser, Content: "hi"})
|
||||
s.AppendMessage(ctx, ss.ID, llm.Message{Role: llm.RoleAssistant, ToolCalls: []llm.ToolCall{{ID: "c1", Name: "time_now", Arguments: "{}"}}})
|
||||
s.AppendMessage(ctx, ss.ID, llm.Message{Role: llm.RoleTool, ToolCallID: "c1", Name: "time_now", Content: "now"})
|
||||
all, _ := s.Messages(ctx, ss.ID, 0)
|
||||
if len(all) != 3 || all[1].ToolCalls[0].Name != "time_now" || all[2].ToolCallID != "c1" {
|
||||
t.Fatalf("%+v", all)
|
||||
}
|
||||
last, _ := s.Messages(ctx, ss.ID, 2)
|
||||
if len(last) != 2 || last[0].Role != llm.RoleAssistant {
|
||||
t.Fatalf("limit: %+v", last)
|
||||
}
|
||||
if err := s.RenameSession(ctx, ss.ID, "renamed"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
list, _ := s.ListSessions(ctx, 10)
|
||||
if len(list) != 1 || list[0].Title != "renamed" {
|
||||
t.Fatalf("%+v", list)
|
||||
}
|
||||
if err := s.DeleteSession(ctx, ss.ID); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := s.GetSession(ctx, ss.ID); !errors.Is(err, ErrNotFound) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if m, _ := s.Messages(ctx, ss.ID, 0); len(m) != 0 {
|
||||
t.Fatal("cascade delete failed")
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue