| 698 | func newOrderedJSONMap() *orderedmap.OrderedMap[string, any] { |
| 699 | return orderedmap.New[string, any](orderedmap.WithDisableHTMLEscape[string, any]()) |
| 700 | } |
| 701 | |
| 702 | func setOrderedMapValues(target *orderedmap.OrderedMap[string, any], values map[string]any) { |
| 703 | keys := make([]string, 0, len(values)) |
| 704 | for key := range values { |
| 705 | keys = append(keys, key) |
| 706 | } |
| 707 | sort.Strings(keys) |
| 708 | for _, key := range keys { |
| 709 | target.Set(key, values[key]) |
| 710 | } |
| 711 | } |
| 712 | |
| 713 | func orderedAgentStateSnapshot(state *agent.AgentState) *orderedmap.OrderedMap[string, any] { |
| 714 | out := newOrderedJSONMap() |
| 715 | out.Set("messages", state.Messages) |
| 716 | out.Set("total_input_tokens", state.TotalInputTokens) |
| 717 | out.Set("total_output_tokens", state.TotalOutputTokens) |
| 718 | out.Set("cache_read_input_tokens", state.CacheReadInputTokens) |
| 719 | out.Set("cache_creation_input_tokens", state.CacheCreateInputTokens) |
| 720 | out.Set("server_tool_use_input_tokens", state.ServerToolUseInputTokens) |
| 721 | out.Set("turn_count", state.TurnCount) |
| 722 | out.Set("consecutive_autocompact_failures", state.ConsecutiveAutoCompactFailures) |
| 723 | out.Set("last_continue_reason", state.LastContinueReason) |
| 724 | out.Set("permission_state", orderedPermissionStateSnapshot(state.PermissionState)) |
| 725 | out.Set("system_prompt", state.SystemPrompt) |
| 726 | out.Set("recent_api_errors", state.RecentApiErrors) |
| 727 | out.Set("content_replacements", state.ContentReplacements) |
| 728 | out.Set("denied_tool_calls", state.DeniedToolCalls) |
| 729 | out.Set("tool_errors", state.ToolErrors) |
| 730 | out.Set("total_task_budget", state.TotalTaskBudget) |