Projects

三个项目,三种问题。

都是从自己的需求出发做的工具:一个替换掉繁琐三件套的 LLM 网关,一个把 AI 助手放进 IDE 的插件,一个只服务一个孩子的视频应用。全部开源。

ezllm

TypeScript · pnpm monorepo

单进程 LLM 网关与管理台。用一个 Node 进程同时承载协议转换网关、管理台 API 和 Web 界面,替掉旧版「Python litellm + PM2 + Node 反代」的三件套。

做了什么

  • 三种协议互转:OpenAI Chat Completions、Anthropic Messages、OpenAI Responses,支持 SSE 流式与 tools / function calling。
  • 配置热更新:管理台保存后校验配置、写入 JSON、内存里重建网关实例,不重启进程。
  • 管理界面同源托管:供应商与模型管理、连通性测试、用量日志、IP 归属地都在同一个端口下。
  • 用量落库:请求、上游、回写客户端三方报文按每请求共享预算捕获,写入 SQLite,超限标记截断。
  • 默认安全:主密钥与管理台登录都未设置时强制绑定 127.0.0.1,避免无凭据实例对外暴露。
  • 发布形态:npx ezllm install 装配到 ~/.ezllm,进程管理、开机自启与自动更新由 daemon 负责。

项目信息

语言
TypeScript
运行时
Node.js ≥ 22
结构
pnpm monorepo,18 个包
存储
node:sqlite
协议
OpenAI / Anthropic / Responses
发布
npm 包 ezllm

zcode-ide

Kotlin · JetBrains Plugin

在 JetBrains IDE 里内嵌官方 ZCode Web UI:界面直接用官方 @zcode/ui,后端直接跑官方 @zcode/server,只把窗口容器换成 JCEF,不依赖 Electron。

做了什么

  • 官方产品换一层 IDE 外壳:同一套界面、同一套 Agent、同一个 ~/.zcode 数据目录,不是仿制实现。
  • 全 IDE 共享一个 server 进程,端口固定,JCEF 的 localStorage(草稿、最近模型、界面偏好)不会随窗口或重启丢失。
  • IDE 深度集成:文件链接带行号列号直接打开、目录定位到项目树、右键发送文件引用、选中代码发送路径与行号范围。
  • 宿主能力桥接:文件对话框、另存为、打开外部链接、系统通知、MCP 用户目录读写。
  • 项目路径由 URL 的 ideWorkspace 传入,server 不绑定项目,多窗口各自锁定自己的 workspace。
  • 薄插件设计:runtime 首次打开面板时按需下载,支持独立更新与回滚;Node 24 缺失时自动从镜像供给。

项目信息

语言
Kotlin / Java
IDE
IntelliJ Platform 2025.1+,需要 JCEF
构建
JDK 21 · Node ≥ 24 · Gradle 8.13
上游
zai-org/ZCode 的 fork,分支 ide-integration
版本锁
vendor/zcode.lock 固定构建 commit

baby-video

JavaScript · uni-app + Capacitor

给自家三岁孩子看的视频应用:Android APK(Capacitor + uni-app H5)加 Hono / node:sqlite 后端。只做 Android 平板与网页,不做小程序;必须登录,无广告、无推荐流。

做了什么

  • 内容流水线:从小红书、B站、央视采集入库,经过 ASR 转写、AI 审核、分类分层后再上线。
  • 按三岁发展画像建立正向 / 反向内容清单与配比,不把「动画片」当成一个笼统分类。
  • 播放链路:uni-app H5 与 Capacitor Android 壳,另有原生播放页;封面本地化,媒体经后端代理,直链失效可刷新。
  • 对象存储:七牛上传队列与状态机,数据库回写地址,播放侧按需回退。
  • 观看时长限制与组合播放队列,避免孩子一直点下一个。
  • 后端保持轻量:Hono + 内置 node:sqlite,清单接口、媒体代理、采集与审核脚本在一个仓库里。

项目信息

前端
uni-app H5
客户端
Capacitor Android
后端
Hono + node:sqlite
内容
采集 · ASR · 审核 · 分层
形态
网页版 + Android APK

代码都在这儿。

GitHub 上是 ezllm 与一些零散工具,Gitee 上有三个项目的完整仓库。