feat(schedule-plan): ✨ 重构智能排程链路并修复粗排双节对齐问题 - ✨ 新增“对话级排程状态持久化”能力:引入 `agent_schedule_states` 模型/DAO,并接入启动迁移 - ✨ 智能排程图升级:补齐小幅微调(quick refine)分支,完善预算/并发/状态字段流转 - ✨ 预览链路增强:完善排程预览服务读写与桥接逻辑,新增本地预览页 `infra/schedule_preview_viewer.html` - ♻️ 缓存治理统一:将相关缓存处理收口到 DAO + `cache_deleter` 联动清理,移除旧散落逻辑 - 🐛 修复粗排核心 bug:禁止单节降级,强制双节并按 `1-2/3-4/...` 对齐;修复结束日扫描边界问题 - ✅ 新增粗排回归测试:覆盖孤立单节、偶数起点双节、Filler 对齐等关键场景
51 lines
2.1 KiB
Go
51 lines
2.1 KiB
Go
package service
|
||
|
||
import (
|
||
"github.com/LoveLosita/smartflow/backend/dao"
|
||
outboxinfra "github.com/LoveLosita/smartflow/backend/infra/outbox"
|
||
"github.com/LoveLosita/smartflow/backend/inits"
|
||
"github.com/LoveLosita/smartflow/backend/service/agentsvc"
|
||
)
|
||
|
||
// AgentService 是 service 层对 agentsvc.AgentService 的兼容别名。
|
||
// 迁移目的:
|
||
// 1) 把 Agent 业务实现收拢到 service/agentsvc,提升目录整洁度;
|
||
// 2) 不破坏既有调用方(api/cmd 仍然可以引用 service.AgentService)。
|
||
type AgentService = agentsvc.AgentService
|
||
|
||
// NewAgentService 是迁移期兼容构造函数。
|
||
//
|
||
// 说明:
|
||
// 1) 外部调用签名不变,新增排程依赖通过可选方式注入(见 NewAgentServiceWithSchedule);
|
||
// 2) 真实构造逻辑已下沉到 service/agentsvc 包。
|
||
func NewAgentService(aiHub *inits.AIHub, repo *dao.AgentDAO, taskRepo *dao.TaskDAO, cacheDAO *dao.CacheDAO, agentRedis *dao.AgentCache, eventPublisher outboxinfra.EventPublisher) *AgentService {
|
||
return agentsvc.NewAgentService(aiHub, repo, taskRepo, cacheDAO, agentRedis, eventPublisher)
|
||
}
|
||
|
||
// NewAgentServiceWithSchedule 在基础 AgentService 上注入排程依赖。
|
||
//
|
||
// 设计目的:
|
||
// 1) 通过函数注入避免 agentsvc 包直接依赖 service 层的 ScheduleService;
|
||
// 2) 排程依赖为可选:未注入时排程路由自动回退到普通聊天;
|
||
// 3) 保持 NewAgentService 签名不变,向下兼容。
|
||
func NewAgentServiceWithSchedule(
|
||
aiHub *inits.AIHub,
|
||
repo *dao.AgentDAO,
|
||
taskRepo *dao.TaskDAO,
|
||
cacheDAO *dao.CacheDAO,
|
||
agentRedis *dao.AgentCache,
|
||
eventPublisher outboxinfra.EventPublisher,
|
||
scheduleSvc *ScheduleService,
|
||
) *AgentService {
|
||
svc := agentsvc.NewAgentService(aiHub, repo, taskRepo, cacheDAO, agentRedis, eventPublisher)
|
||
|
||
// 注入排程依赖:将 service 层方法包装为函数闭包,避免循环依赖。
|
||
if scheduleSvc != nil {
|
||
svc.SmartPlanningMultiRawFunc = scheduleSvc.SmartPlanningMultiRaw
|
||
svc.HybridScheduleWithPlanMultiFunc = scheduleSvc.HybridScheduleWithPlanMulti
|
||
svc.ResolvePlanningWindowFunc = scheduleSvc.ResolvePlanningWindowByTaskClasses
|
||
}
|
||
|
||
return svc
|
||
}
|