agent-98 面板批次: - 会话管理面板改接 history.ListSessions(主web+次级) + 新建次级会话按钮 - 记忆面板手动添加入口 POST /admin/memories(owner) - 知识库真正实现 IndexDocument(分块+落projectindex) + POST /admin/rag 导入端点 - 三面板空态诚实表述(去除'后端M10+提供') - RAG嵌入降级到keyword/line(无直属embedder,不伪造语义,符合红线) agent-99 design/16 §4.6: - model.Message.SenderName + 迁移0006 sender_name 列 - 第三方身份边界: session.ResolveActor判定(非LLM猜) + [第三方·昵称]前缀(不改源content) - 群聊/陌生人落独立sess-xxx(persistIsolated),不写主会话,不广播 - 黑/白名单(allowGroups/denyGroups/allowUsers/denyUsers)最前拦截,不进LLM - 多账号 CHANNELS_JSON 配置 + 每平台多实例 - 管理只读 GET /admin/channels/{platform}/messages(该平台非主人消息流) 实机验证(JWT): 会话管理返回主会话web / 记忆添加成功 / RAG导入documents非空+Cyrene命中; 后端build/vet/test全绿 + 前端build绿
- agent-96: chat_messages 加 platform 列(迁移0004) + IM主人私聊落主会话web(带platform) + 前端按平台过滤契约 + message_persisted 带 platform(复用 BroadcastPersisted) - agent-97: chat_messages 加 device_id 列(迁移0005) + history.Message.DeviceID + Web发消息带deviceId(localStorage getClientId) + IM persistToMain 带 deviceID + 前端气泡展示 SourceLabel + 修主会话基础2个bug(fn scanMessage语法/DDL缺列) - design/16 §4.4(平台) + §4.5(deviceID) 已入档 - 实机: POST /chat 带 deviceId 读回 user/assistant 均带 deviceId+platform; 后端 build/vet/test 绿 + 前端 build 绿 - 红线: 身份靠 actor 元数据; 禁止 shell 读 .env(JWT冒烟由主会话跑)
- runtime/history: Store + HistoryStore 接口(Append/List 游标分页/Recent/DeleteSession/NewSubSession/ListSessions),主会话固定 web、次级 web:<uuid> - db 迁移 0003: chat_sessions + chat_messages + idx_chat_msgs_session_created(事务幂等) - gateway: GET/POST /sessions、GET /sessions/{id}/messages 热分页、DELETE /sessions/{id}(主不可删 403);Deps.History 可空注入 - 编排层落库: session_persist.go(submitInternal 写用户消息、completeTurn 写助手消息,拒绝的消息不落库) - WS: wsEvent 加 sessionId 定向 + history 回放帧(握手上行后回放主会话最新 50 条,thinking 剥离) - wire.go 装配 History 到 gateway.Deps.History - 端到端实测: POST /sessions 建次级 201 / GET /sessions 列表 / POST /chat 后 /messages 读到 user+assistant / DELETE 次级成功 / DELETE 主会话 403