Skip to content

v1.4.0

Latest

Choose a tag to compare

@FangYuan33 FangYuan33 released this 17 Sep 14:09
118c869

变更说明

1.4.0

聚焦本地 Maven JAR 的 Java 源码读取,完善版本选择、磁盘缓存、错误处理和分段阅读体验。

JAR 定位与搜索

  • 提供 search_group_id 和 read_jar_source 两个 MCP Tool,分别用于查找 Maven 坐标和读取指定类的源码。
  • SNAPSHOT 优先读取普通主包,使用最新时间戳主包名管理缓存,时间戳和构建号分别按时间与数字排序;普通主包不存在时回退到时间戳主包,只有普通包时使用普通包名作为缓存名。
  • 普通 SNAPSHOT 主包优先使用普通 sources JAR,缺失时尝试所选时间戳构建的 sources;直接读取时间戳主包时匹配其 sources。支持只有 sources JAR 的依赖版本。
  • 精确匹配 Maven 主包,校验坐标格式及仓库内路径,避免误选其他 classifier 的 JAR。
  • 按 Maven 版本规则排列搜索结果,正确处理数字版本段、预发布限定词及版本别名。
  • group_prefix 按完整 groupId 前缀分段匹配,优先扫描对应目录;每次搜索直接读取当前仓库,反映依赖的新增和删除。

源码读取与响应

  • 优先读取 sources JAR;源码缺失或提取失败时,尝试反编译对应二进制包。
  • 支持 Outer$Inner 形式的内部类名,返回外部类源码时附带简短提示。
  • read_jar_source 新增可选的 start_line、end_line,行号从 1 开始且包含首尾;省略时保持全文返回。
  • 全文结果包含 class_name、artifact、source_type、code;指定行范围时附带总行数、实际返回范围和是否为片段的信息。
  • 使用严格 UTF-8 解码,并对解码失败、类不存在、反编译失败等情况给出明确反馈。
  • MCP 工具执行失败设置 isError=true,返回统一的错误码、说明和操作建议。

磁盘缓存

  • 反编译结果保存在原始 JAR 所在版本目录的 easy-code-reader/ 下,普通版本缓存与 JAR 同名;SNAPSHOT 缓存优先采用最新时间戳包名。
  • 通过实际读取的 JAR 的文件大小和修改时间校验缓存,输入更新后重新生成。
  • 命中缓存时直接读取源码;需要反编译时直接读取原始 JAR,在独立临时目录中生成输出。
  • 生成结果经过 ZIP 完整性及目标源码检查后原子写入,任务结束时清理临时目录。
  • 每个 Maven 版本目录按默认 1 GiB 预算清理较久未使用的新格式缓存,保留当前发布的缓存文件。
  • 已有缓存缺少输入校验信息时,在下一次读取对应 JAR 时重新生成。

反编译执行

  • 使用异步 Java 子进程,支持请求取消、超时处理和子进程回收。
  • 保留 CFR、Fernflower 的自动选择,并在运行环境兼容且预算允许时尝试备用反编译器。
  • Fernflower 显式开启泛型签名恢复,修复 Java 21 及以上环境中泛型参数丢失的问题;已有旧格式缓存按需重建。
  • 新增 --decompile-timeout,默认请求预算为 60 秒。
  • MCP 调用等待源码准备完成后返回结果,失败或超时返回错误;Model 在同一次调用中获取源码。

配置与兼容

  • Maven 仓库路径优先级为:--maven-repo → MAVEN_REPO → 用户 settings.xml → Maven 全局 settings.xml → ~/.m2/repository。
  • MAVEN_HOME、M2_HOME 用于定位 Maven 安装目录及全局 settings;依赖原有隐式仓库路径的配置应改用 --maven-repo 或 MAVEN_REPO。
  • 支持 ~、相对路径及 settings 中的 ${user.home}、${env.NAME};配置按服务器实例隔离。
  • 日志输出到 stderr。Python 安装目录无需写权限;生成反编译缓存需要对应 Maven 缓存目录可写。
  • Python 最低版本为 3.10,MCP 依赖范围为 >=1.30,<2。

测试与发布

  • 使用真实编译的 Java 字节码验证源码读取、内部类、缓存更新、并发写入、超时取消及 MCP 返回时机。
  • 增加独立安装 wheel 后的 MCP stdio 冒烟验证,覆盖工具发现、坐标搜索、全文与分段读取、反编译、缓存及错误响应。
  • 配置 Python 3.10/3.12、JDK 11/21 的 CI 测试矩阵,并包含 macOS、Windows 验证任务。
  • 发布流程依赖验证工作流通过;完善构建产物内容检查、发布脚本和使用文档。