vibe-proxy/backend/internal/runtime/executor/helps/derived_session.go
2026-08-24 00:10:41 +02:00

66 lines
2.3 KiB
Go

package helps
import (
"crypto/sha256"
"encoding/binary"
"strconv"
"strings"
"github.com/google/uuid"
cliproxyexecutor "github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/executor"
cliproxysession "github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/session"
)
// DerivedSessionID returns the first context-derived session identity in metadata order.
func DerivedSessionID(metadataSets ...map[string]any) string {
for _, metadata := range metadataSets {
if derivedID := cliproxysession.DerivedID(metadata); derivedID != "" {
return derivedID
}
}
return ""
}
// DerivedSessionUUID maps a derived session identity to a provider-scoped stable UUID.
func DerivedSessionUUID(provider string, metadataSets ...map[string]any) string {
return stableProviderSessionUUID(provider, "derived-session", DerivedSessionID(metadataSets...))
}
// ProviderSessionUUID prefers a long-lived execution session and falls back to the derived identity.
func ProviderSessionUUID(provider string, metadataSets ...map[string]any) string {
for _, metadata := range metadataSets {
if executionID := metadataString(metadata, cliproxyexecutor.ExecutionSessionMetadataKey); executionID != "" {
return stableProviderSessionUUID(provider, "execution-session", executionID)
}
}
return DerivedSessionUUID(provider, metadataSets...)
}
func stableProviderSessionUUID(provider string, kind string, identityValue string) string {
provider = strings.ToLower(strings.TrimSpace(provider))
identityValue = strings.TrimSpace(identityValue)
if provider == "" || identityValue == "" {
return ""
}
identity := strings.Join([]string{"cli-proxy-api", provider, kind, identityValue}, "\x00")
return uuid.NewSHA1(uuid.NameSpaceOID, []byte(identity)).String()
}
// DerivedAntigravitySessionID maps a derived session identity to Antigravity's negative decimal format.
func DerivedAntigravitySessionID(metadataSets ...map[string]any) string {
derivedID := DerivedSessionID(metadataSets...)
if derivedID == "" {
return ""
}
sum := sha256.Sum256([]byte("cli-proxy-api:antigravity:derived-session\x00" + derivedID))
value := int64(binary.BigEndian.Uint64(sum[:8])) & 0x7FFFFFFFFFFFFFFF
return "-" + strconv.FormatInt(value, 10)
}
func metadataString(metadata map[string]any, key string) string {
if metadata == nil {
return ""
}
value, _ := metadata[key].(string)
return strings.TrimSpace(value)
}