kurihada
|
8a04ad64c3
|
fix(ui): 统一 LSP 指示器按钮样式与工具栏其他按钮一致
|
2025-12-17 11:30:33 +08:00 |
|
kurihada
|
927969e9bc
|
fix(ui): LSP 指示器图标改用 Code2 避免与 Providers 冲突
|
2025-12-17 11:28:18 +08:00 |
|
kurihada
|
1019ba7c9c
|
feat(ui): 实现 LSP UI 集成
- 添加 LSP 相关类型定义 (LSPServer, FileDiagnostic, DiagnosticsResponse)
- 添加 LSP API 函数 (listLSPServers, installLSPServer, startLSPServer 等)
- 创建 LSPPanel 组件: 语言服务器管理面板
- 创建 DiagnosticsPanel 组件: 诊断详情面板 (含搜索过滤)
- 创建 DiagnosticsIndicator 组件: 状态栏指示器
- 集成到 Web 模块 (App.tsx, Chat.tsx)
|
2025-12-17 11:17:00 +08:00 |
|
kurihada
|
8c46635dc7
|
feat(core): 实现 ask_user_question 工具的用户输入等待机制
- 创建 UserInputWaiter 管理用户输入等待状态
- 修改 agent-tool-executor 在 requiresUserInput 时等待用户回答
- 添加 onWaitingForInput 回调通知前端显示问题
- Server 端处理 waiting_for_input 广播和 user_input_response 消息
- 前端处理问题显示和用户回答提交
- 修复问题选项在流式输出时被禁用的问题
|
2025-12-17 00:44:25 +08:00 |
|
kurihada
|
3b170738ee
|
feat(ui): 实现 ask_user_question 工具的前端支持
- 添加 AskUserQuestion 组件,支持单选/多选和自定义输入
- 添加 Question 相关类型定义 (QuestionOption, Question, QuestionMessagePart)
- 在 useChat 中处理 ask_user_question 工具完成事件,转换为问题 UI
- 添加 answerQuestion 回调用于提交用户回答
- 更新 ChatMessage 组件支持渲染问题类型的消息部分
|
2025-12-16 23:14:25 +08:00 |
|
kurihada
|
791c4a4616
|
fix(ui): 修复工具调用重复显示问题
在 useChat hook 中添加去重逻辑:
- tool_start: 检查是否已存在相同 ID 的工具调用,存在则跳过
- subagent:tool_start: 同样添加去重检查
问题原因:服务端可能因 AI SDK 触发两次 tool-call chunk
导致发送重复的 tool_start 事件,前端之前没有去重逻辑
|
2025-12-16 23:02:34 +08:00 |
|
kurihada
|
0a26c3ab72
|
refactor(core,server): 统一模块职责并消除类型重复
- 统一 ToolStatus 类型(Core 导出,Server 引用)
- 重命名 Server SessionManager 为 SessionMetadataManager
- 扩展 Core PermissionContext 添加结构化字段
- 统一 Part 类型导出(Core 定义存储格式,Server 定义展示格式)
- 简化 Message 格式(移除 MergedMessage,统一使用 Message)
- 添加向后兼容的类型别名和 @deprecated 注释
|
2025-12-16 21:06:41 +08:00 |
|
kurihada
|
08d481483c
|
feat(ui): 添加子 Agent 进度显示功能
当 build agent 调用 guide/explore 等子 agent 时,
用户可以在 web 页面实时看到子 agent 的执行进度
实现方案:
- Core: 使用 EventEmitter 模式发射子 agent 事件
- Server: 订阅事件并转发到 WebSocket
- UI: 处理事件并渲染 SubagentProgress 组件
新增文件:
- packages/core/src/agent/events.ts
- packages/ui/src/components/SubagentProgress.tsx
修改文件:
- core: executor.ts, manager.ts, types.ts, task.ts
- server: adapter.ts, types.ts
- ui: useChat.ts, types.ts
- web: Chat.tsx
|
2025-12-16 19:38:36 +08:00 |
|
kurihada
|
e698ec2a64
|
feat(ui): display agent name in message header
|
2025-12-16 10:43:02 +08:00 |
|
kurihada
|
9376887995
|
refactor(core): 统一配置系统,移除 config.json
- 移除 config.json,所有配置统一从 agents.json 和 providers.json 读取
- config-loader.ts 从全局目录 ~/.ai-terminal-assistant/ 加载配置
- loadConfig() 从 agentRegistry.getGlobalConfig() 获取 defaults.model
- 添加 loadVisionConfig() 支持 Vision 模型配置
- Tavily API Key 仅从环境变量读取
- UI AgentDefaultsEditor 添加 Vision 模型配置界面
- 更新相关测试
|
2025-12-16 00:33:29 +08:00 |
|
kurihada
|
76b1ae1573
|
fix(ui): CodeBlock 添加防抖优化,减少流式输出时的高亮闪烁
- 使用 ref 跟踪上一次高亮的代码,避免重复高亮
- 添加 150ms 防抖延迟,减少流式输出时的高亮次数
- 优化渲染逻辑,未高亮时显示纯文本
|
2025-12-15 23:18:07 +08:00 |
|
kurihada
|
f238368f87
|
feat(ui): 支持 Auto Edit 运行时切换立即生效
- 添加 config_update WebSocket 消息类型
- setAutoApprove 切换时立即发送配置更新到服务端
- 服务端实时更新会话的 auto-approve 配置
|
2025-12-15 19:52:06 +08:00 |
|
kurihada
|
ec3c7bccf9
|
feat(ui): 实现 Agent 模式切换和 Auto Edit 功能
- 添加 AgentModeSelector 组件,支持 Build/Plan 模式切换
- Build 模式下显示 Auto Edit 开关,自动授权文件写入/编辑
- 扩展 useChat hook 添加会话级别的 agentMode/autoApprove 状态
- 服务端支持解析和应用 Agent 模式配置
- 权限处理器实现 auto-approve 检查(仅 write/edit,不含 delete)
|
2025-12-15 19:42:51 +08:00 |
|
kurihada
|
f09f8f2b03
|
fix: 修复多个问题
- fix(core): 修复 todoManager 未初始化导致待办工具无法使用
- fix(core): 为 LSP 初始化添加 10 秒超时,防止 write_file 卡住
- fix(ui): 停止对话时保留已流式输出的内容
|
2025-12-15 18:40:07 +08:00 |
|
kurihada
|
3fd8fd98b8
|
feat(ui): 优化流式输出工具调用渲染
- 添加 tool_start/tool_end WebSocket 事件支持
- 流式消息复用 ChatMessage 组件渲染工具调用卡片
- 修复 AI SDK v5 格式兼容问题(input/output 字段)
- 修复会话恢复时 tool-result 格式错误
- 放宽 ToolState schema 中 input 字段类型为 unknown
|
2025-12-15 17:35:39 +08:00 |
|
kurihada
|
865e0906b9
|
feat(ui): 实现 @ 文件提及自动补全功能
- Core: 添加 file-index 模块,使用 ripgrep 索引文件,fuzzysort 模糊搜索
- Server: 添加 /api/files/search 端点,支持文件模糊搜索
- Server: WebSocket 消息处理中将 @filepath 转换为 ./filepath 格式
- UI: 新增 FileMenu 组件,显示文件搜索结果列表
- UI: 新增 FileMentionTag 组件,高亮显示文件提及
- UI: 新增 useFileMention hook,管理文件提及状态
- UI: ChatInput 集成 @ 触发的文件自动补全
- UI: ChatMessage 用户消息中高亮显示 @filepath
|
2025-12-15 16:32:59 +08:00 |
|
kurihada
|
5b7b0ff1e4
|
feat(ui): 实现深色/浅色主题切换功能
- 添加 CSS 变量定义浅色和深色主题色板
- 扩展 Tailwind 配置支持语义化颜色 (surface-*, fg-*, line-*, code)
- 创建 useTheme hook 管理主题状态和持久化
- 创建 ThemeToggle 组件支持三种模式 (light/dark/system)
- 迁移所有组件从硬编码 gray-* 到语义化颜色
- 支持系统主题偏好检测 (prefers-color-scheme)
- 添加主题初始化脚本防止闪烁 (FOUC)
|
2025-12-15 15:47:32 +08:00 |
|
kurihada
|
cd0dd814ab
|
feat(ui): 实现消息 parts 有序渲染
- Server: API 返回 parts 数组保持原始顺序
- Server: 添加 MessagePart 类型定义 (text/tool/reasoning)
- UI: ChatMessage 按 parts 顺序交叉渲染文本和工具调用
- UI: 新增 ToolPartItem 组件渲染单个工具 part
- UI: useChat 创建消息时添加 parts 字段
|
2025-12-15 14:46:00 +08:00 |
|
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
|
bbce1de60c
|
fix(ui): 优化 WebSocket 连接和 PWA meta 标签
- WebSocket onopen 检查 isClosingRef,组件卸载后自动关闭连接
- 更新 PWA meta 标签为 mobile-web-app-capable
|
2025-12-15 10:29:49 +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
|
32064a3531
|
fix(config): 优雅处理 Provider 未配置错误
- 添加 ConfigurationError 类替代 process.exit(1)
- Server 端捕获配置错误并返回友好消息
- UI 端支持 config_error 类型的 WebSocket 消息
- 服务器不再因配置缺失而崩溃
|
2025-12-14 22:24:51 +08:00 |
|
kurihada
|
c307cd3a7c
|
refactor(agent): 将 Summary Model 改造为内置 Sub Agent
- 扩展 AgentMode 类型添加 'internal' 模式
- 新增 summary agent preset (claude-3-5-haiku)
- AgentRegistry 添加 getInternal/listInternalAgents 方法
- CompressionManager 添加 setSummaryModelFromAgentConfig
- Agent 构造函数改用 Registry 配置初始化 Summary 模型
- 清理旧的 SummaryConfig 配置系统
- UI AgentsPanel 分离显示 System/Preset/Custom agents
- UI AgentEditor 为 internal agent 显示简化编辑界面
|
2025-12-14 22:12:36 +08:00 |
|
kurihada
|
e97daaa0eb
|
refactor(settings): 移除无效的配置项
- 移除 maxTokens/temperature 滑块(后端从不使用)
- 移除 allowedPaths/deniedPaths 显示(权限通过 handler 处理)
- Settings 面板只保留 workdir 和 Summary Model 配置
|
2025-12-14 21:37:58 +08:00 |
|
kurihada
|
70a9a154a4
|
feat(context): 添加上下文压缩 API 和 UI 组件
Server API:
- 扩展 Agent Adapter 接口添加压缩相关方法
- 新增 context.ts 路由 (GET /sessions/:id/context, POST /sessions/:id/compress)
- 扩展 config.ts 添加摘要模型配置接口 (GET/PUT /config/summary)
UI 组件:
- 新增 ContextUsage 组件显示上下文使用情况
- 扩展 ConfigPanel 添加摘要模型配置区域
- 添加 API 客户端方法和类型定义
Web 集成:
- 在 Chat 页面头部集成 ContextUsage 紧凑模式显示
|
2025-12-14 20:33:51 +08:00 |
|
kurihada
|
26e8646518
|
feat(ui): 集成 Provider 管理到 web 和 desktop 应用
- 新增 ProviderEditor 组件用于编辑提供商配置
- ProvidersPanel 添加编辑按钮集成 ProviderEditor
- ChatPage 添加 onOpenProviders 工具栏按钮
- web/desktop App.tsx 集成 ProvidersPanel 面板
|
2025-12-13 02:01:09 +08:00 |
|
kurihada
|
6ec6fe2f9f
|
feat(provider): 添加独立的 Provider 模块管理模型提供商
实现可扩展的 Provider 系统,支持动态注册自定义提供商:
Core 模块 (packages/core/src/provider/):
- types.ts: Provider 相关类型定义
- builtin/: 内置提供商 (Anthropic, OpenAI, DeepSeek)
- registry.ts: ProviderRegistry 单例类
- config.ts: 配置持久化 (~/.ai-terminal-assistant/providers.json)
- utils.ts: 连接测试等工具函数
Server API (packages/server/src/routes/providers.ts):
- GET/POST/PUT/DELETE /providers 提供商管理
- POST /providers/:id/test 连接测试
- 自定义模型管理接口
Frontend (packages/ui/):
- ProvidersPanel 组件用于管理提供商
- API client 函数和类型定义
主要功能:
- 支持动态注册 OpenAI 兼容服务 (Ollama, vLLM 等)
- 每个提供商独立的 API Key 配置
- 预设模型列表 + 自定义模型输入
- 连接测试验证
|
2025-12-13 01:50:27 +08:00 |
|
kurihada
|
1d69fd876d
|
feat(permission): 实现 WebSocket 权限确认机制
重构权限系统,将终端 UI 代码从 core 模块移除,实现基于 WebSocket 的权限确认流程:
Core 模块清理:
- 删除 permission/prompt.ts 和 file-prompt.ts(终端交互)
- 删除 diff.ts 中的 chalk 渲染函数
- 删除 config.ts 中的 inquirer 交互
- 移除 chalk 依赖
Server 权限处理:
- 新增 permission/handler.ts,实现 WebSocket 权限请求/响应
- 更新 agent/adapter.ts 设置权限回调
- 更新 ws.ts 处理 permission_response 消息
Web 权限组件:
- 新增 PermissionDialog 组件,显示权限请求详情和 Diff
- 更新 useChat hook 管理权限状态
- 更新 Chat 页面集成权限弹窗
|
2025-12-13 01:09:35 +08:00 |
|
kurihada
|
cb554c65b4
|
feat(checkpoint): 添加 Checkpoint 可视化管理功能
Core 层增强:
- 添加 safety.ts: 7点安全检查机制
- 添加 session-tracker.ts: 会话级检查点跟踪
- 添加 lock.ts: 并发控制文件锁
- 添加 lfs.ts: Git LFS 大文件支持
- 添加 path-validator.ts: 路径验证
- 添加 commit-message.ts: 智能提交消息生成
- 增强 manager.ts: 支持三种恢复模式、unrevert 撤销回滚
Server 层:
- 添加 checkpoints.ts: 16个 REST API 端点
- GET/POST /checkpoints: 列表/创建检查点
- GET/DELETE /checkpoints/🆔 获取/删除检查点
- GET /checkpoints/:id/diff: 获取差异
- POST /checkpoints/:id/restore: 恢复到检查点
- POST /checkpoints/unrevert: 撤销回滚
- GET /checkpoints/:id/safety-check: 安全检查
UI 层:
- 添加 CheckpointPanel.tsx: 检查点列表面板
- 添加 CheckpointDiffViewer.tsx: 差异查看器
- 添加 RestoreDialog.tsx: 恢复确认对话框
- 添加 16 个 API 客户端函数
- 添加完整的 TypeScript 类型定义
Web/Desktop 集成:
- 添加 History 按钮到工具栏
- 集成 CheckpointPanel 组件
|
2025-12-12 22:52:27 +08:00 |
|
kurihada
|
a225e66ad7
|
feat(agents): 添加 Agent 预设管理功能
- 创建 Server Agents API 路由 (CRUD + presets + defaults)
- 添加 UI Agent 类型定义和 API 客户端函数
- 实现 AgentsPanel 组件 (预设/自定义 Agent 列表)
- 实现 AgentEditor 组件 (创建/编辑 Agent)
- 实现 AgentDefaultsEditor 组件 (全局默认配置)
- 集成 AgentsPanel 到 Web 和 Desktop 应用
|
2025-12-12 21:23:01 +08:00 |
|
kurihada
|
9365e07df1
|
feat(hooks): 添加 Hooks 配置管理功能
- 新增 Server Hooks API 路由 (CRUD + 测试执行)
- 新增 HooksPanel 组件用于管理所有钩子类型
- 新增 HookEditor 组件用于编辑单个钩子规则
- 支持 file_edited/file_created/file_deleted/session_completed 四种钩子
- 集成到 web 和 desktop 应用
|
2025-12-12 21:02:06 +08:00 |
|
kurihada
|
bad7bfcc36
|
feat(mcp): 添加 MCP 服务器管理功能
- 新增 Server MCP API 路由 (/api/mcp/*)
- GET /servers - 获取所有服务器状态
- POST /servers/:name/connect|disconnect|enable|disable
- GET /tools - 获取所有 MCP 工具
- GET /config - 获取 MCP 配置
- 新增 UI MCPPanel 组件
- 显示服务器列表和状态指示灯
- 支持连接/断开/启用/禁用操作
- 展开查看服务器配置和工具列表
- 响应式设计支持移动端
- 集成到 Web 和 Desktop
- 添加 Plug 图标按钮到工具栏
- 点击打开 MCP 管理面板
|
2025-12-12 20:41:49 +08:00 |
|
kurihada
|
5a482f78ff
|
feat(ui): 集成命令管理面板到 web 和 desktop
- 新增 CommandPanel 组件用于命令列表/搜索/CRUD
- 新增 CommandEditor 组件用于命令编辑/创建
- web/desktop 工具栏添加 Terminal 图标按钮
- 点击按钮打开命令管理面板
|
2025-12-12 20:15:24 +08:00 |
|
kurihada
|
f0385ef221
|
feat(commands): 实现命令 CRUD 完整功能
Core:
- 新增 CommandManager 类,支持创建、更新、删除命令
- 验证命令名称防止路径遍历攻击
- 自动生成 Markdown 文件(含 YAML frontmatter)
- 内置命令保护(不可修改/删除)
Server:
- POST /api/commands - 创建命令
- GET /api/commands/:name/content - 获取命令完整内容
- PUT /api/commands/:name - 更新命令
- DELETE /api/commands/:name - 删除命令
UI:
- 新增 createCommand、updateCommand、deleteCommand、getCommandContent 函数
- 新增 CreateCommandInput、UpdateCommandInput、CommandContent 类型
|
2025-12-12 18:51:38 +08:00 |
|
kurihada
|
db711648e0
|
feat(ui): 添加斜杠命令输入支持
- 新增 useCommands hook 用于加载和搜索命令
- 新增 CommandMenu 组件,支持键盘导航和选择
- ChatInput 支持 / 触发命令菜单
- 导出命令相关 API 和类型
|
2025-12-12 18:38:43 +08:00 |
|
kurihada
|
61735317a0
|
feat(server): 添加统一命令系统 API
- 新增 /api/commands 路由,支持列出、查询、执行和搜索命令
- Server 通过动态导入 Core 的 CommandRegistry 和 CommandExecutor
- CLI、Web、Desktop 客户端均可通过 REST API 访问斜杠命令
- 支持三层命令优先级: project > user > builtin
|
2025-12-12 18:24:04 +08:00 |
|
kurihada
|
ada9f890c6
|
fix(ui): 修复响应式侧边栏重复渲染问题
移动端抽屉和桌面端侧边栏分别用 md:hidden 和 hidden md:flex 控制显示
|
2025-12-12 17:59:08 +08:00 |
|
kurihada
|
3ccc47ca5a
|
fix(ui): 修复删除按钮图标不显示问题
移除 motion.button 的 initial opacity 设置,避免覆盖 CSS hover 样式
|
2025-12-12 17:56:47 +08:00 |
|
kurihada
|
65a23f1e71
|
feat: 添加会话标题自动生成功能
- 后端:首次 AI 回复后自动从用户消息提取标题
- 后端:通过 WebSocket 推送 session_updated 事件
- 前端:useChat hook 处理标题更新事件
- 前端:Sidebar 组件实时更新会话标题显示
|
2025-12-12 17:45:17 +08:00 |
|
kurihada
|
f561687307
|
feat(ui): 添加 Markdown 渲染和代码高亮功能
- 新增 CodeBlock 组件,使用 Shiki 语法高亮
- 新增 Markdown 组件,支持 GFM 语法
- AI 消息自动渲染 Markdown,用户消息保持原样
- 代码块支持一键复制和语言标签显示
|
2025-12-12 17:32:25 +08:00 |
|
kurihada
|
cbbe9c7af1
|
feat(ui): 集成 shadcn/ui 原语、Framer Motion 动画和 Sonner Toast
- 添加 shadcn/ui 风格原语组件 (Button, Input, Dialog, Select, Slider, Switch, Tooltip)
- 集成 Framer Motion 动画库,添加动画预设
- 集成 Sonner Toast 通知系统
- 改造 ChatMessage 添加淡入动画和复制按钮
- 改造 Sidebar 添加动画、空状态引导和骨架屏
- 改造 ConfigPanel 使用新原语组件
- 优化 Chat 页面空状态和连接状态指示器
- 添加 tailwindcss-animate 插件
|
2025-12-12 17:20:41 +08:00 |
|
kurihada
|
68ab6a2016
|
feat(ui): 创建共享 UI 组件包
将 web 和 desktop 的重复代码抽取到 @ai-assistant/ui 包:
- 添加可配置的 API 客户端 (configureApiClient)
- 迁移共享组件: ChatMessage, ChatInput, Sidebar, FileBrowser, ConfigPanel
- 迁移共享 hook: useChat
- 添加 responsive prop 支持响应式布局
- 更新 web/desktop 依赖并删除重复代码
|
2025-12-12 15:52:53 +08:00 |
|