mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
795ee362ea
Remove the legacy EventKind/Event envelope mapping and let agent event emission build pkg/events.Event values directly. Keep HookMeta as the shared hook metadata shape and preserve legacy observe string aliases by mapping them to runtime event kinds. Validation: GOCACHE=/tmp/picoclaw-go-cache go test ./pkg/agent; make lint
99 lines
2.4 KiB
Go
99 lines
2.4 KiB
Go
package agent
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
runtimeevents "github.com/sipeed/picoclaw/pkg/events"
|
|
)
|
|
|
|
const runtimeEventPublishTimeout = 100 * time.Millisecond
|
|
|
|
func (al *AgentLoop) publishRuntimeEvent(evt runtimeevents.Event) {
|
|
if al == nil || al.runtimeEvents == nil {
|
|
return
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), runtimeEventPublishTimeout)
|
|
defer cancel()
|
|
|
|
al.runtimeEvents.Publish(ctx, evt)
|
|
}
|
|
|
|
func runtimeScopeFromHookMeta(meta HookMeta, eventCtx *TurnContext) runtimeevents.Scope {
|
|
scope := runtimeevents.Scope{
|
|
AgentID: meta.AgentID,
|
|
SessionKey: meta.SessionKey,
|
|
TurnID: meta.TurnID,
|
|
}
|
|
|
|
if eventCtx == nil || eventCtx.Inbound == nil {
|
|
return scope
|
|
}
|
|
|
|
inbound := eventCtx.Inbound
|
|
scope.Channel = inbound.Channel
|
|
scope.Account = inbound.Account
|
|
scope.ChatID = inbound.ChatID
|
|
scope.TopicID = inbound.TopicID
|
|
scope.SpaceID = inbound.SpaceID
|
|
scope.SpaceType = inbound.SpaceType
|
|
scope.ChatType = inbound.ChatType
|
|
scope.SenderID = inbound.SenderID
|
|
scope.MessageID = inbound.MessageID
|
|
return scope
|
|
}
|
|
|
|
func runtimeCorrelationFromHookMeta(meta HookMeta) runtimeevents.Correlation {
|
|
return runtimeevents.Correlation{
|
|
TraceID: meta.TracePath,
|
|
ParentTurnID: meta.ParentTurnID,
|
|
}
|
|
}
|
|
|
|
func runtimeSeverityForAgentEvent(kind runtimeevents.Kind, payload any) runtimeevents.Severity {
|
|
switch kind {
|
|
case runtimeevents.KindAgentError, runtimeevents.KindAgentSubTurnOrphan:
|
|
return runtimeevents.SeverityError
|
|
case runtimeevents.KindAgentLLMRetry,
|
|
runtimeevents.KindAgentContextCompress,
|
|
runtimeevents.KindAgentToolExecSkipped:
|
|
return runtimeevents.SeverityWarn
|
|
case runtimeevents.KindAgentTurnEnd:
|
|
payload, ok := payload.(TurnEndPayload)
|
|
if !ok {
|
|
return runtimeevents.SeverityInfo
|
|
}
|
|
switch payload.Status {
|
|
case TurnEndStatusError:
|
|
return runtimeevents.SeverityError
|
|
case TurnEndStatusAborted:
|
|
return runtimeevents.SeverityWarn
|
|
default:
|
|
return runtimeevents.SeverityInfo
|
|
}
|
|
case runtimeevents.KindAgentToolExecEnd:
|
|
payload, ok := payload.(ToolExecEndPayload)
|
|
if ok && payload.IsError {
|
|
return runtimeevents.SeverityWarn
|
|
}
|
|
return runtimeevents.SeverityInfo
|
|
default:
|
|
return runtimeevents.SeverityInfo
|
|
}
|
|
}
|
|
|
|
func runtimeAttrsFromHookMeta(meta HookMeta) map[string]any {
|
|
attrs := make(map[string]any, 2)
|
|
if meta.Source != "" {
|
|
attrs["agent_source"] = meta.Source
|
|
}
|
|
if meta.Iteration != 0 {
|
|
attrs["iteration"] = meta.Iteration
|
|
}
|
|
if len(attrs) == 0 {
|
|
return nil
|
|
}
|
|
return attrs
|
|
}
|