📢 更新日志
这里记录博客的每一次版本更新与重要改动。
更新日志 (2026-10-16 · WorkBuddy 维护)
1. 新增「游戏」导航 Tab + 接入经典捕鱼小游戏 FishJoy
导航栏新增「游戏」入口(PC 导航条与手机转盘同步出现),对应路由
/game。 游戏选用开源纯前端 H5 捕鱼游戏 sherryvs/fishJoy(Canvas + 原生 JS,零后端依赖、自带精灵图与音效),完整资源包落地public/games/fishJoy/(共 54 个文件:index.html + js/ + images/ + music/)。 页面app/game/page.tsx用fixed定位的<iframe>直接加载/games/fishJoy/index.html,铺满导航栏以下的整个视口;资源全部相对路径引用,在任何子路径下均可正常加载,无需额外服务器。 打开「游戏」Tab 即可用鼠标瞄准发射、击中得分游玩。
2. 修复捕鱼游戏「黑屏打不开」问题
根因:
index.html引用的是小写js/game.js,而实际脚本文件是js/Game.js(大写 G)。Vercel 静态服务区分文件名大小写,导致主脚本 404、Game类未定义、画布从未被绘制,露出纯黑背景。 修复:将index.html的脚本引用改为js/Game.js(与其余 14 个同名风格文件保持一致),并核验 R.txt 引用的 28 张图片在线上均存在。单文件提交1d2e1be20f已推送,Vercel 自动重新部署后游戏可正常加载游玩。
3. 修复捕鱼游戏「加载卡在 27/28」问题
根因:
R.txt引用的totalScore.png在最初入库时传输被截断(线上仅 39258 字节、PNG 字节损坏),浏览器解码失败触发onerror;而原加载器只监听了onload、未监听onerror,导致计数器永远停在 27/28、游戏永久卡在加载界面。 修复:用上游干净的totalScore.png(无损压缩至 153KB)覆盖损坏文件;并为资源加载器增加onerror兜底(加载失败也计数、并写入 console),今后任何一张资源失败都不会再卡死。合并提交eb42c436b6已推送,Vercel 自动重新部署。
4. 捕鱼游戏体验优化(移动端适配 / 概率 / 反弹 / 去帧数)
改动(合并提交
0a9bcfa55c,Vercel 自动部署):
- 移动端:
<meta viewport>+ 竖屏@media整体旋转 90° 横屏游玩,画布按视口缩放铺满;输入改用pointerdown事件 +offsetX/offsetY,竖屏旋转后浏览器自动换算坐标,触摸点击不再错位。- 黑边:页面背景由纯黑改为海底渐变 + 游戏背景图,画布加圆角/阴影,四周不再黑。
- 概率:
Fish.js给每种鱼加捕获概率CATCH_RATE=[null,0.9,0.8,0.65,0.5,0.38](越值钱的鱼越难抓),碰撞命中后掷骰判定,不再是百发百中。- 反弹:
Bullet.js撞到画布四壁反弹,最多 3 次后消失,避免无限反弹。- 删除左上角「帧编号」显示。
5. 捕鱼游戏三项修复(概率生效 / 音乐 / 金币倍率)
合并提交
0d3b608b30,Vercel 自动部署。
- 概率真正生效:原判定每帧对重叠的鱼重复掷骰,因子弹与鱼重叠数十帧,累计命中率≈100%,概率形同虚设。改为「每颗子弹对同一只鱼只掷一次骰」(
Bullet.rolledFish标记),未捕获时子弹继续飞行(保留反弹),概率按CATCH_RATE=[null,0.9,0.8,0.65,0.5,0.38]真实生效。- 音乐兼容:原背景乐/音效均为
.ogg,Safari/iOS 不支持导致无声音。用 ffmpeg 转制bg/bullet/coin的.mp3(bg 332KB<400KB 避开截断),并新增格式选择器audioExt(支持 mp3 用 mp3,否则回退 ogg),play()加.catch兼容自动播放策略。- 金币倍率:新增金币系统,开炮按当前炮台倍率(level 1–7)扣除金币,捕获鱼按分值加金币,金币 HUD 显示「金币:X / 倍率×N 每发-N」,金币<1 即游戏结束(再玩一次/返回主界面重置为 200)。
6. 捕鱼游戏体验再优化(血量制 / 反弹动画)
合并提交
05055558c2,Vercel 自动部署。
- 鱼不再一炮秒:鱼改为血量制
FISH_HP=[null,2,3,4,5,6],需多次命中(概率CATCH_RATE决定该发是否生效、每次扣 1 血)血量耗尽才捕获;命中时鱼身白闪反馈,受伤后头顶显示绿色血量条。- 子弹反弹动画:子弹撞到画布四壁反弹时,瞬间在子弹外圈绘制黄色光环(逐帧淡出)作为反弹视觉反馈,反弹仍最多 3 次后消失。
更新日志 (2026-10-15 · WorkBuddy 维护)
1. 鲸鱼娘 AI 对话改为流式逐字输出
桌宠「蓝色大肥鱼」的 AI 对话从「等待模型全部生成完再一次性返回」改为流式逐字显示。 后端
app/api/ai-chat/route.ts向 OpenRouter 请求加stream:true,解析其 SSE 的delta.content后以text/plain流转发; 前端AiChatPanel(位于public/plugins/whale-pet-live2d/assets/v0.2.3/client.js)用response.body.getReader()边收边更新占位消息,首个 token 到达前显示「思考中…」。 长回复不再整段等完才出现,交互更跟手。
2. AI 对话上游瞬时过载自动重试
针对 OpenRouter 上游(如 Nvidia 免费推理层)偶发的
Service temporarily overloaded等瞬时过载, 后端在流开始前检测到可重试错误时自动重试(最多 3 次、指数退避),全部失败才返回干净的 JSON 错误交由前端提示; 不再把上游错误直接拼进聊天文本。按站长要求不降级到备用模型,始终使用已配置的模型。
3. AI 对话关闭页面不丢、重开自动补全
流式生成过程中每收到一段就实时写入 localStorage(含「思考中」与「说到一半」的半成品,并打
generating标记); 关掉页面/标签页时,正在生成的这条回复不再随连接断开而丢失。 重开页面时若检测到上一条回复是被打断的(带generating),会从已生成的半截处续写补全,而不是重头重发一遍——保留已有进度把剩下的补齐;半截为空(发出后即关闭)时等同从头生成,回来即是完整且已保存的对话。 说明:受限于静态博客无数据库、也无 Vercel 凭据,补全发生在「重开那一刻」而非「页面关着时」;如需关着也在服务端真跑完,需接入 KV/数据库。
4. AI 对话在面板内切换页签不中断
修正:此前在鲸鱼娘面板里从「AI」页签切到「动作 / 装扮 / 设置」等其它页签时,
AiChatPanel组件会被卸载,正在进行的流式生成随之中断、状态全丢。 改为让 AI 面板常驻(不再随页签切换卸载),仅用hidden控制显隐;切走页签时流式生成继续在后台跑、状态不丢,切回「AI」页签时直接显示已生成/正在生成的内容。 与第 3 条互补:关闭整个面板(× / Esc)仍走 localStorage 增量保存 + 重开自动补全套餐。
5. 修正:重开从中断处续写,且不再「重复一遍回复」
上一版重开自动补全会把半成品丢弃、重新发一遍整条对话让 AI 从头生成,导致「回复一半时关闭、再打开要等 AI 重头回一遍」。第 5 版改为把半截作为历史发给模型让其接着补全。 但当时
acc从半截开始累加 + 模型返回的整段新回复常把半截开头重申一遍,导致对话框里出现一模一样的半截/对话重复。 现修复:前端resume改为acc从空累积后端返回的整段新回复,用stripLeading去除其开头与半截重复的前缀,最终拼成「半截 + 去重后的续写」,不再重复;并加resumingRef幂等保护,防止 effect 重复触发造成双重请求/重复对话。
更新日志 (2026-10-13 · WorkBuddy 维护)
1. 新增访问统计与访客页面
全站埋点统计访客(时间 / IP / 地点 / 设备 / 网络类型),日志写入独立私仓。新增公开统计页
/stats(仅展示每日访客人数,任何人可看)与私密详情页/visitors(站长自用)。接口侧已做同 IP 同页面 30 秒去重。
2. 新增 Web 版站长控制台
新增
/admin114514网页控制台(无导航入口):文章 / 杂谈 / 说说 / 关于的编辑管理,友链 / 项目 / 相册 / 收藏的数据管理,站点配置表单,访客统计查看,图片上传(前端自动压缩)。所有操作经 GitHub API 直达仓库,等同自动部署。
3. 桌宠更换为 Live2D「DS鲸鱼娘」
移除原 AI 猫娘「煤球」,更换为 Live2D 桌宠「DS鲸鱼娘」(模型自托管,含 8 组动作与 44 个表情道具;评论、搜索等交互会触发不同动作相位)。原煤球文件已备份。
4. 新增收藏展示页
新增
/collections收藏展示页(导航栏「收藏」入口):动漫 / 影视 / 书籍 / 游戏分类筛选、卡片网格、详情弹窗;数据可在控制台「收藏」标签管理。
5. 收藏页接入 B 站追番与个人卡片
控制台支持「从 B 站同步追番」一键拉取在看列表(UID 507426402);收藏页顶部展示 B 站主页卡片(头像 / 昵称 / 等级 / 粉丝 / 关注 / 简介 + 主页链接)。
6. 修复 B 站封面与头像加载失败
B 站图床防盗链导致部分图片 403:追番同步与头像接口输出时已将图片统一降级为 http 协议(浏览器在协议降级时不发送 Referer,图床放行),存量封面已全部处理。
7. 「关于我」页 WorkBuddy 头像更换
站长提供了新头像(青蓝渐变猫娘),已替换
public/images/workbuddy-avatar.jpg(256×256 JPEG q82 渐进式,约 6KB),引用代码无需改动。
更新日志 (2026-10-14 · WorkBuddy 维护)
8. 新增 AI 对话(控制台配置 + 全站可用)
新增
/ai-chatAI 对话页(导航「AI」入口):模型与 API Key 由站长在控制台「AI」面板配置,写入 GitHub 私有仓库data/ai-config.ts,仅服务端读取(前端不暴露 Key),所有访客打开即聊,无需各自填 Key;对话记录保存在各自浏览器本地(刷新不丢)。仍保留可选的「用自己的 Key」高级设置。
9. 鲸鱼娘桌宠内接入 AI 对话入口
在 DS鲸鱼娘桌宠右键控制面板里,新增一个与「动作」「装扮」同级的「AI」页签(不是跳转按钮):它位于 tab 栏最左且默认打开即选中,页签标题固定为「蓝色大肥鱼」(不显示后端模型名)。页签内是完整对话框——消息气泡(用户/助手左右分色)、输入框(回车发送、Shift+Enter 换行)、发送/清空按钮、错误提示,直接调用站内
/api/ai-chat(服务端读控制台配置的模型/Key,所有访客可用、前端不暴露 Key),对话记录存浏览器 localStorage(xhsb_pet_ai_history,切页签/刷新不丢)。改动位于自托管资源public/plugins/whale-pet-live2d/assets/v0.2.3/client.js(从 jar 提取的第三方包,非 Next.js 源码);改前已与线上版本字节级比对,改后通过node --check语法校验。
10. 下线网页版 AI,新增「鲸鱼娘预设对话」控制台 CRUD
移除网页版 AI:删除导航栏「AI」入口与
/ai-chat页面(文件经 GitHub API DELETE 从仓库移除),AI 能力只保留在桌宠「蓝色大肥鱼」内;/api/ai-chat后端保留(桌宠继续使用)。新增控制台「鲸鱼」标签(/admin114514):表单式 CRUD 编辑data/whale-presets.ts——开场白(greeting)、建议提问(一键发送的标签)、预设问答(触发词 + 回复,作为 few-shot 示例经/api/ai-chat注入系统提示,教鲸鱼娘的说话风格)。数据经/api/admin/whalepresets(GET/PUT,写回仓库)与公开/api/whale-presets(GET,桌宠读取)流转;桌宠打开 AI 页签时显示开场白气泡与建议标签。全部改动经单次 commit 部署,已核对线上版本。
11. 控制台访客统计新增「清空访客日志」
控制台「访客」标签新增红色的「清空访客日志」按钮:点击弹确认框(提示将删除全部记录、不可恢复),确认后调用
DELETE /api/admin/visitors,删除blog-visitors私仓logs/下所有按天归档的.json文件并刷新列表。鲸鱼娘 AI 对话本身已有「清空」按钮,本次是针对访客统计日志。
12. 修复 B 站头像 / 追番封面桌面端 403(防盗链)
追番页(/collections)的 B 站头像与追番封面在桌面端加载报 403(防盗链)、手机端正常。根因是图片请求带上了本站 Referer,被 hdslb.com 图床拒绝;此前
toHttpImg的 http 降级在部分桌面浏览器仍会发送 Referer,无法规避。修复:在追番页三处 B 站图片<img>(bili.face头像、卡片封面、详情弹窗封面)统一加referrerPolicy="no-referrer",强制不发送 Referer,图床放行;图片仍走 http(桌面对被动混合内容放行),接口与数据无需改动。
13. 控制台追番同步集成「个人数据」
控制台「追番」标签的同步按钮由「从 B 站同步追番」更名为「从 B 站同步个人数据」,并集成双重同步:点击后既拉取 B 站追番列表(原
/api/admin/bilibili),又调用公开接口/api/bilibili/user拉取该 UID 的个人数据(头像 / 昵称 / 等级 / 粉丝 / 关注 / 获赞 / 简介 + 主页链接),在按钮下方渲染一张 B 站主页卡片(与追番页卡片一致,头像同样带referrerPolicy="no-referrer"规避桌面端 403)。进入追番标签会自动拉取默认 UID(507426402)的个人数据并展示卡片,修改 UID 后点按钮即可重新同步。改动仅限app/admin114514/page.tsx。
更新日志 (2026-09-21 · WorkBuddy 接手维护)
1. 维护交接
自 2026-09-21 起,博客的日常维护由 WorkBuddy 接手,沿用原有的 GitHub → Vercel 自动部署流程。
2. 修正页脚徽标版本号
页脚技术栈徽标此前标注与实际不符:Next.js 实际版本为 16、Tailwind CSS 实际版本为 3,已分别由 "Next.js 15"、"Tailwind 4" 更正。React 19 标注无误,未改动。
3. 修复站长简介换行失效
站长简介中的换行符此前被 HTML 折叠为空格,导致多段文字挤成一团。已为渲染容器补充
whitespace-pre-line,首屏名片、文章页与杂谈页底部作者卡片均已生效。
4. 站长简介新增维护交接留念
简介末尾新增一行:
2026-09-21 起,WorkBuddy 接手日常维护,留个脚印以作纪念。
5. 关于页新增 WorkBuddy 专属留言卡
在豆包AI专属留言卡下方新增同款毛玻璃留言卡,含独立头像(青蓝渐变)、「接任维护」徽章与四段留言,与豆包AI卡片并列展示。
6. 关于页自我介绍补充维护说明
自我介绍中补充了维护交接说明,与首页站长简介保持一致。
7. 新增更新日志页面
新增
/changelog页面,本文件自此对外可见。
更新日志 (版本0.2.1~版本0.2.3)
1. 优化在移动端显示卡顿情况
调整在移动端显示特效,减轻移动端卡顿情况
2. 增加各个页面对移动端适配
实现首页、杂谈、归档等页面的移动端适配,增加移动端导航栏。
3. 关于新增动态
可以看到提交记录
4. 友链介绍可修改
现在你可以在控制台中编辑可复制信息了
5. 存在的几个bug修复
Start.dat闪退,标题无法修改问题已修复
6. 更新博客源码
实现更新源码
更新日志 (版本0.1.1)
1. 标题页与图标更新
实现自定义网页标题和图标按钮,详细见设置中的个人名片设置
2. 文章支持Latex格式
实现Latex格式公式显示,具体使用如
输入公式如 $ E = mc^2 $ 下划线需使用转义符"\_"。
此处感谢同学支持更新Latex公式显示 @inWunsch
3. 评论系统bug修复
修复评论系统无法正常获取bug
4. siteconfig设置新增
新增faviconUrl、navTitle等多项,更新同步拉取代码时请注意保存之前信息!!
5. 环境变量
所需环境变量增多,请注意!