Files
picoclaw/pkg/agent/legacy_events_test.go
T
lxowalle b3a7b7ad64 feat: agent self evolution (#2847)
* feat: add agent self-evolution

* fix ci

* delete unused doc

* fix lint

* fix evolution review issues
2026-05-11 16:13:27 +08:00

77 lines
2.2 KiB
Go

package agent
import (
"context"
"testing"
"time"
"github.com/sipeed/picoclaw/pkg/bus"
"github.com/sipeed/picoclaw/pkg/config"
runtimeevents "github.com/sipeed/picoclaw/pkg/events"
)
func TestSubscribeEventsFiltersRuntimeBusToLegacyAgentEvents(t *testing.T) {
cfg := &config.Config{
Agents: config.AgentsConfig{
Defaults: config.AgentDefaults{
Workspace: t.TempDir(),
ModelName: "test-model",
MaxTokens: 4096,
MaxToolIterations: 3,
},
},
}
al := NewAgentLoop(cfg, bus.NewMessageBus(), &simpleMockProvider{response: "ok"})
defer al.Close()
sub := al.SubscribeEvents(4)
defer al.UnsubscribeEvents(sub.ID)
al.RuntimeEventBus().Publish(context.Background(), runtimeevents.Event{
Kind: runtimeevents.KindGatewayReady,
Source: runtimeevents.Source{Component: "gateway"},
})
select {
case evt := <-sub.C:
t.Fatalf("legacy subscriber received non-agent runtime event: %s", evt.Kind)
case <-time.After(50 * time.Millisecond):
}
al.RuntimeEventBus().Publish(context.Background(), runtimeevents.Event{
Kind: runtimeevents.KindAgentTurnStart,
Source: runtimeevents.Source{Component: "agent", Name: "main"},
Scope: runtimeevents.Scope{
AgentID: "main",
TurnID: "turn-1",
SessionKey: "session-1",
Channel: "telegram",
Account: "bot-1",
ChatID: "chat-1",
ChatType: "private",
TopicID: "topic-1",
SpaceID: "space-1",
SpaceType: "dm",
SenderID: "sender-1",
MessageID: "message-1",
},
Payload: TurnStartPayload{UserMessage: "hello"},
})
evt := waitForEvent(t, sub.C, 2*time.Second, nil)
if evt.Kind != EventKindTurnStart {
t.Fatalf("event kind = %q, want %q", evt.Kind, EventKindTurnStart)
}
if evt.Context == nil || evt.Context.Inbound == nil {
t.Fatalf("expected legacy event inbound context, got %#v", evt.Context)
}
if got := evt.Context.Inbound.Channel; got != "telegram" {
t.Fatalf("inbound channel = %q, want telegram", got)
}
if got := evt.Context.Inbound.ChatID; got != "chat-1" {
t.Fatalf("inbound chat_id = %q, want chat-1", got)
}
if got := evt.Context.Inbound.MessageID; got != "message-1" {
t.Fatalf("inbound message_id = %q, want message-1", got)
}
}