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