kurihada
|
9f456c1029
|
refactor(storage): 重构消息存储为 2-message 格式
采用 OpenCode 风格的消息存储架构:
- 只有 user 和 assistant 两种角色,移除 tool/system
- ToolPart 使用状态机模式 (pending → running → completed/error)
- 新增 toModelMessages() 转换函数用于调用 AI SDK
- 删除 message-merger.ts,存储层直接返回正确格式
主要改动:
- parts.ts: ToolState 状态机(pending/running/completed/error)
- message.ts: 移除 system role,添加 parentId 关联
- converter.ts: 新增 toModelMessages() 格式转换
- manager.ts: 重构 syncMessages/partsToModelMessages
- sessions.ts: 简化路由,直接从 Core Storage 读取
|
2025-12-15 13:35:32 +08:00 |
|
kurihada
|
eda2ccb171
|
feat(api): 实现消息合并 API,支持工具调用显示
- 新增 MergedMessage、ToolCallInfo 类型定义
- 创建 message-merger.ts 消息合并工具
- 更新 sessions 路由使用合并后的消息格式
- 前端新增 ToolCallsDisplay 组件展示工具调用
- 工具调用显示状态、时长,可展开查看参数和结果
|
2025-12-15 12:21:16 +08:00 |
|
kurihada
|
527692ec03
|
refactor(storage): 采用 OpenCode 风格三层存储结构
重构消息存储系统,从"每条消息一个文件"改为分层存储:
- Session → Message → Parts 三层结构
- 12 种 Part 类型(TextPart, ToolPart, ReasoningPart 等)
- ToolPart 状态机(pending → running → completed/error)
- 通用 Storage API(read/write/list/remove)
新增文件:
- parts.ts: Part 类型定义(Zod schema)
- message.ts: MessageInfo 类型定义
- id.ts: ID 生成器
- storage/: 分层存储实现
删除旧文件:
- storage.ts, types.ts, migration.ts
存储路径:
~/.local/share/ai-assist/
├── session/{projectId}/{sessionId}.json
├── message/{sessionId}/{messageId}.json
├── part/{messageId}/{partId}.json
└── todo/{sessionId}.json
|
2025-12-15 11:16:10 +08:00 |
|
kurihada
|
b8fcb65f73
|
fix(server): 修复消息持久化问题
- 在 adapter.ts 中为 Agent 绑定 Core SessionManager
- 添加 getOrCreateSessionManager 函数创建和恢复会话
- 修改 getOrCreateAgent 为异步函数
- 在 sessions.ts 中转换 AI SDK 消息格式为字符串
|
2025-12-15 10:45:58 +08:00 |
|
kurihada
|
9e55237dae
|
fix(ui): 修复 React key 警告和 forwardRef 问题
- ChatMessage/SessionItem 使用 forwardRef 支持 AnimatePresence
- useChat 为 message_received/done 事件生成唯一消息 ID
- sessions API 为历史消息添加 ID 字段
- cli 添加 @types/inquirer 依赖
|
2025-12-15 10:24:45 +08:00 |
|
kurihada
|
6342a46e59
|
refactor(storage): 统一消息存储到 Core 层
问题:Server 端只存储最终文本响应,工具调用的中间消息丢失。
解决方案:
- Agent.chat() 返回 ChatResult,包含完整消息链
- Server SessionManager 简化为只管理会话元数据
- 消息 API 改为从 Core Storage 读取
- 移除 Server 端的消息存储和 addMessage 方法
影响范围:
- core: Agent.chat() 返回类型变更
- server: SessionManager 接口变更,移除消息存储
- server: GET /sessions/:id/messages 从 Core 读取
- server: 移除 POST /sessions/:id/messages 端点
|
2025-12-15 10:04:22 +08:00 |
|
kurihada
|
40afa10ed9
|
feat(server): 添加 session 持久化支持
- 复用 core 包的 SessionStorage 实现文件持久化
- sessions 保存到 ~/.local/share/ai-assist/sessions/
- 服务启动时自动加载已持久化的 sessions
- create/addMessage/delete 操作自动同步到文件
|
2025-12-12 15:27:16 +08:00 |
|
kurihada
|
5e32375f0e
|
feat: 重构为 Monorepo 架构并实现 HTTP Server
架构变更:
- 采用 pnpm workspaces 实现 Monorepo 结构
- 将现有代码迁移到 packages/core
- 新增 packages/server HTTP 服务层
Server 功能:
- REST API: 会话管理、工具管理、配置管理
- WebSocket: 实时双向通信支持
- SSE: 服务端事件推送
- Hono + Bun 作为运行时
API 端点:
- GET/POST /api/sessions - 会话 CRUD
- GET/POST /api/sessions/:id/messages - 消息管理
- GET /api/sessions/:id/events - SSE 事件流
- WS /api/ws/:sessionId - WebSocket 连接
- GET/POST /api/tools - 工具管理
- GET/PUT /api/config - 配置管理
|
2025-12-12 10:42:20 +08:00 |
|