Add modular PreparedRun text/json formatters with role-grouped text output and secret-safety tests

This commit is contained in:
2026-05-06 15:15:52 +00:00
parent 44056d7b8f
commit 5328f04f6d
2 changed files with 174 additions and 10 deletions

View File

@@ -64,6 +64,15 @@ func FormatPreparedRun(prepared *domain.PreparedRun, outputFormat PreparedRunOut
return formatter.Format(prepared)
}
// FormatPreparedRunByName parses a format name and formats a prepared run.
func FormatPreparedRunByName(prepared *domain.PreparedRun, rawFormat string) ([]byte, error) {
outputFormat, err := ParsePreparedRunOutputFormat(rawFormat)
if err != nil {
return nil, err
}
return FormatPreparedRun(prepared, outputFormat)
}
type jsonPreparedRunFormatter struct{}
func (jsonPreparedRunFormatter) Format(prepared *domain.PreparedRun) ([]byte, error) {
@@ -126,17 +135,28 @@ func (textPreparedRunFormatter) Format(prepared *domain.PreparedRun) ([]byte, er
}
fmt.Fprintln(&b, "messages:")
for i, msg := range prepared.Messages {
fmt.Fprintf(&b, " - index: %d\n", i)
fmt.Fprintf(&b, " role: %s\n", msg.Role)
fmt.Fprintln(&b, " content: |")
content := msg.Content
if content == "" {
fmt.Fprintln(&b, " ")
continue
roleOrder := make([]string, 0)
byRole := make(map[string][]domain.RenderedMessage)
for _, msg := range prepared.Messages {
if _, exists := byRole[msg.Role]; !exists {
roleOrder = append(roleOrder, msg.Role)
}
for _, line := range strings.Split(content, "\n") {
fmt.Fprintf(&b, " %s\n", line)
byRole[msg.Role] = append(byRole[msg.Role], msg)
}
for _, role := range roleOrder {
fmt.Fprintf(&b, " %s:\n", role)
messages := byRole[role]
for i, msg := range messages {
fmt.Fprintf(&b, " - message: %d\n", i+1)
fmt.Fprintln(&b, " content: |")
content := msg.Content
if content == "" {
fmt.Fprintln(&b, " ")
continue
}
for _, line := range strings.Split(content, "\n") {
fmt.Fprintf(&b, " %s\n", line)
}
}
}