Why: The library had no process entry, and the product backend still called the loop directly. Evidence: go test -count=1 ./... Impact: exec.Backend keeps the same request and result. Execute now goes through AgentSession. Extensions and packages are not a sandbox. Refs: feature/pi-headless N6 N7 Co-authored-by: Cursor <cursoragent@cursor.com>
66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
package native
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"os"
|
|
"os/exec"
|
|
"testing"
|
|
|
|
"agent-native/rpc"
|
|
"agent-native/runtime"
|
|
"agent-native/runtime/llm"
|
|
"agent-native/runtime/session"
|
|
)
|
|
|
|
func TestEventAndRPCFixtures(t *testing.T) {
|
|
var types []string
|
|
agent := runtime.NewAgentSession(runtime.Config{
|
|
Model: "fake",
|
|
Stream: func(ctx context.Context, model string, messages []llm.Message, td []llm.ToolDecl, opts llm.StreamOptions) <-chan llm.Event {
|
|
ch := make(chan llm.Event, 1)
|
|
ch <- llm.Event{Kind: llm.KindMessageEnd, Message: llm.Message{Role: llm.RoleAssistant, Content: "ok", StopReason: llm.StopEnd}}
|
|
close(ch)
|
|
return ch
|
|
},
|
|
OnEvent: func(ev runtime.Event) { types = append(types, ev.Type) },
|
|
})
|
|
if _, err := agent.Prompt(context.Background(), llm.Message{Role: llm.RoleUser, Content: "hi"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
raw, _ := json.Marshal(types)
|
|
for _, want := range []string{"message_start", "message_end", "agent_settled"} {
|
|
if !contains(types, want) {
|
|
t.Fatalf("fixture missing %s in %s", want, raw)
|
|
}
|
|
}
|
|
dir := t.TempDir()
|
|
store, err := session.Open(dir + "/s.jsonl")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
srv := &rpc.Server{Agent: agent, Store: store}
|
|
resp, err := srv.Handle(context.Background(), []byte(`{"type":"get_session_stats"}`))
|
|
if err != nil || !json.Valid(resp) {
|
|
t.Fatalf("rpc fixture: %s %v", resp, err)
|
|
}
|
|
}
|
|
|
|
func TestPiCrossCompareOptional(t *testing.T) {
|
|
if _, err := exec.LookPath("pi"); err != nil {
|
|
t.Skip("pi is not installed")
|
|
}
|
|
if os.Getenv("PI_CROSS") != "1" {
|
|
t.Skip("set PI_CROSS=1 to compare a live pi process")
|
|
}
|
|
}
|
|
|
|
func contains(list []string, want string) bool {
|
|
for _, item := range list {
|
|
if item == want {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|