Losita
|
abe3b4960e
|
Version: 0.9.68.dev.260504
后端:
1. 阶段 3 notification 服务边界落地,新增 `cmd/notification`、`services/notification`、`gateway/notification`、`shared/contracts/notification` 和 notification port,按 userauth 同款最小手搓 zrpc 样板收口
2. notification outbox consumer、relay 和 retry loop 迁入独立服务入口,处理 `notification.feishu.requested`,gateway 改为通过 zrpc client 调用 notification
3. 清退旧单体 notification DAO/model/service/provider/runner 和 `service/events/notification_feishu.go`,旧实现不再作为活跃编译路径
4. 修复 outbox 路由归属、dispatch 启动扫描、Kafka topic 探测/投递超时、sending 租约恢复、毒消息 MarkDead 错误回传和 RPC timeout 边界
5. 同步调整 active-scheduler 触发通知事件、核心 outbox handler、MySQL 迁移边界和 notification 配置
文档:
1. 更新微服务迁移计划,将阶段 3 notification 标记为已完成,并明确下一阶段从 active-scheduler 开始
|
2026-05-04 18:40:39 +08:00 |
|
Losita
|
b08ee17893
|
Version: 0.9.66.dev.260504
后端:
1. 阶段 2 user/auth 服务边界落地,新增 `cmd/userauth` go-zero zrpc 服务、`services/userauth` 核心实现、gateway user API/zrpc client 与 shared contracts/ports,迁移注册、登录、刷新 token、登出、JWT、黑名单和 token 额度治理
2. gateway 与启动装配切流,`cmd/all` 只保留边缘路由、鉴权和轻量组合,通过 userauth zrpc 访问核心用户能力;拆分 MySQL/Redis 初始化与 AutoMigrate 边界,`userauth` 自迁 `users` 和 token 记账幂等表,`all` 不再迁用户表
3. 清退 Gin 单体旧 user/auth DAO、model、service、router、middleware 和 JWT handler,并同步调整 agent/schedule/cache/outbox 相关调用依赖
4. 补齐 refresh token 防并发重放、MySQL 幂等 token 记账、额度 `>=` 拦截和 RPC 错误映射,避免重复记账与内部错误透出
文档:
1. 新增《学习计划论坛与Token商店PRD》
|
2026-05-04 15:20:47 +08:00 |
|
Losita
|
ba23ebd201
|
Version: 0.9.62.dev.260502
后端:
1. 主动调度补齐 `unfinished_feedback` 定位闭环——用户补充信息先在滚动窗口内定位到可校验的日程块,定位失败则继续 ask_user,不再硬猜 target_id 或直接跑 graph。
2. 聊天占管重跑链路加并发保护——`waiting_user_reply -> rerunning` 改为 DB CAS 抢占,重复补充只返回可见等待提示,避免并发生成多份 preview。
3. rerun 结果回写继续收口——新 preview_id 同步回 trigger 审计指针,session 只在拿到新 preview 时更新当前预览,ready_preview 后清空追问状态并释放回普通聊天。
4. 主动调度事件校验放宽 unfinished_feedback 的空 target 场景,允许先触发、后定位,再进入 graph + preview 主链路。
|
2026-05-02 12:41:50 +08:00 |
|
Losita
|
a3eaa9b2c2
|
Version: 0.9.61.dev.260501
后端:
1. 主动调度 graph + session bridge 收口——把 dry-run / select / preview / confirm / rerun 串成受限 graph,新增 active_schedule_sessions 缓存与聊天拦截,ready_preview 后释放回自由聊天
2. 会话与通知链路对齐——notification 统一绑定 conversation_id,action_url 指向 /assistant/{conversation_id},会话不存在改回 404 语义,避免 wrong param type 误导排障
3. estimated_sections 写入与主动调度消费链路补齐——任务创建、quick task 与随口记入口都透传估计节数,主动调度只消费落库值
前端:
4. AssistantPanel 最小适配主动调度预览与失败态——复用主动调度卡片/微调弹窗,补历史加载失败可见提示与跨账号会话拦截
文档:
5. 更新主动调度缺口分阶段实施计划和实现方案,标记阶段 0-2 收口并同步接力状态
|
2026-05-01 20:48:32 +08:00 |
|
Losita
|
0a014f7472
|
Version: 0.9.60.dev.260430
后端:
1.接入主动调度 worker 与飞书通知链路
- 新增 due job scanner 与 active_schedule.triggered workflow
- 接入 notification.feishu.requested handler、飞书 webhook provider 和用户通知配置接口
- 支持 notification_records 去重、重试、skipped/dead 状态流转
- 完成 api / worker / all 启动模式装配与主动调度验收记录
2.后续要做的就是补全从异常发生到给用户推送消息之间的逻辑缺口
|
2026-04-30 23:45:27 +08:00 |
|
LoveLosita
|
e945578fbf
|
Version: 0.9.59.dev.260430
后端:
1. 主动调度预览确认主链路落地——新增主动调度数据模型、DAO 与事件契约;接入 dry-run pipeline 与任务触发的 job upsert/cancel;新增 preview 查询与 confirm API,支持 apply_id 幂等确认并同步写入 task_pool 日程
2. 同步更新主动调度实施文档的阶段状态与验收记录
前端:
3. AssistantPanel 脚本层继续解耦——私有类型迁移到独立类型文件,并抽离会话、工具轨迹、思考摘要、任务表单等纯函数辅助逻辑;保持助手面板模板与样式不变,降低表现层回归风险
|
2026-04-30 12:05:15 +08:00 |
|
Losita
|
53e2602df4
|
Version: 0.9.38.dev.260423
后端:
1. 四象限任务新增修改与删除接口——部分更新语义 + 硬删除 + 幂等信息码
- 新增 PUT/task/update:指针字段部分更新(title / priority_group / deadline_at / urgency_threshold_at),优先级 1~4 校验,空更新检测
- 新增 DELETE /task/delete:硬删除,重复删除返回 10003 幂等信息码
- 新增错误码 TaskUpdateNoFields (40063) 与 TaskAlreadyDeleted (10003)
前端:
1. 四象限卡片对接修改与删除
- 任务项重构为三区布局:勾选、内容点击编辑、悬浮删除按钮 - 创建弹窗复用为编辑模式,新增 urgency_threshold_at 字段
- 删除走二次确认弹窗,空状态增加 SVG 插画
2. 今日时间轴微调——色调简化为取模轮换,午休/晚餐改称午间/晚休
|
2026-04-23 19:46:33 +08:00 |
|
Losita
|
0f749e9f5a
|
Version: 0.9.32.dev.260419
后端:
1. 会话历史接口切换为统一时间线读取,并兼容 extra.resume 恢复协议
- api/agent.go:新增 resume->confirm_action 映射(approve/reject/cancel),恢复请求缺 conversation_id 时拦截;GetConversationHistory 改为 GetConversationTimeline
- routers/routers.go:路由从 GET /conversation-history 切换为 GET /conversation-timeline
- model/agent.go:删除 GetConversationHistoryItem 旧 DTO
2. 新增会话时间线持久化链路(MySQL + Redis)
- 新增 model/agent_timeline.go:定义 timeline kind、AgentTimelineEvent、持久化/返回结构
- 新增 dao/agent_timeline.go:写入事件、按 seq 查询、查询 max seq
- inits/mysql.go:AutoMigrate 增加 AgentTimelineEvent
- dao/cache.go:新增 timeline list/seq key,支持 incr/set seq、append/list、全量回填与删除
- 新增 service/agentsvc/agent_timeline.go:时间线读写编排(Redis 优先、DB 回源、seq 分配与冲突重试、extra 事件映射)
3. 聊天主链路改为写入 timeline,旧 history 服务下线
- service/agentsvc/agent.go:普通聊天用户/助手消息改为 appendConversationTimelineEvent
- service/agentsvc/agent_newagent.go:透传 resume_interaction_id;注入 emitter extra hook 持久化卡片事件;正文写入 timeline
- 删除 service/agentsvc/agent_history.go:下线 conversation-history 旧缓存编排
4. newAgent 恢复与确认防串单增强
- newAgent/model/graph_run_state.go:AgentGraphRequest 新增 ResumeInteractionID
- newAgent/node/agent_nodes.go:透传 ResumeInteractionID
- newAgent/node/chat.go:增加 stale_resume 校验;accept/reject 兼容 approve/cancel;非法动作返回 invalid_confirm_action
- newAgent/stream/emitter.go:新增 extraEventHook / SetExtraEventHook,在 extra-only 与 confirm 事件触发
5. 日程暂存后同步刷新预览缓存,避免读到拖拽前旧数据
- service/agentsvc/agent_schedule_state.go:Save 后重建并覆盖 preview 缓存,保留 trace/candidate 等字段
6. 缓存失效策略调整到 timeline 口径
- middleware/cache_deleter.go:移除 conversation-history 失效逻辑;ChatHistory/AgentChat/AgentTimelineEvent 加入忽略集合
前端:
7. 新增时间线接口与类型定义
- frontend/src/api/schedule_agent.ts:新增 TimelineEvent/TimelineToolPayload/TimelineConfirmPayload 与 getConversationTimeline
8. AssistantPanel 全面对接 timeline 重建消息与卡片
- frontend/src/components/dashboard/AssistantPanel.vue:移除旧 history merge/normalize,新增 rebuildStateFromTimeline;支持 execution mode(always_execute);支持 resume-only 发送;修复 confirm 弹层手动关闭后重复弹出;会话标题显示放宽;流式中隐藏 action bar
9. 精排弹窗健壮性与交互动效优化
- frontend/src/components/assistant/ScheduleFineTuneModal.vue:previewData 支持 nullable,新增 visible 控制与 watch 初始化,补齐空值保护并调整弹窗动画
仓库:
10. 新增前端时间线接入说明文档
- docs/frontend/newagent_timeline_对接说明.md:接口、kind、payload、刷新重建与迁移建议
|
2026-04-19 19:03:41 +08:00 |
|
Losita
|
d8280cc647
|
Version: 0.9.26.dev.260417
后端:
1. Prompt 层从 execute 专属骨架重构为全节点统一四段式 buildUnifiedStageMessages
- 新增 unified_context.go:定义 StageMessagesConfig + buildUnifiedStageMessages 统一骨架,所有节点(Chat/Plan/Execute/Deliver/DeepAnswer)共用同一套 msg0~msg3 拼装逻辑
- 新增 conversation_view.go:通用对话历史渲染 buildConversationHistoryMessage,各节点复用,不再各自维护提取逻辑
- 新增 chat_context.go / plan_context.go / deliver_context.go:各节点自行渲染 msg1(对话视图)和 msg2(工作区),统一层只负责"怎么拼",不再替节点决定"放什么"
- Chat/Plan/Deliver/Execute 的 BuildXXXMessages 全部从 buildStageMessages 切到 buildUnifiedStageMessages,移除旧路径
- 删除 execute_pinned.go:execute 记忆渲染合并到统一层 renderUnifiedMemoryContext
- Plan prompt 不再在 user prompt 中拼装任务类 ID 列表和 renderStateSummary,改为依赖 msg2 规划工作区;Chat 粗排判断从"上下文有任务类 ID"改为"批量调度需求"
- Deliver prompt 新增 IsAborted/IsExhaustedTerminal 区分,支持粗排收口和主动终止场景
2. Execute ReAct 上下文简化——移除归档搬运、窗口裁剪和重复工具压缩
- 移除 splitExecuteLoopRecordsByBoundary、findLatestExecuteBoundaryMarker、tailExecuteLoops、compressExecuteLoopObservationsByTool、buildEarlyExecuteReactSummary、trimExecuteMessage1ByBudget 等六个函数
- 移除 executeLoopWindowLimit / executeConversationTurnLimit / executeMessage1MaxRunes 等预算常量
- msg1 不再从历史中归档上一轮 ReAct 结果,只保留真实对话流(user + assistant speak),全量注入
- msg2 不再按 loop_closed / step_advanced 边界切分"归档/活跃",直接全量注入全部 ReAct Loop 记录
- token 预算由统一压缩层兜底,prompt 层不再做提前裁剪
3. 压缩层从 Execute 专属提升为全节点通用 UnifiedCompact
- 删除 execute_compact.go(Execute 专属压缩文件)
- 新增 unified_compact.go:UnifiedCompactInput 参数化,各节点(Plan/Chat/Deliver/Execute)构造时从自己的 NodeInput 提取公共字段,消除对 Execute 的直接依赖
- CompactionStore 接口扩展 LoadStageCompaction / SaveStageCompaction,各节点按 stageKey 独立维护压缩状态互不覆盖
- 非 4 段式消息时退化成按角色汇总统计,确保 context_token_stats 仍然刷新
4. Retry 重试机制全面下线
- dao/agent.go:saveChatHistoryCore / SaveChatHistory / SaveChatHistoryInTx 移除 retry_group_id / retry_index /
retry_from_user_message_id / retry_from_assistant_message_id 四个参数,修复乱码注释
- dao/agent-cache.go:移除 ApplyRetrySeed 和 extractMessageHistoryID 两个方法
- conv/agent.go:ToEinoMessages 不再回灌 retry_* 字段到运行期上下文
- service/agentsvc/agent.go:移除 chatRetryMeta 及 resolveRetryGroupID / buildRetrySeed 等全部重试逻辑
- service/agentsvc/agent_quick_note.go:整个文件删除(retry 快速补写路径已无用)
- service/events/chat_history_persist.go:移除 retry 参数传递
5. 节点层瘦身 + 可见消息逐条持久化
- agent_nodes.go 大幅简化:Chat/Plan/Execute/Deliver 节点方法移除 ToolSchema 注入、状态摘要渲染等逻辑,只做参数转发和状态落盘
- 新增 visible_message.go:persistVisibleAssistantMessage 统一处理可见 assistant speak 的实时持久化,失败仅记日志不中断主流程
- 新增 llm_debug.go:logNodeLLMContext 统一打印 LLM 上下文调试日志
- graph_run_state.go 新增 PersistVisibleMessageFunc 类型 + AgentGraphDeps.PersistVisibleMessage 字段
- service/agentsvc/agent_newagent.go 精简主循环,注入 PersistVisibleMessage 回调;agent_history.go 精简历史构建
- token_budget.go 移除 Execute 专属预算检查,统一到通用预算
前端:
1. 移除 retry 相关 UI 和类型
- agent.ts 移除 retry_group_id / retry_index / retry_total 字段及 normalize 逻辑
- AssistantPanel.vue 移除 retry 相关 UI 和交互代码(约 700 行精简)
- dashboard.ts 移除 retry 相关类型定义
- AssistantView.vue 微调
2. ContextWindowMeter 压缩次数展示和数值格式优化
- 新增 formatCompactCount 工具函数,千位以上用 k 单位压缩(如 80k)
- 新增压缩次数显示
3.修复了新对话发消息时,user和assistant消息被自动调换的bug
仓库:无
|
2026-04-17 22:19:38 +08:00 |
|
Losita
|
dd6638f8db
|
Version: 0.9.24.dev.260416
后端:
1. Memory 预取缓存改为会话级隔离 + 管理面自动失效 + 空检索清理
- 预取缓存 key 从 smartflow:memory_prefetch:{userID} 改为 smartflow:memory_prefetch:u:{userID}:c:{chatID},隔离不同会话的记忆上下文,避免会话间互相覆盖
- 新增 DeleteMemoryPrefetchCacheByUser 方法,使用 SCAN+UNLINK 按模式批量删除指定用户所有会话的预取缓存
- ItemRepo 四个变更方法(SoftDeleteByID / RestoreByIDAt / UpdateManagedFieldsByIDAt / UpdateStatusByIDAt)通过 Model 携带 UserID,使 GORM cache deleter 可精准定位用户
- GormCachePlugin 将 MemoryItem 从忽略列表移至主动处理,新增 invalidMemoryPrefetchCache 异步失效方法
- 后台检索返回空结果时主动清除该用户所有预取缓存,避免过期记忆残留
2. 修复 RAG 召回未过滤 deleted 状态记忆的严重 bug
- MemoryCorpus.BuildRetrieveFilter 新增 status="active" 硬过滤,Milvus 向量检索直接排除已删除/已归档记忆
- 此前删除记忆后即使 MySQL 标记为 deleted,Milvus 中向量仍可被语义召回并注入 prompt
前端:无
仓库:无
|
2026-04-16 23:33:38 +08:00 |
|
LoveLosita
|
8bde981592
|
Version: 0.9.20.dev.260415
后端:
1. 修复 query_available_slots section_from/section_to 错误覆盖 duration 并使用精确匹配而非范围包含
- 更新backend/newAgent/tools/schedule/read_filter_tools.go:移除 span = exactTo - exactFrom + 1 对 duration 的覆盖;matchSectionRange
从精确匹配改为范围包含语义(slotStart < exactFrom || slotEnd > exactTo)
2. Execute 上下文窗口从硬编码裁剪改造为 80k token 动态预算 + LLM滚动压缩
- 基础设施层:AgentChat 新增 compaction 三个持久化字段,dao 新增 CRUD,Redis 新增缓存;pkg 新增 ExecuteTokenBudget常量、ExecuteTokenBreakdown 结构体、CheckExecuteTokenBudget 预算检查函数
- prompt 层:新建 compact_msg1.go / compact_msg2.go 分别实现msg1(历史对话)和 msg2(ReAct Loop)的 LLM 压缩;execute_context.go 移除 msg1 的 1400 字符/30 轮/120 字符三重裁剪和 msg2 的 8 条窗口限制,改为全量加载
- node 层:新建 execute_compact.go(compactExecuteMessagesIfNeeded:预算检查 → msg1 优先压缩 → msg2 兜底 → SSE 通知 → token 分布持久化);execute.go ReAct 循环插入 compact 调用 - 服务/API 层:AgentGraphDeps / AgentService 新增 CompactionStore 注入链路;新增 GET /api/v1/agent/context-stats 查询接口
- 启动层:cmd/start.go 注入 agentRepo 为 CompactionStore
3. 新增 Execute Context Compaction 决策报告
- 新建docs/功能决策记录/Execute_Context_Compaction_决策记录.md
前端:无 仓库:无
|
2026-04-15 22:01:37 +08:00 |
|
Losita
|
2038185730
|
Version: 0.9.2.dev.260406
后端:
1.Chat 四路由升级(二分类 chat/task → 四路由 direct_reply/execute/deep_answer/plan)
- 新建model/chat_contract.go:路由决策模型,含 NeedsRoughBuild 粗排标记
- 更新node/chat.go:四路由分流;新增 deep_answer 深度回答路径(二次 LLM 开 thinking)
- 更新prompt/chat.go:意图分类 prompt 升级为四路由 prompt;新增 deep_answer prompt
2.粗排节点(RoughBuild)全链路
- 新建node/rough_build.go:粗排节点,调用注入的算法函数,结果写入 ScheduleState 后进 Execute 微调
- 更新graph/common_graph.go:注册 RoughBuild 节点;Chat/Confirm 后可路由至粗排
- 更新model/graph_run_state.go:新增 RoughBuildPlacement/RoughBuildFunc 类型;Deps 注入入口
- 更新model/plan_contract.go:PlanDecision 新增 NeedsRoughBuild/TaskClassIDs 字段
- 更新node/plan.go:plan_done 时写入粗排标记和 TaskClassIDs
3.任务类约束元数据(TaskClassMeta)贯穿 prompt → tools → 持久化
- 更新tools/state.go:新增 TaskClassMeta;ScheduleState.TaskClasses;ScheduleTask.TaskClassID;Clone 深拷贝
- 更新conv/schedule_state.go:加载时构建 TaskClassMeta;Diff 支持 HostEventID 嵌入关系
- 更新conv/schedule_provider.go:新增 LoadTaskClassMetas 按需加载
- 更新model/state_store.go:ScheduleStateProvider 接口新增 LoadTaskClassMetas
- 更新prompt/base.go:renderStateSummary 渲染任务类约束
- 更新prompt/plan.go:注入任务类 ID 上下文和粗排识别规则
- 更新tools/read_tools.go:GetOverview 展示任务类约束
- 更新model/common_state.go:CommonState 新增 TaskClassIDs/TaskClasses/NeedsRoughBuild
4.Execute 健壮性增强(correction 重试 + 纯 ReAct 模式)
- 更新node/execute.go:未知工具名/空文本走 correction 重试而非 fatal;maxConsecutiveCorrections 提升为包级常量;新增无 plan 纯ReAct 模式;工具结果截断;speak 排除 ask_user/confirm
- 更新prompt/execute.go:新增 ReAct 模式 system prompt 和 contract
5.写入持久化完善(task_item source + 嵌入水课)
- 更新conv/schedule_persist.go:place/move/unplace 支持 task_item source,含嵌入水课和普通 task event 两条路径
- 新建conv/schedule_preview.go:ScheduleState → 排程预览缓存,复用旧格式,前端无需改动
6.状态持久化体系(Redis → MySQL outbox 异步)
- 更新dao/cache.go:Redis 快照 TTL 从 24h 改为 2h,配合 MySQL outbox
- 新建model/agent_state_snapshot_record.go:快照 MySQL 记录模型
- 新建service/events/agent_state_persist.go:outbox 异步持久化处理器
- 更新cmd/start.go + inits/mysql.go:注册快照事件处理器 + AutoMigrate
- 更新service/agentsvc/agent_newagent.go:注入 RoughBuildFunc;outbox 异步写快照;排程结果写 Redis 预览缓存
7.基础设施与稳定性
- 更新stream/sse_adapter.go:outChan 满时静默丢弃,保证持久化不被 SSE 阻断
- 更新service/agentsvc/agent.go:新增 readAgentExtraIntSlice;outChan 容量 8→256
- 更新node/agent_nodes.go:Chat 注入工具 schema;Deliver 改 saveAgentState 替代 deleteAgentState
前端:无
仓库:无
|
2026-04-06 23:15:54 +08:00 |
|
Losita
|
b1eb6bedf9
|
Version: 0.9.1.dev.260406
后端:
1.新建conv/schedule_persist.go:ScheduleState Diff 持久化,事务内逐变更写库,支持 place/move/unplace 三种操作(当前
event source)
2.新建conv/schedule_provider.go:ScheduleState 加载适配,从 DB 合并 existing events + pending task items
3.新建dao/agent_state_store_adapter.go:Redis 状态快照存取适配,实现 AgentStateStore 接口
4.新建service/agentsvc/agent_newagent.go:newAgent service 集成层,串联 LLM
客户端、ScheduleProvider、SchedulePersistor 和 ChunkEmitter
5.更新node/execute.go:接入 SchedulePersistor(写操作确认后持久化)、完善 confirm resume 路径(PendingConfirmTool
恢复分支)、correction 机制增加连续失败计数上限
6.更新api/agent.go + cmd/start.go:接入 newAgent service,完成 API 层路由注册
7.新建node/execute_confirm_flow_test.go + llm_tool_orchestration_test.go:确认回路 7 个测试 + 端到端排课 5
个测试全部通过
8.新建newAgent/ARCHITECTURE.md + ROADMAP.md:全链路架构文档和缺口分析
9.代码审查整理:提取 prompt/base.go(通用 buildStageMessages 等5个辅助)、tools/args.go(参数解析辅助);write_tools
尾部辅助移入 write_helpers;修复 queryRangeSpecific sb.Reset() 逻辑缺陷和 Unplace guest Duration
未恢复;ScheduleStateProvider/SchedulePersistor 归入 state_store.go;emitter 内部 Build*Text 函数降级为私有
前端:无
仓库:无
|
2026-04-06 15:33:34 +08:00 |
|
LoveLosita
|
17e3615f74
|
Version: 0.8.8.dev.260403
后端:
1.新建Deliver节点:LLM生成任务总结,失败降级到机械格式化,伪流式输出
2.新建Confirm节点:确认卡片推送与状态持久化
3.新建Interrupt节点:追问/确认/默认中断三种处理路径
4.实现状态持久化体系:model层定义AgentStateStore接口+AgentStateSnapshot快照,dao/cache.go新增Redis CRUD,agent_nodes层每节点自动存快照、Deliver完成后清理
5.所有model struct补充JSON tags,支持Redis序列化/反序列化
前端:无
仓库:无
|
2026-04-03 20:36:31 +08:00 |
|
Losita
|
468367d617
|
Version: 0.8.3.dev.260328
后端:
1.彻底删除原agent文件夹,并将现agent2文件夹全量重命名为agent(包括全部涉及到的文件以及文档、注释),迁移工作完美结束
2.修复了重试消息的相关逻辑问题
前端:
1.改善了一些交互体验,修复了一些bug,现在只剩少的功能了,现存的bug基本都修复完毕
全仓库:
1.更新了决策记录和README文档
|
2026-03-28 18:00:31 +08:00 |
|
LoveLosita
|
5fc9548420
|
Version: 0.8.2.dev.260327
后端:
1.修复了消息重试链路的相关问题
2.新增redis乐观写消息机制,即使前端在重试完消息后立刻刷新,也能在redis里面读到数据
前端:
1.修了一些bug
|
2026-03-27 20:39:05 +08:00 |
|
Losita
|
ddb0d9cc17
|
Version: 0.8.1.dev.260326
后端:
1.获取agent聊天历史记录接口做了如下更改:
(1)对reasoning_content也做了存储,同步更改了mysql和redis缓存的读写逻辑
(2)为了承接前端的重试/修改消息的逻辑,进行了一些代码和表单上的改动
前端:
1.agent页面新增了很多小组件,改善交互体验
2.新增重试消息/修改消息并重新发送功能,前者有bug,可能前后端都有问题,待修复。
|
2026-03-26 22:15:16 +08:00 |
|
Losita
|
e5b27df80d
|
Version: 0.7.2.dev.260322
feat(schedule-plan): ✨ 重构智能排程链路并修复粗排双节对齐问题
- ✨ 新增“对话级排程状态持久化”能力:引入 `agent_schedule_states` 模型/DAO,并接入启动迁移
- ✨ 智能排程图升级:补齐小幅微调(quick refine)分支,完善预算/并发/状态字段流转
- ✨ 预览链路增强:完善排程预览服务读写与桥接逻辑,新增本地预览页 `infra/schedule_preview_viewer.html`
- ♻️ 缓存治理统一:将相关缓存处理收口到 DAO + `cache_deleter` 联动清理,移除旧散落逻辑
- 🐛 修复粗排核心 bug:禁止单节降级,强制双节并按 `1-2/3-4/...` 对齐;修复结束日扫描边界问题
- ✅ 新增粗排回归测试:覆盖孤立单节、偶数起点双节、Filler 对齐等关键场景
|
2026-03-22 13:50:10 +08:00 |
|
Losita
|
f3f9902e93
|
Version: 0.7.1.dev.260321
feat(agent): ✨ 重构智能排程分流与双通道交付,补齐周级预算并接入连续微调复用
- 🔀 通用路由升级为 action 分流(chat/quick_note_create/task_query/schedule_plan),路由失败直接返回内部错误,不再回落聊天
- 🧭 智能排程链路重构:统一图编排与节点职责,完善日级/周级调优协作与提示词约束
- 📊 周级预算改为“有效周保底 + 负载加权分配”,避免有效周零预算并提升资源利用率
- ⚙️ 日级并发优化细化:按天拆分 DayGroup 并发执行,低收益天(suggested<=2)跳过,单天失败仅回退该天结果并继续全局
- 🧵 周级并发优化细化:按周并发 worker 执行,单周“单步动作”循环(每轮仅 1 个 Move/Swap 或 done),失败周保留原方案不影响其它周
- 🛰️ 新增排程预览双通道:聊天主链路输出终审文本,结构化 candidate_plans 通过 /api/v1/agent/schedule-preview 拉取
- 🗃️ 增补 Redis 预览缓存读写与清理逻辑,新增对应 API、路由、模型与错误码支持
- ♻️ 接入连续对话微调复用:命中同会话历史预览时复用上轮 HybridEntries,避免每轮重跑粗排
- 🛡️ 增加复用保护:仅当本轮与上轮 task_class_ids 集合一致才复用;不一致回退全量粗排
- 🧰 扩展预览缓存字段(task_class_ids/hybrid_entries/allocated_items),支撑微调承接链路
- 🗺️ 更新 README 5.4 Mermaid(总分流图 + 智能排程流转图)并补充决策文档
- ⚠️ 新增“连续微调复用”链路我尚未完成测试,且文档状态目前较为混乱,待连续对话微调功能真正测试完成后再统一更新
|
2026-03-21 22:08:35 +08:00 |
|
Losita
|
cd95aeeaaa
|
Version: 0.6.8.dev.260317
- 🧹 删除 `docs/apifox` 目录,接口契约统一迁移并维护于 Apifox 云端
- ✨ 新增“取消任务完成状态”接口
|
2026-03-17 22:54:07 +08:00 |
|
LoveLosita
|
bc56d471a8
|
Version: 0.6.7.dev.260317
✨ feat(agent): 新增 Token 配额门禁中间件(Redis 快照 + 封禁键 + 7 天懒重置)
- 🚪 在 `POST /api/v1/agent/chat` 挂载 `TokenQuotaGuard`,在请求进入业务逻辑前完成额度校验
- ⚡ 新增 Redis 配额快照与封禁键机制:超额用户命中封禁键后可快速拦截,降低重复查库带来的开销
- 🗃️ 新增用户配额 DAO 能力:按需读取 `token_limit`、`token_usage`、`last_reset_at`,并支持基于“到期条件更新”的懒重置
- 🔄 实现 7 天懒重置策略:用户访问时若检测到配额周期已到期,则重置 `token_usage` 并清理封禁状态
- 🚫 新增超额响应码 `40051`,用于标识 `token usage exceeds limit`
|
2026-03-17 19:46:08 +08:00 |
|
LoveLosita
|
96be3e2a02
|
Version: 0.6.6.dev.260317
✨ feat(task,agent): 新增任务完成接口,并打通聊天全链路 Token 记账
- ✅ 新增“标记任务为完成”接口,并补充幂等保护,避免重复完成导致状态污染
- 📊 为聊天链路补充 Token 统计能力:
- 流式主对话链路直接读取模型 `usage`
- Agent 链路通过 `Eino callback + ctx` 聚合 `Generate usage`
- 在流式场景下补齐缺失的 `usage` 数据
- 🧾 按口径 B 完成 Token 落库:
- 用户消息 `token` 记为 `0`
- 助手消息记录本轮总 `token`
- 持久化时同步更新 `chat_histories.tokens_consumed`、`agent_chats.tokens_total`、`users.token_usage`
- 🔄 异步标题生成产生的 Token 通过 Outbox 事件完成账本增量调整,保证统计口径一致
- 📝 同步更新 `AGENTS.md` 与 `.gitignore`
- 📚 小幅更新 README 说明文档
|
2026-03-17 18:23:07 +08:00 |
|
Losita
|
84371e2ff8
|
Version: 0.6.3.dev.260316
✨ feat(task): 新增四象限任务懒触发自动平移链路(读时派生 + Outbox 异步收敛)
- 🧩 为 `Task` 模型新增 `urgency_threshold_at` 字段,并补充复合索引 `user_id,is_completed,urgency_threshold_at,priority` 及相关事件 payload
- ♻️ 重构 `TaskService.GetUserTasks`:调整为“缓存/DB 读取原始任务 -> 读时派生优先级(`2 -> 1`、`4 -> 3`)-> 通过 `SETNX` 去重后发布平移事件”的处理链路
- 🚚 新增任务平移事件链路:
- `service/events/task_urgency_promote.go`
- 事件类型:`task.urgency.promote.requested`
- 支持 `Publish` + `RegisterHandler` + `ConsumeAndMarkConsumed` 的事务化消费流程
- 🛡️ 为 `TaskDAO` 新增幂等批量更新能力 `PromoteTaskUrgencyByIDs`,采用条件更新策略,仅对“达到阈值且未完成”的任务生效
- 🔌 更新启动接线逻辑:注册任务平移 handler,并将 `eventBus` 注入 `NewTaskService`
- 🧹 修复并升级任务缓存层,统一为 `[]model.Task` 原始模型缓存;同时清理误导性注释,并补充详细中文步骤化注释
- 🔗 打通 `QuickNote` 链路中的 `urgency_threshold_at` 透传与校验,覆盖 `state` / `tool` / `nodes` / `prompt` / `agent_quick_note` 全链路
- 💾 写库时补充落库 `task.UrgencyThresholdAt`
- 📝 新增功能决策记录
之前画的饼正在一块块填上~这一块饼填上之后,第一批开发的后端部分基本已经搞定了。后面的功能全都是天马行空的拓展功能。
|
2026-03-16 20:33:33 +08:00 |
|
Losita
|
daeff0afab
|
Version: 0.6.2.dev.260316
✨ 新增获取用户对话列表接口,采用分页读库方式实现,暂未引入缓存,以保证数据一致性
|
2026-03-16 16:53:14 +08:00 |
|
Losita
|
626fc700d2
|
Version: 0.6.1.dev.260316
♻️ refactor(outbox): 抽离通用事件总线,并完成 event_type-only 收口
- ✨ 新增 `infra` 层通用 `EventBus` / `EventContract`,统一事件发布与消费协议
- 🔄 将聊天持久化链路调整为通过 `service/events` 注册 handler 并发布事件,进一步解耦业务逻辑与异步处理流程
- 🧹 移除 `chat_history_async` 旧适配实现,以及基于 `biz_type` 的兼容分发逻辑
- 📝 更新 Outbox 异步持久化决策记录,明确保留方案 A,并正式启用方案 B
- 📚 同步更新 README 中关于 Outbox + Kafka 可靠异步链路的说明
- 🚚 当前 `outbox + kafka` 已与项目业务链路完全解耦,沉淀为通用、可靠性更强的消息队列能力;后续将参考消息队列的典型使用方式,逐步扩展到更多业务场景
- ✨ 补充跨不同分类事务管理器中的 `agent dao` 注册与接入支持
|
2026-03-16 13:00:26 +08:00 |
|
Losita
|
712bcd3605
|
Version: 0.6.0.dev.260315
新增对话落库对话计数原子自增机制,确保聊天记录和消息计数二者同时落库,保证一致性
|
2026-03-15 23:38:46 +08:00 |
|
Losita
|
d91784d65f
|
Version: 0.5.9.dev.260315
✨ 为原有流式聊天链路补充“聊天结束后异步调用 LLM 生成对话标题并落库”的机制,相关测试已通过
📄 新增“获取对话元信息”接口,便于前端统一获取对话的各类信息,包括上述异步生成的标题
|
2026-03-15 19:54:49 +08:00 |
|
Losita
|
7603a7561a
|
Version: 0.5.8.dev.260315
♻️ refactor(agent): 拆分 agentsvc,并增强 quicknote/outbox 注释与可维护性
- 📦 将 Agent 服务实现从 `service` 根目录迁移到 `service/agentsvc`,包含 `agent.go`、`agent_quick_note.go` 及相关测试
- 🔌 新增 service 层兼容桥接 `agent_bridge.go`,保持 `service.NewAgentService` 与 `*service.AgentService` 现有调用方式不变
- 📝 为 `quicknote` 补充高密度中文步骤化注释,覆盖 `graph` / `runner` / `nodes` / `tool` / `state` / `prompt`,明确职责边界、分支条件、重试与兜底策略
- 🧭 为 `infra/outbox` 与 service agent 链路补充详细中文注释,覆盖状态机流转、幂等处理、失败回写与异步持久化语义
- ✅ 统一格式化相关文件,并通过全量后端测试:`go test ./...`
📝 chore(docs): 更新 AGENTS.md 注释强制规范
- 📚 追加“注释规范(强制)”与“注释风格示例”
- ✍️ 明确复杂逻辑必须使用步骤化注释、跨文件调用需写调用目的、注释需同步维护
|
2026-03-15 18:08:33 +08:00 |
|
Losita
|
912a6d8cfe
|
Version: 0.5.0.dev.260310
refactor: ♻️ 调整 Outbox 写入时序并移除 Kafka 首包同步投递逻辑
* 将 `outbox` 表写入逻辑后置到 LLM 请求之后,减少主链路阻塞
* 删除 Codex 生成的 Kafka 首包同步投递抽象逻辑,简化消息发送流程
* 优化 SSE 首字到达时间,整体降低约 1s 延迟
* 当前在请求 LLM 之前的流程全部为 Redis 操作,显著降低 IO 开销
docs: 📊 保留 SSE 链路性能打点逻辑
* 保留原有 SSE 全链路打点计时代码,便于后续性能排查与分析
* 当前默认注释,如需使用可手动启用进行性能调试
|
2026-03-10 23:10:09 +08:00 |
|
Losita
|
959049db42
|
Version: 0.4.9.dev.260309
feat: 🗄️ 新增自动建表功能
* 新增项目启动时自动建表能力,减少手动初始化数据库步骤
* 解决 `agent_chat` 与 `chat_history` 结构体互相持有对方结构体用于 `preload` 导致的循环依赖问题
* 修复因结构体互相依赖引发的建表失败问题,保证数据库初始化流程稳定
feat: 🐳 Docker Compose 引入 Kafka 分区自动初始化
* 更新 `docker-compose` 配置,引入 Kafka partition 自动初始化脚本
* 保证服务启动后 Topic 即具备可用 partition,实现开箱即用
* 修复转移环境后 MySQL 等容器数据无法持久化的问题,统一改为使用命名卷进行数据持久化
docs: 📚 补充 Outbox + Kafka 持久化链路注释
* 为 Outbox + Kafka 消息持久化链路补充详细代码注释
* 提升异步消息链路的可读性与维护性
* 当前代码 Review 进度约 50%
undo: ⚠️ Kafka 初始化阶段出现消息短暂堆积
* 初次初始化项目时观察到消息在 Kafka 中短暂堆积现象
* 后续被消费者一次性消费且未再次复现
* 已在生产者启动、消费者启动以及消息消费流程中增加控制台日志输出,降低系统黑箱程度
* 后续若条件允许将进一步排查该现象的触发原因
|
2026-03-09 23:25:25 +08:00 |
|
LoveLosita
|
1ed558b488
|
Version: 0.4.8.dev.260308
feat: 🏗️ 实现 Agent 消息可靠异步持久化(Outbox + Kafka)
* 新增 Outbox 数据模型与消息载荷定义,位于 `backend/model/outbox.go`
* 新增 Outbox DAO,支持创建、扫描、发布标记、失败重试与消费落库事务,位于 `backend/dao/outbox.go`
* 新增 Kafka 基础封装,包含配置、生产者、消费者与消息包装,位于 `backend/kafka` 文件夹
* `config.go`:Kafka 配置文件
* `producer.go`:Kafka 生产者
* `consumer.go`:Kafka 消费者
* `envelope.go`:消息封装处理
* 新增异步管道服务,处理扫描投递与消费落库,位于 `backend/service/agent_async_pipeline.go`
* 接入 Agent 聊天链路的可靠持久化,替换原有 goroutine 直接写库逻辑,位于 `backend/service/agent.go`
* 启动流程接入管道初始化与启动,位于 `backend/cmd/start.go`
* 增加 Kafka 配置项,更新 `backend/config.yaml` 与 `backend/config.example.yaml`
* 引入 Kafka 依赖:`github.com/segmentio/kafka-go`(见 `backend/go.mod`, `backend/go.sum`)
fix: 🐛 修复首启偶发 user 消息重复落库问题
* 解决因 Outbox 状态并发回写竞态,导致 `consumed` 被晚到的 `published` 覆盖的问题
* 在 `MarkPublished` 中增加条件,避免覆盖已标记为 `consumed` 或 `dead` 的消息,修复位置:`backend/dao/outbox.go`
perf: ⚡ 更新 Docker Compose 配置与 Kafka 相关服务
* 更新 `docker-compose.yml` 文件,新增 Kafka 配置与服务
fix: 🧹 优化缓存删除逻辑
* 在 `cache deleter` 中忽略了 `model.AgentOutboxMessage`、`model.ChatHistory` 与 `model.AgentChat` 这三个结构体
* 防止这些结构体对应的表单删除缓存时,导致控制台消息爆炸
|
2026-03-08 12:53:54 +08:00 |
|
LoveLosita
|
4906f814fd
|
Version: 0.4.6.dev.260307
feat: 🎯 新增 Token 估算与裁剪工具
* 在 `backend/pkg/token_budget.go` 中新增 Token 估算与裁剪工具
* 最大上下文 Token 数量设置为 224000,预留冗余 28000
* 从最旧消息开始裁剪,直到历史 Token 数量低于预算
* 根据裁剪后的历史消息数量动态计算 Redis 动态窗口大小
refactor: ♻️ 接入 Token 裁剪至 Service 主流程
* 在 `backend/service/agent.go` 中接入 Token 裁剪逻辑
* 先从历史数据获取(缓存未命中则查询数据库)
* 按 Token 预算裁剪历史消息,裁剪后再喂模型
* 根据裁剪结果动态调整 Redis 会话窗口
refactor: ♻️ 改造 Redis 历史队列为会话级动态窗口
* 在 `backend/dao/agent-cache.go` 中新增 `SetSessionWindowSize` 与 `EnforceHistoryWindow`
* `PushMessage` 和 `BackfillHistory` 方法使用会话动态窗口,而非固定 20 条历史消息
* 默认窗口大小提升至 128,但会被会话动态窗口值覆盖
|
2026-03-07 16:37:07 +08:00 |
|
LoveLosita
|
26c350f378
|
Version: 0.4.4.dev.260307
feat: 🚀 增强会话管理与缓存机制
* 会话 ID 空值兜底,若 `conversation_id` 为空时自动生成 UUID
* 在响应头写入 `X-Conversation-ID`,供前端使用,保持同一会话状态
perf: ⚡ 会话状态缓存优化
* 当缓存未命中但 DB 已确认/创建会话后,调用 `SetConversationStatus` 回写 Redis
* 缓存写回失败时记录日志,不中断聊天主流程,确保业务流畅性
fix: 🐛 修复历史消息顺序问题与编译错误
* 修复历史消息顺序问题,保证返回的 N 条历史消息按时间正序喂给模型
* 通过反转 `created_at desc` 查询结果的切片,确保模型输入顺序正确
* 修复 `fmt.Errorf` 参数不匹配问题,修正编译错误
* 整理 `agent-cache.go` 为标准 UTF-8 编码,避免 Go 编译报错 `invalid UTF-8 encoding`
feat: 🛠️ 独立构建 MCP 服务器
* 使用 `Codex` 构建独立于后端的 MCP 服务器,简化与 Codex 的协作
* 通过该服务器方便 Codex 直接测试和查看 Redis 与 MySQL 中的数据
|
2026-03-07 15:25:40 +08:00 |
|
LoveLosita
|
204e78d1fe
|
Version: 0.4.3.dev.260305
perf: ⚡ 引入 Redis 缓存优化上下文读写性能
* 为上下文写入与提取逻辑新增 Redis 缓存层,减少数据库直接读取开销
* 在 Redis 中实现简单滑动窗口裁剪策略,控制上下文消息数量并降低存储压力
refactor: ♻️ 上下文持久化逻辑改为异步执行
* 对写缓存与写数据库逻辑引入 `goroutine` 实现简单异步处理
* 降低接口阻塞时间,提高 Agent 对话接口响应性能
* 当前尚未完善异步流程中的错误传递与处理机制,后续将补充完整错误链路管理
|
2026-03-05 22:36:53 +08:00 |
|
LoveLosita
|
f9d52e0c5e
|
Version: 0.4.1.dev.260304
feat: 💬 新增对话创建与上下文记忆机制
* 新增对话的创建与使用功能,实现会话级上下文隔离
* 实现上下文保存与传递机制,使模型具备持续对话记忆能力
* 引入滑动窗口策略控制上下文规模
* 当前窗口大小限制为 20 条消息,超过后自动丢弃最早消息以控制上下文长度
docs: 📝 更新示例配置文件
* 更新示例配置文件,新增 `agent` 相关配置信息
* 明确 Agent 模块运行所需参数,方便本地部署与环境初始化
undo: ⚠️ Agent 上下文读取性能待优化
* 当前测试中模型响应速度偏慢
* 计划后续将上下文暂存至缓存层,以减少读取与拼接开销并提升响应速度
|
2026-03-04 19:56:08 +08:00 |
|
LoveLosita
|
fca4004024
|
Version: 0.3.9.dev.260226
fix: 🐛 修复智能排程接口任务块信息缺失与数据插入错误
* 修复智能排程接口返回的任务块信息缺失问题,确保任务数据完整返回
* 修复 `UserInsertTaskItemRequestToModel` DTO 函数未填入起始时间字段的问题,解决多个接口插入数据时出现 500 错误
* 错误源自上次更新“获取最近完成动态任务接口”时,未同步更改数据库字段对应逻辑
* 将智能排程接口的 `ctx` 超时恢复为 1 秒,优化接口响应性能
feat: 🎯 新增正式应用日程接口
* 新增正式应用日程接口,并完成功能测试,确保业务流程无异常
|
2026-02-26 20:07:55 +08:00 |
|
LoveLosita
|
f934668838
|
Version: 0.3.6.dev.260223
feat: 🚀 新增智能编排日程接口与算法模块
* 新增智能编排日程接口,实现自动生成周维度课程安排
* 抽离核心算法至 `Logic` 包,统一存放调度与排课相关算法逻辑,优化项目结构分层
* 大多数用例测试通过,当前存在少量边界用例下“排课时间是否充足”的误判问题
* 返回的周视图数据在极端场景下存在数量偏差,待进一步完善边界控制
fix: 🐛 修复批量导入课程接口 500 错误
* 修复批量导入课程接口中未在 `event` 结构体填写时间字段的问题
* 解决因时间字段为空导致的服务端 500 错误,保证数据完整性
refactor: ♻️ 新增入参校验逻辑保障调度稳定性
* 在添加任务类时新增入参校验逻辑
* 避免非法数据进入调度流程,确保自动编排日程接口执行稳定
docs: 📚 更新 README 智能编排算法说明
* 补充智能编排日程算法的设计思路与实现说明
undo: ⚠️ 追加导入课程后缓存未自动失效
* 追加导入课程后未自动删除对应周安排缓存,存在数据不一致风险
* 当前未能稳定复现,计划后续定位缓存失效时序与触发条件问题
|
2026-02-23 21:49:46 +08:00 |
|
LoveLosita
|
dad1eade93
|
Version: 0.3.2.dev.260214
feat: ⏳ 新增获取当前正在进行的任务接口并完成测试
- 若当前为上课时间,返回当前任务 📚
- 若当前为下课/空闲时间,返回下一个任务 ➡️
- 若存在嵌入任务,支持嵌套返回结构 🧩
- 接口已测试通过 🧪
docs: 📝 小幅更新 README
fix: 🐛 修复获取最近已完成任务列表接口的遗漏问题
- 修复无法获取嵌入在课程中的任务问题 🔧
fix: 🐛 修复删除日程接口的字段遗漏问题
- 若删除的是单独任务块,补充删除 task_item 表的 embedded_time 字段
- 避免数据残留与状态异常 ✅
|
2026-02-14 21:46:02 +08:00 |
|
LoveLosita
|
63500b3b2a
|
Version: 0.3.0.dev.260212
refactor: ♻️ 基于 gorm 钩子实现自动缓存失效机制,再也不用牵一发而动全身写删缓存逻辑了~
- 通过 gorm hook 监听 MySQL 数据变更 🧩
- 自动删除对应表相关缓存,实现缓存失效自动化 🔄
- 移除原本写在 sv 层的手动删缓存逻辑 🧹
- 解耦业务逻辑与缓存控制,结构更加清晰 ✅
fix: 🐛 修复将任务类加入日程接口的时间字段遗漏问题
- 由于前版本 MySQL 表结构更新
- 漏写插入起始时间字段逻辑,导致500报错,现已补充 ⏱️
fix: 🐛 修复获取最近已完成任务列表接口的多个问题
- 移除不应存在的幂等键 🔁
- 修复“一个event输出多次”的问题(原因出自 dto 转换函数) 🔧
undo: ⚠️ 删除任务类接口未处理已安排任务块的解除逻辑
- 当前删除任务类时,未解除已被安排的任务块
- 该逻辑存在缺陷,计划在后续版本内修复 🛠️
|
2026-02-12 21:34:01 +08:00 |
|
LoveLosita
|
6dd1f656dc
|
Version: 0.2.6.dev.260211
feat: 🕒 为 schedule_events 表新增 start_time 与 end_time 字段
- 新增 start_time 与 end_time 两列
- 支持最近已完成任务列表接口
- 为后续获取当前正在进行的任务接口做准备 🚧
feat: ✅ 新增最近已完成任务列表接口并通过测试
- 完成接口实现与测试 🧪
- 当前 sv 层使用测试时间进行逻辑验证
- ⚠️ 生产环境需改回使用当前时间
|
2026-02-11 21:08:50 +08:00 |
|
LoveLosita
|
e5a4114202
|
Version: 0.2.5.dev.260211
feat: 🗑️ 新增删除任务类接口并实现级联删除
- 通过 task_class 与 task_item 两张表建立级联关系 🔗
- 删除 task_class 时自动删除关联的 task_item
- 保证数据一致性,避免产生孤立数据 ✅
|
2026-02-11 18:44:13 +08:00 |
|
LoveLosita
|
a2da9a2aa4
|
Version: 0.2.4.dev.260211
perf: 🚀 为获取任务队列中的任务与今日日程一览接口新增缓存
- 为获取任务队列中的任务接口增加缓存机制 ⚡
- 为今日日程一览接口增加缓存机制 📅
- 提升接口访问性能与响应速度 ✅
|
2026-02-11 17:31:12 +08:00 |
|
LoveLosita
|
cf9a3c79e4
|
Version: 0.2.3.dev.260211
fix: 🐛 修复刷新 Token 接口错误返回问题
- 当 token 本身存在问题时,改为返回 400 业务错误
- 不再错误地返回 500 服务端异常状态码 ✅
feat: 🔁 新增基于 X-Idempotency-Key 与 Redis 的通用幂等中间件
- 基于 X-Idempotency-Key 实现请求幂等控制 🧩
- 记录 UUID 及对应返回结果至 Redis
- 当相同 UUID 重复请求时,直接返回缓存结果 ⚡
- 应用于所有涉及增删改操作的接口
- 解决部分接口未实现幂等性的问题 🔒
|
2026-02-11 16:16:07 +08:00 |
|
LoveLosita
|
0bc06963ee
|
Version: 0.2.2.dev.260210
feat: 🗑️ 新增删除任务块接口
- 实现 schedules、schedule_events 与 task_items 三表的联动删除
- 保证数据一致性,避免遗留脏数据 ✅
|
2026-02-10 22:05:59 +08:00 |
|
LoveLosita
|
d5f0b8da63
|
Version: 0.2.1.dev.260210
feat: 🚦 新增基于 Redis 令牌桶的限流中间件
- 使用 Redis 实现令牌桶算法进行限流 🪣
- 覆盖除登录、注册、刷新 token 以外的所有接口 🔒
fix: 🐛 修复任务块添加到日程接口可修改已安排任务时间的问题
- 禁止通过该接口直接修改已安排任务块的时间
- 修正不合理的业务逻辑,保证数据一致性 ✅
|
2026-02-10 20:52:06 +08:00 |
|
LoveLosita
|
d07234e183
|
Version: 0.2.0.dev.260210
feat: 🗑️ 新增删除单个课程与解除安排日程接口
- 逻辑复杂,初版接口写完后才发现需求需要传切片
- 针对需求修改,通过大 for 循环和事务处理来解决问题 🔄
refactor: 🔧 移除部分冗余的用户 ID 验证逻辑
- sv/schedule.go 中,进来的 ID 已通过 redis 黑名单与 JWT 保护验证
- 去除重复的数据库查验,优化了代码流程 🛠️
refactor: 🔄 重构 API 层业务错误判断逻辑
- 抛弃了原有的手动比对方式,封装进 `respond` 包,简化判断流程
- 未来不再手动遍历数据链路,提升了开发效率 🧹
undo: ⚠️ 修复任务块添加到日程的接口问题(待修复)
- 接口允许直接修改已经安排的任务时间,且重复执行时未被禁止
- 此逻辑存在问题,计划在下个版本修复 🔧
undo: ⚠️ 重测接口的幂等性与其他特性
- 当前接口幂等性等特性尚未专门测试,后续计划重测所有接口
- 测试不充分,待进一步完善 🔄
undo: ⚠️ 修复刷新 token 接口错误处理问题
- 当前接口将 token 本身的错误以 500 错误返回,需修复此问题 🛠️
|
2026-02-10 19:51:05 +08:00 |
|
LoveLosita
|
6d857d16c2
|
Version: 0.1.4.dev.260208
feat: 📆 新增查看用户整周日程接口
|
2026-02-08 20:22:49 +08:00 |
|
LoveLosita
|
79b6be5f40
|
Version: 0.1.3.dev.260208
refactor: ♻️ 重命名部分接口接收器以避免与 dao 层包名冲突
- 调整部分接口接收器命名,避免与 dao 层包名重名 🧩
feat: 📅 新增获取用户今日日程接口并完成实现
fix: 🐛 修复现实日期与相对日期转换逻辑中的初始化时序问题
- 修复 conv/time.go 中日期转换函数的一个 bug ⏱️
- 解决 viper 在包级变量初始化时机过早的问题
- 避免因过早初始化导致无法读取配置中的学期开学/结束时间 📆
|
2026-02-08 19:09:40 +08:00 |
|
LoveLosita
|
75a44f2edd
|
Version: 0.1.2.dev.260207
feat: ⚠️ 批量导入课程接口支持冲突预检测与冲突提示
- 批量导入课程接口支持预先检测冲突
- 返回并展示具体发生冲突的课程信息 📚💥
- 补全此前规划的冲突提示功能(把大饼补上了 🍞)
refactor: 🧱 使用工作单元模式管理 dao 层事务
- 引入工作单元模式(Unit of Work)统一管理 dao 层
- 新建全局事务,使跨 repo 的 gorm 事务管理更加方便 🔁
fix: 🐛 修复将任务块添加进日程接口的多个问题
- 修复核心逻辑 bug(费了老大劲 😵💫)
- 补充并覆盖该接口的多种异常与错误场景测试 🧪
|
2026-02-07 22:08:13 +08:00 |
|
LoveLosita
|
f4bea0576c
|
feat: 🗓️ 新增任务块排期能力并完善课程与日程模型
Version: 0.1.1.dev.260207
- 新增并测试通过将任务块排进日程接口 ✅
- 批量导入课程接口增加单双周功能,支持只在单双周上课的课程 📚
- 任务块时间定位逻辑调整为「第几周-周几」模式 🧭
refactor: 🔨 重构时间与日程数据结构
- 完成绝对日期与相对时间的转换逻辑 🔄
- 后续可根据需求灵活决定时间的传入与输出类型
- 再次重构 schedule 表单结构
- 拆分为 schedule_event(单)与 schedule(多)
- 建立前者对后者的一对多关系 🧩
fix: 🐛 大幅调整表结构与业务逻辑,修复大量历史遗留 bug 🔥
|
2026-02-07 16:33:30 +08:00 |
|