kurihada
|
babe65719b
|
feat(ui): 优化 Header 和状态栏布局
- ContextUsage: 紧凑模式下始终显示压缩按钮
- StatusBar: 连接状态移至中间位置,显示绿点动画和文字
- StatusBar: 添加内部连接状态检测(通过 health API)
- Chat: 移除 Header 中的连接状态指示器
|
2025-12-17 17:40:27 +08:00 |
|
kurihada
|
619cd2d2dd
|
feat(ui): 重构模式选择器为点击切换交互
- 将 Build/Plan 下拉框和 Auto-approve 开关合并为三种模式
- Plan: 调用 plan agent,只读分析
- Ask: 调用 general agent,执行操作前需确认
- Auto: 调用 general agent,自动执行无需确认
- 点击按钮即可循环切换:Ask → Auto → Plan
- 每种模式有独特的颜色和图标便于区分
|
2025-12-17 17:18:58 +08:00 |
|
kurihada
|
fc75fcfc90
|
feat(ui): 添加可拖拽的面板分割线
- 新增 Resizer 组件,支持拖拽调整面板宽度
- IDE 和聊天区域宽度可通过拖拽分割线调整
- 宽度范围限制在 30%-80%,防止面板过小或过大
- 调整后的宽度保存到 localStorage,下次打开时保持
|
2025-12-17 17:08:08 +08:00 |
|
kurihada
|
a3ddc39771
|
feat(ui): 添加底部状态栏和优化代码编辑器空状态
- 新增 StatusBar 组件,显示 Git 分支、诊断信息和连接状态
- 添加 Git API 端点 (GET /api/files/git) 获取分支和 dirty 状态
- 优化 CodeEditor 空状态,添加图标和引导提示
- 修复 Chat 页面高度问题 (h-screen -> h-full)
|
2025-12-17 17:04:38 +08:00 |
|
kurihada
|
250d2cb4b5
|
feat(ui): 添加 IDE 组件(文件浏览器 + 代码编辑器)
- 新增 CodeEditor 组件,基于 CodeMirror 实现多标签代码编辑
- 新增 FileExplorer 组件,支持文件树展开/折叠和文件选择
- 新增 IDE 组件,整合文件浏览器和代码编辑器
- 新增 SessionPanel 组件,用于会话管理
- 添加文件写入 API(PUT /api/files/write)
- 优化布局:IDE 始终显示,移除文件切换按钮
- 工作目录路径显示在文件浏览器标题栏,支持悬浮显示完整路径
|
2025-12-17 16:55:22 +08:00 |
|
kurihada
|
ddec356117
|
refactor(website): 优化网站内容以反映 core 模块实际功能
- 首页:更新核心功能展示(9个功能卡片),移除快速开始和 GitHub 链接
- 文档布局:移除 GitHub 链接
- 侧边栏:重组导航结构,分为「已完成功能」和「规划中功能」
|
2025-12-17 15:12:52 +08:00 |
|
kurihada
|
3849bec7de
|
refactor(core): 更新内置命令的 agent 配置
- /test, /fix, /commit 使用 general agent
- /explain 使用 explore agent (更适合代码解释)
- /help 使用 guide agent (更适合帮助信息)
|
2025-12-17 14:53:35 +08:00 |
|
kurihada
|
5d1db127b2
|
refactor(core): 重命名 build agent 为 general agent
- build.ts 重命名为 general.ts
- buildAgent 重命名为 generalAgent
- 更新相关导出和测试
|
2025-12-17 14:50:40 +08:00 |
|
kurihada
|
5a6925aef3
|
feat(core): 添加后台 Shell 管理功能
- 新增 ShellManager 管理后台 Shell 进程生命周期
- bash 工具支持 run_in_background 参数在后台运行命令
- 新增 kill_shell 工具用于终止后台 Shell
- task_output 工具同时支持获取 Agent 和 Shell 任务输出
- 支持超时控制、输出限制和优雅终止
|
2025-12-17 14:36:38 +08:00 |
|
kurihada
|
72120b72c8
|
feat(core): build/plan agent 添加完整的 plan 模式工具
|
2025-12-17 14:23:14 +08:00 |
|
kurihada
|
036bdafd1e
|
refactor(core): task_output 工具使用外部描述文件
|
2025-12-17 14:18:08 +08:00 |
|
kurihada
|
f55bd8f526
|
refactor(core): 重命名 agent_output 为 task_output
- 删除 agent_output.ts,新增 task_output.ts
- 更新工具导出、注册和描述映射
- 更新 build/plan agent 预设的工具列表
- 更新 task 工具中的相关引用
|
2025-12-17 14:15:49 +08:00 |
|
kurihada
|
78551d68f3
|
feat(core): ToolParameter 支持 default、minimum、maximum、enum 字段
- 扩展 ToolParameter 类型,新增 default/minimum/maximum/enum 可选字段
- 更新 buildZodSchema 函数处理 enum 和 min/max 约束
- MCP 工具适配器解析 JSON Schema 中的扩展字段
- task_output 工具使用新字段替代 description 中的约束说明
- 新增单元测试覆盖所有扩展字段
|
2025-12-17 14:15:09 +08:00 |
|
kurihada
|
fe6ef9be9b
|
refactor(core): 移除 todoread 工具
todowrite 工具返回值已包含完整列表,todoread 工具多余
|
2025-12-17 14:00:22 +08:00 |
|
kurihada
|
6b3d62b4d6
|
refactor(core): todowrite 工具使用外部描述文件
- 将 todowrite.ts 中硬编码的 description 改为使用 loadDescription 加载
- 更新 todo_write.txt 为更详细的英文使用说明,包含使用场景和示例
|
2025-12-17 13:56:01 +08:00 |
|
kurihada
|
8d8ebb8786
|
feat(core): 更新 web 工具描述并添加域名过滤参数
- 更新 web_extract 工具描述为英文版本
- 更新 web_search 工具描述,添加搜索日期提示
- 为 web_search 添加 allowed_domains 和 blocked_domains 参数
- 添加 GET_CURRENT_DATE_FN 模板函数支持动态日期
|
2025-12-17 13:47:58 +08:00 |
|
kurihada
|
2afa7bb103
|
feat(core): 将 Tavily API Key 从环境变量迁移到系统配置
- 新增 ServiceConfig 类型和 services 配置字段
- 添加 getServiceApiKey/saveServiceConfig/deleteServiceConfig API
- 更新 web_search 和 web_extract 工具使用配置系统
- 新增 /api/services REST 端点管理第三方服务配置
|
2025-12-17 13:01:29 +08:00 |
|
kurihada
|
bb3d42e6bf
|
refactor(core): 整理工具描述文件目录结构
将 checkpoint 和 repomap 相关的描述文件移动到各自的子目录
|
2025-12-17 12:11:24 +08:00 |
|
kurihada
|
31e246f629
|
refactor(core): 移除 get_file_info 和 list_directory 工具
这些工具功能可通过 bash 命令 (ls, stat, file) 实现,不再需要单独的工具。
删除的文件:
- src/tools/filesystem/get_file_info.ts
- src/tools/filesystem/list_directory.ts
- src/tools/descriptions/filesystem/get_file_info.txt
- src/tools/descriptions/filesystem/list_directory.txt
- tests/unit/tools/filesystem/get_file_info.test.ts
- tests/unit/tools/filesystem/list_directory.test.ts
更新的文件:
- src/tools/index.ts: 移除导入和注册
- src/tools/filesystem/index.ts: 移除导出
- src/tools/load_description.ts: 移除映射
- src/agent/presets/*.ts: 移除 tools.enabled 引用
- tests/unit/tools/load_description.test.ts: 移除测试数据
|
2025-12-17 12:07:38 +08:00 |
|
kurihada
|
2abea47386
|
refactor(core): 移除不再需要的文件系统工具
删除以下工具及相关文件:
- copy_file: 复制文件
- create_directory: 创建目录
- delete_file: 删除文件
- move_file: 移动文件
- search_files: 搜索文件
清理范围:
- 工具实现文件 (5个)
- 工具描述文件 (5个)
- 单元测试文件 (6个)
- Agent presets 中的引用
- Checkpoint 系统中的触发类型
- Hook 系统中的相关处理
|
2025-12-17 12:00:46 +08:00 |
|
kurihada
|
48b458bb9a
|
feat(core): 使用模板系统重构 plan 工具并完善 build agent 配置
- enter_plan_mode/exit_plan_mode 改用 loadDescription 加载描述
- 新增 plan 工具描述文件支持模板变量
- build agent 添加完整的工具启用列表和权限配置
- build agent 启用 promptTemplate 动态模板渲染
|
2025-12-17 11:52:52 +08:00 |
|
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
|
c5b92e740c
|
feat(core): 使用模板系统重构 task 工具描述
- 创建 task.txt 模板文件,包含完整的工具描述
- 添加 AGENT_TYPE_REGISTRY_STRING 变量支持动态 Agent 列表
- 添加 agentOutput 工具名称映射
- 更新 task.ts 使用模板渲染,保留回退逻辑
|
2025-12-17 10:50:33 +08:00 |
|
kurihada
|
cfb2175916
|
feat(server): 实现 LSP 管理 REST API
- 新增 /api/lsp/servers 端点,列出所有语言服务器
- 新增 /api/lsp/servers/:id 端点,获取服务器详情
- 新增 /api/lsp/servers/:id/install 端点,安装服务器
- 新增 /api/lsp/servers/:id/start 端点,启动服务器
- 新增 /api/lsp/servers/:id/stop 端点,停止服务器
- 新增 /api/lsp/diagnostics 端点,获取诊断信息
- 新增 /api/lsp/running 端点,获取运行中服务器列表
- core/lsp 添加 stopServer, getRunningServers, isServerRunning 方法
|
2025-12-17 10:19:05 +08:00 |
|
kurihada
|
b63b79e51e
|
feat(core): 实现先读后写验证机制
确保 write_file 和 edit_file 修改已存在的文件前必须先调用 read_file
- 在 AgentToolExecutor 中添加 readFiles 状态跟踪已读文件
- 创建 read-before-write.ts hook 拦截写操作并验证
- 在 Agent 初始化时注册验证 hook
- 提供 AI 友好的错误消息引导正确操作
|
2025-12-17 10:05:07 +08:00 |
|
kurihada
|
93f6890a04
|
feat(core): 更新文件操作工具描述为模板格式
- 更新 read_file 工具描述,支持模板变量
- 更新 edit_file 工具描述,支持模板变量
- 更新 write_file 工具描述
- 添加 read-file-tool 常量 (DEFAULT_READ_LINES, MAX_LINE_LENGTH)
- 在模板渲染器中注册新常量
|
2025-12-17 01:13:27 +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
|
a4e8037108
|
fix(core): 修复工具调用重复触发导致前端显示两次的问题
问题原因:
- onToolStart 同时传给了 toVercelTools 和 streamChat 两处
- 导致工具开始事件在 onChunk 和 executeTool 中各触发一次
- 两处生成的 toolCallId 不同,前端去重逻辑无法生效
修复方案:
- 移除传给 toVercelTools 的 onToolStart,只保留 streamChat 中的触发
- 在 handleToolCallChunk 中增加 toolCallId 去重检查(防止 AI SDK 发送重复 chunk)
|
2025-12-16 23:50:18 +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
|
eb80b2c9e6
|
fix(core): 修复测试用例以匹配最新实现
- todo-manager.test: 修复空日期字符串导致的 Invalid time value 错误
- config-loader.test: 更新测试以匹配简化后的配置加载逻辑
- mcp/config.test: 修复配置路径匹配问题
- task.test/task-extended.test: 添加缺失的 agentEventEmitter mock
- presets/index.test: 更新预设 Agent 数量和 maxSteps 测试
- agent.test: 添加缺失的 mock 函数并修正模式切换测试
- 删除过时的 session/manager.test 和 storage.test (使用已废弃的 API)
|
2025-12-16 22:33:46 +08:00 |
|
kurihada
|
66ad1a1ec9
|
refactor(core): 拆分大型单体文件为模块化子组件
将三个超过 700 行的大型文件重构为模块化架构:
Agent (1033 → ~400 行):
- agent-tool-executor: 工具获取、过滤和执行
- agent-message-handler: 消息构建、流式处理
- agent-mode-manager: 模式切换和权限检查
- agent-vision-handler: 视觉处理委托
CheckpointManager (1015 → ~620 行):
- checkpoint-store: 检查点 CRUD 操作
- checkpoint-rollback: 回滚和撤销操作
- checkpoint-session: 会话跟踪
- checkpoint-events: 事件发射系统
SessionManager (768 → 356 行):
- message-converter: Part ↔ ModelMessage 转换
- session-store: 会话 CRUD 操作
- project-manager: 项目管理
- session-auto-save: 自动保存功能
重构原则: 单一职责、编排器模式、向后兼容 API
|
2025-12-16 22:07:13 +08:00 |
|
kurihada
|
e53035ffc0
|
refactor(core,server): 统一模块职责并消除类型重复
Core 模块职责:
- 添加 inferPermissionType() 权限类型推断函数
- 添加 partToApiFormat()/partsToApiFormat() API 格式转换函数
- 添加 ApiPart/ApiTextPart/ApiToolPart/ApiReasoningPart 类型
- 统一导出 toolRegistry 供 Server 使用
Server 模块职责:
- 重命名 PermissionRequestContext 为 PermissionDisplayContext
- 移除本地 toolRegistry,直接使用 Core 的注册表
- 使用 Core 的 inferPermissionType 替代本地实现
- 使用 Core 的 partsToApiFormat 替代手动转换
文档更新:
- 在 gui-server-client.md 添加第11章「模块职责边界」
- 明确 Core 和 Server 的职责划分
|
2025-12-16 21:28:19 +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
|
1b7d55848d
|
refactor(server): 消除与 Core 的重复类型定义
- 删除 Server 中 60+ 个与 Core 重复的类型定义
- 将动态导入 (await import) 改为静态类型导入 (import type)
- 保留必要的运行时静态导入
- 修复测试文件中的 mock 初始化问题
- 净删除约 960 行重复代码
重构文件:
- routes/checkpoints.ts: 删除 155 行重复类型
- routes/agents.ts: 删除 93 行重复类型
- routes/commands.ts: 删除 83 行重复类型
- routes/mcp.ts: 修复类型窄化
- routes/hooks.ts: 已使用静态导入
- routes/providers.ts: 删除 63 行重复类型
- session/manager.ts: 删除 41 行重复类型
- routes/sessions.ts: 添加类型导入
- permission/handler.ts: 添加类型导入
|
2025-12-16 20:19:24 +08:00 |
|
kurihada
|
026429cb2f
|
refactor(server): 将 Core 模块从动态导入改为静态导入
- 移除 adapter.ts 中约 160 行冗余接口定义
- 简化 initCore 函数,改为初始化检查逻辑
- 简化 getOrCreateAgent,直接使用 ConfigurationError 类
- 更新缓存类型注解使用 Core 导出的类型
- 简化事件订阅代码,直接使用 agentEventEmitter
- 在 Core index.ts 中添加 agentEventEmitter 导出
- 更新测试文件适配静态导入模式
|
2025-12-16 19:54:20 +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
|
f0ff887129
|
feat(core): 添加 guide agent 并使用模板变量
- 新增 guide agent 用于回答工具使用问题
- 更新 build agent 提示词使用模板变量
- 添加 GUIDE_SUBAGENT_TYPE 和 EXPLORE_SUBAGENT_TYPE 变量
|
2025-12-16 18:26:22 +08:00 |
|
kurihada
|
87edd6e35b
|
refactor(core): 移除 BASH_TOOL_EXTRA_NOTES 和 GIT_COMMIT_AND_PR_CREATION_INSTRUCTION
- 从模板引擎中移除这两个函数的注册
- 从 bash 工具描述中移除对应的模板变量
- 删除不再需要的 git-instructions.txt 文件
- 更新单元测试,移除相关测试用例
|
2025-12-16 17:00:13 +08:00 |
|
kurihada
|
09dc046f8f
|
feat(core): 扩展模板引擎支持函数调用和算术运算
- 新增模板函数调用语法 ${FUNC_NAME()}
- 新增除法算术运算 ${value/divisor}
- 添加 bash 工具配置常量 (CUSTOM_TIMEOUT_MS 等)
- 更新 bash 工具描述使用动态模板格式
- 添加 Git 操作指令文本 (commit/PR 说明)
- 添加模板渲染器单元测试 (31 个测试用例)
|
2025-12-16 16:52:46 +08:00 |
|
kurihada
|
7706af2c79
|
feat(core): 更新工具描述支持动态模板变量
- grep.txt: 使用 ${GREP_TOOL_NAME}、${BASH_TOOL_NAME}、${TASK_TOOL_NAME} 变量
- ask_user_question: 将 description 移至独立 txt 文件
- load_description.ts: 添加 ask_user_question -> plan 分类映射
|
2025-12-16 16:26:27 +08:00 |
|
kurihada
|
1d380d0bcb
|
refactor(core): 统一模板引擎到 src/template/ 目录
- 将 agent/prompt-template/ 目录合并到 src/template/
- 新增通用模板函数 renderTemplate、render
- 新增 Agent 特定函数 renderPromptTemplate、renderPrompt
- 新增 createToolDescriptionContext 支持工具描述模板变量
- 支持 ${GREP_TOOL_NAME} 等 Claude Code 风格变量
- 更新所有相关导入路径
|
2025-12-16 16:05:10 +08:00 |
|
kurihada
|
30f35a6562
|
refactor(core): 重命名 grep_content 工具为 grep
- 重命名 grep_content.ts 为 grep.ts
- 更新工具名称从 grep_content 改为 grep
- 更新所有引用该工具的代码和测试文件
- 更新描述文件名称
|
2025-12-16 15:03:33 +08:00 |
|
kurihada
|
452f19e2a9
|
refactor(core): 移除未使用的 prompt-template templates 目录
|
2025-12-16 14:19:36 +08:00 |
|
kurihada
|
3baf3c0171
|
fix(core): 在 Agent.resolveSystemPrompt 中集成动态模板渲染
|
2025-12-16 14:16:52 +08:00 |
|
kurihada
|
58f1bc8718
|
feat(core): 实现动态提示词模板系统
- 新增 prompt-template 模块,支持运行时变量替换
- 支持 ${variable}、${obj.prop}、${cond ? "a" : "b"} 语法
- AgentInfo 新增 promptTemplate 字段标记动态模板
- Plan Agent 提示词改用模板语法,支持动态工具名和计划文件路径
- AgentExecutor.buildSystemPrompt 集成模板渲染
- 新增 27 个单元测试验证模板功能
|
2025-12-16 14:15:10 +08:00 |
|
kurihada
|
a32c83480d
|
feat(core): 新增 glob 工具,支持文件模式匹配
- 新增 glob 工具,支持 **/*.ts 等 glob 模式匹配文件
- 结果按修改时间排序,限制返回 100 个结果
- 自动忽略 node_modules、.git 等目录
- 更新 Plan Agent 提示词使用 glob 替代 search_files
- 在 Plan Agent 工具列表中启用 glob
|
2025-12-16 14:01:42 +08:00 |
|
kurihada
|
cd0c2bdbfb
|
feat(core): 重构 Plan 模式工具,新增 allowedWritePaths 路径限制
Plan 工具重构:
- 移除 plan_mode_respond 工具
- 新增 ask_user_question 工具:向用户提问并获取回复
- 新增 enter_plan_mode 工具:进入计划模式
- 新增 exit_plan_mode 工具:退出计划模式
allowedWritePaths 功能:
- AgentFilePermission 新增 allowedWritePaths 字段
- permission-merger 添加 isPathInAllowedWritePaths 检查函数
- executor 在写入操作时检查路径限制
|
2025-12-16 13:49:45 +08:00 |
|