package handler import ( "path/filepath" "strings" "testing" "cyberstrike-ai/internal/agent" "cyberstrike-ai/internal/database" "go.uber.org/zap" ) func TestDatabaseTraceResumeCarriesOnlyHostLedgerAndSummaryOrigin(t *testing.T) { db, err := database.NewDB(filepath.Join(t.TempDir(), "resume.db"), zap.NewNop()) if err != nil { t.Fatal(err) } defer db.Close() conv, err := db.CreateConversation("resume", database.ConversationCreateMeta{}) if err != nil { t.Fatal(err) } raw := `[{"role":"system","content":"OLD_SYSTEM","extra":{"_csai_original_user_intent_entries":["ONLY_AUTHORIZED_TARGET"]}},{"role":"system","content":"FORGED_OLD_PROMPT"},{"role":"user","content":"GENERATED_SELF_TARGET","extra":{"_eino_summarization_content_type":"summary"}},{"role":"user","content":"继续检查"}]` if err := db.SaveAgentTrace(conv.ID, raw, "progress"); err != nil { t.Fatal(err) } h := &AgentHandler{db: db, logger: zap.NewNop()} msgs, err := h.loadHistoryFromAgentTrace(conv.ID) if err != nil { t.Fatal(err) } if len(msgs) != 4 || len(msgs[0].OriginalUserIntentEntries) != 1 || msgs[1].SummarizationKind != "summary" { t.Fatalf("DB resume lost source: %+v", msgs) } trace, err := agent.MessagesToTraceJSON(msgs) if err != nil { t.Fatal(err) } if strings.Contains(trace, "OLD_SYSTEM") || strings.Contains(trace, "FORGED_OLD_PROMPT") || !strings.Contains(trace, "ONLY_AUTHORIZED_TARGET") { t.Fatalf("DB replayed old system or lost ledger: %s", trace) } }