更新日志¶
这里记录项目的重要变更。
本页是仓库根 CHANGELOG.md 的中文镜像,英文镜像在 docs/en/changelog.md。每次发布提交都会同步更新三份内容。
未发布¶
0.5.0 - 2026-06-16¶
Security¶
- RSS feed 解析改用
defusedxml,阻止 XML 外部实体(XXE)和实体展开攻击。 - CLI 下载默认限制在当前工作目录及其子目录。可使用
nber-cli download --restrict false单次覆盖。download.restrict_dir配置键会被存储和校验,但当前 CLI 默认值仍固定为true。 - macOS 和 Linux 上数据库
init与migrate路径必须位于用户主目录内。 - 同步 HTTP 请求强制最低 TLS 1.2 版本。
- 部分 info/download 失败路径不再输出原始异常文本;下载日志消息和容错数据库 warning 使用脱敏摘要或异常类名。
Added¶
- 新增
nber-cli config show/get <key>/set <key> <value>/verify,用于查看和编辑~/.nber-cli/config.json。 - 新增
download.concurrency配置项(默认3)以及 CLI 参数--concurrency/-c,用于限制并发下载数。 - 新增
nber-cli download --restrict true|false,用于单次控制下载目录限制。 - 新增
nber-cli mcp-server --yes;原有--port设为非默认值时现在需要显式确认。 - 为
nber-cli mcp-server新增sse传输。 - 新增 JSON Schema(
config.schema.json)用于校验~/.nber-cli/config.json。 - 新增严格原始配置校验:报告损坏 JSON、非法配置段/值类型及低于 schema 最小值的数值,不静默注入默认值。
- 同步 plugin manifest 与 marketplace metadata 的版本,并把 Claude plugin skill 路径修正为大小写敏感且已跟踪的
./skills/NBER-CLI目录。 - 为核心数据类(
NBER、NBERSearchResults、NBERFeedItem、NBERFeedFetchResult、清理结果和下载结果)增加领域不变量校验。 - 包顶层新增导出
get_config_value、set_config_value、read_config、write_config、validate_config。 - 在 CLI、下载和 MCP 入口统一增加论文编号格式校验(
w?\d+)。 - 在接受元数据前校验拉取到的论文标题、正数 citation ID,以及响应 ID 与请求 ID 是否一致。
Changed¶
- 将旧版
typing.Dict、List、Optional类型别名替换为 Python 3.11 原生语法。 - 新增
mypy配置,并加强cli.py、config_store.py、fetcher.py的类型注解。 - 修正
mcp-server传输名称为streamable-http;原有--port选项对非默认值改用--yes确认。 fetcher.py的重试等待改为指数退避,上限 30 秒。feed fetch遇到单个损坏的 RSS 条目时跳过,不再导致整个 feed 失败。- 非法的配置或单次调用下载并发值会被拒绝或回退到文档规定的安全默认值,不再创建非法 semaphore。
- 修改 schema 或写入数据的数据库操作会拒绝未来版本的
PRAGMA user_version;诊断用 schema 版本读取器保持只读。 - Feed 拉取会在网络请求前建立并校验本地 schema,并在响应解析后以事务方式写入 feed 条目和抓取历史;清理操作会把 schema 校验/升级和删除放在同一个 SQLite 事务中。
download.py在ClientSession上启用raise_for_status=True。- 错误处理收窄为具体的网络/超时异常类型,并保留异常链。
- 移除
info命中缓存时向 stderr 打印的提示行。
Fixed¶
feed fetch现在可以容忍 RSS 标题和摘要文本中后接空白或数字的未转义<,其他格式错误仍使用严格 XML 解析。- RSS 解析失败时会在可用情况下报告行号和列号;
feed fetch的运行时解析错误会以退出码1返回,不再打印命令 usage。
0.4.0 - 2026-06-04¶
Added¶
- 新增
nber-cli info --refresh,跳过本地info_cache并直接从 NBER 重新拉取论文元数据。缓存开启时,新数据会写回缓存。 - 新增
nber-cli info cache --turn-on和--turn-off,全局开关info_cache读取行为,状态会持久化到~/.nber-cli/config.json。 - 新增
nber-cli info cache --set-refresh <N>,设置缓存刷新间隔(天)。该值会持久化到~/.nber-cli/config.json,并在后续每次info调用中作为 TTL 生效,默认30天。 - 新增
nber-cli info cache clear,参数集与feed clean一致:--days、--all、--start-date、--end-date,使用info_cache表的last_fetched_at字段过滤。nber-cli info cache clean是clear --all的便利别名。 - 新增
nber-cli info cache(不带子动作),用于打印当前缓存状态、TTL 和已缓存行数。 - 新增
nber_cli.config_store模块,集中处理~/.nber-cli/config.json的读写,包含InfoCacheSettings数据类及get_info_cache_settings、set_info_cache_enabled、set_info_cache_ttl_days等辅助函数。 - 新增
nber_cli.info_cache.get_paper_with_info_cache_result异步辅助函数(位于nber_cli.info_cache模块),返回包含NBER论文对象和from_cache标志的InfoCacheLookupResult。 - 新增包顶层的 Python API 导出:
InfoCacheSettings、clear_info_cache、count_info_cache、get_info_cache_settings、get_info_cache_ttl_days、is_info_cache_enabled、is_info_cache_expired、set_info_cache_enabled、set_info_cache_ttl_days、NBERInfoCacheClearResult。InfoCacheLookupResult和get_paper_with_info_cache_result由nber_cli.info_cache模块导出,而不是从包顶层;导入路径是from nber_cli.info_cache import ...。
Changed¶
~/.nber-cli/config.json现在携带info段:info.cache_enabled(默认true)和info.cache_ttl_days(默认30)。字段缺失或类型错误时回退到默认值。info命令在从本地缓存命中时,会通过 stderr 打印一行提示,并指向nber-cli info <id> --refresh用于强制刷新。
0.3.1 - 2026-06-03¶
Added¶
- 添加
nber-cli db init和nber-cli db migrate,用于初始化和迁移本地数据库,替代原先的feed init和feed migrate。 - 添加
info_cache表,重复执行nber-cli info或 MCPget_paper_info时直接从缓存返回。 - 添加
query_log、download_log、info_log表,记录搜索关键词、下载结果和 info 查询。 - 在
~/.nber-cli/config.json中写入schema_version字段,便于后续的 schema 升级。
Changed¶
- 默认数据库文件从
feed.db改名为nber.db。已经安装了~/.nber-cli/feed.db的用户无需手动迁移。 - 数据库 schema 从版本 1 升级到版本 2,下次启动时自动完成升级。
- 公共数据库代码迁移到
nber_cli.db,原先的init_feed_database和migrate_feed_database作为薄薄的兼容层保留。
0.3.0 - 2026-06-03¶
Added¶
- 添加
nber-cli feed init,用于创建本地 SQLite feed 缓存。 - 添加
nber-cli feed fetch,用于获取 NBER 最新工作论文 RSS feed 并显示新缓存的条目。 - 添加
nber-cli feed fetch --max-items,用于限制 feed 输出数量。 - 添加
nber-cli feed migrate,用于移动 feed 缓存数据库并更新用户配置。 - 添加
nber-cli feed clean,用于在确认后清理 feed 缓存数据库记录。 - 补充 feed 缓存辅助函数和 feed 数据模型的 Python API 文档。
Changed¶
- 添加
~/.nber-cli/config.json和feed.db-path的用户配置文档。 - 扩展中英文 CLI、快速开始、配置和 Python API 页面中的 feed 缓存文档。
0.2.0 - 2026-05-31¶
Changed¶
- 将 CLI 重构为
nber-cli download ...子命令语法。 - 添加
--file/-f和--save-base/-s路径处理行为。 - 添加
--batch/-b多编号下载模式。 - 移除基于数据库的下载状态跟踪。
- 将下载器简化为直接异步 HTTP PDF 获取。
- 更新 v0.2 命令模型文档。
- 移除旧 web UI 模块和脚本入口。
0.1.4 - 2025-08-09¶
Added¶
- 添加
--version/-v参数用于显示当前版本。 - 添加更完整的帮助信息和示例。
- 添加
__main__.py以支持python -m nber_cli。 - 添加参数分组以改善 CLI 结构。
- 不带参数运行时自动显示帮助信息。