跳转到主要内容
项目基于 Next.js 15(App Router)、React 19 和 Tailwind CSS,使用 TypeScript 编写。开始开发前,请先按照快速开始完成本地配置。

常用命令

提交改动前,建议依次运行测试、代码检查、类型检查和生产构建。

测试

npm test 运行 tests/api.test.ts 和 tests/i18n.test.ts。api.test.ts 会导入其余测试文件,因此一条命令即可运行全部测试。调试时,也可以用 tsx 单独运行某个文件:

项目结构

添加界面文案

文案定义在 app/i18n/messages.ts 中。简体中文原文就是键,其他三种语言作为值:
app/i18n/messages.ts
在组件中通过 t("历史记录") 使用。新增文案时,请同时提供 zh-TW、en 和 ko 三种翻译,i18n.test.ts 会检查完整性。

持续集成

.github/workflows/docker.yml 在推送到任意分支、推送 v* 标签、提交 Pull Request 或手动触发时运行:
1

验证

使用 Node.js 22 依次运行 npm ci、npm test、npm run lint 和 npm run build。
2

构建镜像

验证通过后构建 Docker 镜像。普通分支和 Pull Request 只构建 linux/amd64,用于检查镜像能否构建成功。
3

发布镜像

推送到默认分支、howendev/dev 分支或任意标签时,同时构建 linux/amd64 和 linux/arm64,并在配置了 Docker Hub secrets 时推送多架构镜像。

镜像标签

Docker Hub secrets

在 GitHub 仓库中打开 Settings → Secrets and variables → Actions,添加: 未配置这两个 secrets 时,工作流只构建镜像,不推送,并输出一条警告。
运行时密钥不要写入 Docker 镜像。DEEPSEEK_API_KEY、GEMINI_API_KEY、CODE 和 Umami 配置应在运行容器时通过 .env.production 或 -e 参数注入。

Docker 镜像

Dockerfile 基于 node:22-alpine 多阶段构建,使用 Next.js standalone 输出:
  • 运行阶段以非 root 用户 nextjs 运行。
  • 默认监听 0.0.0.0:3002。
  • 镜像包含 LICENSE、NOTICE、LICENSING.md 和 LICENSES/ 许可证文件。

贡献

欢迎提交 Issue 和 Pull Request。新增贡献请使用与 AGPL-3.0-only 兼容的许可,并保留引入的第三方代码声明。详见许可证。