Files

58 lines
1.5 KiB
Go

package forwarder
import (
"crypto/sha256"
"encoding/hex"
"encoding/json"
"strings"
"time"
modeladapter "cursor/internal/backend/agent/model"
)
func parseRFC3339Time(value string) time.Time {
trimmed := strings.TrimSpace(value)
if trimmed == "" {
return time.Time{}
}
parsed, err := time.Parse(time.RFC3339Nano, trimmed)
if err != nil {
return time.Time{}
}
return parsed.UTC()
}
func marshalCarryForwardMessage(message modeladapter.Message) ([]byte, error) {
payload := map[string]any{
"role": message.Role,
"content": message.Content,
}
if len(message.ContentParts) > 0 {
payload["content_parts"] = message.ContentParts
}
if strings.TrimSpace(message.ReasoningContent) != "" || (strings.TrimSpace(message.Role) == "assistant" && len(message.ToolCalls) > 0) {
payload["reasoning_content"] = message.ReasoningContent
}
if strings.TrimSpace(message.ReasoningSignature) != "" {
payload["reasoning_signature"] = message.ReasoningSignature
}
if strings.TrimSpace(message.ReasoningSignatureSource) != "" {
payload["reasoning_signature_source"] = strings.TrimSpace(message.ReasoningSignatureSource)
}
if len(message.ToolCalls) > 0 {
payload["tool_calls"] = message.ToolCalls
}
if strings.TrimSpace(message.ToolCallID) != "" {
payload["tool_call_id"] = message.ToolCallID
}
if strings.TrimSpace(message.Name) != "" {
payload["name"] = message.Name
}
return json.Marshal(payload)
}
func shortSHA256(value string) string {
sum := sha256.Sum256([]byte(value))
return hex.EncodeToString(sum[:])[:12]
}