Abner
ab03025ff2
Merge pull request #58 from Silentely/dependabot/npm_and_yarn/brace-expansion-5.0.6
...
build(deps): bump brace-expansion from 5.0.5 to 5.0.6
2026-05-19 09:48:43 +08:00
Abner
7602a43e0a
Merge pull request #57 from Silentely/cleanup/remove-unused-modules-and-fix-docs
...
🧹 cleanup: 移除未使用的模块化版本并修复文档问题
2026-05-19 09:48:27 +08:00
dependabot[bot]
f638b4c59b
build(deps): bump brace-expansion from 5.0.5 to 5.0.6
...
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion ) from 5.0.5 to 5.0.6.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases )
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.5...v5.0.6 )
---
updated-dependencies:
- dependency-name: brace-expansion
dependency-version: 5.0.6
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-05-18 18:47:38 +00:00
Abner
fe28aec804
📝 docs: 修复 bot 审查发现的文档一致性问题
...
- 更新 tests/CLAUDE.md:移除已删除的 giffgaff 测试文件引用
- 更新 src/simyo/MODULE_ARCHITECTURE.md:移除对已删除目录的引用
- 更新 CLAUDE.md:修正 Webpack 相关描述,移除已废弃的别名说明
所有测试通过,文档与代码保持一致。
2026-05-18 22:23:10 +08:00
Abner
404fc88332
🧹 chore(cleanup): 移除未使用的模块化版本并修复文档问题
...
- 删除 src/js/modules/giffgaff/ 和 src/js/modules/simyo/ 目录(未完成的重构尝试)
- 移除 webpack.config.js 中未使用的别名配置和入口文件
- 修复文档错链:移除对不存在的 DEVELOPMENT_GUIDE.md 引用
- 修复文档错链:将 CORS_SOLUTION.md 中的 simyo_proxy_server.js 更正为 server.js
- 更新 tests/CLAUDE.md 中 Jest 版本为 30.3.0
- 移除 src/simyo/MODULE_ARCHITECTURE.md 中过时的重构计划
- 精简 docs/reference/ 下的技术文档,移除与根 README 重复的内容
- 删除已弃用的 .serena/ 工具目录
- 更新根 CLAUDE.md 反映清理后的新目录结构
- 删除 3 个引用已删除模块的测试文件
所有测试通过,构建成功,质量检查和安全检查均通过。
2026-05-18 21:58:42 +08:00
Abner
118ee45371
✨ feat: 移除 Turnstile 支持并优化 reCAPTCHA 错误处理
...
- 完全移除 Turnstile 验证码相关的代码逻辑,包括初始化、刷新和执行功能
- 删除不再需要的全局变量如 `__cfTurnstileToken` 和 `__lastTurnstileError`
- 优化 reCAPTCHA 的错误处理机制,添加错误计数和最大重试次数限制
- 更新 CSP 策略,移除对 Cloudflare Turnstile 域名的引用
- 简化 captcha-manager.js 代码结构,提高可维护性
2026-05-18 20:46:13 +08:00
Abner
084c055f21
Merge pull request #53 from Silentely/feat/remove-turnstile-and-fixes
...
♻️ refactor: 移除 Turnstile 验证码、修复 CSP 和 Netlify 构建警告
2026-05-18 20:39:51 +08:00
coderabbitai[bot]
9f0feccc35
📝 Add docstrings to feat/remove-turnstile-and-fixes
...
Docstrings generation was requested by @Silentely.
The following files were modified:
* `scripts/pre-commit-check.js`
These file types are not supported:
* `CLAUDE.md`
* `netlify.toml`
* `netlify/edge-functions/CLAUDE.md`
* `netlify/functions/CLAUDE.md`
* `src/giffgaff/giffgaff_modular.html`
* `src/simyo/simyo_modular.html`
2026-05-18 12:37:32 +00:00
Abner
319c7da15f
📝 docs: 同步文档和日志规范
...
- Logger.env() 添加 isDev 门禁,生产环境不再打印 UA 信息
- 更新 CLAUDE.md 移除 Turnstile 验证码描述
- 更新 edge-functions/CLAUDE.md 简化 BFF 职责说明
- 更新 functions/CLAUDE.md 移除 turnstileToken 字段
2026-05-18 20:31:06 +08:00
Abner
307ebe8e84
🔧 chore: 移除 pre-commit 中的远程同步逻辑
2026-05-18 20:18:46 +08:00
Abner
3148a3564c
♻️ refactor: 移除 Turnstile 验证码、修复 CSP 和 Netlify 构建警告
...
- 移除 Turnstile 验证码逻辑,仅保留 reCAPTCHA 作为可选 fallback
- 修复 Google Fonts CSP 违规:style-src 添加 fonts.googleapis.com
- 移除 netlify.toml 中 /.netlify/functions/* 无效重定向规则
- 为 Giffgaff 和 Simyo 添加调试日志(环境信息 + 操作步骤)
- 简化 bff-proxy.js,移除验证码校验逻辑
2026-05-18 20:16:34 +08:00
Abner
4e9dc0ae76
🐛 fix: 进行 SIM 交换时向 GraphQL 传递正确的 mfaRef
...
- 在 giffgaff-graphql 函数的 swap 分支中补齐 graphqlBody.variables.mfaRef,确保后续 GraphQL 调用携带 MFA challenge reference
- 在 giffgaff-sms-activate 中引入 effectiveSwapRef(优先使用 swapRef,否则回退 ref),并将 mfaRef 作为 SwapSim 变量传入以避免空 mfaRef
- 更新 src/giffgaff/js/modules/api-config.js 的 swapSim GraphQL 变更签名,新增 $mfaRef 入参并在 swapSim 请求中透传 mfaRef
- 在 src/giffgaff/js/modules/esim-service.js 的 SwapSim 调用中增加 mfaRef 到 variables,并确保传参与 mfaRef 字段对齐以保证后端校验一致
2026-05-18 19:47:48 +08:00
Abner
909b4c592f
✨ feat: 完善 swapSim 接口的 MFA 相关头部处理与校验
...
- 在 `giffgaff-graphql.js` 中为 `swapSim` 操作显式添加 `X-GG-MFA-REF` 和 `x-gg-mfa-ref` 请求头,提升与上游服务的兼容性
- 当 `isSwap` 为真但缺少 `resolvedMfaRef` 时,抛出明确的 `AuthError` 提示,确保必填参数完整性
- 在 `middleware.js` 的 CORS 配置中新增 `X-MFA-Ref` 和 `X-MFA-Challenge-Ref` 到允许的请求头列表中,支持前端跨域请求
- 保持原有 `mfaRef` 作为 GraphQL 请求体顶层字段的逻辑不变,补充请求头层面的双重保障机制
2026-05-18 19:43:03 +08:00
Abner
5a88dc6af3
🐛 fix: eSIM 交换流程补齐/归一化 MFA ref 并增强校验
...
- 在 eSIM 交换前对 mfaRef 进行 trim 归一化,按需同时设置 X-MFA-Ref 与 X-MFA-Challenge-Ref,并将 mfaRef 作为 GraphQL 顶层字段传入
- 完整短信激活流程中统一从 MFA 校验结果 ref 或 emailCodeRef 获取并校验 swapMfaRef,缺失时抛出缺少 ref 的本地化错误
- MFA 校验增加对 signature 缺失的保护,成功返回时同时携带 ref 供后续交换步骤使用
- Netlify GraphQL 代理函数解析 X-MFA-Ref / X-MFA-Challenge-Ref 与请求体中的 mfaRef,进行 trim 后优先取体内 ref 并回填到 graphqlBody.mfaRef,确保 schema 需要的顶层字段始终可用
2026-05-18 19:36:28 +08:00
Abner
ec84274a91
🔥 remove: 移除 Netlify 中已废弃的 Legacy 页面重定向
...
- 删除 `/src/giffgaff/giffgaff_complete_esim.html` 到 `/src/giffgaff/giffgaff_modular.html` 的重定向规则
- 删除 `/src/simyo/simyo_complete_esim.html` 到 `/src/simyo/simyo_modular.html` 的重定向规则
- 移除已注释标记为“废弃 Legacy 前端”的相关配置块,避免配置冗余
- 保留根路径重定向 `/` 到 `/index.html` 的现有规则不变
2026-05-18 09:16:44 +08:00
Abner
c2853d2820
🐛 fix: 修复 swapSim 请求 500 错误
...
- api-config.js: 移除 swapSim mutation 中不存在的 $mfaRef 参数
- esim-service.js: 将 mfaRef 从 GraphQL variables 移至 body 顶层字段
- giffgaff-graphql.js: 转发 mfaRef 至 Giffgaff API(匹配后端 giffgaff-sms-activate 的正确模式)
根因:前端发送了 Giffgaff schema 不接受的 $mfaRef GraphQL 参数,
同时 BFF 函数在构建请求体时丢弃了 mfaRef 顶层字段。
修复后与用户 HAR 中成功的请求格式完全一致。
Fixes #51
2026-05-17 23:58:36 +08:00
Abner
cde452b0c5
🔧 chore: 精简文档结构并更新启动与参考说明
...
- 删除过时的文档:COOKIE 登录设置指南、集成/性能改进汇总、项目总结、快速参考卡、服务时间检查说明及其修复记录,以及 CHANGES_OVERVIEW.txt
- 调整 docs/CLAUDE.md 的文档模块职责与目录规划,补充安全指南、开发指南与通知系统等指引入口
- 更新 README.md 的启动步骤描述,将“启动代理服务器”更正为“启动开发服务器”
- 更新参考文档中 MFA/激活流程表述:Giffgaff 将“邮件验证码”调整为“邮件/短信验证码”,并强调短信验证码自动激活(推荐);同时修正测试页面路径到 tests/ 目录
- 同步调整 Simyo 参考文档的测试页面路径到 tests/ 目录,保持目录结构一致
2026-05-17 23:49:44 +08:00
Abner
49ac9e15ff
♻️ refactor: 废弃 Legacy 前端,统一使用 Modular 版本
...
- 删除 giffgaff_complete_esim.html 和 simyo_complete_esim.html
- 构建脚本自动排除 Legacy HTML 文件
- Netlify 添加 Legacy URL 301 重定向到 Modular 版本
- 移除 verify-legacy-frozen.js 构建检查
- 更新 6 个文档文件中的 Legacy 文件引用
修复 Issue #50 : Legacy 前端缺少 simSwapMfaChallenge 步骤导致 500 错误
2026-05-17 23:25:47 +08:00
Abner
c3926b14eb
📝 docs: 修正误导性描述,明确工具仅支持已有用户 eSIM 设备更换
2026-05-17 21:57:13 +08:00
Abner
a5c933566d
🐛 fix: CSP 添加 unsafe-eval 解决 Turnstile 验证码 eval 报错
...
Cloudflare Turnstile SDK 内部使用 eval() 执行 challenge,
但 CSP script-src 未配置 unsafe-eval 导致 EvalError。
2026-05-17 16:30:32 +08:00
Abner
63997e4bcb
♻️ refactor: 使用可选链和空值合并运算符优化代码安全性
...
- 在 cookie-handler.js 中使用 `err?.message` 替代 `err && err.message`,提升错误信息获取的代码简洁性和安全性
- 在 giffgaff-app.js 中将多个 `(error && error.message) || ''` 形式的表达式替换为 `error?.message ?? ''`,统一代码风格并增强空值处理
- 在 esim-service.js 中多处使用可选链操作符(`?.`)替代多层属性访问的条件判断,防止因对象为 null 或 undefined 导致的运行时错误
- 在 giffgaff-app.js 和 esim-service.js 中将逻辑或(`||`)默认值替换为空值合并运算符(`??`),确保只有 null 或 undefined 时使用默认值,保留空字符串等有效 falsy 值
- 更新 package-lock.json 文件以反映依赖关系的变化
2026-05-16 21:15:48 +08:00
Abner
643c16f393
🐛 fix: 修复 markdown-negotiation.js 全部 Code Scanning 安全警报
...
- bad-tag-filter:结束标签正则改用 \b[^>]* 匹配所有变体
- double-escaping:HTML 实体解码改为单次遍历回调,避免 &lt; 双重解码
- incomplete-multi-character-sanitization:标签移除从正则改为逐字符 while 循环扫描,彻底消除 CodeQL 误报
2026-05-11 23:05:56 +08:00
Abner
da56b1e07f
✨ feat: README 中英文文档添加头图
...
- README.md 添加 og-image.png 居中头图 (width=600)
- README_EN.md 添加 og-image.png 居中头图 (width=600)
2026-05-11 22:27:28 +08:00
Abner
a45b277b3a
✨ feat: 添加 OG 社交分享图片支持
...
- 新增 src/assets/og-image.png (483KB)
- netlify.toml 添加 /og-image.png → /src/assets/og-image.png 重定向
- index.html 中 og:image 和 twitter:image 使用干净路径
2026-05-11 22:22:21 +08:00
Abner
a187c85b06
✨ feat: 完善 SEO 元标签与性能缓存策略
...
- 扩展 title 至 55 字符,添加 canonical 和 robots meta
- 添加 Open Graph / Twitter Card 社交分享元标签
- 添加 JSON-LD WebApplication 结构化数据
- netlify.toml 增加静态资源长期缓存(immutable)与 HTML stale-while-revalidate
- 新增源码级 robots.txt,屏蔽 API 和内部路径
2026-05-11 21:39:01 +08:00
Abner
9941f66ee7
✨ feat: 完善 OAuth Discovery、MCP Server Card 和 WebMCP 支持
...
- 添加 /.well-known/openid-configuration (RFC 8414) OAuth 发现元数据
- 更新 MCP Server Card 为 SEP-2127 格式(顶级 name/version/description)
- 新增 WebMCP 支持,通过 navigator.modelContext 暴露站点工具
2026-05-11 13:01:14 +08:00
Abner
76e0be2fcc
✨ feat: 添加 llms.txt 为 LLM 提供结构化站点索引
...
- 新增 /llms.txt 遵循 llmstxt.org 规范
- 包含项目描述、功能、设备兼容性、API 资源、技术栈
- 集成到构建流程自动复制到 dist
2026-05-11 09:37:45 +08:00
Abner
18ab12cefa
🐛 fix: 修复首页内容区块不可见问题
...
- 修复 home.js 让 IntersectionObserver 处理所有 .reveal 元素
- 修复 glossary HTML 结构(dt/dd 改为 p 标签)
2026-05-11 09:25:08 +08:00
Abner
de35542bc9
🐛 fix: 修正 Simyo QR 码支持描述
...
- Simyo 官方不支持 QR 码,但本工具可生成 eSIM QR 码
- 更新教程、对比表、FAQ 中的相关描述
2026-05-11 09:20:56 +08:00
Abner
4308c302bb
✨ feat: 根据 GEO 报告优化首页内容结构
...
- 添加设备兼容性说明(Apple/Android 设备列表 + EID 检查方法)
- 添加 Giffgaff/Simyo 分步使用教程
- 添加与官方 App 的对比表格
- 添加地区与时间限制说明(Giffgaff UK 时间窗口、Simyo NL 地区)
- 添加技术术语解释(OAuth、GraphQL、LPA、SM-DP+、MFA、EID)
- 添加 FAQ 常见问题(6 个高频问题)
- 添加安全声明区块(第三方工具风险、建议使用非主力号码)
- 更新 Markdown for Agents 主页内容
2026-05-11 09:19:43 +08:00
Abner
eba2c1fb05
🔧 ci: 升级 Codacy Analysis CLI action 到 v4.4.7
...
- 修复旧版本 SARIF 生成时的 IndexOutOfBoundsException 崩溃
2026-05-11 09:14:52 +08:00
Abner
7d6faea4df
🐛 fix(security): 修复 markdown-negotiation Edge Function 的 HTML 清理逻辑
...
- 修复正则表达式匹配带空格的结束标签(如 </script >)
- 添加 \b 单词边界避免部分匹配
- 修复 HTML 实体解码潜在双重反转义问题
2026-05-11 09:06:36 +08:00
Abner
d3c418f9f3
Merge pull request #46 from Silentely/dependabot/npm_and_yarn/fast-uri-3.1.2
...
build(deps-dev): bump fast-uri from 3.1.0 to 3.1.2
2026-05-11 09:04:44 +08:00
Abner
7426f76fe7
Merge pull request #47 from Silentely/dependabot/npm_and_yarn/babel/plugin-transform-modules-systemjs-7.29.4
...
build(deps): bump @babel/plugin-transform-modules-systemjs from 7.29.0 to 7.29.4
2026-05-11 09:04:37 +08:00
Abner
81dd2ce662
✨ feat: 添加 AI Agent 友好元数据与 Markdown 协商支持
...
- 新增 robots.txt 生成(含 AI 爬虫规则 GPTBot/ClaudeBot/Content-Signal)
- 新增 sitemap.xml 生成(列出规范 URL)
- 新增 .well-known/api-catalog(RFC 9727 API 目录)
- 新增 .well-known/oauth-protected-resource(RFC 9728)
- 新增 .well-known/mcp/server-card.json(SEP-1649)
- 新增 .well-known/agent-skills/index.json(Agent Skills 发现)
- 新增 Link 响应头指向 agent 发现资源(RFC 8288)
- 新增 markdown-negotiation Edge Function(Accept: text/markdown 协商)
2026-05-11 08:59:39 +08:00
dependabot[bot]
60e7470a4c
build(deps): bump @babel/plugin-transform-modules-systemjs
...
Bumps [@babel/plugin-transform-modules-systemjs](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-modules-systemjs ) from 7.29.0 to 7.29.4.
- [Release notes](https://github.com/babel/babel/releases )
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md )
- [Commits](https://github.com/babel/babel/commits/v7.29.4/packages/babel-plugin-transform-modules-systemjs )
---
updated-dependencies:
- dependency-name: "@babel/plugin-transform-modules-systemjs"
dependency-version: 7.29.4
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-05-09 17:55:47 +00:00
dependabot[bot]
527e4fab49
build(deps-dev): bump fast-uri from 3.1.0 to 3.1.2
...
Bumps [fast-uri](https://github.com/fastify/fast-uri ) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/fastify/fast-uri/releases )
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.0...v3.1.2 )
---
updated-dependencies:
- dependency-name: fast-uri
dependency-version: 3.1.2
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-05-09 02:29:50 +00:00
Abner
b5ec8eb18a
🐛 fix: 修复受限环境下 secure-storage 触发 sessionStorage SecurityError
...
- 新增 safeGetStorage 探测能力探针,捕获 sessionStorage/localStorage 读取与写入探测时抛出的 SecurityError,返回可用的 Storage 或 null
- 将顶层敏感数据迁移逻辑外层包裹 try-catch,避免 iframe/sandbox/隐私设置等受限上下文导致模块初始化阶段未捕获异常中断
- 在 migrateFromLocalStorage 中基于 safeGetStorage 动态获取 localStorage,localStorage 不可用时直接跳过迁移而非抛错
- 补充受限环境降级单元测试:模拟 sessionStorage/localStorage 属性读取被拒、以及 sessionStorage 写入失败时确保降级到 fallbackStorage 且不抛异常
2026-05-08 18:33:59 +08:00
Abner
be2c4e4dfb
✨ feat: 移除遗留页面及相关配置,新增运行时公共函数库
...
- 从 netlify.toml 中移除 `/giffgaff-legacy` 和 `/simyo-legacy` 重定向规则,清理不再使用的旧版页面路由
- 新增 runtime-common.sh 文件,提供跨语言(中英文)共享的运行时函数,包括 JSON 转义、安全检测、系统信息缓存等核心功能
- 更新 legacy-freeze.json,清空冻结文件列表,反映不再需要保护旧版页面文件的状态
- 修改多个脚本文件(pre-commit-check.js、pre-push-check.js、security-check.js),移除对已弃用页面的保护逻辑
- 调整服务入口文件(server.js、simyo_proxy_server.js)和 Service Worker(sw.js),删除对旧版 HTML 文件的引用和服务逻辑
2026-05-07 22:48:34 +08:00
Abner
4abd32c3b0
♻️ refactor: 移除旧版冻结文件及相关 legacy 路由
...
移除 giffgaff_complete_esim.html 和 simyo_complete_esim.html,
清理所有引用:sw.js 缓存列表、server.js 路由、netlify.toml 重定向、
pre-commit/pre-push 检查、security-check CSP 检测、
legacy-freeze.json 基线、verify-legacy-frozen.js 注释、
simyo_proxy_server.js 默认路由。
2026-05-07 22:42:24 +08:00
Abner
962779d63e
🐛 fix(giffgaff): 修复 secureStorage 迁移后 Cookie 读取断裂导致短信激活 403
...
api.js 中三处 localStorage.getItem('giffgaff_cookie') 在 secureStorage
迁移后返回 null,导致后端 giffgaff-sms-activate 无法获取 CSRF token,
向 Giffgaff 服务器发送的请求缺少 XSRF-TOKEN 被拒绝(403 Forbidden)。
修复内容:
- api.js: 统一使用 secureStorage.getItem 读取 Cookie
- state-manager.js: saveCookie/getCookie/clearSession/loadSession 统一
使用 secureStorage,并添加 localStorage 旧数据回退迁移逻辑
2026-05-07 22:37:23 +08:00
Abner
a1628aa33a
🐛 fix(security): 修复全部 76 个 CodeQL 安全扫描告警
...
修复 GitHub 代码扫描发现的所有安全问题,涵盖 20 个文件、76 个告警:
- Actions 工作流:添加 Fork 仓库限制、来源验证、persist-credentials: false、移除 npm cache
- 明文存储:localStorage 迁移到 secureStorage (sessionStorage + TTL)
- 日志注入:新增 sanitizeLog() 过滤换行符,覆盖全部 console.log 调用
- SSRF:新增 isAllowedTarget() 域名白名单校验
- SRI 完整性:为 Bootstrap/Font Awesome/GTM 添加 integrity + crossorigin
- XSS 防护:错误消息 HTML 转义、Service Worker origin 验证
- URL 清洗:hostname.includes() 替换为精确域名匹配
- HTML 过滤:扩展标签黑名单、添加事件属性过滤
- 限流:全局引入 createRateLimiter (200 req/min/IP)
2026-05-06 21:46:25 +08:00
Abner
1bb9c6db30
Add Codacy security scan workflow
...
This workflow integrates Codacy security scans into GitHub Actions, checking code on pushes and pull requests to the main branch, and scheduling scans weekly.
Signed-off-by: Abner <22141172+Silentely@users.noreply.github.com >
2026-05-06 20:58:05 +08:00
Abner
37f54a10a1
Add CodeQL analysis workflow configuration
...
Signed-off-by: Abner <22141172+Silentely@users.noreply.github.com >
2026-05-06 20:57:59 +08:00
dependabot[bot]
63fa2bf3d6
build(deps): bump axios from 1.15.0 to 1.15.2 ( #43 )
...
Bumps [axios](https://github.com/axios/axios ) from 1.15.0 to 1.15.2.
- [Release notes](https://github.com/axios/axios/releases )
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md )
- [Commits](https://github.com/axios/axios/compare/v1.15.0...v1.15.2 )
---
updated-dependencies:
- dependency-name: axios
dependency-version: 1.15.2
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-06 18:40:59 +08:00
Abner
47308a0fd1
🐛 fix(giffgaff): 移除 legacy 目录中的可选链语法以兼容旧浏览器
...
TikTok 内置浏览器(Android 10 WebView)不支持 ES2020 可选链(?.)语法,
导致 SyntaxError: Unexpected token . 崩溃。legacy 目录不经 Webpack/Babel
转译,直接以原始 JS 服务,因此需要手动替换为传统 && 短路求值写法。
涉及 4 个文件共 25 处:giffgaff-app.js、esim-service.js、
mfa-handler.js、cookie-handler.js
2026-05-06 18:36:02 +08:00
Abner
f897ae5212
✨ feat: 优化 AI 智能回复工作流的请求逻辑与 JSON 格式处理
...
- 移除冗余的 `tools` 和 `tool_choice` 参数,简化请求结构,提升代码可维护性
- 统一使用 `response_format: {"type": "json_object"}` 确保所有请求返回标准 JSON 格式
- 在用户提示末尾明确添加禁止输出 `json` 代码块标记的说明,避免解析错误
- 简化重试逻辑,移除基于模式的条件判断,统一处理消息内容追加
- 将测试用例名称从 `chat_tools`/`chat_json` 调整为更语义化的 `chat_json`/`chat_plain`
2026-05-05 11:45:03 +08:00
Abner
9ed51287c0
✅ test: 新增多个核心模块的单元测试并优化 Jest 配置
...
- 在 `jest.config.js` 中启用 V8 覆盖率提供器(兼容 Node.js 22+),提升覆盖率检测性能与准确性
- 调整覆盖率收集范围为 `src/js/modules/**/*.js`,排除测试文件,使报告更聚焦于实际业务逻辑
- 降低全局覆盖率阈值至当前可达成水平(statements/branches 30%-70%),制定逐步提升计划
- 新增 6 个模块的完整单元测试:`APIService`、`AppConfig`、`HTMLSanitizer`、`Logger`、`SecureStorage` 和 `utils`,总计约 840 行测试代码
- 修复 `HTMLSanitizer.sanitizeURL()` 中对 `data:text/html` 协议的正则检测逻辑,增强 XSS 防护能力
2026-05-05 10:35:14 +08:00
Abner
5ed5bb678b
✨ docs: 更新项目文档与安全配置
...
- 更新 PROJECT_SUMMARY.md,新增 notification-manager.js 和 notification-service.js 模块说明,并将通用工具中的 i18n 移至括号内
- 完善 SECURITY.md,重构 CORS 配置为动态白名单校验并禁用 credentials,增强 CSP 策略并统一生产与本地环境的安全基准说明
- 重写 SERVICE_TIME_CHECK.md,采用模块化三层架构(utils/dom/app),使用 Intl API 处理英国时区与夏令时,支持双时间显示与国际化的同时强化 XSS 防护
- 修订 notification-system.md,明确通知 API 公开接口无需认证,细化安全实践并规范消息转义方式
- 调整 netlify/functions/CLAUDE.md,标注 notifications API 为公开接口(requireAuth: false)
2026-05-03 23:04:19 +08:00
Abner
14e2500a85
📝 docs: 更新项目文档和配置说明
...
- 更新 Jest 版本从 29.7.0 到 30.3.0,保持测试框架最新状态
- 修正文档链接,将性能说明指向 ARCHITECTURE.md 替代已废弃的 PERFORMANCE.md
- 新增 docs/CLAUDE.md 文档模块说明文件,明确文档结构和规范要求
- 删除过时的 REFACTORING_COMPLETE.md 文档,避免信息冗余
- 统一服务时间描述为英国时间 04:30–21:30,修正多处时间范围表述错误
2026-05-03 22:26:23 +08:00