[{"data":1,"prerenderedAt":200},["ShallowReactive",2],{"works":3,"work-\u002Fproject\u002Ftoken-stats":111,"works-reading":196},[4,28,45,62,78,95],{"path":5,"title":6,"short":7,"description":8,"cover":9,"date":10,"source":11,"author":11,"authorShort":11,"origin":12,"stack":13,"tags":19,"link":24,"repo":11,"team":25,"type":26,"no":27},"\u002Fproject\u002Fmaintpilot","MaintPilot：设备检修 AI 诊断系统","MaintPilot","设备检修的 AI 诊断系统，答案能追溯到手册页码。以维修手册和故障案例为知识源，从一句故障描述走到一张能执行的作业单。","\u002Fimages\u002Fcovers\u002Fmaintpilot.jpg","2026-05-22",null,"original",[14,15,16,17,18],"Vue 3","Go","Python","PostgreSQL","pgvector",[20,21,22,23],"项目","RAG","多 Agent","全栈","https:\u002F\u002Fmaintpilot.lzwcc.xyz\u002Fwelcome","两人合作：我负责前端和部署，同学负责后端和 AI 服务","project","P01",{"path":29,"title":30,"short":31,"description":32,"cover":33,"date":34,"source":35,"author":36,"authorShort":11,"origin":37,"stack":38,"tags":40,"type":43,"no":44},"\u002Fui\u002Fpaper-scroll","纸张滚动效果","纸张滚动","文字在纸上流动，纸张的边缘与阴影保持原位。","\u002Fimages\u002Fcovers\u002Fpaper.jpg","2026-10-05","https:\u002F\u002Fseg6.space\u002F","seg6.space","recreation",[39],"css",[41,42],"滚动","纸张","ui","001",{"path":46,"title":47,"short":48,"description":49,"cover":50,"date":51,"source":52,"author":53,"authorShort":11,"origin":37,"stack":54,"tags":56,"type":60,"no":61},"\u002Fanimation\u002Fdither-ripple-avatar","抖动像素波纹头像","像素波纹头像","指针划过时像素被推开再弹回，点击激起向外扩散的波环。每个像素都是一个带弹簧的粒子。","\u002Fimages\u002Fcovers\u002Favatar.jpg","2026-10-08","https:\u002F\u002Fadixcode.com\u002F","adixcode.com",[55],"canvas",[57,58,59],"头像","粒子","指针交互","animation","002",{"path":63,"title":64,"short":65,"description":66,"cover":67,"date":68,"source":69,"author":70,"authorShort":71,"origin":37,"stack":72,"tags":73,"type":60,"no":77},"\u002Fanimation\u002Fclaude-micro-interactions","Claude 风格的文字显现与输入框交互","Claude 风格微交互","逐字模糊消解、输入框的悬浮边框，以及聚焦时的双环反馈。","\u002Fimages\u002Fcovers\u002Fclaude.jpg","2026-10-14","https:\u002F\u002Fclaude-storybook.bystanderss.chatgpt.site\u002F","Claude Design System Storybook","Claude Storybook",[39],[74,75,76],"文字动画","输入框","聚焦状态","003",{"path":79,"title":80,"short":81,"description":82,"cover":83,"date":84,"source":11,"author":11,"authorShort":11,"origin":12,"stack":85,"tags":89,"link":11,"repo":93,"team":11,"type":26,"no":94},"\u002Fproject\u002Ftoken-stats","token-stats：汇总几台机器的 AI 编程用量","token-stats","统计我在几台机器上用了多少 Claude Code 和 Codex 的 token，画成 GitHub 主页上的卡片。服务器上什么都不用装，只依赖 Python 标准库。","\u002Fimages\u002Fcovers\u002Ftoken-stats.jpg","2026-10-23",[16,86,87,88],"SQLite","SVG","GitHub Actions",[20,90,91,92],"命令行工具","数据可视化","开源","https:\u002F\u002Fgithub.com\u002FLZWcc\u002Ftoken-stats","P02",{"path":96,"title":97,"short":11,"description":98,"cover":99,"date":100,"source":101,"author":102,"authorShort":103,"origin":37,"stack":104,"tags":105,"type":43,"no":110},"\u002Fui\u002Fgrain-gradient-cover","颗粒渐变封面","几团糊开的色块，上面撒一层 1px 的灰色颗粒。拆解 ElevenLabs 博客封面的做法，做成一个可以导出图片的生成器。","\u002Fimages\u002Fcovers\u002Fgrain.jpg","2026-10-24","https:\u002F\u002Fx.com\u002Fianneo_ai\u002Fstatus\u002F2113225499556381172","Ian (@ianneo_ai)","X @ianneo_ai",[55],[106,107,108,109],"渐变","噪点","封面","背景","004",{"id":112,"title":80,"author":11,"authorShort":11,"body":113,"cover":83,"date":84,"description":82,"extension":188,"icon":11,"link":11,"meta":189,"navigation":190,"origin":12,"path":79,"repo":93,"seo":191,"short":81,"source":11,"stack":192,"stem":193,"tags":194,"team":11,"__hash__":195},"project\u002Fproject\u002Ftoken-stats.md",{"type":114,"value":115,"toc":182},"minimark",[116,120,123,126,133,137,140,143,148,154,165,168,171,174],[117,118,119],"p",{},"token-stats 是我写的一个命令行工具，用来统计自己用了多少 AI 编程的 token。",[117,121,122],{},"我平时同时用 Claude Code 和 Codex，分散在一台笔记本和两台服务器上。每台机器的日志只在它自己身上，Claude Code 还会删掉 30 天前的日志；现成的工具要么只看本机，要么要把数据交给它的服务。所以自己写了一个：在笔记本上运行一条命令，把几台机器的用量拉回来存进本地数据库，再画成卡片放到 GitHub 主页上。",[117,124,125],{},"下面这张就是它生成的，数据是我自己的。",[127,128],"project-shot",{":height":129,":width":130,"alt":131,"src":132},"240","746","token-stats 生成的概览卡：模型占比环形图、近半年热力图和统计","\u002Fimages\u002Fprojects\u002Ftoken-stats\u002Foverview.svg",[134,135,136],"h2",{"id":136},"怎么做的",[117,138,139],{},"笔记本经 ssh 把一段约 150 行的解析程序发到服务器上运行，服务器只把新增的请求传回来，本身不用装任何东西，也不会留下文件。每条请求按唯一键存进 SQLite，几台机器的数据合在一起不会重复计数，日志被清理以后，存下来的也还在。第一次采集约 52 秒，之后每次 6 秒多。",[117,141,142],{},"整个工具只用 Python 标准库，macOS 自带的 Python 3.9 就能跑。卡片是直接拼出来的 SVG，一共 9 张，亮色、暗色各一份，推到我自己的公开仓库，主页 README 直接引用。自动提交用的是一个不关联任何账号的作者，每天更新数据不会让贡献图变绿。",[127,144],{":height":145,":width":130,"alt":146,"src":147},"210","月度用量卡：最近 12 个月，按 Claude Code 和 Codex 堆叠","\u002Fimages\u002Fprojects\u002Ftoken-stats\u002Fmonthly.svg",[127,149],{":height":150,":width":151,"alt":152,"src":153},"274","365","模型排行卡：前 8 个模型的用量，按厂商上色","\u002Fimages\u002Fprojects\u002Ftoken-stats\u002Fmodels-bar.svg",[117,155,156,157,164],{},"一共 9 张卡片，全部的样子见",[158,159,163],"a",{"href":160,"rel":161},"https:\u002F\u002Fgithub.com\u002FLZWcc\u002Ftoken-stats\u002Fblob\u002Fmain\u002Fdocs\u002Fcards.md",[162],"nofollow","卡片画廊","。",[117,166,167],{},"这个网站首页的「AI 用量」也来自它。token-stats 每次发布时会顺带生成一份汇总数据，数字和卡片出自同一段代码，网站发布时读一次就行。",[134,169,170],{"id":170},"测试",[117,172,173],{},"在三台真实机器上和 ccusage 对过账，结果一致。61 个单元测试在 macOS、Linux、Windows 上跑，每次推送还会用打包出来的源码走一遍安装和卸载。我没有 Windows 机器，Windows 只在 CI 里测过。",[117,175,176,177,164],{},"为什么这样设计、开发中踩过的坑，写在博客里：",[158,178,181],{"href":179,"rel":180},"https:\u002F\u002Flzwcc.xyz\u002Fblog\u002Ftoken-stats\u002F",[162],"汇总多台机器的 Claude Code 与 Codex 用量，生成 GitHub 主页卡片",{"title":183,"searchDepth":184,"depth":184,"links":185},"",2,[186,187],{"id":136,"depth":184,"text":136},{"id":170,"depth":184,"text":170},"md",{},true,{"title":80,"description":82},[16,86,87,88],"project\u002Ftoken-stats",[20,90,91,92],"IotYe0A1d7XNptW9e2aLBmcDaf-TVs1ZJYlErgA8bsw",{"\u002Fui\u002Fcontent-routing":197,"\u002Fui\u002Fgrain-gradient-cover":184,"\u002Fui\u002Fpaper-scroll":197,"\u002Fanimation\u002Fclaude-micro-interactions":198,"\u002Fanimation\u002Fdither-ripple-avatar":197,"\u002Fproject\u002Fmaintpilot":199,"\u002Fproject\u002Ftoken-stats":184},1,7,3,1793112261015]