Files
CyberStrikeAI/internal/handler/hitl_audit_backend.go
T
Ed1s0nZandCursor 38b96ec67a feat: add TypeSafe Jev as HITL audit backend
Let audit_agent approve or reject with one System One call instead of chat JSON, while keeping the OpenAI-compatible backend as an option.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 21:15:53 +08:00

75 lines
1.9 KiB
Go

package handler
import (
"encoding/json"
"strings"
"cyberstrike-ai/internal/config"
)
func (h *AgentHandler) hitlAuditEngineInfo() (backend, model string) {
backend = config.HitlAuditBackendOpenAI
if h == nil || h.config == nil {
return backend, ""
}
backend = h.config.Hitl.EffectiveAuditBackend()
if backend == config.HitlAuditBackendTypeSafe {
_, _, model = h.config.Hitl.TypeSafeConfigEffective()
return backend, model
}
return backend, strings.TrimSpace(h.config.Hitl.AuditModelEffective(h.config.OpenAI).Model)
}
func stringifyHitlJSON(v any) string {
if v == nil {
return ""
}
if s, ok := v.(string); ok {
return strings.TrimSpace(s)
}
b, err := json.Marshal(v)
if err != nil {
return ""
}
var s string
if json.Unmarshal(b, &s) == nil {
return strings.TrimSpace(s)
}
return strings.TrimSpace(string(b))
}
func inferHitlAuditBackendFromComment(comment string) string {
c := strings.ToLower(comment)
if strings.Contains(comment, "TypeSafe") || strings.Contains(comment, "破坏分") ||
strings.Contains(c, "choice=") || strings.Contains(comment, "Jev") {
return config.HitlAuditBackendTypeSafe
}
if strings.TrimSpace(comment) == "" {
return ""
}
return config.HitlAuditBackendOpenAI
}
func hitlAuditBackendFromRecord(decidedBy, comment, payloadJSON string) (backend, model string) {
if normalizeHitlDecidedBy(decidedBy) != "audit_agent" {
return "", ""
}
var root map[string]any
if err := json.Unmarshal([]byte(payloadJSON), &root); err == nil {
if appr, ok := root["hitlApproval"].(map[string]any); ok {
raw := stringifyHitlJSON(appr["auditBackend"])
if raw != "" {
backend = (config.HitlConfig{AuditBackend: raw}).EffectiveAuditBackend()
}
model = stringifyHitlJSON(appr["auditModel"])
}
}
if backend == "" {
backend = inferHitlAuditBackendFromComment(comment)
}
if backend == "" {
backend = config.HitlAuditBackendOpenAI
}
return backend, model
}