✨ feat(agent): 通用分流接入随口问图编排,修复任务查询条数与重复输出问题 - ♻️ 将 Agent 路由升级为通用 `action` 分流机制,统一支持 `chat` / `quick_note_create` / `task_query` - 🧩 新增 `taskquery` 子模块并落地图编排链路:`plan -> quadrant -> time_anchor -> tool_query -> reflect` - 🔧 在图内接入 `query_tasks` 工具调用,支持自动放宽检索条件与反思重试,最多重试 2 次 - 🚪 保持 `/agent/chat` 作为多合一入口,不额外新增任务查询 HTTP 接口 - 🪄 修复“随口问”场景下的双重列表输出问题:LLM 仅保留简短前缀,任务列表统一由后端进行确定性渲染 - 🎯 修复显式数量约束失效问题:支持提取“来一个”“前 3 个”“top5”等数量表达,并将其锁定为 `limit` - 🛡️ 防止在重试或放宽检索阶段改写用户显式指定的数量约束 - ✅ 补充并更新测试,覆盖路由解析、数量提取、`limit` 生效及重复输出等关键场景 📝 docs: 更新随口问链路文档与决策记录 - 📚 更新 README 5.4,新增/修订随口问链路 Mermaid 图 - 🧭 新增随口问功能决策记录 FDR
46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package taskquery
|
|
|
|
import "testing"
|
|
|
|
// TestNormalizeToolInput_Default
|
|
// 目的:验证空入参会回填默认查询参数,保证工具在“参数缺失”场景仍可执行。
|
|
func TestNormalizeToolInput_Default(t *testing.T) {
|
|
req, err := normalizeToolInput(nil)
|
|
if err != nil {
|
|
t.Fatalf("不应报错: %v", err)
|
|
}
|
|
if req.SortBy != "deadline" || req.Order != "asc" || req.Limit != 5 || req.IncludeCompleted {
|
|
t.Fatalf("默认值异常: %+v", req)
|
|
}
|
|
}
|
|
|
|
// TestNormalizeToolInput_InvalidQuadrant
|
|
// 目的:验证 quadrant 越界时会被拦截,避免无效过滤条件进入业务层。
|
|
func TestNormalizeToolInput_InvalidQuadrant(t *testing.T) {
|
|
invalid := 6
|
|
_, err := normalizeToolInput(&TaskQueryToolInput{
|
|
Quadrant: &invalid,
|
|
})
|
|
if err == nil {
|
|
t.Fatalf("期望 quadrant 越界时报错")
|
|
}
|
|
}
|
|
|
|
// TestNormalizeToolInput_DateRange
|
|
// 目的:验证时间上下界可解析并正确落入请求结构。
|
|
func TestNormalizeToolInput_DateRange(t *testing.T) {
|
|
req, err := normalizeToolInput(&TaskQueryToolInput{
|
|
DeadlineAfter: "2026-03-01 08:00",
|
|
DeadlineBefore: "2026-03-31",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("不应报错: %v", err)
|
|
}
|
|
if req.DeadlineAfter == nil || req.DeadlineBefore == nil {
|
|
t.Fatalf("时间上下界不应为空: %+v", req)
|
|
}
|
|
if req.DeadlineAfter.After(*req.DeadlineBefore) {
|
|
t.Fatalf("时间上下界关系异常: after=%v before=%v", req.DeadlineAfter, req.DeadlineBefore)
|
|
}
|
|
}
|