diff --git a/internal/skills/retrospective/handlers.go b/internal/skills/retrospective/handlers.go index c1e3326..bf84e2a 100644 --- a/internal/skills/retrospective/handlers.go +++ b/internal/skills/retrospective/handlers.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + "time" iexec "github.com/mathiasbq/supervisor/internal/exec" "github.com/mathiasbq/supervisor/internal/session" @@ -52,6 +53,7 @@ func (s *Skill) Handle(ctx context.Context, tool string, args json.RawMessage) ( if s.cfg.ExecutorFn == nil { return nil, fmt.Errorf("no executor configured") } + t0 := time.Now() result, err := s.cfg.ExecutorFn(ctx, iexec.Request{ SkillPrompt: s.cfg.SkillPrompt, TaskPrompt: taskPrompt, @@ -62,6 +64,18 @@ func (s *Skill) Handle(ctx context.Context, tool string, args json.RawMessage) ( return nil, fmt.Errorf("retrospective worker: %w", err) } + _ = session.Append(s.cfg.SessionsDir, a.SessionID, session.Entry{ + SessionID: a.SessionID, + Timestamp: time.Now(), + Skill: "retrospective", + Phase: "retrospective", + Attempts: session.AttemptsFrom(result.Attempts), + FinalStatus: result.Status, + ModelUsed: result.ModelUsed, + DurationMs: time.Since(t0).Milliseconds(), + Message: result.Message, + }) + b, err := json.Marshal(result) if err != nil { return nil, fmt.Errorf("marshal result: %w", err) diff --git a/internal/skills/trainer/handlers.go b/internal/skills/trainer/handlers.go index 7c21e8d..50921fe 100644 --- a/internal/skills/trainer/handlers.go +++ b/internal/skills/trainer/handlers.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + "time" iexec "github.com/mathiasbq/supervisor/internal/exec" "github.com/mathiasbq/supervisor/internal/session" @@ -58,6 +59,7 @@ func (s *Skill) Handle(ctx context.Context, tool string, args json.RawMessage) ( } // ── Step 2: Writer agent (receives reader candidates) ──────────────────── + t0 := time.Now() writerTask := fmt.Sprintf( "role: writer\nsession_id: %s\nbrain_dir: %s\n\nreader_summary: %s\nreader_candidates:\n%s", a.SessionID, s.cfg.BrainDir, readerResult.Message, readerResult.RunnerOutput, @@ -72,6 +74,18 @@ func (s *Skill) Handle(ctx context.Context, tool string, args json.RawMessage) ( return nil, fmt.Errorf("writer agent: %w", err) } + _ = session.Append(s.cfg.SessionsDir, a.SessionID, session.Entry{ + SessionID: a.SessionID, + Timestamp: time.Now(), + Skill: "trainer", + Phase: "trainer", + Attempts: session.AttemptsFrom(writerResult.Attempts), + FinalStatus: writerResult.Status, + ModelUsed: writerResult.ModelUsed, + DurationMs: time.Since(t0).Milliseconds(), + Message: writerResult.Message, + }) + b, err := json.Marshal(writerResult) if err != nil { return nil, fmt.Errorf("marshal result: %w", err)