mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-05-25 16:00:35 +00:00
eedebabbea
Introduce pkg/events with filtered channels, subscription policies, backpressure, and stats. Wire AgentLoop to dual-publish legacy agent events into runtime events while preserving old event APIs. Validation: go test ./pkg/events/... ./pkg/agent; go test -race ./pkg/events/...; make lint
78 lines
2.5 KiB
Go
78 lines
2.5 KiB
Go
package events
|
|
|
|
import "time"
|
|
|
|
// Kind identifies a runtime event category.
|
|
type Kind string
|
|
|
|
// String returns the string representation of the event kind.
|
|
func (k Kind) String() string {
|
|
return string(k)
|
|
}
|
|
|
|
// Event is the runtime event envelope shared across PicoClaw components.
|
|
type Event struct {
|
|
ID string `json:"id"`
|
|
Kind Kind `json:"kind"`
|
|
Time time.Time `json:"time"`
|
|
Source Source `json:"source"`
|
|
Scope Scope `json:"scope,omitempty"`
|
|
Correlation Correlation `json:"correlation,omitempty"`
|
|
Severity Severity `json:"severity,omitempty"`
|
|
Payload any `json:"payload,omitempty"`
|
|
Attrs map[string]any `json:"attrs,omitempty"`
|
|
}
|
|
|
|
// Source identifies the component that emitted an event.
|
|
type Source struct {
|
|
Component string `json:"component"`
|
|
Name string `json:"name,omitempty"`
|
|
}
|
|
|
|
// Scope identifies the runtime ownership of an event.
|
|
//
|
|
// Scope is intentionally limited to agent, session, turn, channel, chat,
|
|
// message, and sender identity. Tool, provider, model, and MCP details belong
|
|
// in Source, Payload, or Attrs.
|
|
type Scope struct {
|
|
RuntimeID string `json:"runtime_id,omitempty"`
|
|
|
|
AgentID string `json:"agent_id,omitempty"`
|
|
SessionKey string `json:"session_key,omitempty"`
|
|
TurnID string `json:"turn_id,omitempty"`
|
|
|
|
Channel string `json:"channel,omitempty"`
|
|
Account string `json:"account,omitempty"`
|
|
ChatID string `json:"chat_id,omitempty"`
|
|
TopicID string `json:"topic_id,omitempty"`
|
|
|
|
SpaceID string `json:"space_id,omitempty"`
|
|
SpaceType string `json:"space_type,omitempty"`
|
|
ChatType string `json:"chat_type,omitempty"`
|
|
|
|
SenderID string `json:"sender_id,omitempty"`
|
|
MessageID string `json:"message_id,omitempty"`
|
|
}
|
|
|
|
// Correlation carries cross-event tracing fields.
|
|
type Correlation struct {
|
|
TraceID string `json:"trace_id,omitempty"`
|
|
ParentTurnID string `json:"parent_turn_id,omitempty"`
|
|
RequestID string `json:"request_id,omitempty"`
|
|
ReplyToID string `json:"reply_to_id,omitempty"`
|
|
}
|
|
|
|
// Severity describes the operational severity of an event.
|
|
type Severity string
|
|
|
|
const (
|
|
// SeverityDebug is used for verbose diagnostic events.
|
|
SeverityDebug Severity = "debug"
|
|
// SeverityInfo is used for normal lifecycle and activity events.
|
|
SeverityInfo Severity = "info"
|
|
// SeverityWarn is used for recoverable abnormal events.
|
|
SeverityWarn Severity = "warn"
|
|
// SeverityError is used for failed operations and unrecoverable events.
|
|
SeverityError Severity = "error"
|
|
)
|