Files
WeiCHENandCursor 9cb129d3e8 feat(intent): Phase 4 run control, subtypes, and limited IntentPlan
Add RUN_STATUS_QUERY/RUN_RESUME/RUN_RESTART with matcher and coordinator
handlers; write QUERY_PROGRESS/SUPPLEMENT_INFO subtypes to V2 frame; support
safe query+query multi-intent plans via IntentPlan dual-write.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 02:50:21 +00:00

65 lines
2.0 KiB
Go

package intent_test
import (
"context"
"testing"
"chat-agent-system/internal/intent"
)
func TestLimitedIntentPlan_QueryThenQuery(t *testing.T) {
rec := intent.NewRecognizer()
res, err := rec.Recognize(context.Background(), "查一下项目风险,然后查相关法规", nil)
if err != nil {
t.Fatalf("recognize: %v", err)
}
if res.IntentPlan == nil {
t.Fatal("expected intent_plan for query+query combination")
}
if len(res.IntentPlan.Steps) != 2 {
t.Fatalf("expected 2 steps, got %d", len(res.IntentPlan.Steps))
}
if res.IntentPlan.Steps[0].Frame.Goal != intent.GoalQuery {
t.Errorf("step1 goal want query got %s", res.IntentPlan.Steps[0].Frame.Goal)
}
if res.IntentPlan.Steps[1].Frame.Goal != intent.GoalQuery {
t.Errorf("step2 goal want query got %s", res.IntentPlan.Steps[1].Frame.Goal)
}
}
func TestSupplementSubtype_InV2Frame(t *testing.T) {
rec := intent.NewRecognizer()
res, err := rec.Recognize(context.Background(), "客户反馈附件已上传,请入库", nil)
if err != nil {
t.Fatalf("recognize: %v", err)
}
if res.IntentFrameV2 == nil || res.IntentFrameV2.Subtype != "attach" {
t.Errorf("expected subtype attach, got %+v", res.IntentFrameV2)
}
}
func TestRunMatcher_ResumeRequiresClarification(t *testing.T) {
rec := intent.NewRecognizer()
res, err := rec.Recognize(context.Background(), "继续上次失败的任务", nil)
if err != nil {
t.Fatalf("recognize: %v", err)
}
if res.TopIntent.Intent != intent.IntentRunResume {
t.Fatalf("expected RUN_RESUME, got %s", res.TopIntent.Intent)
}
if !res.RequiresClarifying && res.TopIntent.ClarificationQuestion == "" {
t.Error("expected clarification when work_dir missing")
}
}
func TestRunMatcher_StatusQuery(t *testing.T) {
rec := intent.NewRecognizer()
res, err := rec.Recognize(context.Background(), "上次任务运行状态怎么样了?", nil)
if err != nil {
t.Fatalf("recognize: %v", err)
}
if res.TopIntent.Intent != intent.IntentRunStatusQuery {
t.Fatalf("expected RUN_STATUS_QUERY, got %s", res.TopIntent.Intent)
}
}