我要成为二游高手の宝藏之地
首页项目归档照片墙追番音乐游戏灵境说说杂谈友链日志访客关于

📢 更新日志

这里记录博客的每一次版本更新与重要改动。


更新日志 (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-chat AI 对话页(导航「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. 环境变量

所需环境变量增多,请注意!