Feat: Add Skill System / 添加 Skill 系统#155
Merged
Merged
Conversation
- 新增功能: 引入统一的文件排除与权限决策引擎 * 新增 `ExclusionManager` 类,聚合默认性能排除、.gitignore 规则及用户自定义忽略项 * 新增 `PermissionManager` 类,提供基于操作类型 (READ/WRITE/SEARCH) 的统一权限决策接口 * 新增 `SensitiveFileError` 异常类,用于在路径校验阶段拦截敏感文件访问 * 工具层集成:`ls_tool`, `glob_tool`, `regex_search_tool`, `exact_search_tool` 均接入 `exclusion_manager` 进行路径过滤 - 修复问题: 增强敏感文件保护机制 * 在 `PathValidator` 中增加 `_raise_if_sensitive` 逻辑,直接禁止访问 `.env`, `*.pem`, `id_rsa` 等敏感文件 * 在 `BaseTool` 的异常处理装饰器中捕获 `SensitiveFileError`,返回明确的拒绝访问提示 * 将原本硬编码的 `DEFAULT_EXCLUDED_DIRS` 替换为动态加载的 `ExclusionManager` 实例 - 重构优化: 简化搜索与遍历逻辑 * 移除 `workspace.py` 和各类 Search Tool 中重复的正则编译与排除逻辑 * 使用 `merge_ignore_regexes` 方法统一合并默认规则与用户传入的 ignore 模式 * 利用 `is_ignored_by_gitignore` 函数统一处理 .gitignore 规则的匹配与否定逻辑 - 文档更新: 补充模块设计说明 * 添加 `ExclusionManager` 和 `PermissionManager` 的类级文档字符串,明确区分性能排除与安全排除场景
- 破坏性变更: 移除 `PermissionManager` 及其相关 API * 删除 `src/workspace/permissions.py` 文件 * 移除 `Workspace` 类中的 `self.permission_manager` 属性及初始化逻辑 * 调用方需直接依赖 `PathValidator` 进行敏感文件拦截,不再通过 `workspace.permission_manager.is_allowed()` 查询 - 重构优化: 整合敏感文件规则至 `ExclusionManager` * 将 `SENSITIVE_FILE_PATTERNS` 从硬编码移至 `ExclusionManager.SENSITIVE_FILE_PATTERNS` * `PathValidator` 引入 `ExclusionManager` 作为唯一敏感文件模式来源 (`re.compile(p) for p in ExclusionManager.SENSITIVE_FILE_PATTERNS`) * 更新正则表达式前缀以支持路径边界匹配 (添加 `(^|/)`) - 代码清理: 移除冗余的排除检查逻辑 * 在 `Workspace._search_content` 中移除基于 `should_exclude_dir` 的父目录遍历检查 * 移除 `ExclusionManager` 中已废弃的 `_sensitive_file_res` 预编译缓存逻辑 * 移除 `ExclusionManager` 中不再使用的 `is_sensitive_file` 和 `should_exclude_dir` 方法 - 文档更新: 补充 `gitignore_loader` 已知局限性说明 * 明确标注不支持嵌套 `.gitignore`、行尾续行及字符类扩展语法 * 记录否定模式优先级处理与真实 Git 的差异及设计理由
- 新增功能: 实现统一的配置管理器 (ConfigManager) * 引入 `src/core/config_manager.py` 单例类,支持环境变量、Skill 及通用配置的读取与持久化 * 提供 `get`, `set`, `delete` 等核心 API 接口,支持通过 `DatabaseManager` 读写 SQLite 数据库 * 实现 `apply_env_configs` 方法自动将配置同步至 `os.environ` * 定义 `DEFAULT_ENVS` 常量,包含 `TOOL_MAX_DOC_LENGTH`, `RESULT_EXPIRE_MINUTES` 等默认值 - 新增功能: 构建 Skill 发现与管理服务 (SkillManager) * 创建 `src/core/skill_manager.py` 单例类,支持从全局路径 (~/.claude/skills) 和项目路径 (.ManualAid/skills) 扫描技能 * 集成 `src/models/skill.py` 数据模型,解析 SKILL.md 的 YAML frontmatter 提取名称和描述 * 实现 `set_disabled` 和 `get_disabled_skills` 接口,支持禁用特定技能并持久化到数据库 * 新增 `SkillTool` 工具 (`src/workspace/tools/skill_tool.py`),允许用户加载指定技能内容注入会话 - 新增功能: 扩展 TUI 设置界面 * 在 `tui_console.py` 中新增 "Settings" 标签页,整合 `SettingsTab` * 实现 `EnvConfigTab` 用于编辑预定义环境变量,支持从 `.env` 文件加载/保存差异配置 * 实现 `SkillConfigTab` 展示技能列表,支持启用/禁用操作及查看详情 * 修改 `main.py` 启动流程,初始化 `ConfigManager` 和 `SkillManager` 并在应用启动时执行环境配置应用和技能发现 - 文档更新: 依赖项与数据库结构升级 * 在 `requirements.txt` 中添加 `pyyaml` 依赖以支持 YAML 解析 * 扩展 `database_manager.py`,新增 `config` 表结构存储键值对配置 * 为 `config` 表添加迁移逻辑 (Phase 6),确保旧版本数据库兼容
- 新增功能: 实现技能启用/禁用状态管理与持久化 * `SkillManager` 新增 `get_enabled()` 和 `get_disabled()` 方法,用于从数据库获取技能状态 * `workspace_cmd.py` 新增 `_generate_skill_prompt_section()` 函数,动态生成 `<available_skills>` XML 块 * `skill_config_tab.py` 新增“启用选中”和“禁用选中”按钮逻辑,支持通过 `set_disabled()` 方法更新持久化状态 * 系统提示组装流程中增加技能段落的生成与注册,通过 `register_extension_hook` 注入技能信息 - 修复问题: 修正 UI 显示状态与数据库不一致的缺陷 * `skill_config_tab.py` 在刷新表格时改用 `get_disabled()` 集合判断状态,确保列表显示的启用/禁用标记(✓/✗)与数据库持久化数据严格同步 * 移除对 `skill.enabled` 属性的直接依赖,统一使用禁用集合进行状态校验 - 重构优化: 简化接口参数类型定义 * `database_manager.py` 将 `set_disabled_skills` 方法的参数类型从 `*names: str` 调整为 `names` (支持 set, list, tuple),内部自动转换为集合处理
This was
linked to
issues
May 7, 2026
Closed
Owner
Author
- 新增功能: 在文件扩展名白名单中添加Godot相关后缀 * 添加 `.godot` 和 `.gd` 支持 * 添加 `.gd.uid` 和 `.tscn` 支持
- 新增功能: 在 binary_detector.py 的 FILE_EXTENSIONS 集合中增加对特定编译产物和数据库文件的识别 * 添加 .pdb (程序数据库) 后缀 * 添加 .pyd (Python 动态链接库) 后缀 * 添加 .o (目标文件) 后缀
- 新增功能: 集成二进制文件检测机制 * 在 `regex_search_tool.py` 和 `exact_search_tool.py` 中导入 `src.utils.binary_detector.is_binary_file` * 在遍历文件列表时增加 `is_binary_file(file_path)` 判断,自动跳过二进制文件 - 重构优化: 增强文件路径筛选与排除逻辑 * 修改 `files_to_search` 生成逻辑,将简单的 `rglob` 转换为包含条件过滤的列表推导式 * 引入 `self._exclusion_manager.should_exclude_path(p)` 方法,支持自定义路径排除规则 * 确保仅处理 `p.is_file()` 且未被排除的有效文件
…xclusion Feat/enhance path validation exclusion
- 新增功能: 实现扩展钩子的重置机制 * 新增 `clear_extension_hooks` 函数用于清空已注册的钩子列表 * 在 `generate_system_prompt` 流程末尾调用 `clear_extension_hooks()` - 重构优化: 将扩展钩子存储私有化 * 将全局变量 `EXTENSION_HOOKS` 重命名为 `__EXTENSION_HOOKS` * 更新 `register_extension_hook` 和 `generate_extensions_section` 内部逻辑以使用私有变量
- 新增功能: 实现 Shell 命令的提交、审核及执行闭环 * 新增 `src/workspace/tools/shell_tool.py`,集成 `ShellTool` 类,调用时创建 `PENDING_AUDIT` 状态记录 * 新增 `src/console/ui/widgets/shell_result_tab.py` (`ShellResultTab`),展示已完成的 Shell 命令及其输出,支持展开详情和一键复制 * 数据库层面新增 `shell_audit` 表,包含 `command`, `description`, `audit_status`, `output`, `exit_code` 等字段 * `database_manager.py` 增加 `record_shell_command`, `update_shell_audit`, `get_shell_pending_audits`, `get_shell_completed` 等数据访问方法 - 修复问题: 完善审核流程以支持 Shell 命令操作 * `src/core/audit_committer.py` 新增 `commit_shell` 方法,处理批准后的 `subprocess.run` 执行逻辑,包含超时控制 (300s) 和输出截断 (10000 chars) * `src/console/ui/widgets/audit_tab.py` 重构渲染逻辑,在文件变更列表前优先展示待审核的 Shell 命令,添加 "批准" 和 "拒绝" 按钮处理事件 * `tui_console.py` 和 `repl.py` 完成 `ShellResultTab` 的注册、依赖注入及刷新逻辑绑定
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.
添加基于 Python texture 库的设置标签页 / Add Settings Tab Based on Python texture Library
添加 Skill 系统,放在设置标签页下;允许动态加载 SKILL / Add Skill System Under Settings Tab with Dynamic Loading of SKILLs