Conversation
- 重构优化:优化跨平台换行一致性处理 * 修改文件 .prettierrc.yml * endOfLine 参数由 lf 更改为 auto
- 新增功能:实现文件路径访问边界的安全控制逻辑 * 新增 `src/workspace/path_validator.py` 定义 `PathValidator` 类构造函数接收 `workspace_root` 默认值为 `.` * 实现 `validate` 方法调用 `Path.resolve()` 解析路径并通过 `startswith(str(self.root)` 校验边界 * 引入 `WorkspaceBoundaryError` 与 `PathNotFoundError` 自定义异常并在 `raise` 语句中指定错误信息 - 单元测试:补充核心功能的回归测试覆盖 * 新增 `tests/workspace/test_path_validator.py` 继承 `unittest.TestCase` 配置 `setUp` 与 `tearDown` 环境 * 实施 `test_escape_prevention` 验证 `../` 路径被拒绝以及 `test_symlink_escape` 检测符号链接逃逸 - 项目结构:初始化模块包结构支持导入 * 补全 `src/__init__.py`, `src/workspace/__init__.py`, `tests/__init__.py`, `tests/workspace/__init__.py` 目录初始化文件
- 重构优化: 调整测试覆盖策略 * 在 `path_validator.py` 的 `PermissionError` 抛出处添加 `# pragma: no cover` 标记 * 明确该分支因需专门准备权限环境而不再纳入单元测试范围
- 新增功能: 开发 `ToolRegistry` 单例类,支持同步/异步函数注册、参数提取及结果压缩 * 引入 `register` 装饰器和 `register_function` 方法,自动处理函数签名和文档提取 * 实现 `_compress_result` 逻辑,根据配置截断超长字符串、列表和字典结果 * 集成 `nest_asyncio` 以在现有事件循环中安全执行异步工具 * 提供 `generate_markdown` 和 `get_tool_info` 用于工具文档生成与信息检索 - 修复问题: 添加配置验证与异常捕获机制 * `_validate_config` 确保阈值参数不低于最小值并自动修正 * `_validate_tool_info` 对过长名称或文档发出警告 * `execute` 方法包裹异常,将错误信息格式化为返回字符串而非抛出 - 重构优化: 完善模块结构与依赖管理 * 创建 `src/core/tool_registry.py` 核心模块并导出 `ToolInfo` 数据类 * 在 `requirements.txt` 中添加 `nest-asyncio` 依赖以支持混合模式执行
- 新增功能: 实现 `ToolErrorResponse` 数据类用于标准化工具调用错误信息 * 支持通过 `tool_name` 和 `errors` (str 或 Exception) 初始化 * 异常对象自动转换为 `ClassName(message)` 格式存储于 `errors` 属性 * 提供 `to_str()` 和 `__str__()` 方法返回 `<tool_name=..., errors=... />` 格式的字符串 - 文档更新: 补充 `ToolErrorResponse` 类的单元测试覆盖 * 验证字符串与异常对象两种初始化场景 * 测试空字符串、特殊字符及参数化多种错误类型输入
- 新增功能: 提供基于路径验证的文件读写与目录浏览工具 * 新增 `Workspace` 类,集成 `PathValidator` 进行边界检查 * 实现 `read_file` 方法,支持相对路径读取并捕获 `PathNotFoundError` 和 `WorkspaceBoundaryError` * 实现 `ls` 方法,列出指定目录下的文件和文件夹,返回格式化字符串列表 * 实现 `glob` 方法,支持通配符模式匹配文件路径 * 所有方法通过 `@_tool_registry.register()` 装饰器注册到工具中心 - 文档更新: 补充单元测试覆盖核心逻辑 * 在 `tests/workspace/test_workspace.py` 中建立测试套件 * 测试 `test_initialization` 验证初始化参数及 Git 仓库检测 * 测试 `test_read_file_valid` 和 `test_read_file_not_found` 验证文件读取流程 * 测试 `test_ls_current_directory` 和 `test_glob_pattern` 验证目录遍历与模式匹配
- 新增功能: 添加 `parse_func_call` 函数用于提取函数名称及参数 * 支持从 `<func_call>` 标签包裹的 JSON 中解析 `func_name`, `args`, `kwargs` * 处理空参数列表和空参数字典的场景 - 修复问题: 增强输入验证与异常处理机制 * 校验内容是否以 `<func_call>` 开头且以 `</func_call>` 结尾,否则抛出 ValueError * 捕获非法 JSON 格式并抛出 `json.JSONDecodeError`
- 新增功能: 引入 isolate_tool_registry 自动夹具 * 在测试前后自动保存并重置 ToolRegistry._instance 为 None * 确保每个测试用例获得独立的 ToolRegistry 实例,避免状态污染 - 修复问题: 清理冗余的单例重置逻辑 * 移除 test_validate_config 中手动操作 ToolRegistry._instance 的代码 * 消除测试间依赖风险
- 新增功能: 引入系统剪贴板与键盘控制依赖 * 在 requirements.txt 中新增 pyperclip 和 keyboard 库以支持自动复制结果及模拟按键操作 - 修复问题: 增强函数调用参数解析的健壮性 * 修改 src/core/parse_func_call.py,将 result["args"] 和 result["kwargs"] 改为使用 .get() 方法并设置默认空列表或字典,防止因缺少字段抛出异常 - 重构优化: 改进工具注册机制与错误响应逻辑 * 移除 src/workspace/workspace.py 中的全局 ToolRegistry 单例依赖,取消 @_tool_registry.register() 装饰器 * 更新 src/core/tool_registry.py 中的 to_markdown 方法,改用 extract_params 动态提取参数信息 * 修正 src/workspace/workspace.py 中 read_file、ls、glob 方法的错误处理,统一使用 self.read_file.__name__ 等动态获取方法名替代硬编码字符串 - 文档更新: 完善环境配置示例 * 新增 .env.example 文件,包含 TOOL_MAX_DOC_LENGTH、MANUALAID_AUTO_VIEW 等 27 项配置项说明 - 测试调整: 优化单元测试隔离策略 * 调整 tests/core/test_tool_registry.py 中 isolate_tool_registry 生成器的注释格式,确保语法正确
- 新增功能: 构建基于 Rich 的命令行交互界面 * 在 `src/console/main.py` 中实现 REPL 循环,集成 `parse_input` 解析用户指令 * 添加 `pick_folder` 函数用于通过 Tkinter 选择工作空间目录 * 支持 `/copy`, `/view`, `/history`, `/tools` 等命令执行工具调用或管理结果 * 引入 `interactive_viewer.py` 提供基于键盘 (↑/↓, Enter, Delete) 的交互式结果浏览功能 * 实现 `result_manager.py` 管理结果历史、自动复制到剪贴板及过期清理逻辑 - 重构优化: 完善命令解析与工具注册机制 * 在 `input_parser.py` 中定义 `CommandResult` 数据类,解析 `/copy <n>`, `/view_remove <n>` 等正则模式 * 在 `main.py` 的 `init_workspace` 中自动注册 `workspace.glob`, `ls`, `read_file` 等核心工具 * 增加 `_detect_language` 函数根据文件扩展名自动识别语法高亮语言 * 配置 `pyproject.toml` 将 `manualaid` 注册为可执行脚本入口
This was
linked to
issues
Apr 20, 2026
- 新增功能: 引入第三方库以支持异步编程及剪贴板操作 * 添加 `pytest-asyncio` 用于异步测试用例执行 * 添加 `nest-asyncio` 解决事件循环冲突问题 * 添加 `pyperclip` 实现跨平台剪贴板读写 * 添加 `keyboard` 监听系统键盘事件 - 重构优化: 清理未使用的构建依赖并更新版本约束 * 移除 `packaging==26.1` 依赖项 * 在 `pyproject.toml` 的 `dependencies` 数组中补充新引入的包
- 修复问题: 修正测试用例以匹配当前实现逻辑 * `test_in_wrapper`: 添加 `pytest.warns(UserWarning)` 上下文管理器,验证 `ToolRegistry.register` 在已存在名称时抛出警告 * `test_workspace.py`: 将 `test_ls_non_dir` 和 `test_ls_outside_workspace` 中的断言从 `tool_name=read_file` 更新为 `tool_name=ls`,确保与实际返回的工具名称一致
- 新增功能: 扩展 Workspace 核心工具集 * 新增 `read_file_lines` 方法,支持按行号范围读取文件内容并格式化输出行号 * 新增 `search_content` 方法,基于正则表达式递归搜索文件内容,支持排除目录、大小写控制及多线程并发处理 (`ThreadPoolExecutor`) * 新增 `write` 方法,支持全局或指定行范围 (`start_line`, `end_line`) 的字符串替换,并提供详细的错误定位与操作指引 * 引入私有方法 `_highlight_matches` 和 `_search_in_file` 用于结果高亮显示和单文件异步搜索逻辑 * 将 `Workspace` 类改造为单例模式 (Singleton),通过重写 `__new__` 确保同一工作区路径仅存在一个实例 - 重构优化: 改进现有 API 文档与交互体验 * 更新 `read_file` 文档,明确失败时返回错误描述而非抛出异常 * 更新 `ls` 和 `glob` 文档,强调返回结果包含 `[Folder]`/`[File]` 类型标记 * 优化所有公共方法的异常捕获逻辑,统一使用 `ToolErrorResponse` 返回结构化错误信息
- 新增功能: 实现基于 Command/Handler 模式的模块化架构 * 引入 `REPL` 类作为统一入口,解耦主流程逻辑 * 新增 `CommandRegistry` 管理所有控制台命令注册与分发 * 拆分 `CommandHandler` 和 `ToolHandler` 分别处理指令与工具调用 * 创建 `src/console/commands` 模块包含 `HelpCommand`, `QuitCommand`, `ToolsCommand` 等具体命令实现 - 重构优化: 提取通用工具函数至独立模块 * 将 `_format_tool_params`, `_detect_language`, `_create_result_title` 移至 `OutputFormatter` 类 (`src/console/ui/formatters.py`) * 将文件扩展名映射提取为 `EXTENSION_TO_LANGUAGE` 常量 (`src/constants/files.py`) * 将帮助信息提取为 `HELP_MESSAGE` 常量 (`src/constants/commands.py`) * 移除 `src/console/main.py` 中冗余的辅助函数定义 - 修复问题: 增强路径验证与写入逻辑 * `PathValidator.validate` 增加 `create_file_if_not_exist` 参数支持自动创建文件 * `Workspace.write` 方法签名更新为支持 `int | None` 类型,优化行范围切片逻辑 * 修正 `write` 方法中多行字符串拼接及列表重组逻辑 - 文档更新: 补充测试用例注释 * 在 `test_tool_registry.py` 中为警告测试添加空行以符合代码风格
- 重构优化: 移除硬编码的常量依赖并统一命令注册机制 * 删除 `src/constants/commands.py` 中的 `HELP_MESSAGE` 常量定义 * 将 `HelpCommand` 从 `system_commands.py` 迁移至 `repl.py` 并注入 `CommandRegistry` 依赖 * 修改 `CommandRegistry.list_commands` 返回类型,由元组列表改为 `list[Command]` 对象列表 * 在 `REPL.__init__` 中动态注册 `HelpCommand` 实例,替代原有的静态导入和直接打印逻辑 - 文档更新: 增强 LLM 工具调用提示词的规范性和约束性 * 在 `workspace_commands.py` 的 `generate_workspace_prompt` 函数中新增 JSON 格式转义规则说明(双引号、反斜杠、换行符) * 添加 `SYSTEM CONSTRAINTS` 章节,明确禁止模型幻觉及强制要求停止生成文本的逻辑
- 新增功能: 实现多级 JSON 解析回退机制 * 引入 `_robust_json_parse` 函数,优先尝试标准 `json.loads`,失败后降级使用 `ast.literal_eval` 支持单引号 * 新增 `_fix_unescaped_quotes` 状态机算法,自动修复字符串内未转义的双引号和换行符 * 重构 `parse_func_call` 主逻辑,在整体解析失败时自动切换至 `_manual_extract` 正则提取方案 * 增加类型校验逻辑,确保 `func_name` 为字符串,非列表/字典类型的 `args`/`kwargs` 强制转为空容器 - 修复问题: 解决非法 JSON 导致的解析崩溃与参数误判 * 修复 `_extract_json_array` 和 `_extract_json_object` 中的括号匹配逻辑,忽略字符串内部的符号干扰 * 添加 `_fallback_parse` 极简解析器,处理完全无效的数组格式并返回空列表而非抛出异常 * 修正 `func_name` 正则提取模式,支持转义双引号序列 `(?:[^"\\]|\\.)` - 文档更新: 补充全面的单元测试覆盖边界场景 * 在 `tests/core/test_parse_func_call.py` 中新增测试用例,覆盖 Unicode、嵌套结构、长输入及深度递归场景 * 验证单引号、混合引号风格及字符串内特殊字符(如 `\n`, `\"`, `\\`)的正确解析 * 确认缺失字段时的默认行为(`args` 默认为空列表,`kwargs` 默认为空字典) - 修复问题: 提升控制台错误信息的可观测性 * 修改 `src/console/handlers/tool_handler.py` 中的异常捕获逻辑,输出详细的 JSON 解码错误位置 (`json_err.pos`) * 在错误日志中包含问题上下文快照(前后 60 字符),便于快速定位格式错误
- 新增功能: 扩展结果管理器自动复制行为 * `result_manager.copy_to_clipboard()` 现在对所有入口生效,不再排除 `tool_prompt` 和 `workspace_prompt` * `workspace_commands.py` 中 `add_tool_prompt` 和 `add_workspace_prompt` 方法调用 `context.result_manager.add()` 将提示注册到结果集 - 修复问题: 统一控制台自动复制通知显示 * `tool_handler.py` 移除对 `func_name` 前缀的 `startswith` 检查,直接判断 `self.result_manager.AUTO_COPY` * `command_handler.py` 新增 `if self.result_manager.AUTO_COPY` 分支以在命令执行后打印 `(Auto-copied to clipboard)` 提示
- 新增功能: 集成 argparse 模块添加 -p/--path 参数,允许直接指定启动路径以跳过文件夹选择对话框 * 在 main() 函数中初始化 ArgumentParser 并解析 args.path * 调用 init_workspace(args.path) 传入用户指定的路径字符串 - 修复问题: 增强 init_workspace 函数的输入验证逻辑,确保路径有效性 * 当 start_path 存在时,使用 Path.resolve() 解析绝对路径 * 检查路径是否存在 (exists) 及是否为目录 (is_dir),失败时打印红色错误信息并退出 * 将 Workspace 实例化时的路径参数显式转换为 str 类型
Owner
Author
|
I forget check / 忘记检查格式了 |
- 新增功能: 引入动态命令注册机制 * 移除 `input_parser.py` 中硬编码的命令列表 (如 `/help`, `/tools`) * 将 `parse_input` 函数签名修改为接收 `CommandRegistry` 实例 * 通过 `cmd_register.list_commands()` 和 `maybe_cmd.aliases` 动态匹配用户输入 - 重构优化: 统一命令解析数据结构 * 定义新的 `CommandParseResult` dataclass,替换旧的 `CommandResult` * 更新 `CommandContext.parsed_input` 类型注解以适配新结构 * 迁移所有 handler (`tool_handler.py`, `command_handler.py`) 以使用新结果对象 * 调整 `system_commands.py` 中的参数提取逻辑,从 `func_kwargs` 改为直接解析 `source` 字符串 - 修复问题: 增强 JSON 解析健壮性与兼容性 * 优化 `parse_func_call.py` 中的 `_fix_unescaped_quotes` 状态机,正确处理转义序列 * 引入 `ast.literal_eval` 作为回退方案,支持单引号等非标准 JSON 格式 * 修复 `_extract_json_array` 和 `_extract_json_object` 中的括号/大括号匹配逻辑 * 更新所有相关测试用例 `tests/core/test_parse_func_call.py` 以覆盖边缘情况 - 破坏性变更: API 接口与数据模型变更 * `input_parser.parse_input` 新增必需参数 `cmd_register: CommandRegistry`,调用方需传递实例 * `CommandContext.parsed_input` 类型由 `Any` 变更为 `CommandParseResult` * 旧版 `CommandResult` 类已废弃,所有引用需迁移至 `CommandParseResult` * `workspace_commands.py` 中 `prompt` 和 `workspace` 命令的 `aliases` 列表前缀增加了 `/`
- 新增功能: 引入 Rich Console 集成 * `ResultManager` 类新增 `console` 属性以支持富文本输出 * `main.py` 初始化时注入 `result_manager.console` 实例 * 自动复制提示根据 `console` 是否存在动态切换 `rich.print` 或标准 `print` - 修复问题: 统一复制通知的触发位置 * 移除 `tool_handler.py` 中基于 `AUTO_COPY` 标志位的重复通知代码 * 移除 `command_handler.py` 中基于 `AUTO_COPY` 标志位的重复通知代码 * 将通知逻辑集中迁移至 `result_manager.add()` 方法内部执行 - 重构优化: 简化命令处理流程 * 删除 `workspace_commands.py` 中手动调用 `context.result_manager.add()` 的逻辑 * 改用 `add_to_viewer()` 直接处理结果展示,减少耦合
- 新增功能: 实现跨平台新窗口启动逻辑
* 在 `src/console/commands/registry.py` 中注册 `NewWindowCommand`
* 创建 `src/console/commands/launch_commands.py` 文件定义 `NewWindowCommand` 类及 `_get_launch_command` 辅助函数
* 添加工作区路径解析与存在性校验逻辑
- 修复问题: 修正控制台输出字符串格式化错误
* 将 `scripts/fix_fullwidth.py` 中的 `console.print` 模板改为 f-string 语法 (`f"{len(files_dict)}"`)
- 重构优化: 改进工具信息处理流程以支持更清晰的输出结构 * 将 `info.to_doc()` 的调用结果从直接追加改为先收集到 `docs` 列表 * 使用 `'\n\n'.join(docs)` 格式化工具文档内容后统一追加至 `prompt_parts`
- 修复问题: 修正参数文档闭合标签前的换行符缺失导致格式错误 * 在 `param_doc` 追加 `</params>` 前增加 `\n`,确保 `<required_params>` 和 `<optional_params>` 块后存在正确换行
- 重构优化: 将 `src/constants/tools_docs.py` 中的工具描述迁移至各 Tool 类的 docstring * `LsTool`: 移除 `LS_TOOL` 引用,在 `ls` 方法中定义文档 * `ReadTool`: 移除 `READ_TOOL` 引用,在 `read` 方法中添加 `max_lines` 和 `encoding` 参数说明 * `WriteTool`: 移除 `Write_TOOL` 引用,在 `write` 方法中明确覆盖写入的警告信息 * `GlobTool`: 移除 `Glob_TOOL` 引用,在 `glob` 方法中补充 `pattern`, `folder_path`, `max_ret` 参数及返回值说明 * `ReadLinesTool`: 移除 `ReadLines_TOOL` 引用,在 `read_lines` 方法中细化行号范围与上下文逻辑 * `RegexSearchTool`: 移除 `REGEX_SEARCH_TOOL` 引用,更新 `regex_search` 方法文档以包含文件过滤和忽略路径细节 * `ExactSearchTool`: 移除 `EXACT_SEARCH_TOOL` 引用,更新 `exact_search` 方法文档强调大小写敏感与全词匹配特性 - 破坏性变更: 删除 `src/constants/tools_docs.py` 文件 * 受影响范围:任何直接导入 `LS_TOOL`, `READ_TOOL`, `Glob_TOOL` 等常量的外部代码将失效 * 迁移建议:请检查依赖项,若需获取工具描述,请直接访问对应 `*Tool` 类的方法 docstring (如 `LsTool.ls.__doc__`)
- 新增功能: 基于 Textual 构建全新 TUI 界面 * `REPL` 类从 Rich 命令行循环重构为继承自 `textual.app.App` 的图形应用 * 新增 `_TuiConsole` 适配器,将 `RichLog` 封装为兼容旧代码的 `Console` 接口 * 引入多行输入缓冲区 `_multiline_buffer` 支持跨行 `<func_call>` 标签处理 - 修复问题: 统一输出机制与错误提示语言 * 移除所有 `rich.console.Console` 依赖,替换为标准 `print()` 或适配后的 `tui_console.print()` * 将硬编码的英文错误提示(如 "Path does not exist")翻译为中文(如 "路径不存在") * 修正 `CommandHandler` 和 `ToolHandler` 中的类型注解,将 `console` 参数泛化为 `Any` - 重构优化: 简化初始化流程与依赖管理 * 删除 `main.py` 中全局 `console` 实例及显式传入逻辑,改为在 `on_mount` 生命周期中动态创建 * 更新 `requirements.txt`,移除 `rich` 依赖并添加 `textual` * 重写 `REPL` 的 UI 布局,使用 CSS 定义标题栏、输出区和底部输入框结构 * 将帮助信息生成函数 `generate_help` 重构为 `_generate_help_text` 返回 Rich Markup 字符串
- 新增功能: 实现基于 Tkinter 的独立线程粘贴窗口及文本引用缓存 * 引入 `PasteReference` 类管理长文本,通过 `collapsed` 方法将超长文本替换为 UUID 引用标记 * 新增 `PasteWindow` 单例类,在独立线程中运行 `tk.Tk` 事件循环以支持非阻塞大文本编辑 * 在 `Repl` 界面添加 `big-paste-btn` 按钮及 `alt+v` 快捷键绑定 `action_paste_big_text` * 修改 `_do_submit` 逻辑,调用 `paste_refence.expand` 还原引用并清理缓存 * 集成 `show_paste_window` 便捷函数处理回调,自动检测文本长度决定是否启用压缩 - 重构优化: 调整控制台 UI 布局样式以适应新组件 * 更新 CSS 规则,调整 `#input-container`、`#button-area` 及 `#submit-btn` 的宽度与边距 * 将提交按钮区域嵌套至 `Vertical(id="button-area")` 容器中,保持布局一致性
- 重构优化: 调整引用匹配逻辑并移除冗余功能
* `PasteReference` 的初始化参数 `threshold` 从 240 调整为 120
* `expand` 方法返回值类型由 `str | None` 改为 `str`,不再返回 None
* 引入正则表达式 `r'\[(func_call|paste)_([a-f0-9]{8})\]'` 精确匹配引用标记
* 仅处理实际存在于 `_paste_cache` 中的引用,并在展开后自动删除对应条目
- 修复问题: 修复额外的快捷键导致粘贴异常的问题
* 移除 `<Control-v>` 绑定的 `_paste_from_clipboard` 事件处理函数
* 移除 `<Control-c>` 绑定的 `_copy_to_clipboard` 事件处理函数
* 删除 `_paste_from_clipboard` 方法的完整实现代码
- 新增功能: 引入独立的路径解析与文件创建方法 * 新增 `resolve_path` 方法,仅执行安全边界验证而不检查文件存在性,适用于准备创建新文件的场景 * 新增 `create_file_with_parents` 方法,支持在工作区内自动创建父目录并写入文件内容 - 修复问题: 优化现有验证工具的参数结构与错误处理 * 移除 `validate` 方法的 `create_file_if_not_exist` 参数,将文件创建逻辑剥离至新方法 * 更新 `WriteTool` 中的调用逻辑,先通过 `resolve_path` 校验路径安全性,再调用 `create_file_with_parents` 执行写入 * 增强 `WriteTool` 对目标路径的校验,在写入前明确判断是否为目录并返回友好的错误提示 - 重构优化: 统一路径安全边界检查逻辑 * 提取公共的边界守卫逻辑到 `resolve_path`,消除 `validate` 方法中的重复代码 * 确保所有路径操作均复用统一的越界检测机制 (`WorkspaceBoundaryError`)
- 新增功能: 在 `ClsCommand` 中增加对 Textual 应用实例的支持,通过 `context.app.refresh()` 刷新 UI 界面并重新显示帮助文本 - 重构优化: 将 `ClsCommand` 从 `system_commands.py` 迁移至 `repl.py`,使其能够访问 `CommandRegistry` 实例以动态获取命令列表 - 修复问题: 更新 `CommandContext` 和 `CommandHandler` 类定义,添加 `app: App | None` 字段用于传递 Textual 应用实例 - 破坏性变更: 移除全局注册的 `ClsCommand` 实例,不再通过 `src.console.commands.system_commands` 导入,需确保调用方正确注入 `command_registry`
- 新增功能: 引入环境检测与动态命令构建机制 * 新增 `is_frozen()` 函数用于检测 PyInstaller 打包状态 * 新增 `get_executable_path()` 和 `get_script_path()` 分别处理 exe 路径与脚本路径 * 重构 `_get_base_command()` 根据运行环境自动选择 `[executable]` 或 `[executable, script]` 参数组合 - 修复问题: 优化跨平台终端启动兼容性 * 替换 `subprocess.run(["which", ...])` 为更标准的 `shutil.which()` 检查终端模拟器 * 更新 Windows 启动逻辑,明确 `start` 命令需配合 `shell=True` 执行 * 增强 Linux/Unix 回退方案,使用 `nohup` 在后台运行而非直接阻塞 - 重构优化: 提升错误处理与用户反馈体验 * 修改 `main.py` 入口,将原 `src.console.main:main` 重命名为 `_main` 并添加包装函数 * 更新 `pyproject.toml` 中 `requires-python` 至 `>=3.14` 及脚本入口指向 `main:main` * 增加启动模式日志输出 (开发环境/打包环境) 及详细的启动命令展示 * 改进失败时的帮助提示,动态生成针对当前环境的 `manual_cmd` 供用户手动调试
- 新增功能: 实现 `StatTool` 类以获取文件或目录详细信息 * 集成 `stat_tool.py` 至 `tool_registry.py` 注册列表 * 提供 `stat` 方法,支持路径验证与异常处理 (`PathNotFoundError`, `WorkspaceBoundaryError`) * 输出包含大小 (自动单位转换)、行数、创建/修改/访问时间 * 解析并格式化权限信息 (符号位如 `-rwxr-xr--` 及八进制数值) * 识别文件类型 (目录/文件/链接等) 并显示所有者 UID/GID 及硬链接数 * 针对目录额外统计子项数量,针对符号链接显示目标路径 - 修复问题: 修正启动命令日志中的字符串引号格式不一致 * 将 `launch_commands.py` 中单引号包裹的转义字符 `\n` 统一改为双引号 * 调整 `Panel` 标题参数中的引号风格以保持代码一致性
- 新增功能: 实现跨语言符号定义与引用定位 * 新增 `SymbolRefTool` 类,继承自 `BaseTool` * 新增 `_generate_patterns` 函数,支持 Python、JavaScript/TypeScript、Markdown 及通用语言的搜索模式生成 * 新增 `_search_pattern` 函数,执行正则匹配并提取上下文行 (默认2行) * 新增 `_detect_language` 函数,通过文件特征自动识别项目主要编程语言 * 新增 `symbol_ref` 方法,作为工具入口,支持 `include_definitions`, `include_references`, `limit` 等参数控制 - 重构优化: 更新工具注册逻辑 * 在 `src/core/tool_registry.py` 中导入 `SymbolRefTool` * 将 `SymbolRefTool` 加入工具实例化循环列表
- 新增功能: 增强上下文行匹配内容的可视化包裹标记 * 在 `regex_search_tool.py` 中引入 `re.compile(pattern)` 和 `finditer` 逻辑 * 实现从后往前遍历 `matches_positions` 以精确插入 `>>>` 和 `<<<` 标记 * 处理 `marked_content` 生成,确保仅对实际匹配部分进行高亮而非整行
- 新增功能: 引入 SessionManager 单例类管理工作区会话生命周期
* 通过 `SessionManager.__new__` 和 `_instances` 字典实现基于工作区路径的单例模式
* 实现 `create_session` 生成符合 `YYYYMMDD-HHMMSS-{uuid}` 格式的会话 ID 并初始化目录结构
* 集成 `.ManualAid` 目录常量定义 (`MANUALAID_DIR`, `SESSIONS_DIR`, `PATCHES_DIR`) 用于隔离会话数据
- 修复问题: 完善工具调用与文件读取的审计追踪能力
* 通过 `append_tool_call` 和 `get_tool_calls` 管理 `tool_calls.jsonl` 日志追加与读取
* 利用 `update_read_record` 和 `get_read_record` 维护 `read_records.json` 中的文件元数据 (mtime, sha256)
- 重构优化: 建立 Patch 文件与统计数据的持久化存储流程
* 提供 `save_patch` 和 `load_patch` 接口处理 `call_id` 对应的 `.patch` 文件读写
* 实现 `update_session_stats` 更新 `session.json` 中的工具调用统计数据
* 增加 `list_sessions` 方法支持按时间倒序遍历历史会话摘要
- 文档更新: 补充完整的单元测试覆盖核心逻辑
* 编写 `test_session_manager.py` 覆盖单例验证、目录创建、会话状态流转及异常处理
* 针对工具调用、读取记录、Patch 管理及统计更新等模块添加专项测试用例
- 修复问题: 解决可能存在的HTML实体字符导致界面显示异常 * 将转义的双引号实体 `"` 还原为标准双引号 `"`
- 破坏性变更: 移除 `parse_func_call` 函数的位置参数 (`args`) 返回,统一仅返回函数名和关键字参数字典 (`kwargs`)。所有调用该函数的模块(如 `tool_handler.py`)必须更新以适配新的返回值结构。 - 新增功能: 在 `base_tool.py` 中引入 `convert_param_type` 辅助函数及 `BaseTool.convert_args` 方法,实现根据类型注解自动将字符串参数转换为 int、float、bool、list、dict 等目标类型。 - 修复问题: 简化 `parse_func_call` 逻辑,废弃复杂的 JSON 修复与手动提取回退机制,改为基于 XML 标签 `<func_name>` 和 `<param>` 的纯正则解析模式。 - 文档更新: 修改 `prompts.py` 中的工具调用格式示例,从 JSON 格式变更为结构化 XML 格式,明确展示 `<func_name>` 和 `<param>` 标签用法。
- 新增功能: 引入多线程并发搜索机制 * 移除 `contextlib` 导入,新增 `ThreadPoolExecutor` 和 `as_completed` 实现异步任务管理 * 重构 `_search_pattern` 为 `_search_single_pattern`,调用 `workspace.search_content` 替代原生文件遍历 * 新增 `_search_patterns_concurrent` 函数,使用线程池并行执行多个正则模式的搜索任务 * 添加 `_get_file_pattern_by_language` 函数,根据语言自动匹配文件后缀 (如 `*.py`, `*.ts`) * 在 `SymbolRefTool.run` 方法中增加 `file_pattern` 参数,支持自定义文件过滤模式 * 默认排除目录 `DEFAULT_EXCLUDED_DIRS` 已定义,包含 `.git`, `__pycache__` 等标准路径 - 修复问题: 增强结果解析的健壮性 * 修改 `_format_results` 逻辑,使用 `.get()` 安全获取 `type`、`match_type` 和 `context` 字段,防止键缺失报错 * 简化上下文展示逻辑,适配 `workspace.search_content` 返回的格式化字符串结构 - 文档更新: 改进控制台帮助信息格式 * 重写 `repl.py` 中的工具调用示例,将单行 XML 改为多行缩进格式,提升可读性
- 重构优化: 增强代码类型安全性与可读性 * `read_tool.py` 中 `read` 函数的 `max_lines` 参数增加 `int` 类型提示 * `read_tool.py` 中 `read` 函数的 `encoding` 参数增加 `str` 类型提示 * `read_lines_tool.py` 中 `read_lines` 函数的 `start`, `end`, `context` 参数显式声明为 `int` 类型 * `read_lines_tool.py` 中 `read_lines` 函数的 `encoding` 参数增加 `str` 类型提示
- 重构优化: 将分散在 `src/console` 和 `src/core` 的类统一迁移至 `src.models` 模块 * 新增 `Command`, `CommandContext`, `CommandResult`, `CommandParseResult` 等数据类定义 * 移动 `ToolErrorResponse` 和 `ResultEntry` 至 `src.models` 目录 * 删除 `src/console/commands/base.py`, `src/core/parse_func_call.py`, `src/core/tool_error_response.py` - 新增功能: 增强命令行解析能力与系统命令支持 * 扩展 `parse_input` 函数以支持多工具调用 (`funcs` 列表) 及非标准 XML 格式解析 * 添加 `launcher.py` 模块封装跨平台 (Windows/macOS/Linux) 的新窗口启动逻辑 - 破坏性变更: 调整核心数据结构与 API 签名 * `CommandParseResult` 字段变更:移除 `raw_input`, `func_name`, `func_args`, `func_kwargs`; 新增 `is_func`, `cmd_kwargs`, `funcs` * `CommandContext` 结构变更:移除 `app` 依赖,新增 `command_registry` 字段用于命令分发 * `parse_input` 签名变更:新增 `warns: list[str]` 参数用于返回解析警告信息 * `parse_func_call` 签名变更:新增 `warns: list[str]` 参数并集成至 `input_parser.py` - 文档更新: 规范代码组织与导入路径 * 重命名 `src/console/commands/registry.py` 为 `command_registry.py` * 重命名 `src/console/interactive_viewer.py` 为 `src/console/ui/interactive_viewer.py` * 全局替换旧版导入路径为新版 `src.models` 路径
- 删除代码: 移除 src/core/session_manager.py 文件,该文件负责管理会话生命周期、工具调用日志及 Patch 文件存储。 - 删除测试: 移除 tests/core/test_session_manager.py 文件,该文件包含对 SessionManager 单例模式、目录结构、会话状态及读写功能的完整覆盖。 - 影响范围: 暂无任何依赖 `SessionManager` 类的方法
- 重构优化: 将多行条件判断合并为三元表达式
* 修改 `collapsed` 方法中 `<func_call>` 标签检测后的 `ref_id` 赋值逻辑
* 移除冗余的 `if-else` 分支结构,统一使用 `f"[func_call_{ref_id}]" if ... else f"[paste_{ref_id}]"` 形式
- 新增功能: 统一剪切板复制机制 * 新建 `src/core/copy2clip.py` 模块封装 `copy_to_clipboard` 函数 * 引入 `pyperclip` 优先库,失败时自动降级调用系统命令 (`clip`, `pbcopy`, `xclip`) - 修复问题: 移除硬编码的命令行匹配逻辑 * 从 `src/core/input_parser.py` 中移除 `COPY_PATTERN` 和 `VIEW_REMOVE_PATTERN` 正则匹配 * 在 `src/console/result_manager.py` 中移除 `_copy_fallback` 方法,改为调用新模块 * 使用 `shlex.split` 替代简单的字符串分割以支持带参数的命令解析 - 重构优化: 增强命令参数处理能力 * `src/models/commands/command.py` 增加 `argparse` 属性及 `parse` 方法支持标准参数解析 * `src/workspace/tools/base_tool.py` 新增 `to_func_call` 方法生成工具调用 XML 格式 * `src/console/commands/result_commands.py` 重构 `CopyCommand` 支持 `-i/--index` 和 `-t/--tool` 参数 - 破坏性变更: 废弃交互式视图相关命令 * `ViewCommand`, `ViewClearCommand`, `ViewRemoveCommand` 被标记为 `@warnings.deprecated` * 这些命令不再执行实际的 UI 交互逻辑,仅返回“已弃用”消息
- 重构优化: 将 `system_commands.py`、`result_commands.py` 和 `workspace_commands.py` 拆分为独立的功能目录 (`systems`, `results`, `workspaces`) * 移动 `QuitCommand`, `ToolsCommand`, `ToolDetailCommand`, `ClsCommand`, `HelpCommand` 至 `src/console/commands/systems/` * 移动 `CopyCommand` 至 `src/console/commands/results/copy_cmd.py`,并将 `HistoryCommand` 提取为独立文件 * 移动 `WorkspaceCommand` 至 `src/console/commands/workspaces/workspace_cmd.py` * 将 `generate_help_text` 函数抽取至 `src/utils/generate_help_text.py` 供全局复用 - 修复问题: 修正 `cls_cmd.py` 和 `help_cmd.py` 中对 `generate_help_text` 的导入路径错误 - 破坏性变更: 删除已弃用的 `ViewCommand`, `ViewClearCommand`, `ViewRemoveCommand` 及相关逻辑 * 受影响的范围:`command_registry.py` 中不再注册上述视图类,用户无法通过 `/view`, `/view_clear`, `/view_remove` 调用这些功能
- 重构优化: 改进工作区上下文生成逻辑 * 将 `_generate_workspace_metadata` 函数的返回格式从 XML 标签行拼接改为结构化的 `<workspace_info>` 块,包含 `root_path`, `is_git_repo`, `platform`, `date` 字段 * 新增关于文件路径相对性及工具调用上下文的说明文本 - 文档更新: 统一并增强系统提示词定义 * 将 `WORKSPACE_CONSTRAINTS` 重命名为 `SYSTEM_CONSTRAINTS` 并在 `src/constants/prompts.py` 中更新其内容 * 在 `src/console/commands/workspaces/workspace_cmd.py` 中将导入的常量由 `WORKSPACE_CONSTRAINTS` 替换为 `SYSTEM_CONSTRAINTS` * 扩展提示词内容,增加 `WORKFLOW GUIDELINES` 部分,明确工具依赖、停止等待机制及多步骤任务处理策略 - 修复导入路径问题
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.