add observer runtime model

Instrument command, payload, update, scene, runner, polling, and policy flows
Add observer regression coverage and mark observability backlog item done
This commit is contained in:
2026-03-31 13:50:21 +03:00
parent 140f3397b2
commit a818174fbf
18 changed files with 1255 additions and 62 deletions
+18
View File
@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"log"
"reflect"
"strconv"
"strings"
@@ -79,6 +80,7 @@ type MsgContext struct {
draftProvider *DraftProvider
payloadType BotPayloadType
sceneRuntime sceneRuntime
observer Observer
ctx context.Context
}
@@ -689,6 +691,22 @@ func (ctx *MsgContext) Context() context.Context {
return ctx.ctx
}
func (ctx *MsgContext) emitPolicyChecked(event PolicyCheckedEvent) {
if ctx == nil || ctx.observer == nil {
return
}
defer func() {
if r := recover(); r != nil {
if ctx.Logger != nil {
ctx.Logger.Errorln(fmt.Sprintf("panic in observer policy event: %v", r))
return
}
log.Printf("panic in observer policy event: %v", r)
}
}()
ctx.observer.OnPolicyChecked(ctx.Context(), event)
}
// EnterScene enters the named scene at its configured entry step.
func (ctx *MsgContext) EnterScene(name string) error {
if ctx.sceneRuntime == nil {