- 新工具:
safe_read— 增强版安全文件读取,替代 AstrBot 原生file_read。支持编码自动检测、二进制文件 hex 预览、head/tail、行号范围、目录递归读取、代码骨架提取;失败路径接入项目 proposal 协议,引导 LLM 下一步操作。 - 安全修复: SSRF 校验增强,拦截 IPv4 八进制/十六进制/短写法绕过(如
0177.0.0.1、0x7f.0.0.1、127.1)。 - 安全修复:
shell_exec/test_runner增加命令参数路径校验,禁止参数指向 cwd 外绝对路径或通过..逃逸。 - 安全修复:
file_remove目录删除改用os.walk(followlinks=False),不再跟随 symlink 进入外部目录。 - 安全修复:
file_zip打包改用os.walk(followlinks=False)并跳过 symlink,防止打包沙箱外文件。 - 性能修复:
safe_write覆盖已存在文件前预览读取限制为 100KB,编码检测改用 32KB 采样,避免大文件全量读入内存。 - 性能修复:
safe_readtail 模式改为从文件尾部倒读字节块,skeleton 模式限制 512KB/5000 行,行范围模式对大文件停止 EOF 全扫描。 - Bug 修复:
safe_read目录recursive=True时max_depth实际只生效一层的问题。 - Bug 修复:
sys_snapshot缓存变量UnboundLocalError(补充global声明)。 - 工程清理: 移除误提交的
docs/file_read_design.md,docs/加入.gitignore。 - 文档同步: README / README_EN / metadata 工具数更新为 64,版本号统一为 2.6.0。
- 测试: 全量测试 209 passed、8 skipped;新增
safe_read、safe_write大文件预览、shell_exec参数逃逸等回归用例。
- 配置页重构: 群配置页改为卡片化布局,支持真实 QQ 群列表、群级工具组开关、单工具禁用和批量操作。
- 视觉优化: 新增柔和高饱和配色、明暗主题切换,并使用裁切后的本地插件 Logo 作为配置页头像。
- GitHub PR 修复: 新增
gh_pr review,review 正文统一通过--body-file传递,避免多行内容被 shell 截断。 - 配置说明: 明确群配置
extra_admin_ids覆盖默认值而非叠加;配置结构重组后建议在 WebUI 中重新保存一次。 - Release 补齐: 发行版附加可直接下载安装的插件 ZIP 包。
- 测试: 相关子集验证 28 passed、1 warning。
-
op_log 修复:
_redact_value子串匹配改为下划线分词语义匹配,修复keyboard/monkey等参数被key误脱敏;_result_status非 JSON 字符串返回error而非ok;_INITIALIZED_DB类型修复(Path→str),修复 Python 3.12 下Path == str永远 False 导致每次record()重复建表。 -
codegraph 索引性能修复:
_resolve_referencesPhase 2(跨文件 import 解析)从 O(N×M) 次 SQL 查询改为预建哈希索引 O(1) 查表,修复 500+ 文件项目索引超时问题。astrbot-fork(504 文件/4917 符号/75459 边)从 >120s 超时恢复到 3.8s。 -
codegraph P0 Bug 修复(Claude 审查):
_code_diff_impact/_code_pack/_code_status增加project_dir参数,修复与code_index路径不一致导致的"索引为空"静默误报;_extract_pythonsource 截断上限 500→6000 字符,_row_to_dict补全source_truncated/total_lines透传;增量索引增加已删除文件清理逻辑,确保mtimes/symbols/edges/fts同步。 -
codegraph 性能优化(无效回退): 尝试 ThreadPool/ProcessPool 自适应并行,Windows 上线程调度开销 > 解析收益,恢复单线程。流式写入每 50 文件批处理。超大文件(>1MB)跳过索引。
-
安全加固:
safe_write.py路径穿越检查在Path()解析前执行,防止Path.normalize()消除..;_extract_file_worker增加relative_toValueError 保护。 -
Review 修复:
FakeCodeGraphmock 签名同步project_dir参数;进度日志result变量 NameError 修复。 -
测试: 180 passed、8 skipped。
- MCP 改动同步(本插件适配): 新增
safe_write新建/整体覆盖写入工具;删除非核心工具file_watch、svg_render、json_schema_val和regex_test/regex_replace;合并base64_+hex_+url_为encode_decode,合并time_now+time_convert+time_diff为time。工具数 71→63,工具组 11→10。 - Bug 修复(从 MCP 版移植):
shell_exec_DANGEROUS_RAW追加&和%;symbol_rename跨文件重命名改用proposal_reply()协议;http_getHTTPError 返回增加status字段;syntax_check编译器缺失返回ok=False;file_remove系统目录黑名单从C:/Windows收窄到System32+SysWOW64。 - 真实安全问题修复:
shell_exec禁止带路径的命令(防止/malicious/python被当作python放行);rg_searchPython fallback 增加 ReDoS 防护(pattern 长度 1000、嵌套量词检测、搜索步数上限 50 万);op_log扩展敏感词(passwd/pwd/private_key/credential/api_key)。 - 文档与配置同步: README、README_EN、ARCHITECTURE、
_conf_schema.json、metadata 全面更新到 63 工具/10 组,移除已删工具的残留引用。 - 测试: 新增
test_safe_write.py覆盖新建/覆盖/语法错误保留/回滚/系统目录拦截;test_auth.py工具名同步;test_registry.py计数改为 63;test_rg_search.py新增 ReDoS 防护用例;test_op_log.py新增 api_key/private_key 脱敏用例。当前本地验证 180 passed、8 skipped。
- 新工具 — 安全编辑链: 新增
test_runner(pytest/go test/cargo test/jest 统一封装)和multi_edit(原子多文件编辑,失败全量回滚,同文件顺序应用语义已文档化),补齐 syntax_check → lint_runner → test_runner 的验证链路。 - 新工具 — 执行与审计组: 新增
shell_exec严格白名单命令执行器(七层防御:白名单→子命令→危险字符→shell=False→cwd限制→COLUMNS修复→高风险确认;移除go run,已添加 APPDATA/LOCALAPPDATA/CARGO_HOME/GOPATH/NODE_PATH 环境变量)和op_logSQLite 工具调用审计日志(recent/errors/file/stats 查询,session 自动轮转,敏感参数脱敏)。 - 新工具 — 代码理解组: 新增
symbol_rename,基于 codegraph 索引和 Pythontokenize做符号重命名,默认 dry-run,多文件重命名需confirm_multi_file=true确认,只替换 NAME token,不改字符串和注释。 - codegraph 泄漏修复落地:
_registry.py的 5 个_code_*包装函数统一在finally中关闭CodeGraph连接,修正 v2.4.5 changelog 曾声称已修但包装层仍泄漏的问题。 - 审计接入:
protect_tool在授权工具调用完成后 best-effort 写入op_log,鉴权失败不污染审计库,审计失败不影响原工具返回。 - 受限环境兼容:
safe_edit默认备份目录在用户目录不可写时降级到临时目录.irmia/backups;HTTP SSRF 测试改为 mock 公网 DNS,避免本机 DNS 污染导致误判。 - Review 修复 (R1+R2):
- C1: 移除
go run白名单;H1: 补全 Windows 环境变量(APPDATA/LOCALAPPDATA/CARGO_HOME/GOPATH/NODE_PATH);H3: 临时文件写入系统 temp 目录;M1: 修复 shlex 冗余引号剥离;M4: jest JSON 健壮解析;M5/L4: multi_edit 同文件编辑语义文档化 +replacements_made字段;L2: op_log 拆分_ensure_db单次建表 - C2: SymbolRenameTool 补
confirm_multi_file参数(schema + call 方法 + description),修复多文件重命名安全阀;H4:_unwrap扩展透传 stdout/stderr/cmd 诊断字段,shell_exec 超时不丢失输出;H5: op_log stats 移除db_path/session_id信息泄露
- C1: 移除
- 文档与配置同步: 工具数 66→71,工具组 10→11,新增「执行与审计」组;同步 README、README_En、ARCHITECTURE、配置 schema、metadata 和版本号。
- 测试扩展: 新增 shell_exec/test_runner/multi_edit/op_log/symbol_rename 用例;当前本地验证 174 passed、8 skipped。
- 新工具 — 代码理解组: 新增
code_index建语义索引、code_explore符号搜索与调用链追踪、code_diff_impact变更波及分析、code_pack精准上下文打包、code_status索引健康检查。Python AST 零依赖解析 + 可选 tree-sitter 多语言(JS/TS/Go/Rust/Java/C/C++),SQLite FTS5 存储,一次调用即答案。64→67 工具,9 组→10 组 - 语义索引引擎稳定: 修复 SQLite 连接泄漏和增量索引时序问题,扩展多语言支持(Python 全框架 + JS/TS/Java/Rust)
- safe_edit 多匹配消歧: 多处匹配时不再报错退出,列出所有候选位置供选择
- 错误返回防截断: 语义索引工具在未建索引或查无结果时返回完整提示,不再被截断为模糊报错
- gh_cli 自动定位: 移除本地路径硬编码,改为全盘自动搜索 gh.exe + 未找到时给出安装指引
- 缺依赖友好:
html_extract、syntax_check、语义索引、config_diff缺少可选依赖时返回 pip install 指引而非报错 - 测试扩展: 新增 27 个语义索引用例,总用例 120→147
- 文档查漏: README 工具组数/工具数修正、tree-sitter 可选依赖说明、README_EN 同步;
.gitignore补 SQLite WAL 和索引目录规则;全项目陈旧引用 13 处修复
- 新工具 (P0): 新增
code_index/code_explore— Python AST 解析 + SQLite FTS5 存储,三级搜索(LIKE → FTS5 → hint),5 种边类型(calls/imports/extends/references/overrides),后处理引用消解。一次调用即答案,不退到 rg_search 手动拼凑。61→63 工具,9→10 组(新增「代码理解」组) - L2 原生工具摘除恢复:
_auth_guard在授权用户路径摘除有 devkit 替代品的 AstrBot 原生工具(astrbot_file_edit_tool→safe_edit、astrbot_grep_tool→rg_search),仅当替代品确实可用时才摘除 - Agent 友好: tool description 改为命令式使用指南(何时调用、不要先 rg_search、返回是 Read-equivalent),移除"用 file_read 查看"反模式 hint
- 缺陷修复:
_unparse_attr返回类型修复(Bug1)、FTS5 索引去源码噪声(Bug2)、SQLite 连接泄漏修复、core/__init__.py补全
- 工具管理权收回: 不再覆写
handler_module_path强制对齐 Astrbot,改为利用startswith方向差异——_PLUGIN_MODULE_PREFIX不带.main后缀,使turn_off_plugin能正确停用、_unbind_plugin不被误删 - 防御:
handler_module_path前缀避坑 →__init__自愈(_heal_inactivated_tools+ DB 清理)→_auth_guard请求级兜底 →star_mapalias 修复 WebUI 来源显示 - 上游问题: 定位并报告 4 个 AstrBot 上游 bug(
config.py停用时无差别 reload、startswith方向反 ×2、turn_on_plugin重启路径缺失、handler_module_path前缀不一致)
- 群级权限配置 (PR #4): 新增
devkit_web.pyWeb 管理面板 — 按群聊独立配置工具箱权限(额外管理员、工具组开关),支持全局管理员和群级额外管理员双层鉴权 - 配置: 新增
group_config_enabled开关(默认关闭),config.json/_conf_schema.json同步 - 前端:
pages/settings/— 蓝白主题 WebUI,群列表侧边栏 + 配置面板,XSS 防护,确认弹窗,Toast 提示 - AstrBot 兼容修复:
handler_module_path从子模块路径(astrbot_plugin_irmia_devkit.tools.xxx)改为插件根路径(data.plugins.astrbot_plugin_irmia_devkit),对齐star_manager的 deactivate/activate 路径匹配逻辑,修复插件禁用/启用后工具被意外关闭的问题 - 上游问题: 发现并报告 AstrBot
star_manager.py中plugin.module_path.startswith(mp)的比较方向反了(应mp.startswith(plugin.module_path)),导致插件禁用/启用时工具状态持久化损坏;含完整 6 步复现路径和插件侧 workaround - 日志优化: L2 摘除实验(已回退);
_auth_guard回到纯 L1 模式,管理员路径零开销
- 权限防线 (P0): 新增
tools/_auth.py模块 —protect_tool()包裹每个工具的call()执行前鉴权;build_allowed_ids()自动读取 AstrBot 全局管理员列表 + 插件额外配置 - 钩子清理 (P0):
main.py新增_auth_guard—on_llm_request钩子按handler_module_path清空本插件工具,非管理员 LLM 不可见 - 配置:
config.json/_conf_schema.json新增owner_sid、allowed_ids字段 - 测试: 新增
test_auth.py— 20 用例覆盖protect_tool放行/拦截/异常、build_allowed_ids合并/降级、Layer 1 过滤逻辑(共 120 用例) - 代码审查修复: 三轮审查修复 18 项问题 —
_allowed_ids缓存同步、_rebuild_func_tool静默失败→告警、http_download反模式消除、syntax_check异常限窄+TimeoutExpired、rg_searchwhole_wordre.escape、死 import 清理、flag_map提取常量等 - 交叉验证修复: 第五轮全量审查 + AstrBot 源码交叉比对,修复 25 项 —
safe_edit回滚+备份异常捕获、regex_testerreplace()超时保护、gh_cli临时文件泄漏、es_searchregex+ext 冲突、file_zip符号链接 SymlinkGuard、rg_search错误区分、_auth多配置管理员同步、port_checksocket 初始化、csv_utils行上限、semverv 前缀、log_parse精确匹配等 - API 规范化:
_registry.py移除无效func_type字段;_auth.py/main.py改用event.is_admin()替代getattr - 缺陷: 零存量已知缺陷
- 新工具:
rg_search— 文件内容级代码搜索引擎(ripgrep + Python fallback),支持正则、全词匹配、文件类型过滤、上下文展示 - 编辑增强 (P0):
safe_edit/file_patch加 whitespace-tolerant 匹配(对标 Aider),精确匹配失败时自动对齐行首空白重试 - 上下文赋能 (P0):
rg_search支持context_lines参数(rg -C),lint_runner返回错误行前后代码片段,syntax_check语法错误附带上下文标记 - Git 增强 (P0):
git_diff返回结构化统计(files_changed/added/removed/total_changes) - linter fallback:
lint_runner的 ruff↔pylint 互 fallback——首选未安装时自动切换备用 linter - 架构重构 (P1): 提取
_run_cmd()统一 subprocess 封装,7 个文件收口;http_get/http_download共享make_opener/check_url;config_diff/project_init/dep_scan统一 encoding fallback - psutil 条件引入 (P1):
proc_list优先使用 psutil(跨平台 + 性能优化),不可用时 fallback 原有实现 - 防御加固 (P2):
json_query加递归深度限制 (50)、dir_tree/dir_list共享SymlinkGuard、safe_edit备份前预检磁盘空间、db_querySQLite URI 跨平台路径修复 - 测试: 从 51 用例扩展到 100 用例(+rg_search、+lint_runner fallback、+file_remove 沙箱、+syntax_check context、+registry 一致性检查、+helpers unwrap 透传)
- 文档: 新增
ARCHITECTURE.md(模块图/数据流/新增工具指南/安全架构)、README_EN.md - 修复:
file_patch缺difflibimport → NameError、_registryTimeDiffTool重复定义、_parse_rg_output冒号解析跨平台 bug、main.pyconfig 路径改用StarTools.get_data_dir() - 依赖: 新增
rg_search可选依赖 ripgrep(未安装时 Python fallback)
- proposal 协议: 新增
proposal_reply()工厂函数,17 个工具的失败/歧义返回统一为{proposal, evidence, options, next_call}四字段结构化提案。覆盖safe_edit、git_commit、syntax_check、port_check、es_search、lint_runner、dep_scan、config_diff、log_parse、text_filter等 - 测试: 新建
tests/目录,51 个 pytest 用例覆盖 SSRF、safe_edit 安全链、Zip-slip、SQL 注入、正则回溯、helpers 协议、git commit 守卫 - AstrBot 合规:
requirements.txt、astrbot_version、short_desc、support_platforms、logo.png - ruff: 全项目格式化 +
pyproject.toml配置 - 修复:
_http_utils域名路径 NameError、sys_snapshot_extract_mb缺失、_conf_schema.jsontrailing comma、safe_edit接入backup_dir配置、HTTP redirect SSRF 重新校验、gh_cli try/finally 临时文件清理、human_sizeTB/PB 兜底、备份文件名微秒防撞
- 新工具:
tool_stats调用统计、db_querySQLite 只读查询(参数化防注入)、dep_scanPython import 依赖图 + 循环引用检测 - 优雅打磨: tool_stats 注入率 100%、
_registry.py9 组分区注释、README 快速索引
- 新工具:
lint_runner— ruff/pylint/eslint 代码质量检查,与syntax_check互补
- 新工具:
project_init项目结构扫描(detect 语言/框架/依赖)、git_changeloggit log 语义分组
- 架构: GhCliTool 拆为
gh_pr/gh_issue/gh_release/gh_repo4 独立工具;注册表外移至tools/_registry.py,main.py 1580→113 行 - 安全: IPv4-mapped-IPv6 SSRF 检查、正则嵌套量词拒绝(防 ReDoS)
- 质量: file_watch 每轮 rglob 重扫、UA 统一、bare except 加错误信息
- 新工具:
log_parse日志解析、file_watch文件监控、config_diff配置文件 key 级对比、svg_renderSVG→PNG、json_schema_valJSON Schema 校验 - 增强:
text_filter新增regex=True正则模式
- 工具拆分:
encode_utils拆为 6 独立工具(base64/url/hex encode/decode);time_utils拆为 4 独立工具(now/ts_to_iso/iso_to_ts/time_diff) - 提取:
_helpers.py共享辅助模块 - 修复:
syntax_checkPython GBK fallback
- Linux 回退:
proc_listps aux、disk_infoPOSIX、sys_snapshot/proc - 降级:
html_extractlxml→html.parser fallback
- 修复:
file_patch编码保留(GBK 读→UTF-8 写回)、清理_ok死代码 - 文档: README Python ≥3.10、.gitignore 补全
- 配置系统:
config.json+_conf_schema.json+tools/config.py - 路径脱敏: 移除 5 处硬编码路径
- 安全修复: SSRF DNS 重绑定、es_search 参数索引、json_query [-1] 正则、opencode 环境变量白名单
- Git: 7 工具 description 加"替代原生命令"前缀
- 移除: opencode 工具及所有残留引用