package session import ( "fmt" "html" "os" "strings" "time" ) // RenderHTML generates a self-contained HTML timeline from a session. func RenderHTML(sess *Session, outputPath string) error { f, err := os.Create(outputPath) if err != nil { return fmt.Errorf("create html: %w", err) } defer f.Close() duration := sess.EndTime.Sub(sess.StartTime) toolCount := 0 errorCount := 0 for _, e := range sess.Events { if e.Type == "tool_use" { toolCount++ if !e.Success { errorCount++ } } } fmt.Fprintf(f, `
%s
%s