This commit is contained in:
2026-09-17 23:00:47 +08:00
parent def731fc5a
commit 8883a5c506
43 changed files with 4530 additions and 1515 deletions
+55
View File
@@ -0,0 +1,55 @@
# 更新日志
本文件记录本项目的所有重要变更。
格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
## [Unreleased]
### Added
- 构建管线:引入 esbuild 负责打包与压缩,`tsc` 只做类型检查(`scripts/build.mjs`)
- 构建自检:校验 `manifest.json` / `popup.html` 引用的文件是否存在、版本号是否一致
- 打包与发布脚本:`npm run package` 产出 zip,`npm run release -- <patch|minor|major|x.y.z>` 递增版本并同步 `manifest.json` / `package.json` / `updates.xml`
- CI:`.gitea/workflows/release.yml`,推送 `v*` 标签时自动测试、打包并上传产物
- 密钥句柄存储模块 `src/key-store.ts`:以不可导出的 `CryptoKey` 句柄替代明文口令,实现 Service Worker 重启后自动解锁
- `utils.toMatchPatterns()`:把域名配置转成合法的 Chrome match pattern
- 按域名的动态脚本注入:只向用户配置过的域名注册 content script
- 测试:新增 `tests/key-store.test.js`、`tests/content-fill.test.js`(jsdom 真实 DOM),测试总数 54 → 99
- 文档:`README.md`、`PRIVACY.md`、`CHANGELOG.md`、`LICENSE`
### Changed
- `popup.ts`(1479 行)拆分为 `src/popup/` 下 15 个模块,模块间通过 `PopupCtx` 上下文互相调用,消除网状耦合
- `manifest.json` 移除静态 `content_scripts`(原为 `<all_urls>` 无条件注入所有页面)
- 手动填充改为"探测已注入标记 → `chrome.scripting.executeScript` 按需注入"
- `dist/` 不再纳入版本控制,改为构建产物;克隆后需执行 `npm run build`
- 类型检查与产物生成分离:`tsconfig.json` 设置 `noEmit`
### Security
- **移除明文口令存储**:不再把主口令写入 `chrome.storage.session`,改为在 IndexedDB 保存不可导出的密钥句柄;旧版本残留的 `__autoPwd` 在升级后会被自动迁移为句柄并立即删除
- 锁定(手动或 10 分钟无操作)时一并删除密钥句柄,解锁状态不再"自动复活"
- 脚本注入范围由"所有网站"收敛为"用户配置过的域名",锁定时自动清空
- 未配置的站点不再执行任何扩展脚本,同时消除了原先在所有页面常驻的 `MutationObserver`
### Fixed
- `tests/detect-captcha.test.js` 缺少 `chrome.runtime.sendMessage` mock,导致加载 `content.js` 时抛出未处理的 Promise 拒绝,测试结果不干净
## [1.0.0] - 2026-09-14
### Added
- 首个可用版本
- 域名自动填充与自动提交,支持通配符与路径匹配
- 多环境(个人 / 测试 / 生产)管理与多环境命中弹窗选择
- 登录表单字段三级降级探测,支持 Shadow DOM 穿透与 SPA 延迟重试
- 验证码检测(reCAPTCHA / hCaptcha / 滑块 / 图形码),命中时只填充不提交
- 同一域名连续失败 3 次后暂停自动提交,5 分钟后恢复
- 保险库加密:PBKDF2-SHA256(20 万次迭代)+ AES-GCM-256,自动锁定
- 配置导入导出(兼容 v1 / v2 / v3 格式,支持文件口令加密)
- 从浏览器书签批量导入域名
- 口令强度评估与暴力破解耗时估算
- 中英双语界面,侧边栏形态