package reminders import ( "strings" "testing" "time" "agent-native/runtime/llm" ) func TestAttachDoesNotAddUserAfterTool(t *testing.T) { msgs := []llm.Message{ {Role: llm.RoleUser, Content: "请改文件"}, {Role: llm.RoleAssistant, ToolCalls: []llm.ToolCall{{ID: "c1", Name: "read_file"}}}, {Role: llm.RoleTool, Name: "read_file", ToolCallID: "c1", Content: "原文"}, } out := Attach(msgs, []string{"计划和待办已过期"}) if len(out) != len(msgs) { t.Fatalf("len %d, want %d", len(out), len(msgs)) } for i := range msgs { if out[i].Role != msgs[i].Role { t.Fatalf("role changed at %d: %s", i, out[i].Role) } } last := out[len(out)-1] if last.Role != llm.RoleTool || !strings.Contains(last.Content, "原文") || !strings.Contains(last.Content, "system-reminder") { t.Fatalf("reminder not folded into tool result: %+v", last) } if strings.Contains(out[0].Content, "system-reminder") { t.Fatal("reminder leaked onto the earlier user message") } } func TestAdmitThrottles(t *testing.T) { bus := New(time.Minute, 2) now := time.Now() if !bus.Admit(Note{Kind: KindBudget, Key: "near", Text: "预算将尽"}, now) { t.Fatal("first admit") } if bus.Admit(Note{Kind: KindBudget, Key: "near", Text: "预算将尽"}, now.Add(time.Second)) { t.Fatal("duplicate key admitted") } if bus.Admit(Note{Kind: KindBackground, Key: "job", Text: "后台结束"}, now.Add(time.Second)) { t.Fatal("inside min gap admitted") } if !bus.Admit(Note{Kind: KindBackground, Key: "job", Text: "后台结束"}, now.Add(time.Minute)) { t.Fatal("after gap") } if bus.Admit(Note{Kind: KindDeliverable, Key: "doc", Text: "交付物待确认"}, now.Add(2*time.Minute)) { t.Fatal("over cap") } }