From 76ba500417a2e4e7f70f161c2f1efe29f799ed8d Mon Sep 17 00:00:00 2001 From: renjue Date: Tue, 23 Jun 2026 21:46:16 +0800 Subject: [PATCH] Initial commit: Luminary AI Gateway OpenAI-compatible AI gateway with Vue admin UI, multi-provider egress, ingress key governance, monitoring, and security controls. Co-authored-by: Cursor --- .dockerignore | 34 + .gitea/README.md | 182 ++ .gitea/act-runner/.env.example | 3 + .gitea/act-runner/README.md | 177 ++ .gitea/act-runner/config.yaml | 34 + .gitea/act-runner/docker-compose.yml | 22 + .gitea/workflows/ci.yml | 236 ++ .gitignore | 43 + Dockerfile | 71 + LICENSE | 21 + Makefile | 63 + README.md | 357 +++ cmd/luminary-recover/main.go | 156 ++ cmd/luminary/main.go | 129 ++ docker-compose.yml | 23 + docker/Dockerfile.prebuilt | 20 + docker/entrypoint.sh | 10 + docs/UI-DESIGN-SYSTEM.md | 2013 +++++++++++++++++ docs/image/IP规则.png | Bin 0 -> 106180 bytes docs/image/入口管理.png | Bin 0 -> 207080 bytes docs/image/出口管理.png | Bin 0 -> 197122 bytes docs/image/登陆页.png | Bin 0 -> 76001 bytes docs/image/看板监控.png | Bin 0 -> 244749 bytes docs/image/系统设置.png | Bin 0 -> 213811 bytes docs/image/请求日志.png | Bin 0 -> 335656 bytes go.mod | 52 + go.sum | 118 + internal/auth/crypto.go | 74 + internal/auth/loginlimit/limit.go | 93 + internal/auth/loginlimit/limit_test.go | 36 + internal/auth/password.go | 30 + internal/balancer/weighted.go | 49 + internal/balancer/weighted_test.go | 32 + internal/gateway/errors.go | 11 + internal/gateway/failover.go | 160 ++ internal/gateway/health_check.go | 190 ++ internal/gateway/health_check_test.go | 51 + internal/gateway/logbody.go | 90 + internal/gateway/logbody_test.go | 25 + internal/gateway/model_resolve.go | 53 + internal/gateway/model_resolve_test.go | 32 + internal/gateway/routing.go | 104 + internal/gateway/service.go | 475 ++++ internal/gateway/upstream.go | 43 + internal/gateway/upstream_test.go | 27 + internal/handler/admin/auth.go | 273 +++ internal/handler/admin/helpers.go | 29 + internal/handler/admin/ingress.go | 163 ++ internal/handler/admin/ip_dashboard.go | 243 ++ internal/handler/admin/providers.go | 196 ++ internal/handler/admin/providers_keys.go | 418 ++++ internal/handler/admin/providers_util.go | 51 + internal/handler/admin/routing_logs.go | 220 ++ internal/handler/admin/settings.go | 29 + internal/handler/admin/workflows.go | 116 + internal/handler/files/handler.go | 43 + internal/handler/proxy/errors.go | 30 + internal/handler/proxy/handler.go | 100 + internal/handler/replicate/handler.go | 159 ++ internal/handler/static/handler.go | 63 + internal/limiter/limiter.go | 30 + internal/middleware/clientip.go | 88 + internal/middleware/clientip_test.go | 38 + internal/middleware/ipfilter_test.go | 31 + internal/middleware/middleware.go | 166 ++ internal/model/category.go | 26 + internal/model/entities.go | 243 ++ internal/model/model_entry.go | 20 + internal/monitor/service.go | 175 ++ internal/prediction/binding.go | 57 + internal/prediction/hub.go | 57 + internal/prediction/inject.go | 48 + internal/prediction/params.go | 122 ++ internal/prediction/service.go | 475 ++++ internal/prediction/workflow_analyze.go | 268 +++ internal/pricing/cost.go | 66 + internal/provider/anthropic/client.go | 283 +++ internal/provider/anthropic/content_test.go | 26 + internal/provider/comfyui/client.go | 290 +++ internal/provider/custom/client.go | 16 + internal/provider/endpoints.go | 176 ++ internal/provider/forward.go | 198 ++ internal/provider/http_client.go | 11 + internal/provider/openai/client.go | 94 + internal/provider/provider.go | 33 + internal/provider/responses_adapter.go | 640 ++++++ internal/provider/responses_adapter_test.go | 179 ++ internal/provider/stream.go | 100 + internal/provider/types.go | 96 + internal/provider/types_test.go | 30 + internal/settings/encryption.go | 66 + internal/settings/legacy.go | 22 + internal/settings/runtime.go | 262 +++ internal/storage/imagestore/store.go | 93 + internal/store/cache/cache.go | 455 ++++ internal/store/sqlite/repository.go | 136 ++ internal/store/sqlite/store.go | 109 + internal/store/sqlite/store_test.go | 69 + scripts/luminary-recover.sh | 23 + web/.npmrc | 1 + web/dist/index.html | 14 + web/index.html | 13 + web/package-lock.json | 2188 +++++++++++++++++++ web/package.json | 27 + web/public/favicon.svg | 16 + web/src/App.vue | 16 + web/src/api/client.ts | 113 + web/src/components/AppCard.vue | 19 + web/src/components/BrandIcon.vue | 30 + web/src/components/ChartBox.vue | 47 + web/src/components/LocaleSwitcher.vue | 22 + web/src/components/PageHeader.vue | 18 + web/src/components/StatCard.vue | 13 + web/src/components/WorkflowModelDialog.vue | 187 ++ web/src/i18n/index.ts | 30 + web/src/i18n/locales/en.ts | 244 +++ web/src/i18n/locales/zh-CN.ts | 265 +++ web/src/layouts/MainLayout.vue | 97 + web/src/main.ts | 29 + web/src/router/index.ts | 40 + web/src/styles/theme.css | 602 +++++ web/src/utils/chartTheme.ts | 64 + web/src/utils/format.ts | 23 + web/src/views/DashboardView.vue | 166 ++ web/src/views/IPRulesView.vue | 92 + web/src/views/IngressKeysView.vue | 462 ++++ web/src/views/LoginView.vue | 65 + web/src/views/ProvidersView.vue | 716 ++++++ web/src/views/RequestLogsView.vue | 299 +++ web/src/views/SettingsView.vue | 221 ++ web/src/vite-env.d.ts | 7 + web/static_embed.go | 8 + web/tsconfig.json | 22 + web/vite.config.ts | 23 + 134 files changed, 18988 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitea/README.md create mode 100644 .gitea/act-runner/.env.example create mode 100644 .gitea/act-runner/README.md create mode 100644 .gitea/act-runner/config.yaml create mode 100644 .gitea/act-runner/docker-compose.yml create mode 100644 .gitea/workflows/ci.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 cmd/luminary-recover/main.go create mode 100644 cmd/luminary/main.go create mode 100644 docker-compose.yml create mode 100644 docker/Dockerfile.prebuilt create mode 100644 docker/entrypoint.sh create mode 100644 docs/UI-DESIGN-SYSTEM.md create mode 100644 docs/image/IP规则.png create mode 100644 docs/image/入口管理.png create mode 100644 docs/image/出口管理.png create mode 100644 docs/image/登陆页.png create mode 100644 docs/image/看板监控.png create mode 100644 docs/image/系统设置.png create mode 100644 docs/image/请求日志.png create mode 100644 go.mod create mode 100644 go.sum create mode 100644 internal/auth/crypto.go create mode 100644 internal/auth/loginlimit/limit.go create mode 100644 internal/auth/loginlimit/limit_test.go create mode 100644 internal/auth/password.go create mode 100644 internal/balancer/weighted.go create mode 100644 internal/balancer/weighted_test.go create mode 100644 internal/gateway/errors.go create mode 100644 internal/gateway/failover.go create mode 100644 internal/gateway/health_check.go create mode 100644 internal/gateway/health_check_test.go create mode 100644 internal/gateway/logbody.go create mode 100644 internal/gateway/logbody_test.go create mode 100644 internal/gateway/model_resolve.go create mode 100644 internal/gateway/model_resolve_test.go create mode 100644 internal/gateway/routing.go create mode 100644 internal/gateway/service.go create mode 100644 internal/gateway/upstream.go create mode 100644 internal/gateway/upstream_test.go create mode 100644 internal/handler/admin/auth.go create mode 100644 internal/handler/admin/helpers.go create mode 100644 internal/handler/admin/ingress.go create mode 100644 internal/handler/admin/ip_dashboard.go create mode 100644 internal/handler/admin/providers.go create mode 100644 internal/handler/admin/providers_keys.go create mode 100644 internal/handler/admin/providers_util.go create mode 100644 internal/handler/admin/routing_logs.go create mode 100644 internal/handler/admin/settings.go create mode 100644 internal/handler/admin/workflows.go create mode 100644 internal/handler/files/handler.go create mode 100644 internal/handler/proxy/errors.go create mode 100644 internal/handler/proxy/handler.go create mode 100644 internal/handler/replicate/handler.go create mode 100644 internal/handler/static/handler.go create mode 100644 internal/limiter/limiter.go create mode 100644 internal/middleware/clientip.go create mode 100644 internal/middleware/clientip_test.go create mode 100644 internal/middleware/ipfilter_test.go create mode 100644 internal/middleware/middleware.go create mode 100644 internal/model/category.go create mode 100644 internal/model/entities.go create mode 100644 internal/model/model_entry.go create mode 100644 internal/monitor/service.go create mode 100644 internal/prediction/binding.go create mode 100644 internal/prediction/hub.go create mode 100644 internal/prediction/inject.go create mode 100644 internal/prediction/params.go create mode 100644 internal/prediction/service.go create mode 100644 internal/prediction/workflow_analyze.go create mode 100644 internal/pricing/cost.go create mode 100644 internal/provider/anthropic/client.go create mode 100644 internal/provider/anthropic/content_test.go create mode 100644 internal/provider/comfyui/client.go create mode 100644 internal/provider/custom/client.go create mode 100644 internal/provider/endpoints.go create mode 100644 internal/provider/forward.go create mode 100644 internal/provider/http_client.go create mode 100644 internal/provider/openai/client.go create mode 100644 internal/provider/provider.go create mode 100644 internal/provider/responses_adapter.go create mode 100644 internal/provider/responses_adapter_test.go create mode 100644 internal/provider/stream.go create mode 100644 internal/provider/types.go create mode 100644 internal/provider/types_test.go create mode 100644 internal/settings/encryption.go create mode 100644 internal/settings/legacy.go create mode 100644 internal/settings/runtime.go create mode 100644 internal/storage/imagestore/store.go create mode 100644 internal/store/cache/cache.go create mode 100644 internal/store/sqlite/repository.go create mode 100644 internal/store/sqlite/store.go create mode 100644 internal/store/sqlite/store_test.go create mode 100755 scripts/luminary-recover.sh create mode 100644 web/.npmrc create mode 100644 web/dist/index.html create mode 100644 web/index.html create mode 100644 web/package-lock.json create mode 100644 web/package.json create mode 100644 web/public/favicon.svg create mode 100644 web/src/App.vue create mode 100644 web/src/api/client.ts create mode 100644 web/src/components/AppCard.vue create mode 100644 web/src/components/BrandIcon.vue create mode 100644 web/src/components/ChartBox.vue create mode 100644 web/src/components/LocaleSwitcher.vue create mode 100644 web/src/components/PageHeader.vue create mode 100644 web/src/components/StatCard.vue create mode 100644 web/src/components/WorkflowModelDialog.vue create mode 100644 web/src/i18n/index.ts create mode 100644 web/src/i18n/locales/en.ts create mode 100644 web/src/i18n/locales/zh-CN.ts create mode 100644 web/src/layouts/MainLayout.vue create mode 100644 web/src/main.ts create mode 100644 web/src/router/index.ts create mode 100644 web/src/styles/theme.css create mode 100644 web/src/utils/chartTheme.ts create mode 100644 web/src/utils/format.ts create mode 100644 web/src/views/DashboardView.vue create mode 100644 web/src/views/IPRulesView.vue create mode 100644 web/src/views/IngressKeysView.vue create mode 100644 web/src/views/LoginView.vue create mode 100644 web/src/views/ProvidersView.vue create mode 100644 web/src/views/RequestLogsView.vue create mode 100644 web/src/views/SettingsView.vue create mode 100644 web/src/vite-env.d.ts create mode 100644 web/static_embed.go create mode 100644 web/tsconfig.json create mode 100644 web/vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..fe13c4d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,34 @@ +# VCS / CI +.git +.gitignore +.gitea + +# Docs (not needed in image) +*.md +web/docs + +# Local runtime / secrets +data/ +.env +.env.* + +# Build artifacts +luminary +luminary-recover +.docker-bin/ +*.db +*.test +coverage/ + +# Frontend (rebuilt in Dockerfile) +web/node_modules +web/dist + +# IDE / editor +.idea +.vscode +.cursor + +# OS +.DS_Store +Thumbs.db diff --git a/.gitea/README.md b/.gitea/README.md new file mode 100644 index 0000000..5ac4542 --- /dev/null +++ b/.gitea/README.md @@ -0,0 +1,182 @@ +# Gitea Actions CI 模板(Go + Vue) + +复制整个 `.gitea/` 目录到新仓库即可启用 CI:**可选 go test** + **Docker 构建/推送**(Go 编译与 Vue 构建在 Dockerfile 内完成)。 + +## 项目约定 + +| 路径 | 说明 | +|------|------| +| `go.mod` | 仓库根目录 | +| `Dockerfile` | 仓库根目录,多阶段构建(含前端 `web/`) | +| `web/` | 可选;由 Dockerfile 内 `npm run build` 处理,CI 不再单独构建 | + +## Dockerfile 要求 + +工作流的 **Build image** 步骤在仓库根目录(或 Variable `DOCKERFILE` 指定路径)执行 `docker buildx build`,**不会**在 CI 里单独装 Node / 跑 `npm`。因此 Dockerfile 必须能独立完成构建与(运行时)启动。 + +### 基本要求 + +| 项 | 要求 | +|----|------| +| 位置 | 默认仓库根目录 `Dockerfile`;其他路径用 Variable `DOCKERFILE` | +| 构建上下文 | 仓库根目录 `.`(整个仓库会被 `COPY` 进镜像) | +| Go 版本 | `go.mod` 里 `go` 行与 `golang` 基础镜像大版本一致 | +| 多架构 | `go build` 须使用 `GOARCH="$TARGETARCH"`(buildx 注入);推荐 `CGO_ENABLED=0` | +| Go 模块代理 | **必须**在镜像内显式设置 `GOPROXY` / `GOSUMDB`(见下);容器内不会自动读取 `go.env` | +| 基础镜像加速 | 支持构建参数 `IMAGE_PREFIX`(CI 默认 `docker.1panel.live/library/`) | +| 前端(可选) | 存在 `web/` 时在 Dockerfile 内完成 `npm ci` + `npm run build` | + +### CI 自动传入的构建参数 + +| 参数 | 默认 | 说明 | +|------|------|------| +| `IMAGE_PREFIX` | `docker.1panel.live/library/` | 基础镜像前缀;`hub` 表示 Docker Hub | +| `GOPROXY` | `https://goproxy.cn,direct` | 与 workflow / Variable 一致 | +| `GOSUMDB` | `sum.golang.google.cn` | checksum 数据库 | + +buildx 还会注入 `TARGETARCH`、`BUILDPLATFORM` 等,无需在 workflow 里写。 + +### 推荐:Go + Vue 多阶段模板 + +```dockerfile +# syntax=docker/dockerfile:1 +ARG IMAGE_PREFIX= + +# 1) 前端(无 web/ 时可删整个 stage,并去掉 go-builder 里 COPY dist) +FROM --platform=$BUILDPLATFORM ${IMAGE_PREFIX}node:20-alpine AS web-builder +WORKDIR /src/web +COPY web/package.json web/package-lock.json web/.npmrc ./ +RUN npm ci +COPY web/ ./ +RUN npm run build + +# 2) Go 编译 +FROM --platform=$BUILDPLATFORM ${IMAGE_PREFIX}golang:1.25-alpine AS go-builder +ARG TARGETARCH +ARG GOPROXY=https://goproxy.cn,direct +ARG GOSUMDB=sum.golang.google.cn +ENV GOPROXY=${GOPROXY} GOSUMDB=${GOSUMDB} + +WORKDIR /src +COPY go.mod go.sum ./ +RUN --mount=type=cache,target=/go/pkg/mod go mod download + +COPY cmd/ ./cmd/ +COPY internal/ ./internal/ +# 若静态资源嵌入 Go:COPY --from=web-builder /src/web/dist/ ./path/to/static/ + +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + CGO_ENABLED=0 GOOS=linux GOARCH="$TARGETARCH" \ + go build -ldflags="-w -s" -o /app ./cmd/yourapp + +# 3) 运行镜像 +FROM ${IMAGE_PREFIX}alpine:3.20 +RUN apk add --no-cache ca-certificates tzdata +COPY --from=go-builder /app /usr/local/bin/yourapp +ENTRYPOINT ["/usr/local/bin/yourapp"] +``` + +按项目调整:`./cmd/yourapp`、静态资源路径、运行用户、`EXPOSE` / `VOLUME` 等。 + +### 仅 Go(无前端) + +删除 `web-builder` stage;`go-builder` 中不要 `COPY` 前端产物;其余 `GOPROXY` / `TARGETARCH` / `IMAGE_PREFIX` 要求相同。 + +### 前端 npm 源(国内) + +在 `web/.npmrc` 配置 registry,并在 Dockerfile 里与 `package.json` 一并 `COPY`: + +```ini +registry=https://registry.npmmirror.com +``` + +### 本地验证(与 CI 一致) + +```bash +docker buildx build --platform linux/amd64 \ + --build-arg IMAGE_PREFIX=docker.1panel.live/library/ \ + --build-arg GOPROXY=https://goproxy.cn,direct \ + -f Dockerfile -t myapp:test . +``` + +### 常见 Dockerfile 构建错误 + +| 报错 | 原因 | 处理 | +|------|------|------| +| `proxy.golang.org` timeout | 镜像内未设 `ENV GOPROXY` | go-builder 阶段加 `ARG`/`ENV GOPROXY` | +| `node` / Vite 版本不符 | 基础镜像 Node 过旧 | 使用 `node:20-alpine` 及以上 | +| 某架构 build 失败 | 未使用 `TARGETARCH` | `GOARCH="$TARGETARCH"` | +| 拉基础镜像 timeout | Hub 不可达 | `--build-arg IMAGE_PREFIX=docker.1panel.live/library/` 或 1Panel 配镜像加速 | + +## 一次性配置 + +1. **Runner**:部署 act_runner,标签含 `ubuntu-latest`,并挂载 `docker.sock`(见 [act-runner/README.md](act-runner/README.md))。 +2. **Secret**:仓库 Settings → Actions → Secrets,添加 `REGISTRY_TOKEN`(PAT,`write:package` 权限)。 +3. **Variable(推荐)**:若 runner 与 Gitea 同机、或 `gitea.server_url` 为内网地址,必须设置 `REGISTRY=你的公网域名`(如 `git.example.com`,**不要**填 `172.17.0.1:13827`)。 +4. **Gitea Registry**:服务端 `[packages] ENABLED = true`,`ROOT_URL` 正确;穿透场景建议 `PUBLIC_URL_DETECTION = never`(Gitea 1.26+)。 + +`REGISTRY` 未设置时,会从 `GITEA_ROOT_URL` 或 `gitea.server_url` 推断;均为内网地址时 workflow 会提前失败并提示。 + +## 可选 Variables + +仓库 Settings → Actions → Variables(留空则用默认值): + +| 变量 | 默认 | 说明 | +|------|------|------| +| `REGISTRY` | 见下方推断顺序 | **公网** Registry 主机名,如 `git.example.com`(勿用内网 IP:13827) | +| `GITEA_ROOT_URL` | (空) | 当 `gitea.server_url` 为内网时,可设 `https://git.example.com/` | +| `IMAGE_NAME` | 仓库名小写 | 镜像名,非 owner/repo 全路径 | +| `DOCKERFILE` | `Dockerfile` | Dockerfile 路径 | +| `DOCKER_PLATFORMS` | `linux/amd64,linux/arm64` | push 时 buildx 平台 | +| `GO_TEST_SCOPE` | `./...` | `go test` 包路径 | +| `RUN_GO_TEST` | (空,即运行) | 设 `false` 跳过 go test,仅 Docker 构建 | +| `DOCKER_IMAGE_PREFIX` | `1panel` | 基础镜像前缀;可选 `hub` / `daocloud` | +| `GOPROXY` | `https://goproxy.cn,direct` | Go 模块代理 | +| `GOSUMDB` | `sum.golang.google.cn` | Go checksum 数据库 | + +## 触发与镜像 tag + +- **pull_request**:go test(可关)+ 单架构 `docker build` 验证(不推送) +- **push main/master**:go test + 多架构构建并推送 `:latest`、`:sha-xxxxxxx` +- **push tag v\***:额外推送 `:v1.2.3` 等 + +示例(仓库 `rose_cat707/Prism`,Gitea 在 `git.example.com`): + +```text +git.example.com/rose_cat707/prism:latest +git.example.com/rose_cat707/prism:sha-35b3b48 +``` + +## 目录结构 + +```text +.gitea/ +├── README.md # 本文件 +├── workflows/ +│ └── ci.yml # 主工作流 +└── act-runner/ # runner 部署参考(可选) + ├── README.md + ├── config.yaml + ├── docker-compose.yml + └── .env.example +``` + +## 本地验证 Registry + +```bash +host=$(echo "https://你的-gitea-地址/" | sed -e 's|^https://||' -e 's|/.*||') +curl -s -D - "https://${host}/v2/" -o /dev/null | grep -i www-authenticate +docker pull "${host}/owner/image:latest" # 公开 Registry 无需 login +``` + +推送镜像(CI)仍需仓库 Secret `REGISTRY_TOKEN`(`write:package`)。仅拉取公开包不需要登录。 + +`realm` 应指向公网 Gitea 域名,而非 `127.0.0.1`。 + +## 常见 Registry 错误 + +| 报错 | 原因 | 处理 | +|------|------|------| +| `Get "https://172.17.0.1:13827/v2/"` HTTP/HTTPS | Variable `REGISTRY` 或 `gitea.server_url` 为内网地址 | 设 `REGISTRY=git.example.com` | +| token 指向 `127.0.0.1` | Gitea `realm` 配置错误 | `PUBLIC_URL_DETECTION=never` + 正确 `ROOT_URL` | diff --git a/.gitea/act-runner/.env.example b/.gitea/act-runner/.env.example new file mode 100644 index 0000000..06b3c00 --- /dev/null +++ b/.gitea/act-runner/.env.example @@ -0,0 +1,3 @@ +GITEA_INSTANCE_URL=https://git.example.com +GITEA_RUNNER_REGISTRATION_TOKEN=从仓库_Settings_Actions_Runners_复制 +GITEA_RUNNER_NAME=go-vue-ci-runner diff --git a/.gitea/act-runner/README.md b/.gitea/act-runner/README.md new file mode 100644 index 0000000..eb068a4 --- /dev/null +++ b/.gitea/act-runner/README.md @@ -0,0 +1,177 @@ +# act_runner 配置参考 + +工作流 `runs-on: ubuntu-latest`;`docker` job 额外使用 `catthehacker/ubuntu:act-22.04` 容器(含 Docker CLI)。 + +## 构建镜像必须:挂载 Docker Socket + +`docker` job 需要访问宿主机 Docker 引擎。在 **runner 所在机器** 的 `config.yaml` 中配置: + +```yaml +container: + options: -v /var/run/docker.sock:/var/run/docker.sock + valid_volumes: + - /var/run/docker.sock +``` + +推荐 job 镜像(含 Node + Docker CLI): + +```yaml +runner: + labels: + - "ubuntu-latest:docker://catthehacker/ubuntu:act-22.04" + - "ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04" +``` + +修改后 **重启 runner**(例如 `docker restart ` 或重启 Gitea Runner 服务)。 + +## 1Panel 宿主机:配置 Docker 镜像加速(推荐) + +Runner 通过 `docker.sock` 使用宿主机 Docker。在 **1Panel** 中配置加速器后,普通 `docker pull` 会走加速;**buildx 多架构构建**仍建议配合 workflow 内的 `IMAGE_PREFIX`(默认 `docker.1panel.live`)。 + +1. 登录 1Panel → **容器** → **配置** +2. **镜像加速地址** 填入: + ```text + https://docker.1panel.live + ``` +3. 保存并 **重启 Docker** + +验证(在 runner 宿主机): + +```bash +docker info | grep -A5 'Registry Mirrors' +docker pull alpine:3.20 +``` + +等价 `daemon.json`: + +```json +{ + "registry-mirrors": ["https://docker.1panel.live"] +} +``` + +CI 工作流默认 `IMAGE_PREFIX=docker.1panel.live/library/`(buildkit 拉基础镜像)。若 1Panel 加速不可用,可在仓库 Variables 设 `DOCKER_IMAGE_PREFIX=daocloud` 或 `hub`。 + +参考:[1Panel 容器配置文档](https://1panel.cn/docs/user_manual/containers/setting) + +## 验证 + +在 runner 宿主机执行: + +```bash +docker info +ls -l /var/run/docker.sock +``` + +## 从零部署 runner(可选) + +```bash +cd .gitea/act-runner +cp .env.example .env # 填入 Registration Token +docker compose up -d +``` + +## GitHub Actions 镜像(替代 ghfast) + +日志里出现 `git clone 'https://ghfast.top/https://github.com/actions/checkout'` 说明 **runner 宿主机** 的 `config.yaml` 配置了 `github_mirror`,与仓库 workflow 无关。 + +在 runner 的 `config.yaml` 中修改(修改后重启 runner): + +```yaml +runner: + github_mirror: 'https://gitea.com' # 推荐 +``` + +常用替代方案: + +| `github_mirror` 值 | 说明 | +|------------------|------| +| `''`(留空) | 直连 `github.com`,网络可达时最简单 | +| `https://gitea.com` | Gitea 官方 actions 镜像,国内较稳 | +| `https://gitclone.com/github.com` | 第三方 GitHub 克隆镜像 | +| `https://ghfast.top/https://github.com` | 部分环境需代理认证,易报 `Proxy Authentication Required` | + +前提:Gitea `app.ini` 中 `[actions] DEFAULT_ACTIONS_URL = github`(默认)。 + +**不依赖 runner 镜像** 的写法(workflow 内写绝对 URL,仅改写 `github.com` 的请求): + +```yaml +uses: https://gitea.com/actions/checkout@v4 +``` + +本模板 `ci.yml` 已采用此写法。若其他 workflow 仍写 `uses: actions/checkout@v4`,仍需配置 `github_mirror` 或改为绝对 URL。 + +修改 `github_mirror` 后建议清理 runner 缓存目录(如 `/root/.cache/act`),否则旧缓存可能仍指向 ghfast。 + +## 常见错误 + +| 报错 | 原因 | 处理 | +|------|------|------| +| `registry-1.docker.io` i/o timeout | Docker Hub 不可达 | 1Panel 配 `docker.1panel.live`;Variable `DOCKER_IMAGE_PREFIX=1panel` | +| `ghfast.top` Proxy Authentication Required | runner `github_mirror` 指向 ghfast 且需代理认证 | 改 `github_mirror` 或删掉;见上文「GitHub Actions 镜像」 | +| `docker: command not found` | job 容器无 Docker CLI | 工作流已指定 act 镜像;或 runner 改用 catthehacker/ubuntu | +| `Cannot connect to Docker daemon` | 未挂载 docker.sock | 按上文修改 config.yaml 并重启 runner | +| `node not in PATH` | job 镜像无 Node | 标签映射改用 catthehacker/ubuntu:act-22.04 | +| `http: server gave HTTP response to HTTPS client` 且 token 指向 `127.0.0.1` | **Gitea Registry 配置/反代错误** | 见下文「Registry 登录失败」 | + +## Registry 登录失败(127.0.0.1 / HTTP vs HTTPS) + +若 `docker login git.rc707blog.top` 报错类似: + +```text +Get "https://127.0.0.1:xxxxx/v2/token?...": http: server gave HTTP response to HTTPS client +``` + +说明 Gitea 把 **Docker 认证 token 地址** 配成了本机内网地址,CI runner 访问不到。需在 **Gitea 服务器** 修复,而非改 workflow。 + +### 1. 检查 `app.ini` + +```ini +[server] +ROOT_URL = https://git.example.com/ +LOCAL_ROOT_URL = http://127.0.0.1:3000/ +; 内网穿透 / 错误 Host 时(Gitea 1.26+): +; PUBLIC_URL_DETECTION = never + +[packages] +ENABLED = true +``` + +`ROOT_URL` 必须与浏览器访问 Gitea 的 **HTTPS 外网地址** 完全一致(含末尾 `/`)。 + +### 2. 反向代理必须转发 `/v2` 并带上头 + +Container Registry 固定使用根路径 `/v2`。Nginx 示例: + +```nginx +location / { + client_max_body_size 0; + proxy_pass http://127.0.0.1:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; +} +``` + +关键:`X-Forwarded-Proto: https` 和正确的 `Host`(与 Gitea `ROOT_URL` 域名一致)。 + +### 3. 在 runner 宿主机验证(修复后) + +```bash +GITEA_HOST=git.example.com # 改成你的 Gitea 域名 +curl -s -D - "https://${GITEA_HOST}/v2/" -o /dev/null | grep -i www-authenticate +echo "$REGISTRY_TOKEN" | docker login "${GITEA_HOST}" -u 你的用户名 --password-stdin +``` + +应返回 `401 Unauthorized`(正常,表示 registry 可达)且 `docker login` 显示 **Login Succeeded**。 + +参考:[Gitea 反向代理文档](https://docs.gitea.com/administration/reverse-proxies) + +## Gitea Runner v0.6.x(个人 runner) + +1. 找到 runner 的配置文件或环境(安装目录 / docker compose) +2. 确保 runner 进程能访问宿主机 `/var/run/docker.sock` +3. Runners 页标签含 `ubuntu-latest` 且状态 **空闲/在线** + +若使用 Gitea 网页注册的个人 runner(docker 模式),通常需在 runner 启动参数或 `config.yaml` 里加入 socket 挂载,具体路径取决于你的安装方式。 diff --git a/.gitea/act-runner/config.yaml b/.gitea/act-runner/config.yaml new file mode 100644 index 0000000..797596b --- /dev/null +++ b/.gitea/act-runner/config.yaml @@ -0,0 +1,34 @@ +# act_runner 配置(可选参考部署) +# 工作流 runs-on: ubuntu-latest + +log: + level: info + +runner: + file: .runner + capacity: 2 + timeout: 3h + insecure: false + fetch_timeout: 5s + fetch_interval: 2s + # 拉取 uses: actions/checkout@v4 等 GitHub Action 时的镜像(替换 https://github.com) + # 需 Gitea app.ini 中 [actions] DEFAULT_ACTIONS_URL = github + # 留空则直连 github.com;第三方镜像不稳定时可改用 workflow 绝对 URL(见 .gitea/README.md) + # + # github_mirror: '' # 直连 GitHub + # github_mirror: 'https://gitea.com' # 推荐:Gitea 官方 actions 镜像 + # github_mirror: 'https://gitclone.com/github.com' # 第三方 GitHub 克隆镜像 + # github_mirror: 'https://ghfast.top/https://github.com' # 需代理认证时易失败,不推荐 + labels: + - "ubuntu-latest:docker://catthehacker/ubuntu:act-22.04" + - "ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04" + +cache: + enabled: false + +container: + network: bridge + privileged: false + options: -v /var/run/docker.sock:/var/run/docker.sock + valid_volumes: + - /var/run/docker.sock diff --git a/.gitea/act-runner/docker-compose.yml b/.gitea/act-runner/docker-compose.yml new file mode 100644 index 0000000..cd192f1 --- /dev/null +++ b/.gitea/act-runner/docker-compose.yml @@ -0,0 +1,22 @@ +# Gitea act_runner — 可选参考部署(标签 default,与工作流一致) +# +# 若已在 Gitea 注册个人/仓库 runner 且标签为 default,无需使用本目录。 + +services: + act-runner: + image: docker.io/gitea/act_runner:0.2.12 + container_name: prism-act-runner + restart: unless-stopped + environment: + CONFIG_FILE: /config.yaml + GITEA_INSTANCE_URL: ${GITEA_INSTANCE_URL:-https://git.rc707blog.top} + GITEA_RUNNER_REGISTRATION_TOKEN: ${GITEA_RUNNER_REGISTRATION_TOKEN} + GITEA_RUNNER_NAME: ${GITEA_RUNNER_NAME:-prism-ci-runner} + volumes: + - ./config.yaml:/config.yaml:ro + - act-runner-data:/data + - /var/run/docker.sock:/var/run/docker.sock + working_dir: /data + +volumes: + act-runner-data: diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..1500876 --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,236 @@ +# 通用 Go + Vue 项目 CI(Gitea Actions) +# +# 单 job:可选 go test + Docker 多架构构建/推送 +# 约定:go.mod、Dockerfile(详见 .gitea/README.md「Dockerfile 要求」);前端(可选)在 web/ +# +# 前置:act_runner(ubuntu-latest + docker.sock)、Secret REGISTRY_TOKEN +# Variables:REGISTRY、IMAGE_NAME、DOCKER_IMAGE_PREFIX、RUN_GO_TEST 等 + +name: CI + +on: + push: + branches: [main, master] + tags: ['v*'] + pull_request: + +env: + REGISTRY: ${{ vars.REGISTRY }} + GITEA_ROOT_URL: ${{ vars.GITEA_ROOT_URL }} + IMAGE_NAME: ${{ vars.IMAGE_NAME }} + DOCKERFILE: ${{ vars.DOCKERFILE }} + DOCKER_PLATFORMS: ${{ vars.DOCKER_PLATFORMS }} + GO_TEST_SCOPE: ${{ vars.GO_TEST_SCOPE }} + RUN_GO_TEST: ${{ vars.RUN_GO_TEST }} + DOCKER_IMAGE_PREFIX: ${{ vars.DOCKER_IMAGE_PREFIX }} + GOPROXY: ${{ vars.GOPROXY }} + GOSUMDB: ${{ vars.GOSUMDB }} + +jobs: + docker: + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-22.04 + steps: + - name: Checkout + uses: https://gitea.com/actions/checkout@v4 + + - name: Run Go tests + if: vars.RUN_GO_TEST != 'false' + shell: bash + run: | + set -euo pipefail + export GOPROXY="${GOPROXY:-https://goproxy.cn,direct}" + export GOSUMDB="${GOSUMDB:-sum.golang.google.cn}" + + GO_VERSION=$(grep '^go ' go.mod | awk '{print $2}') + ARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/') + TAR="go${GO_VERSION}.linux-${ARCH}.tar.gz" + + if ! command -v go >/dev/null 2>&1 || ! go version | grep -q "go${GO_VERSION} "; then + downloaded=0 + for url in \ + "https://mirrors.aliyun.com/golang/${TAR}" \ + "https://golang.google.cn/dl/${TAR}" \ + "https://go.dev/dl/${TAR}"; do + echo "trying ${url}" + if curl -fsSL --connect-timeout 20 --retry 3 --retry-delay 5 --max-time 600 \ + "$url" -o /tmp/go.tgz; then + downloaded=1 + break + fi + done + [ "$downloaded" -eq 1 ] || { echo "failed to download Go ${GO_VERSION}" >&2; exit 1; } + rm -rf /usr/local/go + tar -C /usr/local -xzf /tmp/go.tgz + export PATH="/usr/local/go/bin:${PATH}" + fi + go version + go test "${GO_TEST_SCOPE:-./...}" + + - name: Setup Docker + run: | + set -eux + if ! command -v docker >/dev/null 2>&1; then + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y docker.io + fi + if [ ! -S /var/run/docker.sock ]; then + echo "ERROR: /var/run/docker.sock 未挂载到 job 容器。" >&2 + echo "请在 act_runner config.yaml 中配置:" >&2 + echo " container.options: -v /var/run/docker.sock:/var/run/docker.sock" >&2 + echo " container.valid_volumes: [/var/run/docker.sock]" >&2 + exit 1 + fi + docker info + + - name: Resolve registry + id: reg + if: gitea.event_name == 'push' + shell: bash + env: + GITEA_SERVER_URL: ${{ gitea.server_url }} + run: | + set -euo pipefail + + url_to_host() { + echo "$1" | sed -e 's|^https://||' -e 's|^http://||' -e 's|/.*||' + } + + is_internal_host() { + local host="${1%%:*}" + case "$host" in + localhost|127.*|10.*|192.168.*) return 0 ;; + 172.*) + local second + second=$(echo "$host" | cut -d. -f2) + [ "$second" -ge 16 ] && [ "$second" -le 31 ] + return + ;; + *) return 1 ;; + esac + } + + registry="${REGISTRY:-}" + if [ -z "$registry" ] && [ -n "${GITEA_ROOT_URL:-}" ]; then + registry=$(url_to_host "${GITEA_ROOT_URL}") + fi + if [ -z "$registry" ]; then + registry=$(url_to_host "${GITEA_SERVER_URL}") + fi + + if is_internal_host "$registry"; then + echo "ERROR: Registry 主机 '${registry}' 是内网地址。" >&2 + echo "请设置 Variable REGISTRY=公网 Gitea 域名(如 git.example.com)。" >&2 + exit 1 + fi + + echo "registry host: ${registry}" + + auth_header="" + if auth_header=$(curl -fsS -D - "https://${registry}/v2/" -o /dev/null 2>&1 | grep -i '^www-authenticate:'); then + if echo "$auth_header" | grep -qiE '127\.0\.0\.1|172\.(1[6-9]|2[0-9]|3[01])\.|localhost|:13827'; then + echo "ERROR: Registry token realm 指向内网地址:${auth_header}" >&2 + exit 1 + fi + fi + + echo "host=${registry}" >> "${GITHUB_OUTPUT}" + + - name: Log in to Container Registry + if: gitea.event_name == 'push' + shell: bash + run: | + set -euo pipefail + echo "${{ secrets.REGISTRY_TOKEN }}" | \ + docker login "${{ steps.reg.outputs.host }}" -u "${{ gitea.actor }}" --password-stdin + + - name: Build image + shell: bash + env: + GITEA_SHA: ${{ gitea.sha }} + GITEA_REF: ${{ gitea.ref }} + GITEA_REPOSITORY: ${{ gitea.repository }} + GITEA_REPOSITORY_OWNER: ${{ gitea.repository_owner }} + GITEA_EVENT_NAME: ${{ gitea.event_name }} + REGISTRY_HOST: ${{ steps.reg.outputs.host }} + run: | + set -euo pipefail + + dockerfile="${DOCKERFILE:-Dockerfile}" + + if [ "${DOCKER_IMAGE_PREFIX:-}" = "hub" ] || [ "${DOCKER_IMAGE_PREFIX:-}" = "docker.io" ]; then + image_prefix="" + elif [ -z "${DOCKER_IMAGE_PREFIX:-}" ] || [ "${DOCKER_IMAGE_PREFIX}" = "1panel" ]; then + image_prefix="docker.1panel.live/library/" + elif [ "${DOCKER_IMAGE_PREFIX}" = "daocloud" ]; then + image_prefix="docker.m.daocloud.io/library/" + else + image_prefix="${DOCKER_IMAGE_PREFIX}" + [[ "${image_prefix}" == */ ]] || image_prefix="${image_prefix}/" + fi + echo "using IMAGE_PREFIX=${image_prefix:-}" + build_args=( + --build-arg "IMAGE_PREFIX=${image_prefix}" + --build-arg "GOPROXY=${GOPROXY:-https://goproxy.cn,direct}" + --build-arg "GOSUMDB=${GOSUMDB:-sum.golang.google.cn}" + ) + + builder_id="gitea-buildx-${GITEA_REPOSITORY//\//-}" + + if [ "${GITEA_EVENT_NAME}" = "push" ]; then + install_binfmt() { + for img in \ + "docker.1panel.live/tonistiigi/binfmt:latest" \ + "docker.m.daocloud.io/tonistiigi/binfmt:latest" \ + "tonistiigi/binfmt:latest"; do + echo "trying binfmt image: ${img}" + if docker run --privileged --rm "${img}" --install all; then + return 0 + fi + done + return 1 + } + install_binfmt || true + + registry="${REGISTRY_HOST}" + image_name="${IMAGE_NAME:-$(echo "${GITEA_REPOSITORY##*/}" | tr '[:upper:]' '[:lower:]')}" + platforms="${DOCKER_PLATFORMS:-linux/amd64,linux/arm64}" + image="${registry}/${GITEA_REPOSITORY_OWNER}/${image_name}" + tags="${image}:sha-${GITEA_SHA:0:7}" + case "${GITEA_REF}" in + refs/heads/main|refs/heads/master) + tags="${tags},${image}:latest" + ;; + refs/tags/v*) + tags="${tags},${image}:${GITEA_REF#refs/tags/}" + ;; + esac + + docker buildx create --name "${builder_id}" --use 2>/dev/null || docker buildx use "${builder_id}" + docker buildx inspect --bootstrap + + tag_args=() + IFS=',' read -r -a tag_list <<< "$tags" + for t in "${tag_list[@]}"; do + tag_args+=(-t "$t") + done + + docker buildx build \ + --platform "${platforms}" \ + -f "${dockerfile}" \ + "${build_args[@]}" \ + "${tag_args[@]}" \ + --push \ + . + else + # PR:仅单架构构建验证 Dockerfile,不推送 + docker buildx create --name "${builder_id}" --use 2>/dev/null || docker buildx use "${builder_id}" + docker buildx inspect --bootstrap + docker buildx build \ + --platform linux/amd64 \ + -f "${dockerfile}" \ + "${build_args[@]}" \ + --load \ + . + fi diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f6a427b --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +# Binaries +/luminary +/luminary-recover +*.exe +*.exe~ +*.dll +*.so +*.dylib +*.test + +# Go +go.work +go.work.sum +*.out +coverage/ +*.coverprofile + +# Luminary runtime data +data/ +/data/ +*.db + +# Docker local prebuilt +.docker-bin/ + +# Frontend build output (keep placeholder for go:embed in CI / go test) +web/dist/* +!web/dist/index.html +web/node_modules/ + +# Environment +.env +.env.* +!.env.example + +# IDE / editor +.idea/ +.vscode/ +.cursor/ + +# OS +.DS_Store +Thumbs.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b6d3d64 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,71 @@ +# Luminary AI Gateway(Go + Vue 管理台) +# +# 构建: +# docker build -t luminary:latest . +# +# 运行: +# docker run -d --name luminary \ +# -p 8293:8293 \ +# -v luminary-data:/data \ +# luminary:latest +# +# 生产镜像由 Gitea Actions 构建,见 README 与 .gitea/README.md + +# syntax=docker/dockerfile:1 + +# 基础镜像默认 Docker Hub;CI 默认 1Panel 加速(docker.1panel.live),本地可传: +# docker build --build-arg IMAGE_PREFIX=docker.1panel.live/library/ -t luminary:latest . +ARG IMAGE_PREFIX= + +FROM --platform=$BUILDPLATFORM ${IMAGE_PREFIX}node:20-alpine AS web-builder + +WORKDIR /src/web +COPY web/package.json web/package-lock.json web/.npmrc ./ +RUN npm ci +COPY web/src ./src +COPY web/public ./public +COPY web/index.html web/tsconfig.json web/vite.config.ts ./ +RUN npm run build + +FROM --platform=$BUILDPLATFORM ${IMAGE_PREFIX}golang:1.25-alpine AS go-builder + +ARG TARGETARCH=amd64 +ARG GOPROXY=https://goproxy.cn,direct +ARG GOSUMDB=sum.golang.google.cn +ENV CGO_ENABLED=0 GOPROXY=${GOPROXY} GOSUMDB=${GOSUMDB} + +WORKDIR /src +COPY go.mod go.sum ./ +RUN --mount=type=cache,target=/go/pkg/mod \ + go mod download + +COPY cmd/ ./cmd/ +COPY internal/ ./internal/ +COPY web/static_embed.go ./web/ +COPY --from=web-builder /src/web/dist ./web/dist + +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + GOOS=linux GOARCH="$TARGETARCH" \ + go build -trimpath -ldflags="-w -s" -o /luminary ./cmd/luminary \ + && go build -trimpath -ldflags="-w -s" -o /luminary-recover ./cmd/luminary-recover + +ARG IMAGE_PREFIX= +FROM ${IMAGE_PREFIX}alpine:3.20 + +ARG APK_MIRROR=mirrors.aliyun.com +RUN sed -i "s/dl-cdn.alpinelinux.org/${APK_MIRROR}/g" /etc/apk/repositories \ + && apk add --no-cache ca-certificates tzdata tini + +ENV LUMINARY_DATA=/data \ + LUMINARY_ADDR=:8293 + +COPY --from=go-builder /luminary /usr/local/bin/luminary +COPY --from=go-builder /luminary-recover /usr/local/bin/luminary-recover +COPY docker/entrypoint.sh /entrypoint.sh +COPY scripts/luminary-recover.sh /usr/local/bin/luminary-recover.sh +RUN chmod +x /entrypoint.sh /usr/local/bin/luminary-recover.sh + +VOLUME ["/data"] +EXPOSE 8293 +ENTRYPOINT ["/sbin/tini", "--", "/entrypoint.sh"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..22f4732 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Luminary Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..795bca8 --- /dev/null +++ b/Makefile @@ -0,0 +1,63 @@ +.PHONY: dev build build-web run tidy test recover docker-build docker-push docker-push-prebuilt + +export GOPROXY ?= https://goproxy.cn,direct +export GOSUMDB ?= sum.golang.google.cn +export GOPRIVATE ?= git.rc707blog.top +export IMAGE_PREFIX ?= docker.1panel.live/library/ +export APK_MIRROR ?= mirrors.aliyun.com +export DOCKER_PLATFORM ?= linux/amd64 +export LUMINARY_IMAGE ?= registry.rc707blog.top/rose_cat707/luminary:latest + +dev: + @echo "Start backend: go run ./cmd/luminary" + @echo "Start frontend: cd web && npm run dev" + +build-web: + cd web && npm install --registry=https://registry.npmmirror.com && npm run build + +build: build-web + go build -o luminary ./cmd/luminary + +recover: + go build -o luminary-recover ./cmd/luminary-recover + +run: build + ./luminary + +tidy: + go mod tidy + +test: + go test ./... + +docker-build: + docker buildx build --platform $(DOCKER_PLATFORM) \ + -t $(LUMINARY_IMAGE) \ + --build-arg IMAGE_PREFIX=$(IMAGE_PREFIX) \ + --build-arg APK_MIRROR=$(APK_MIRROR) \ + --build-arg GOPROXY=$(GOPROXY) \ + --build-arg GOSUMDB=$(GOSUMDB) \ + --load \ + . + +docker-push: + docker buildx build --platform $(DOCKER_PLATFORM) \ + -t $(LUMINARY_IMAGE) \ + --build-arg IMAGE_PREFIX=$(IMAGE_PREFIX) \ + --build-arg APK_MIRROR=$(APK_MIRROR) \ + --build-arg GOPROXY=$(GOPROXY) \ + --build-arg GOSUMDB=$(GOSUMDB) \ + --push \ + . + +docker-push-prebuilt: build-web + mkdir -p .docker-bin + GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o .docker-bin/luminary ./cmd/luminary + GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o .docker-bin/luminary-recover ./cmd/luminary-recover + docker buildx build --platform $(DOCKER_PLATFORM) \ + -f docker/Dockerfile.prebuilt \ + -t $(LUMINARY_IMAGE) \ + --build-arg IMAGE_PREFIX=$(IMAGE_PREFIX) \ + --build-arg APK_MIRROR=$(APK_MIRROR) \ + --push \ + . diff --git a/README.md b/README.md new file mode 100644 index 0000000..103de80 --- /dev/null +++ b/README.md @@ -0,0 +1,357 @@ +# Luminary + +OpenAI 兼容 AI 网关,带 Web 管理台。支持多 Provider 出口、入口密钥治理、看板监控与安全管控。控制面自研(Go + SQLite),数据面提供 OpenAI 兼容 `/v1/*` 推理 API。 + +所有运行参数在 Web 管理台完成配置,**无需手写配置文件**。管理台支持**简体中文、英文**两种界面语言,可在顶栏随时切换。 + +## 界面预览 + +以下为 Web 管理台主要页面(点击可查看原图)。 + +| 登录 | 看板监控 | +|:---:|:---:| +| ![登录页](docs/image/登陆页.png) | ![看板监控](docs/image/看板监控.png) | +| 默认密码 `admin123`,首次登录后请修改 | Provider 健康、24h 请求/Token 与入口用量排行 | + +| 出口管理 | 入口管理 | +|:---:|:---:| +| ![出口管理](docs/image/出口管理.png) | ![入口管理](docs/image/入口管理.png) | +| 多 Provider、多 Key 负载均衡与故障转移 | 入口密钥(`sk-lum-*`)、路由规则与预算限流 | + +| 请求日志 | IP 规则 | +|:---:|:---:| +| ![请求日志](docs/image/请求日志.png) | ![IP 规则](docs/image/IP规则.png) | +| 全量请求记录与成本估算 | 精确 / CIDR 白黑名单(admin / proxy 范围) | + +| 系统设置 | | +|:---:|:---:| +| ![系统设置](docs/image/系统设置.png) | | +| 加密密钥、会话、登录限流、健康检查与重试策略 | | + +## 功能概览 + +| 模块 | 说明 | +|------|------| +| 出口管理 | OpenAI / Anthropic / Azure OpenAI / OpenRouter / Ollama / Custom,多 Key 加权负载均衡与故障转移 | +| 入口管理 | OpenAI 兼容 API,入口密钥(`sk-lum-*`),Virtual Key 路由、预算与 RPM/TPM 限流 | +| 看板监控 | Provider 健康检查、24h 请求/Token 统计、入口用量排行 | +| 请求日志 | 全量请求记录、按模型定价的成本估算 | +| IP 安全 | 管理员与推理入口分范围的白名单 / 黑名单(精确、CIDR) | +| 系统设置 | 加密密钥、信任代理、会话、登录限流、用量刷盘、网关重试 | + +## 架构 + +``` +客户端 SDK / curl + → /v1/*(入口密钥 sk-lum-*) + → Luminary Gateway(路由、限流、故障转移) + → Provider 出口(多 Key 加权负载均衡) + ↑ + 管理台 REST API + Vue UI (:8293) + ↓ + SQLite + 内存缓存 +``` + +## 快速开始(开发) + +### 依赖 + +- Go 1.25+(见 `go.mod`) +- Node.js 20+(仅开发/构建前端) + +依赖镜像(已写入 `Makefile`、`web/.npmrc`,国内网络友好): + +- Go:`GOPROXY=https://goproxy.cn,direct` +- npm:`registry=https://registry.npmmirror.com` + +海外用户可将 `GOPROXY` 改为 `https://proxy.golang.org,direct`,npm 使用默认 registry 即可。 + +### 启动 + +```bash +cd web && npm install # 安装前端依赖 + +# 终端 1:后端 +go run ./cmd/luminary + +# 终端 2:前端(Vite 代理 /api、/v1 → :8293) +cd web && npm run dev +``` + +访问 http://localhost:5173 ,默认账号 `admin` / `admin123`(**首次登录后请立即修改**)。 + +```bash +go test ./... # 运行单元测试 +make build # 构建 luminary 二进制(含嵌入前端) +``` + +## 部署 + +镜像由 Gitea Actions 自动构建并发布到 Container Registry,**无需自行编译**。直接拉取运行即可。 + +```bash +docker pull git.rc707blog.top/rose_cat707/luminary:latest +``` + +| Tag | 说明 | +|-----|------| +| `latest` | `main` / `master` 分支最新构建 | +| `sha-xxxxxxx` | 对应 commit 短 SHA | +| `v1.2.3` | 推送 Git tag `v1.2.3` 时发布 | + +### docker run + +```bash +docker pull git.rc707blog.top/rose_cat707/luminary:latest + +docker run -d --name luminary \ + --restart unless-stopped \ + -p 8293:8293 \ + -v luminary-data:/data \ + git.rc707blog.top/rose_cat707/luminary:latest +``` + +或使用项目内 `docker compose up -d`(通过环境变量 `LUMINARY_IMAGE` 指定镜像)。 + +### 本地自行构建 + +```bash +make docker-build +# 或 +docker build \ + --build-arg IMAGE_PREFIX=docker.1panel.live/library/ \ + --build-arg GOPROXY=https://goproxy.cn,direct \ + -t luminary:local . +``` + +**端口(默认)** + +| 服务 | 端口 | 说明 | +|------|------|------| +| 管理 API / Web UI / 推理入口 | 8293 | 管理台与 `/v1/*` 共用同一监听地址 | + +监听地址可通过启动参数 `-addr` 或环境变量 `LUMINARY_ADDR` 修改。 + +## 数据目录 + +数据默认存储在 `./data/luminary.db`(SQLite),Docker 部署时挂载为 `/data`: + +``` +data/ +└── luminary.db # Provider、入口密钥、规则、日志、系统设置 +``` + +首次启动自动创建数据库与默认系统设置(含随机加密密钥)。默认管理账号 `admin` / `admin123`(仅当数据库中尚无管理员时创建)。 + +## 入口 API(推理) + +客户端使用在管理台「入口管理」创建的**入口密钥**(`sk-lum-*`)调用,与 OpenAI SDK 兼容。 + +**鉴权** + +```http +Authorization: Bearer sk-lum- +``` + +**Base URL**:`http://:8293/v1` + +| 方法 | 路径 | 说明 | 状态 | +|------|------|------|------| +| `GET` | `/v1/models` | 列出当前入口密钥可用的模型 | 已支持 | +| `POST` | `/v1/chat/completions` | 对话补全;`stream: true` 时返回 SSE 流式 | 已支持 | +| `POST` | `/v1/responses` | OpenAI Responses API;`stream: true` 时返回 SSE 流式 | 已支持 | +| `POST` | `/v1/completions` | 文本补全(Legacy) | 已支持 | +| `POST` | `/v1/embeddings` | 向量嵌入 | 已支持 | +| `POST` | `/v1/rerank` | Cohere 兼容重排序 | 已支持 | +| `POST` | `/v1/audio/speech` | 语音合成 | 预留 | +| `POST` | `/v1/audio/transcriptions` | 语音转写 | 预留 | +| `POST` | `/v1/images/generations` | 图像生成 | 预留 | + +> 实际可访问的接口取决于上游 Provider 在「出口管理」中启用的 endpoint;未启用的接口网关不会转发。 +> +> **Responses 适配**:若出口仅启用 `chat_completion` 而未启用 `responses`,网关会将 `/v1/responses` 自动转换为 `/v1/chat/completions` 请求,并将响应转回 Responses API 格式(含流式)。 + +**示例:对话补全** + +```bash +curl http://localhost:8293/v1/chat/completions \ + -H "Authorization: Bearer sk-lum-..." \ + -H "Content-Type: application/json" \ + -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Hello"}]}' +``` + +**示例:流式对话** + +```bash +curl http://localhost:8293/v1/chat/completions \ + -H "Authorization: Bearer sk-lum-..." \ + -H "Content-Type: application/json" \ + -d '{"model":"gpt-4o-mini","stream":true,"messages":[{"role":"user","content":"Hello"}]}' +``` + +**示例:Embeddings** + +```bash +curl http://localhost:8293/v1/embeddings \ + -H "Authorization: Bearer sk-lum-..." \ + -H "Content-Type: application/json" \ + -d '{"model":"text-embedding-3-small","input":"hello"}' +``` + +**示例:Rerank(Cohere 兼容)** + +```bash +curl http://localhost:8293/v1/rerank \ + -H "Authorization: Bearer sk-lum-..." \ + -H "Content-Type: application/json" \ + -d '{"model":"bge-reranker-v2-m3","query":"What is the capital of France?","documents":["Paris is the capital of France.","Berlin is in Germany."],"top_n":2}' +``` + +**示例:列出模型** + +```bash +curl http://localhost:8293/v1/models \ + -H "Authorization: Bearer sk-lum-..." +``` + +入口密钥的 Provider / Model 白名单、预算、RPM/TPM 限流与路由规则均在管理台「入口管理」配置;白名单为空表示不限制。 + +## 使用攻略(简要) + +### 1. 首次登录 + +1. 打开 `http://<主机>:8293` +2. 默认账号 `admin` / `admin123`,登录后进入「系统设置」修改密码 +3. 顶栏切换界面语言(中文 / English) + +### 2. 配置出口 + +1. 「出口管理」→ 新建 Provider,选择类型并填写 Base URL +2. 添加 API Key,配置加权与故障转移 +3. 启用所需 endpoint 分类(语言模型 / 向量嵌入 / 重排序 / 图像等) + +### 3. 配置入口 + +1. 「入口管理」→ 新建入口密钥(`sk-lum-*`) +2. 配置 Provider / Model 白名单、预算与 RPM/TPM 限流 +3. 按需设置 Virtual Key 路由规则 + +### 4. IP 安全 + +1. 「IP 规则」添加白名单 / 黑名单(支持 CIDR) +2. 规则可按 `admin`(管理台)或 `proxy`(推理入口)范围生效 + +### 5. 日常运维 + +| 操作 | 位置 | +|------|------| +| 查看流量与健康 | 看板监控 | +| 管理 Provider 与 Key | 出口管理 | +| 管理入口密钥 | 入口管理 | +| 查看请求与成本 | 请求日志 | +| 修改运行参数 | 系统设置 | + +## 系统设置 + +所有运行参数在管理台 **系统设置** 页面维护,存入 SQLite。 + +| 设置项 | 说明 | +|------|------| +| 加密密钥 | Provider API Key 加密密钥(首次启动自动生成) | +| 信任代理 | 信任的反向代理 IP/CIDR;仅此时才读取 `X-Forwarded-For` | +| 会话 / 登录限制 | 管理员 Session 有效期、登录尝试次数与锁定时长 | +| 用量刷盘 / 健康检查 | 后台任务间隔 | +| 网关重试 | 上游故障时的重试次数与退避 | + +启动参数(非阻塞,仅决定进程如何监听与数据存放位置): + +| 参数 / 环境变量 | 说明 | 默认 | +|------|------|------| +| `-data-dir` / `LUMINARY_DATA` | SQLite 数据目录 | `./data` | +| `-addr` / `LUMINARY_ADDR` | HTTP 监听地址 | `:8293` | + +可选环境变量 `LUMINARY_ENCRYPTION_KEY`:仅在首次初始化系统设置时写入加密密钥(一般无需设置,管理台可改)。 + +## 应急恢复(容器内) + +当 IP 白名单或登录冷却导致无法进入管理台时,可在容器内执行恢复工具(已内置在镜像中): + +```bash +# 一键:重置密码为 admin123、清空 IP 规则与会话,并重启进程(清除内存中的登录冷却) +docker exec luminary luminary-recover.sh --all + +# 指定新密码 +docker exec luminary luminary-recover.sh --all --password 'your-new-password' + +# 分项执行(不重启) +docker exec luminary luminary-recover.sh \ + --reset-password --clear-ip --clear-sessions --password 'your-new-password' + +# 仅清除登录冷却(需重启进程;登录冷却存在内存中) +docker exec luminary luminary-recover.sh --restart +``` + +本地非容器环境: + +```bash +chmod +x scripts/luminary-recover.sh +./scripts/luminary-recover.sh --all +# 或 +go run ./cmd/luminary-recover --all +``` + +| 参数 | 说明 | +|------|------| +| `--all` | 重置密码 + 清空 IP 规则 + 清空会话 + 重启进程 | +| `--reset-password` | 重置管理员密码 | +| `--clear-ip` | 删除全部 IP 规则 | +| `--clear-sessions` | 删除全部管理员 Session | +| `--restart` | 向 PID 1 发送 SIGTERM,由容器重启策略拉起新进程 | +| `--password` | 新密码(默认 `admin123`) | +| `--username` | 管理员用户名(默认 `admin`) | +| `-data-dir` / `LUMINARY_DATA` | 数据目录(默认 `./data`,容器内为 `/data`) | + +## 命令行 + +| 命令 | 说明 | +|------|------| +| `luminary` | 启动网关(默认 `-data-dir ./data`、`-addr :8293`) | +| `luminary-recover` | 应急恢复 CLI(容器内 `luminary-recover.sh` 封装) | + +## 项目结构 + +``` +cmd/luminary/ # 主服务入口 +cmd/luminary-recover/ # 应急恢复 CLI +internal/ + gateway/ # 路由、故障转移、健康检查 + handler/ # 管理 API、推理代理、静态资源 + provider/ # 各 Provider 客户端与适配 + store/ # SQLite 与内存缓存 + auth/ # 密码、登录限流 + middleware/ # IP 过滤、客户端 IP + monitor/ # 监控统计 + pricing/ # 成本估算 +web/ # Vue 3 管理台 + src/i18n/ # 多语言资源 + src/views/ # 页面 +docs/ + image/ # README 界面截图 + UI-DESIGN-SYSTEM.md +.gitea/workflows/ # Gitea Actions CI +``` + +## CI / 镜像发布 + +推送 `main` / `master` 或 tag `v*` 时,Gitea Actions 构建多架构镜像并推送到 Registry。工作流与 Dockerfile 约定见 [.gitea/README.md](.gitea/README.md);act_runner 部署参考见 [.gitea/act-runner/](.gitea/act-runner/)。 + +**一次性配置**(仓库 Settings → Actions): + +| 类型 | 名称 | 说明 | +|------|------|------| +| Secret | `REGISTRY_TOKEN` | Gitea PAT,需 `write:package` 权限 | +| Variable | `REGISTRY` | 公网 Gitea 域名,如 `git.rc707blog.top` | + +## 许可 + +[Luminary 采用 MIT License](LICENSE). diff --git a/cmd/luminary-recover/main.go b/cmd/luminary-recover/main.go new file mode 100644 index 0000000..8969f6e --- /dev/null +++ b/cmd/luminary-recover/main.go @@ -0,0 +1,156 @@ +// luminary-recover: emergency recovery CLI (reset password, clear IP rules, restart). +// Intended for docker exec when admin login is locked out. +package main + +import ( + "flag" + "fmt" + "os" + "path/filepath" + "syscall" + "time" + + "github.com/glebarez/sqlite" + "github.com/rose_cat707/luminary/internal/auth" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/settings" + "gorm.io/gorm" + "gorm.io/gorm/logger" +) + +func main() { + os.Exit(run()) +} + +func run() int { + dataDir := flag.String("data-dir", envOr("LUMINARY_DATA", "./data"), "directory containing luminary.db") + deprecatedConfig := flag.String("config", "", "deprecated: ignored; use -data-dir / LUMINARY_DATA") + username := flag.String("username", "", "admin username (default: admin)") + password := flag.String("password", "", "new admin password (default: admin123)") + doAll := flag.Bool("all", false, "reset password, clear IP rules and sessions, then restart") + doPassword := flag.Bool("reset-password", false, "reset admin password") + doIP := flag.Bool("clear-ip", false, "delete all IP rules") + doSessions := flag.Bool("clear-sessions", false, "delete all admin sessions") + doRestart := flag.Bool("restart", false, "send SIGTERM to PID 1 to restart server (clears login cooldown)") + flag.Parse() + if *deprecatedConfig != "" { + fmt.Fprintln(os.Stderr, "warning: -config is deprecated and ignored; use -data-dir / LUMINARY_DATA") + } + + if !*doAll && !*doPassword && !*doIP && !*doSessions && !*doRestart { + fmt.Fprintln(os.Stderr, "usage: luminary-recover --all [--password NEW] [--restart]") + fmt.Fprintln(os.Stderr, " luminary-recover --reset-password --clear-ip --clear-sessions [--restart]") + flag.PrintDefaults() + return 2 + } + + user := *username + pass := *password + if user == "" || pass == "" { + legacyUser, legacyPass := settings.LegacyAdminCredentials() + if user == "" { + user = legacyUser + } + if pass == "" { + pass = legacyPass + } + } + + if *doAll { + *doPassword = true + *doIP = true + *doSessions = true + *doRestart = true + } + + dbPath := filepath.Join(*dataDir, "luminary.db") + db, err := openDB(dbPath) + if err != nil { + fmt.Fprintf(os.Stderr, "open database: %v\n", err) + return 1 + } + + if *doPassword { + if pass == "" { + fmt.Fprintln(os.Stderr, "password is required (use --password)") + return 1 + } + if err := resetPassword(db, user, pass); err != nil { + fmt.Fprintf(os.Stderr, "reset password: %v\n", err) + return 1 + } + fmt.Printf("admin password reset for user %q\n", user) + } + + if *doIP { + res := db.Exec("DELETE FROM ip_rules") + if res.Error != nil { + fmt.Fprintf(os.Stderr, "clear IP rules: %v\n", res.Error) + return 1 + } + fmt.Printf("cleared %d IP rule(s)\n", res.RowsAffected) + } + + if *doSessions { + res := db.Exec("DELETE FROM admin_sessions") + if res.Error != nil { + fmt.Fprintf(os.Stderr, "clear sessions: %v\n", res.Error) + return 1 + } + fmt.Printf("cleared %d admin session(s)\n", res.RowsAffected) + } + + if *doRestart { + fmt.Println("sending SIGTERM to PID 1 (restart server to clear in-memory login cooldown)...") + if err := syscall.Kill(1, syscall.SIGTERM); err != nil { + fmt.Fprintf(os.Stderr, "restart: %v (you may need to restart the container manually)\n", err) + return 1 + } + } + + fmt.Println("done") + return 0 +} + +func openDB(path string) (*gorm.DB, error) { + dsn := path + "?_pragma=journal_mode(WAL)&_pragma=busy_timeout(5000)" + db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{ + Logger: logger.Default.LogMode(logger.Silent), + }) + if err != nil { + return nil, err + } + sqlDB, err := db.DB() + if err != nil { + return nil, err + } + sqlDB.SetMaxOpenConns(1) + return db, nil +} + +func resetPassword(db *gorm.DB, username, password string) error { + hash, err := auth.HashPassword(password) + if err != nil { + return err + } + var user model.AdminUser + err = db.Where("username = ?", username).First(&user).Error + if err == gorm.ErrRecordNotFound { + return db.Create(&model.AdminUser{ + Username: username, + PasswordHash: hash, + CreatedAt: time.Now(), + }).Error + } + if err != nil { + return err + } + return db.Model(&user).Update("password_hash", hash).Error +} + +func envOr(key, fallback string) string { + if v := os.Getenv(key); v != "" { + return v + } + return fallback +} diff --git a/cmd/luminary/main.go b/cmd/luminary/main.go new file mode 100644 index 0000000..4ff4c1f --- /dev/null +++ b/cmd/luminary/main.go @@ -0,0 +1,129 @@ +package main + +import ( + "flag" + "log" + "os" + "os/signal" + "path/filepath" + "strings" + "syscall" + + "github.com/gin-gonic/gin" + webembed "github.com/rose_cat707/luminary/web" + "github.com/rose_cat707/luminary/internal/gateway" + "github.com/rose_cat707/luminary/internal/handler/admin" + "github.com/rose_cat707/luminary/internal/handler/files" + "github.com/rose_cat707/luminary/internal/handler/proxy" + "github.com/rose_cat707/luminary/internal/handler/replicate" + "github.com/rose_cat707/luminary/internal/handler/static" + "github.com/rose_cat707/luminary/internal/middleware" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/monitor" + "github.com/rose_cat707/luminary/internal/prediction" + "github.com/rose_cat707/luminary/internal/settings" + "github.com/rose_cat707/luminary/internal/storage/imagestore" + "github.com/rose_cat707/luminary/internal/store/cache" + sqlitestore "github.com/rose_cat707/luminary/internal/store/sqlite" +) + +func main() { + dataDir := flag.String("data-dir", envOr("LUMINARY_DATA", "./data"), "directory for SQLite database") + addr := flag.String("addr", envOr("LUMINARY_ADDR", ":8293"), "HTTP listen address") + deprecatedConfig := flag.String("config", "", "deprecated: ignored; settings are stored in the database") + flag.Parse() + if *deprecatedConfig != "" { + log.Printf("warning: -config is deprecated and ignored; use -data-dir / LUMINARY_DATA and admin UI settings") + } + + if err := os.MkdirAll(*dataDir, 0o755); err != nil { + log.Fatalf("data dir: %v", err) + } + dbPath := filepath.Join(*dataDir, "luminary.db") + + db, err := sqlitestore.New(dbPath) + if err != nil { + log.Fatalf("database: %v", err) + } + + rt := settings.NewRuntime(db.DB()) + if err := rt.Load(); err != nil { + log.Fatalf("settings: %v", err) + } + + memCache := cache.New() + repo := sqlitestore.NewRepository(db, memCache) + if err := repo.EnsureAdmin(); err != nil { + log.Fatalf("admin bootstrap: %v", err) + } + if err := repo.BootstrapFromDB(); err != nil { + log.Fatalf("cache bootstrap: %v", err) + } + rt.AfterLoad() + + imageDir := filepath.Join(*dataDir, rt.ImageStoragePath()) + publicURL := func() string { + if u := rt.PublicBaseURL(); u != "" { + return u + } + a := *addr + if strings.HasPrefix(a, ":") { + a = "localhost" + a + } + return "http://" + a + } + imgStore := imagestore.New(db.DB(), imageDir, publicURL(), rt.EncryptionKey(), rt.SignedURLTTL()) + _ = imgStore.EnsureDir() + + predSvc := prediction.NewService(db.DB(), memCache, imgStore, publicURL(), rt.PredictionWaitSeconds()) + + gw := gateway.New(memCache, rt) + mon := monitor.New(gw, memCache, db, rt) + mon.Start(repo.FlushUsage) + + gin.SetMode(gin.ReleaseMode) + r := gin.New() + r.Use(middleware.Logger(), gin.Recovery()) + + r.GET("/health", func(c *gin.Context) { + c.JSON(200, gin.H{"status": "ok"}) + }) + + adminHandler := admin.New(repo, db, memCache, gw, rt, mon, predSvc, imgStore, publicURL) + adminGroup := r.Group("/api/admin", middleware.IPFilter(memCache, model.IPScopeAdmin)) + adminHandler.Register(adminGroup) + + proxyHandler := proxy.New(gw) + v1 := r.Group("/v1", middleware.IPFilter(memCache, model.IPScopeProxy), middleware.IngressAuth(gw)) + proxyHandler.Register(v1) + + replicateHandler := replicate.New(predSvc, publicURL) + replicateHandler.Register(v1) + + filesHandler := files.New(imgStore) + filesHandler.Register(r) + + staticHandler := static.New(webembed.WebFS) + staticHandler.Register(r) + + go func() { + log.Printf("Luminary listening on %s (data=%s)", *addr, *dataDir) + if err := r.Run(*addr); err != nil { + log.Fatalf("server: %v", err) + } + }() + + quit := make(chan os.Signal, 1) + signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) + <-quit + log.Println("shutting down...") + mon.Stop() + repo.FlushUsage(memCache.DrainUsageDeltas()) +} + +func envOr(key, fallback string) string { + if v := os.Getenv(key); v != "" { + return v + } + return fallback +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7b0697e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +services: + luminary: + build: + context: . + dockerfile: Dockerfile + args: + IMAGE_PREFIX: docker.1panel.live/library/ + APK_MIRROR: mirrors.aliyun.com + GOPROXY: https://goproxy.cn,direct + GOSUMDB: sum.golang.google.cn + image: ${LUMINARY_IMAGE:-registry.rc707blog.top/rose_cat707/luminary:latest} + container_name: luminary + restart: unless-stopped + ports: + - "8293:8293" + environment: + LUMINARY_DATA: /data + LUMINARY_ADDR: ":8293" + volumes: + - luminary-data:/data + +volumes: + luminary-data: diff --git a/docker/Dockerfile.prebuilt b/docker/Dockerfile.prebuilt new file mode 100644 index 0000000..b53f361 --- /dev/null +++ b/docker/Dockerfile.prebuilt @@ -0,0 +1,20 @@ +# Runtime image using locally cross-compiled linux/amd64 binaries (avoids QEMU segfault in buildx). +ARG IMAGE_PREFIX=docker.1panel.live/library/ +ARG APK_MIRROR=mirrors.aliyun.com +FROM ${IMAGE_PREFIX}alpine:3.20 AS runtime +ARG APK_MIRROR=mirrors.aliyun.com +RUN sed -i "s/dl-cdn.alpinelinux.org/${APK_MIRROR}/g" /etc/apk/repositories \ + && apk add --no-cache ca-certificates tini + +ENV LUMINARY_DATA=/data \ + LUMINARY_ADDR=:8293 + +COPY .docker-bin/luminary /usr/local/bin/luminary +COPY .docker-bin/luminary-recover /usr/local/bin/luminary-recover +COPY docker/entrypoint.sh /entrypoint.sh +COPY scripts/luminary-recover.sh /usr/local/bin/luminary-recover.sh +RUN chmod +x /entrypoint.sh /usr/local/bin/luminary-recover.sh + +VOLUME ["/data"] +EXPOSE 8293 +ENTRYPOINT ["/sbin/tini", "--", "/entrypoint.sh"] diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 0000000..873eab4 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -eu + +DATA_DIR="${LUMINARY_DATA:-/data}" +ADDR="${LUMINARY_ADDR:-:8293}" + +mkdir -p "$DATA_DIR" + +echo "[luminary] $(date '+%Y-%m-%d %H:%M:%S') starting (addr=${ADDR}, data=${DATA_DIR})" +exec /usr/local/bin/luminary -data-dir "$DATA_DIR" -addr "$ADDR" diff --git a/docs/UI-DESIGN-SYSTEM.md b/docs/UI-DESIGN-SYSTEM.md new file mode 100644 index 0000000..c6adb10 --- /dev/null +++ b/docs/UI-DESIGN-SYSTEM.md @@ -0,0 +1,2013 @@ +# UI 设计规范 + +> 适用范围:基于 Vue 3 + Element Plus 2.x 的后台管理系统 Web 页面 +> **本文档为唯一设计规范**:色彩、间距、布局、组件样式、全局 CSS 均定义于本文件(§6 分模块说明 + §8.9 完整 CSS)。项目实施时从本文档复制代码即可,不依赖其他设计资产文件。 + +--- + +## 目录 + +1. [页面整体风格](#1-页面整体风格) +2. [布局标准](#2-布局标准) +3. [字体标准](#3-字体标准) +4. [颜色规范](#4-颜色规范) +5. [图标使用规范](#5-图标使用规范) +6. [组件与页面标准样式](#6-组件与页面标准样式) +7. [交互原则](#7-交互原则) +8. [附录:复刻指南](#8-附录复刻指南) + +--- + +## 1. 页面整体风格 + +### 1.1 设计定位 + +本规范定义一套**浅色、克制、数据导向**的后台界面风格。视觉语言强调可读性与操作效率,避免装饰性元素喧宾夺主。 + +| 维度 | 规范 | +|------|------| +| 整体调性 | 专业、冷静、工具感;类似现代 SaaS 控制台 | +| 色彩策略 | 大面积中性灰白底 + 青绿品牌色点缀 | +| 层次表达 | 靠**字号阶梯**与**灰度阶梯**区分,不靠重阴影 | +| 容器形态 | 白底细边框卡片(`1px` + `8px` 圆角),无浮起阴影 | +| 信息密度 | 列表/表格偏紧凑(`size="small"`),表单区留白充分 | +| 技术底座 | Element Plus 组件 + 全局 CSS 变量覆盖 | + +### 1.2 核心设计原则 + +| 原则 | 说明 | +|------|------| +| **浅色优先** | 页面背景 `#f4f4f5`,内容区白卡片;禁止深色全屏侧栏 | +| **克制用色** | 主色青绿仅用于品牌、主按钮、导航激活态、关键正向状态 | +| **细边框卡片** | 白底 + `1px` 浅灰边框 + `8px` 圆角,禁止大面积 box-shadow | +| **8px 间距节奏** | 所有间距使用间距 Token(4px 仅用于极紧凑场景) | +| **层次靠字号与灰度** | 标题 `#18181b`,正文 `#3f3f46`,辅助 `#71717a` | +| **组件复用优先** | 使用 `PageHeader`、`AppCard`、`StatCard` 等标准壳层,禁止页面内自建容器体系 | +| **国际化友好** | 文案走 i18n;布局预留中英文长度差异(按钮组 `flex-wrap`) | + +### 1.3 视觉示意 + +``` +┌──────────────┬────────────────────────────────────┐ +│ Sidebar │ Topbar(52px,白底,底部分割线) │ +│ 240px ├────────────────────────────────────┤ +│ 半透明浅灰 │ Main Content(padding 24px) │ +│ 品牌区+导航 │ .page(max-width 1400px) │ +│ │ PageHeader → StatGrid → AppCard │ +└──────────────┴────────────────────────────────────┘ +``` + +登录页为独立全屏居中布局,无侧栏与顶栏。 + +--- + +## 2. 布局标准 + +### 2.1 栅格系统 + +#### PC 端(≥1025px) + +| 项目 | 规范 | +|------|------| +| 基准栅格 | **12 列**逻辑栅格(内容区 `max-width: 1400px` 内划分) | +| 列间距(gutter) | `16px`(`--space-4`) | +| 页面水平边距 | 主内容区内边距 `24px`(`--space-6`) | +| 典型列分配 | 统计卡 4×3 列;双栏内容 `1.4fr : 1fr` 或 `1fr : 1fr`;三栏等分 `1fr × 3` | + +常用网格类: + +| 类名 | PC 列数 | 说明 | +|------|---------|------| +| `.stat-grid` | 4 列 | 概览指标卡 | +| `.content-grid--2` | 2 列等宽 | 并列卡片 | +| `.content-grid--2-1` | 2 列(约 7:5) | 主内容 + 侧信息 | +| `.content-grid--3` | 3 列等宽 | 三列面板(按需扩展) | + +#### 平板(641px – 1024px) + +| 项目 | 规范 | +|------|------| +| 有效栅格 | **8 列**逻辑栅格 | +| `.stat-grid` | 2 列 | +| `.content-grid--*` | 全部折叠为 **1 列** | +| 主内容 padding | 保持 `24px` | + +#### 移动端(≤640px) + +| 项目 | 规范 | +|------|------| +| 有效栅格 | **4 列**逻辑栅格 | +| `.stat-grid` | 1 列 | +| `.page-header` | 纵向堆叠(标题在上,操作在下) | +| 主内容 padding | `16px`(`--space-4`) | +| 底部 Tab(若启用) | 固定底部,高度 `56px`,图标 `20px` + 文字 `10px` | + +> 默认以 PC 为主、移动端通过响应式折叠适配;若启用底部 Tab 导航,须使用本节尺寸,不得自定义高度。 + +### 2.2 间距体系(8px 基准) + +**硬性规则:页面级、组件级外边距与内边距必须使用间距 Token,禁止出现 5px、7px、10px、15px 等非体系数值。** + +| Token | 值 | 是否 8 的倍数 | 典型用途 | +|-------|-----|---------------|----------| +| `--space-1` | 4px | ½×8,仅紧凑场景 | 标题与副标题间距、行内 code 水平 padding | +| `--space-2` | 8px | ✓ | 按钮组 gap、导航项内边距、表格单元格垂直 padding | +| `--space-3` | 12px | — | 列表项间距、卡片底栏提示 | +| `--space-4` | 16px | ✓ | 卡片间距、工具栏下边距、移动端页面 padding | +| `--space-5` | 20px | — | 卡片水平内边距、统计卡内边距 | +| `--space-6` | 24px | ✓ | 页头下边距、主内容 padding、区块分隔 | +| `--space-8` | 32px | ✓ | 登录卡片内边距、大区块分隔 | + +**垂直节奏(页面级)** + +- `.page-header` 下方:`24px` +- `.stat-grid`、`.content-grid` 下方:`24px` +- 相邻 `.app-card` 间距:`16px`;页面最后一个卡片无底边距 + +**已知例外(保留,勿改)** + +| 位置 | 值 | 原因 | +|------|-----|------| +| `.form-hint` 的 `margin-top` | `6px` | 紧贴表单项控件底部,视觉上等同 8px 体系 | + +`--primary-hover` 已定义但未写独立 CSS 规则,主按钮 hover 由 Element Plus 通过 `--el-color-primary-dark-2` 自动处理。 + +### 2.3 布局组件尺寸 + +| 组件 | 尺寸 | 其他规则 | +|------|------|----------| +| **侧栏** `.sidebar` | 宽 `240px`(`15rem`) | 右边框 `1px`;背景半透明 + `backdrop-filter: blur(8px)` | +| **侧栏品牌区** `.sidebar-brand` | 高随内容;padding `20px 16px` | 品牌图标 `32×32px` | +| **导航项** `.nav-item` | 高随内容;padding `8px 12px`;margin 左右 `8px` | 圆角 `8px`;图标 `16px` | +| **导航分组标签** `.nav-group-label` | padding `16px 16px 8px` | 字号 `12px`,全大写 | +| **顶栏** `.topbar` | 高 **`52px`** | 左右 padding `24px`;白底 + 底边框 | +| **主内容** `.main-content` | flex 填满剩余高度 | padding `24px`(移动端 `16px`);纵向滚动 | +| **页面容器** `.page` | max-width **`1400px`** | 无水平居中强制(随主内容左对齐) | +| **底部 Tab**(预留) | 高 **`56px`** | 图标 `20px`,标签 `10px`,最多 5 项 | +| **登录卡片** `.login-card` | max-width 外层 `400px`;内边距 `32px` | 品牌图标 `48×48px`,圆角 `12px` | + +### 2.4 断点 + +| 断点 | 媒体查询 | 主要变化 | +|------|----------|----------| +| 平板 | `max-width: 1024px` | 统计 2 列;内容网格单列 | +| 手机 | `max-width: 640px` | 统计 1 列;页头纵向;主内容 16px padding | + +### 2.5 布局结构(ASCII) + +``` +PC (≥1025px) +┌─ sidebar 240px ─┬──────────── main-area ────────────────────┐ +│ [brand 32px] │ topbar 52px │ +│ [nav × N] ├───────────────────────────────────────────┤ +│ │ padding 24px │ +│ │ ┌─ page max 1400px ─────────────────┐ │ +│ │ │ page-header │ │ +│ │ │ stat-grid (4 col, gap 16) │ │ +│ │ │ app-card │ │ +│ │ └────────────────────────────────────┘ │ +└─────────────────┴───────────────────────────────────────────┘ + +Mobile (≤640px) +┌──────────────── main-area 100% ────────────────┐ +│ topbar 52px │ +├────────────────────────────────────────────────┤ +│ padding 16px │ +│ page-header (column) │ +│ stat-grid (1 col) │ +│ app-card │ +├────────────────────────────────────────────────┤ +│ [optional bottom-tab 56px] │ +└────────────────────────────────────────────────┘ +``` + +--- + +## 3. 字体标准 + +### 3.1 字体族 + +| 场景 | 字体栈 | +|------|--------| +| **中文界面** | `"PingFang SC"`, `"Microsoft YaHei"`, `"Noto Sans SC"`, `"Helvetica Neue"`, `Arial`, `sans-serif` | +| **英文界面** | `ui-sans-serif`, `system-ui`, `-apple-system`, `"Segoe UI"`, `Roboto`, `"Helvetica Neue"`, `Arial`, `sans-serif` | +| **合并栈(推荐默认)** | `ui-sans-serif`, `system-ui`, `-apple-system`, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif` | +| **等宽(代码/文件名)** | `ui-monospace`, `SFMono-Regular`, `Menlo`, `Monaco`, `Consolas`, monospace` | + +> 中英文共用同一 sans 栈:西文优先 system 字体,CJK 由系统自动 fallback 至苹方/微软雅黑。禁止为中文单独引入 Web Font,保持加载性能。 + +### 3.2 字号阶梯 + +根元素 `font-size: 14px`(`1rem = 14px`)。所有字号使用 `rem` 相对根字号。 + +| 层级 | 类名 / 场景 | 字号 | 字重 | 行高 | 颜色 | +|------|-------------|------|------|------|------| +| 页面标题 | `.page-title` | `1.5rem`(21px) | 600 | 默认 | `--foreground` | +| 登录品牌标题 | `.page-title`(登录页) | 同上 | 600 | 默认 | `--foreground` | +| 卡片标题 | `.app-card__title` | `0.9375rem`(13px) | 600 | 默认 | `--foreground` | +| 品牌名 | `.brand-name` | `1.125rem`(15.75px) | 600 | 默认 | `--foreground` | +| 统计数值 | `.stat-card__value` | `1.75rem`(24.5px) | 600 | 默认 | `--foreground` | +| 正文 / 导航 / 顶栏 | `.nav-item`, `.topbar-title`, 表格正文 | `0.875rem`(12.25px) | 400–500 | 1.4(表格) | `--el-text-color-regular` 或 `--muted-foreground` | +| 描述 / 标签说明 | `.page-desc`, `.stat-card__label` | `0.875rem` | 400 | 默认 | `--muted-foreground` | +| 表头 / 辅助 | 表头 `th`, `.form-hint`, `.nav-group-label` | `0.75rem`(10.5px) | 600(表头)/ 400 | 默认 | `--muted-foreground` | +| 极小说明 | `.form-hint`, `code.inline-code` | `0.75rem` | 400 | 默认 | `--muted-foreground` | +| 等宽数据 | `.kv-block code`, `.meta-list` | `0.8125rem` | 400 | 默认 | 继承 | + +### 3.3 字重与样式 + +| 样式 | 使用场景 | 禁止场景 | +|------|----------|----------| +| **600(Semibold)** | 页面标题、卡片标题、表头、导航激活态、分组标题 `.section-title` | 大段正文 | +| **500(Medium)** | 导航默认态、顶栏次要文字 | — | +| **400(Regular)** | 正文、描述、表单标签 | — | +| **加粗 ``** | 行内强调少量关键词 | 整段文字 | +| **斜体 ``** | 极少使用;仅引用或术语首次出现 | 按钮、导航、表头 | +| **`letter-spacing: -0.02em`** | 仅 `.page-title` | 其他文字 | +| **`text-transform: uppercase`** | 仅 `.nav-group-label` | 其他文字 | + +### 3.4 Element Plus 表单标签 + +| 场景 | `label-width` | +|------|---------------| +| 简单 CRUD 对话框 | `100px` | +| 字段名较长 | `110px` | +| 系统设置长表单 | `120px` | +| 嵌套子表单 | `90px` | +| 登录页 | `size="large"`(EP 默认大号控件) | + +--- + +## 4. 颜色规范 + +### 4.1 色彩角色一览 + +``` +品牌层:primary 系列(操作引导) +中性层:background / card / muted / border(结构) +语义层:success / warning / danger / info(状态) +文本层:foreground / regular / muted-foreground(可读性) +``` + +### 4.2 完整色板 + +#### 品牌色 + +| Token | 色值 | 用途 | +|-------|------|------| +| `--primary` | `#0f7a62` | 主按钮、品牌图标底、导航激活文字、链接强调 | +| `--primary-hover` | `#0d6b56` | 主按钮 hover | +| `--primary-foreground` | `#fafafa` | 主色背景上的文字/图标 | +| `--el-color-primary-light-3` | `#4da08c` | EP 组件浅色变体 | +| `--el-color-primary-light-5` | `#76b8a8` | — | +| `--el-color-primary-light-7` | `#a0d0c4` | — | +| `--el-color-primary-light-8` | `#b8dcd2` | — | +| `--el-color-primary-light-9` | `#d0e8e1` | 浅色背景提示 | +| `--el-color-primary-dark-2` | `#0c624e` | 主色按下/深色态 | + +#### 中性色 + +| Token | 色值 | 用途 | +|-------|------|------| +| `--background` | `#f4f4f5` | 页面底色、登录页背景 | +| `--foreground` | `#18181b` | 主标题、强强调正文 | +| `--card` | `#ffffff` | 卡片、顶栏、弹窗内容区背景 | +| `--card-foreground` | `#18181b` | 卡片上主文字 | +| `--muted` | `#f4f4f5` | 表头背景、内嵌块、行内 code 底 | +| `--muted-foreground` | `#71717a` | 描述、表头文字、顶栏标题、占位性文字 | +| `--border` | `#e4e4e7` | 卡片边框、分割线、顶栏底边 | +| `--input` | `#e4e4e7` | 输入框边框(与 border 一致) | + +#### 侧栏专用 + +| Token | 色值 | 用途 | +|-------|------|------| +| `--sidebar` | `rgba(250, 250, 250, 0.85)` | 侧栏背景(半透明) | +| `--sidebar-foreground` | `#18181b` | 侧栏主文字 | +| `--sidebar-accent` | `#f4f4f5` | 导航 hover / active 背景 | +| `--sidebar-border` | `#e4e4e7` | 侧栏右边框 | + +#### 语义色 + +| Token / 类名 | 色值 | 用途 | +|--------------|------|------| +| `--success` | `#047857` | 成功状态(与 EP success 同步) | +| `--warning` | `#b45309` | 警告状态 | +| `--danger` / `--destructive` | `#dc2626` | 危险、错误、删除 | +| `--info` | `#a1a1aa` | 中性、禁用、分类标签 | +| `--el-color-success` | `#047857` | `el-tag type="success"` | +| `--el-color-warning` | `#b45309` | `el-tag type="warning"` | +| `--el-color-danger` | `#dc2626` | `el-tag type="danger"` | +| `--el-color-info` | `#a1a1aa` | `el-tag type="info"` | +| `.status-good` | `#047857` | 数值/状态优良 | +| `.status-warn` | `#b45309` | 数值/状态偏高 | +| `.status-bad` | `#dc2626` | 数值/状态很差 | +| `.status-muted` | `--muted-foreground` | 无数据/超时/不可用 | +| `.meta-list__ok` | `var(--success)` | 列表项就绪 | +| `.meta-list__warn` | `var(--warning)` | 列表项缺失/警告 | + +#### 文本色(Element Plus 对齐) + +| Token | 色值 | 用途 | +|-------|------|------| +| `--el-text-color-primary` | `#18181b` | EP 主要文字 | +| `--el-text-color-regular` | `#3f3f46` | 表格正文 | +| `--el-text-color-secondary` | `#71717a` | EP 次要文字 | + +### 4.3 颜色使用规范 + +| 规则 | 说明 | +|------|------| +| **禁止硬编码色值** | 新样式必须使用 CSS 变量 | +| **主色克制** | 单屏主色面积不超过 15%;除主按钮与激活导航外不大面积铺主色 | +| **状态色统一** | 成功/失败/禁用一律用 `el-tag` 语义 type,不自创色块 | +| **边框优先于阴影** | 容器分隔用 `1px solid var(--border)`,不用阴影 | +| **危险操作** | 破坏性操作用 `type="danger"` + `link`(表格行内)或二次确认弹框 | +| **图表** | 遵循 [§6.16](#616-图表规范echarts) 配色与 grid 配置 | + +### 4.4 圆角 + +| Token | 值 | 用途 | +|-------|-----|------| +| `--radius` | `0.5rem`(8px) | 卡片、按钮、输入框、导航项、内嵌块 | +| 登录品牌图标 | `12px` | 仅 `.login-brand-icon`,略大以强化品牌 | + +--- + +## 5. 图标使用规范 + +### 5.1 图标体系 + +| 类型 | 来源 | 说明 | +|------|------|------| +| **品牌图标** | 项目自有 Logo(自行实现) | 产品标识;仅用于侧栏 `.brand-icon`、登录页 `.login-brand-icon`;**各项目图形不同,本文档不提供参考实现** | +| **功能图标** | `@element-plus/icons-vue` | 导航、操作提示;通过 `` 包裹 | +| **状态** | 优先 `el-tag` 文字 | 不以图标替代明确状态文案 | + +### 5.2 尺寸规范 + +| 场景 | 尺寸 | +|------|------| +| 侧栏品牌区 Logo | `20px` | +| 登录页品牌 Logo | `24px` | +| 侧栏导航图标 | `16px`(``) | +| 按钮内图标(若使用) | `14px` | +| 底部 Tab(预留) | `20px` | + +### 5.3 常见场景图标推荐 + +图标库统一使用 `@element-plus/icons-vue`(Outlined 线型)。下表为常见导航/功能场景的推荐映射,各项目可按业务替换,但须保持风格一致。 + +| 场景 | 推荐图标 | 含义 | +|------|----------|------| +| 首页 / 仪表盘 | `Odometer`、`HomeFilled` | 总览、监控 | +| 列表 / 规则 / 配置项 | `List`、`Menu` | 条目化管理 | +| 连接 / 网络 | `Connection`、`Share` | 链路、拓扑 | +| 外部关联 / 链接 | `Link` | 外部数据源 | +| 切换 / 路由 / 策略 | `Switch` | 分流、调度 | +| 日志 / 文档 | `Document`、`Tickets` | 记录、流水 | +| 用户 / 权限 | `User`、`Lock` | 身份、安全 | +| 系统设置 | `Setting` | 全局配置 | +| 新建 | `Plus` | 创建资源 | +| 编辑 | `Edit` | 修改 | +| 删除 | `Delete` | 移除(配合 danger 按钮,不单用图标) | +| 刷新 | `Refresh` | 重新加载 | +| 导入 / 导出 | `Upload`、`Download` | 数据交换 | + +### 5.4 使用原则 + +| 原则 | 说明 | +|------|------| +| **导航必带图标** | 侧栏每项左侧固定 `16px` 图标,增强扫读性 | +| **颜色跟随文字** | 图标 `currentColor`,不单独设色 | +| **禁止混用风格** | 统一 Outlined 线型图标(Element Plus Icons) | +| **操作按钮** | 主操作优先文字按钮;图标-only 按钮需 `aria-label` | +| **品牌图标不外借** | Logo 仅用于品牌区,不用于普通操作按钮 | + +--- + +## 6. 组件与页面标准样式 + +> 本节 6.1–6.14 为**分模块说明**(便于查阅);**合并后的完整全局 CSS 见 [§8.9](#89-完整全局样式一键复制)**。两处内容须保持一致。 + +### 6.0 技术栈与引入 + +| 项目 | 要求 | +|------|------| +| Vue | `^3.4` | +| Element Plus | `^2.4`(2.x 均可,须使用 CSS 变量主题) | +| 图标 | `@element-plus/icons-vue` | +| 图表(可选) | `echarts` `^5` | + +**`main.ts` 引入顺序(顺序不可颠倒):** + +```ts +import { createApp } from 'vue' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' // ① 先 Element Plus 基础样式 +import './styles/global.css' // ② 再将本文档 §8.9 复制为全局样式文件后引入 + +const app = createApp(App) +app.use(ElementPlus) // ③ 全量注册(或按需,但变量须生效) +app.mount('#app') +``` + +**依赖说明:** + +- 全局样式**仅来源于本文档 §8.9**,文件名与存放路径由项目自定(如 `global.css`、`app.css`)。 +- 按钮、输入框、弹框、Tabs 等**无需逐组件写 CSS**,通过 `:root` 中的 `--el-*` 变量与品牌色对齐。 +- 表格、卡片容器、布局壳层使用本文档自定义 class,须与 §8.1 壳层 DOM 结构配合。 + +### 6.1 设计 Token 与基础重置 + +```css +:root { + --background: #f4f4f5; + --foreground: #18181b; + --card: #ffffff; + --card-foreground: #18181b; + --primary: #0f7a62; + --primary-hover: #0d6b56; + --primary-foreground: #fafafa; + --muted: #f4f4f5; + --muted-foreground: #71717a; + --border: #e4e4e7; + --input: #e4e4e7; + --destructive: #dc2626; + --success: #047857; + --warning: #b45309; + --danger: #dc2626; + --info: #a1a1aa; + --sidebar: rgba(250, 250, 250, 0.85); + --sidebar-foreground: #18181b; + --sidebar-accent: #f4f4f5; + --sidebar-border: #e4e4e7; + --sidebar-width: 15rem; + --radius: 0.5rem; + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + + --el-color-primary: #0f7a62; + --el-color-primary-light-3: #4da08c; + --el-color-primary-light-5: #76b8a8; + --el-color-primary-light-7: #a0d0c4; + --el-color-primary-light-8: #b8dcd2; + --el-color-primary-light-9: #d0e8e1; + --el-color-primary-dark-2: #0c624e; + --el-color-success: #047857; + --el-color-warning: #b45309; + --el-color-danger: #dc2626; + --el-color-info: #a1a1aa; + --el-border-radius-base: 0.5rem; + --el-border-color: #e4e4e7; + --el-bg-color-page: #f4f4f5; + --el-text-color-primary: #18181b; + --el-text-color-regular: #3f3f46; + --el-text-color-secondary: #71717a; + --el-font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif; +} + +* { box-sizing: border-box; } + +html, body, #app { + margin: 0; + padding: 0; + height: 100%; + font-size: 14px; + font-family: var(--el-font-family); + background: var(--background); + color: var(--foreground); +} +``` + +### 6.2 布局壳层(侧栏 / 顶栏 / 主内容) + +```css +.layout { + display: flex; + height: 100vh; +} + +.sidebar { + width: var(--sidebar-width); + flex-shrink: 0; + background: var(--sidebar); + border-right: 1px solid var(--sidebar-border); + backdrop-filter: blur(8px); + display: flex; + flex-direction: column; + overflow-y: auto; +} + +.sidebar-brand { + display: flex; + align-items: center; + gap: var(--space-3); + padding: var(--space-5) var(--space-4); +} + +.brand-icon { + width: 32px; + height: 32px; + border-radius: var(--radius); + background: var(--primary); + color: var(--primary-foreground); + display: flex; + align-items: center; + justify-content: center; +} + +.brand-name { + font-size: 1.125rem; + font-weight: 600; +} + +.nav-group-label { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--muted-foreground); + padding: var(--space-4) var(--space-4) var(--space-2); +} + +.nav-item { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-2) var(--space-3); + margin: 0 var(--space-2); + border-radius: var(--radius); + color: var(--muted-foreground); + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; +} + +.nav-item:hover { background: var(--sidebar-accent); } + +.nav-item.active { + background: var(--sidebar-accent); + color: var(--primary); + font-weight: 600; +} + +.main-area { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; +} + +.topbar { + height: 52px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 var(--space-6); + background: var(--card); + border-bottom: 1px solid var(--border); +} + +.topbar-title { + font-size: 0.875rem; + color: var(--muted-foreground); +} + +.main-content { + flex: 1; + overflow-y: auto; + padding: var(--space-6); +} +``` + +### 6.3 页面头与网格 + +```css +.page { + max-width: 1400px; +} + +.page-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: var(--space-6); + gap: var(--space-4); +} + +.page-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-shrink: 0; + flex-wrap: wrap; +} + +.page-title { + font-size: 1.5rem; + font-weight: 600; + letter-spacing: -0.02em; + margin: 0 0 var(--space-1); +} + +.page-desc { + font-size: 0.875rem; + color: var(--muted-foreground); + margin: 0; +} + +.stat-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.stat-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-5); +} + +.stat-card__label { + font-size: 0.875rem; + color: var(--muted-foreground); + margin-bottom: var(--space-2); +} + +.stat-card__value { + font-size: 1.75rem; + font-weight: 600; +} + +.content-grid { + display: grid; + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.content-grid--2-1 { grid-template-columns: 1.4fr 1fr; } +.content-grid--2 { grid-template-columns: 1fr 1fr; } +.content-grid--3 { grid-template-columns: repeat(3, 1fr); } +``` + +### 6.4 卡片与工具栏 + +```css +.app-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + margin-bottom: var(--space-4); +} + +.page > .app-card:last-child, +.page > .content-grid:last-child { + margin-bottom: 0; +} + +.app-card__header { + padding: var(--space-4) var(--space-5); + border-bottom: 1px solid var(--border); +} + +.app-card__title { + font-size: 0.9375rem; + font-weight: 600; + margin: 0; +} + +.app-card__body--padded { padding: var(--space-5); } + +.card-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-4) var(--space-5) 0; + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.card-toolbar--desc { + align-items: flex-start; +} + +.card-pager { + padding: var(--space-4) var(--space-5); + display: flex; + justify-content: flex-end; +} + +.card-footer-hint { + padding: 0 var(--space-5) var(--space-3); + margin: 0; +} + +.card-footer-hint + .card-pager { + padding-top: var(--space-3); +} + +.card-inset-block { + margin: 0 var(--space-5) var(--space-4); + padding: var(--space-3); + background: var(--muted); + border-radius: var(--radius); + font-size: 0.875rem; +} + +.tabs-bar { + padding: 0 var(--space-5); + border-bottom: 1px solid var(--border); +} + +.tabs-bar .el-tabs__header { margin-bottom: 0; } + +.page-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.inline-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-wrap: wrap; +} + +.card-header-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-4); +} +``` + +### 6.5 表单、间距工具类 + +```css +.form-hint { + margin-top: 6px; + font-size: 0.75rem; + color: var(--muted-foreground); +} + +.form-hint--flush { margin-top: 0; } + +.u-mt-3 { margin-top: var(--space-3); } +.u-mt-4 { margin-top: var(--space-4); } +.u-mb-3 { margin-bottom: var(--space-3); } +.u-mb-4 { margin-bottom: var(--space-4); } +.u-mb-6 { margin-bottom: var(--space-6); } +.text-center { text-align: center; } +.w-full { width: 100%; } + +code.inline-code { + font-size: 0.75rem; + padding: 0 var(--space-1); + background: var(--muted); + border-radius: var(--radius); +} + +.section-title { + font-size: 0.875rem; + font-weight: 600; + margin-bottom: var(--space-4); +} + +.section-title:not(:first-child) { margin-top: var(--space-6); } + +.el-form .el-select { width: 100%; } +``` + +### 6.6 登录页 + +```css +.login-page { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: var(--background); + padding: var(--space-6); +} + +.login-wrap { max-width: 400px; width: 100%; text-align: center; } + +.login-brand-icon { + width: 48px; + height: 48px; + border-radius: 12px; + background: var(--primary); + color: var(--primary-foreground); + display: inline-flex; + align-items: center; + justify-content: center; + margin-bottom: var(--space-4); +} + +.login-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-8); + margin-top: var(--space-6); + text-align: left; +} +``` + +### 6.7 表格 + +```css +.app-card .el-table { + --el-table-header-bg-color: var(--muted); + font-size: 0.875rem; +} + +.app-card .el-table--small .el-table__cell { + padding: var(--space-2) var(--space-3); +} + +.app-card .el-table--small th.el-table__cell { + font-size: 0.75rem; + font-weight: 600; + color: var(--muted-foreground); +} + +.app-card .el-table--small td.el-table__cell { + color: var(--el-text-color-regular); +} + +.app-card .el-table--small .el-table__row { + height: 40px; +} + +.app-card .el-table .el-button.is-link { + padding: 0; + height: auto; +} + +.app-card .el-table .cell { + line-height: 1.4; +} + +.table-scroll--sm { max-height: 320px; } +.table-scroll--md { max-height: 360px; } +.table-scroll--lg { max-height: 480px; } + +.card-pager .el-pagination { + font-size: 0.875rem; +} +``` + +**表格列宽约定** + +| 列类型 | 宽度 | +|--------|------| +| 时间 | `168px` | +| 状态 / 布尔 | `80–100px` | +| 操作 | `120–160px`,`fixed="right"` | +| 主文本 | `min-width`,不设固定宽 | + +### 6.8 工具栏控件宽度 + +```css +.toolbar-select { width: 120px; } +.toolbar-select--country { width: 160px; } +.toolbar-select--wide { width: 280px; } +.toolbar-input { width: 200px; } +.toolbar-input--wide { width: 260px; } +.toolbar-input--grow { flex: 1; min-width: 200px; } +.table-cell-select { width: 100%; min-width: 200px; } + +.card-toolbar .toolbar-input--grow { + flex: 1; + min-width: 200px; +} +``` + +### 6.9 按钮规范(Element Plus 约定) + +| 场景 | 写法 | +|------|------| +| 页面主操作 | `` | +| 页头次要操作 | 默认按钮(无 type) | +| 表格行内操作 | `` | +| 表格行内删除 | `` | +| 顶栏退出 | `` | +| 登录提交 | `` | +| 加载中 | `:loading="true"`,禁止重复点击 | + +### 6.10 弹框与抽屉 + +| 类型 | 宽度 | 属性 | +|------|------|------| +| 简单 CRUD | `480–520px` | `destroy-on-close` | +| 导入/中等表单 | `560–640px` | 同上 | +| 复杂列表弹窗 | `720px` | 同上 | +| 二级编辑 | 抽屉 `50%` | — | + +**底部按钮顺序**:取消(默认)在左,确认(`type="primary"`)在右。 + +### 6.11 标签(Tag) + +统一 `size="small"`: + +| 语义 | type | +|------|------| +| 启用 / 成功 / 存活 | `success` | +| 禁用 / 中性 | `info` | +| 失败 / 错误 | `danger` | +| 警告 / 未就绪 | `warning` | +| 可选项高亮 | `primary` | + +### 6.12 状态色与辅助块 + +```css +.status-good { color: #047857; } +.status-warn { color: #b45309; } +.status-bad { color: #dc2626; } +.status-muted { color: var(--muted-foreground); } + +.kv-block p { + margin: 0 0 var(--space-2); +} + +.kv-block p:last-child { + margin-bottom: 0; +} + +.kv-block .label { + display: inline-block; + width: 5rem; + color: var(--muted-foreground); +} + +.kv-block code { + font-size: 0.8125rem; +} + +.cell-stack { + display: flex; + flex-direction: column; + gap: var(--space-2); + width: 100%; +} + +.meta-list { + margin: 0; + padding: 0; + list-style: none; + font-size: 0.8125rem; + color: var(--muted-foreground); +} + +.meta-list li { + display: flex; + justify-content: space-between; + gap: var(--space-3); + padding: var(--space-1) 0; +} + +.meta-list__mono { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; +} + +.meta-list__ok { color: var(--el-color-success); } +.meta-list__warn { color: var(--el-color-warning); } + +.chart-box { + height: 280px; +} +``` + +### 6.13 滚动条与响应式 + +```css +.custom-scrollbar { + scrollbar-width: thin; + scrollbar-color: #e4e4e7 transparent; +} + +.custom-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background: #e4e4e7; + border-radius: 3px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: transparent; +} + +@media (max-width: 1024px) { + .stat-grid { grid-template-columns: repeat(2, 1fr); } + .content-grid--2-1, + .content-grid--2, + .content-grid--3 { grid-template-columns: 1fr; } +} + +@media (max-width: 640px) { + .stat-grid { grid-template-columns: 1fr; } + .main-content { padding: var(--space-4); } + .page-header { flex-direction: column; } +} +``` + +### 6.14 全局工具类速查 + +| 类名 | 用途 | +|------|------| +| `.card-toolbar` | 卡片内筛选行 | +| `.card-pager` | 卡片内分页(右对齐) | +| `.card-header-row` | 卡片头标题 + 右侧操作 | +| `.form-hint` | 表单项下方说明 | +| `.section-title` | 长表单分组标题 | +| `.page-toolbar` | 页内独立工具条 | +| `.tabs-bar` | 卡片内 Tab 容器 | +| `.toolbar-select` / `.toolbar-input` | 工具栏控件宽度 | +| `.table-scroll--sm/md/lg` | 表格最大高度 | +| `.w-full` | 宽度 100% | +| `.u-mb-4` / `.u-mt-3` 等 | 标准外边距 | +| `.status-good` / `.status-warn` / `.status-bad` | 行内数值/状态语义色 | +| `.kv-block` | 键值对结果展示(常配合 `.card-inset-block`) | +| `.cell-stack` | 表格单元格内纵向堆叠 | +| `.meta-list` | 元数据清单列表 | +| `.custom-scrollbar` | 细滚动条(Firefox + WebKit) | + +### 6.15 Element Plus 适配说明 + +以下组件**依靠 EP 默认样式 + `:root` 变量**即可,禁止重复覆盖(除非本节另有说明): + +| 组件 | 使用约定 | 自定义 CSS | +|------|----------|------------| +| `el-button` | 主操作 `type="primary"`;行内 `size="small" link` | 无(颜色来自 `--el-color-primary*`) | +| `el-input` / `el-select` | 表单内 select 宽度 `100%` | 仅 `.el-form .el-select { width: 100% }` | +| `el-dialog` | `destroy-on-close`;宽度见 §6.10 | 无 | +| `el-drawer` | 二级编辑 `size="50%"` | 无 | +| `el-tabs` | 放在 `.tabs-bar` 内 | 仅 `.tabs-bar .el-tabs__header { margin-bottom: 0 }`;激活色来自 `--el-color-primary` | +| `el-pagination` | 放在 `.card-pager` 内 | 仅 `font-size: 0.875rem` | +| `el-tag` | 统一 `size="small"` | 语义色来自 `--el-color-success` 等 | +| `el-message` / `el-message-box` | 操作反馈 | 无 | +| `el-form` | `label-width` 见 §3.4 | 无 | + +**Tabs 推荐结构:** + +```vue + +
+ + + + +
+ +
+``` + +**Dialog 推荐结构:** + +```vue + + + + +``` + +### 6.16 图表规范(ECharts) + +含折线图的统计页使用 `.chart-box` 容器(高度 `280px`)。图表配置须与品牌色一致: + +| 配置项 | 值 | +|--------|-----| +| 容器 class | `chart-box`(`height: 280px`) | +| 主系列色 | `#0f7a62`(`var(--primary)`) | +| 次系列色 | `#71717a`(`var(--muted-foreground)`) | +| 第三系列及以后 | `#4da08c`、`#76b8a8`、`#a0d0c4`(primary-light 阶梯) | +| `grid` | `{ left: 40, right: 16, top: 16, bottom: 24 }` | +| 坐标轴字号 | `12`(与 `0.857rem` 接近) | +| 坐标轴颜色 | `#71717a` | +| 分割线 | `#e4e4e7` | +| 折线 | `smooth: true`;线宽 `2` | +| tooltip | `trigger: 'axis'` | +| 图例 | 顶部或底部,字号 `12` | + +```ts +chart.setOption({ + grid: { left: 40, right: 16, top: 16, bottom: 24 }, + xAxis: { + type: 'category', + data: labels, + axisLabel: { color: '#71717a', fontSize: 12 }, + axisLine: { lineStyle: { color: '#e4e4e7' } }, + }, + yAxis: { + type: 'value', + axisLabel: { color: '#71717a', fontSize: 12 }, + splitLine: { lineStyle: { color: '#e4e4e7' } }, + }, + series: [ + { name: '主指标', type: 'line', smooth: true, data: a, color: '#0f7a62' }, + { name: '次指标', type: 'line', smooth: true, data: b, color: '#71717a' }, + ], + tooltip: { trigger: 'axis' }, +}) +``` + +--- + +## 7. 交互原则 + +### 7.1 反馈与状态 + +| 原则 | 规范 | +|------|------| +| **操作反馈** | 成功/失败使用消息提示(如 `ElMessage`);破坏性操作须二次确认(如 `ElMessageBox.confirm`) | +| **加载态** | 列表 `v-loading`;按钮 `:loading`;全页加载用卡片级 loading | +| **空状态** | 表格无数据依赖 EP 默认 empty;需文案时走 i18n | +| **禁用态** | 批量任务进行中禁用与之互斥的行内操作 | +| **乐观更新** | 不做乐观更新;等 API 成功后再刷新列表 | + +### 7.2 导航与层级 + +| 原则 | 规范 | +|------|------| +| **路由即导航** | 侧栏链接与当前路由同步,激活态高亮 | +| **顶栏标题** | 显示当前一级导航名称,非重复页面 H1 | +| **页内标题** | `PageHeader` 的 `title` 为页面 H1,描述可选 | +| **退出登录** | 顶栏右侧 `text` 按钮,清除会话后跳转登录页 | + +### 7.3 表单与对话框 + +| 原则 | 规范 | +|------|------| +| **关闭销毁** | 对话框统一 `destroy-on-close`,避免脏数据残留 | +| **提交防重** | 提交按钮 `loading` 期间禁止重复提交 | +| **取消不保存** | 取消仅关闭弹层,不触发 API | +| **密码字段** | `type="password"` + `show-password` | +| **字段说明** | 用 `.form-hint`,不用 placeholder 替代说明 | + +### 7.4 列表与表格 + +| 原则 | 规范 | +|------|------| +| **主操作位置** | 新建/导入放 `PageHeader#actions`;筛选放 `.card-toolbar` | +| **行内操作** | 链接式小按钮,删除放最右 | +| **分页** | 放 `.card-pager`,右对齐 | +| **刷新** | 提供显式「刷新」按钮;除监控大屏等实时场景外,不依赖隐式自动刷新 | +| **固定列** | 操作列 `fixed="right"` | + +### 7.5 动效与过渡 + +| 原则 | 规范 | +|------|------| +| **克制动效** | 仅使用 EP 默认过渡(对话框、下拉、Message) | +| **禁止花哨动画** | 不加自定义 page transition、弹跳、视差 | +| **侧栏** | 桌面端固定展开,不用折叠动画(移动端待扩展) | + +### 7.6 无障碍与可用性 + +| 原则 | 规范 | +|------|------| +| **对比度** | 正文与背景对比度 ≥ 4.5:1 | +| **焦点** | 依赖 EP 默认 focus ring,不自行移除 | +| **点击目标** | 按钮最小高度遵循 EP(默认 32px,large 40px) | +| **错误信息** | 接口错误映射为用户可读的本地化文案(如限流、权限不足) | + +### 7.7 国际化 + +| 原则 | 规范 | +|------|------| +| **文案** | 所有可见文字走国际化方案(如 i18n),禁止硬编码用户可见字符串 | +| **时间** | 显示格式 `YYYY-MM-DD HH:mm:ss`(ISO 替换 `T` 并截断) | +| **布局弹性** | 按钮组、工具栏 `flex-wrap: wrap` 适配长文案 | + +--- + +## 8. 附录:复刻指南 + +按以下顺序实施,可在新项目中复刻本文档定义的全部视觉(Vue 3 + Element Plus 2.x)。 + +### 8.1 壳层布局完整模板 + +**DOM 层级(class 名称不可改):** + +``` +.layout +├── .sidebar.custom-scrollbar +│ ├── .sidebar-brand +│ │ ├── .brand-icon → 项目自有 Logo(20px) +│ │ └── .brand-name +│ ├── .nav-group-label(可选分组) +│ └── a.nav-item[.active] × N(含 el-icon 16px) +└── .main-area + ├── header.topbar + │ ├── .topbar-title + │ └── 顶栏操作(如 el-button text) + └── main.main-content.custom-scrollbar + └── router-view → 各页面 .page +``` + +```vue + + + + +``` + +### 8.2 登录页完整模板 + +```vue + + + + +``` + +### 8.3 公共组件完整源码 + +```vue + + + + +``` + +```vue + + + + +``` + +```vue + + + + +``` + +品牌 Logo 由各项目自行提供,放入 `.brand-icon`(20px)与 `.login-brand-icon`(24px)容器即可;须使用 `currentColor` 或适配主色底上的 `--primary-foreground`。 + +### 8.4 标准页面模板 + +```vue + +``` + +### 8.5 带 Tab 的列表页 + +```vue + +
+ + + + +
+
+ +
+
+``` + +### 8.6 新页面 Checklist + +1. 将 §8.9 复制为项目全局样式文件,按 §6.0 顺序在 `main.ts` 中引入 +2. 复制 §8.1 壳层布局、§8.3 公共组件(文件名自定) +3. 页面根节点 `
` +4. `PageHeader`(标题 + 描述 + actions) +5. 主内容 `AppCard`;表单页加 `padded` +6. 列表筛选用 `.card-toolbar`,分页用 `.card-pager` +7. 间距与颜色仅使用 CSS 变量与全局类 +8. 在主布局中注册导航项与图标(§5.3) + +### 8.7 反模式 + +| 不要 | 应该 | +|------|------| +| 深色侧栏 | 浅色半透明侧栏 | +| 页面内裸 `el-card` 作主容器 | `AppCard` | +| 无标题直接上表格 | 先 `PageHeader` | +| 硬编码色值 | CSS 变量 | +| 重阴影 | 细边框 | +| 每页自定义 `.toolbar` / `.pager` | `.card-toolbar` / `.card-pager` | +| 表单卡片不加 `padded` | `AppCard padded` | +| `style="margin-top: 12px"` | `.u-mt-3` 等工具类 | +| 非 8px 倍数的随意间距 | 间距 Token | +| 在 EP 样式之前引入全局样式 | 先 `element-plus/dist/index.css`,再引入 §8.9 全局样式 | + +### 8.8 推荐目录结构(示例) + +``` +styles/global.css ← 由本文档 §8.9 复制生成,路径与文件名自定 +components/PageHeader.vue +components/StatCard.vue +components/AppCard.vue +layouts/MainLayout.vue ← 见 §8.1,文件名自定 +views/Login.vue ← 见 §8.2,文件名自定 +``` + +样式变更时,须同时更新本文档 **§6.1–6.14** 与 **§8.9** 两处 CSS,保持内容一致。 + +### 8.9 完整全局样式(一键复制) + +以下为**设计规范定义的完整全局 CSS**,直接复制到项目全局样式文件即可(§6.1–6.14 为分模块对照版,内容须与本节一致)。 + +```css +:root { + --background: #f4f4f5; + --foreground: #18181b; + --card: #ffffff; + --card-foreground: #18181b; + --primary: #0f7a62; + --primary-hover: #0d6b56; + --primary-foreground: #fafafa; + --muted: #f4f4f5; + --muted-foreground: #71717a; + --border: #e4e4e7; + --input: #e4e4e7; + --destructive: #dc2626; + --success: #047857; + --warning: #b45309; + --danger: #dc2626; + --info: #a1a1aa; + --sidebar: rgba(250, 250, 250, 0.85); + --sidebar-foreground: #18181b; + --sidebar-accent: #f4f4f5; + --sidebar-border: #e4e4e7; + --sidebar-width: 15rem; + --radius: 0.5rem; + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + + --el-color-primary: #0f7a62; + --el-color-primary-light-3: #4da08c; + --el-color-primary-light-5: #76b8a8; + --el-color-primary-light-7: #a0d0c4; + --el-color-primary-light-8: #b8dcd2; + --el-color-primary-light-9: #d0e8e1; + --el-color-primary-dark-2: #0c624e; + --el-color-success: #047857; + --el-color-warning: #b45309; + --el-color-danger: #dc2626; + --el-color-info: #a1a1aa; + --el-border-radius-base: 0.5rem; + --el-border-color: #e4e4e7; + --el-bg-color-page: #f4f4f5; + --el-text-color-primary: #18181b; + --el-text-color-regular: #3f3f46; + --el-text-color-secondary: #71717a; + --el-font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif; +} + +* { box-sizing: border-box; } + +html, body, #app { + margin: 0; + padding: 0; + height: 100%; + font-size: 14px; + font-family: var(--el-font-family); + background: var(--background); + color: var(--foreground); +} + +.layout { + display: flex; + height: 100vh; +} + +.sidebar { + width: var(--sidebar-width); + flex-shrink: 0; + background: var(--sidebar); + border-right: 1px solid var(--sidebar-border); + backdrop-filter: blur(8px); + display: flex; + flex-direction: column; + overflow-y: auto; +} + +.sidebar-brand { + display: flex; + align-items: center; + gap: var(--space-3); + padding: var(--space-5) var(--space-4); +} + +.brand-icon { + width: 32px; + height: 32px; + border-radius: var(--radius); + background: var(--primary); + color: var(--primary-foreground); + display: flex; + align-items: center; + justify-content: center; +} + +.brand-name { + font-size: 1.125rem; + font-weight: 600; +} + +.nav-group-label { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--muted-foreground); + padding: var(--space-4) var(--space-4) var(--space-2); +} + +.nav-item { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-2) var(--space-3); + margin: 0 var(--space-2); + border-radius: var(--radius); + color: var(--muted-foreground); + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; +} + +.nav-item:hover { background: var(--sidebar-accent); } + +.nav-item.active { + background: var(--sidebar-accent); + color: var(--primary); + font-weight: 600; +} + +.main-area { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; +} + +.topbar { + height: 52px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 var(--space-6); + background: var(--card); + border-bottom: 1px solid var(--border); +} + +.topbar-title { + font-size: 0.875rem; + color: var(--muted-foreground); +} + +.main-content { + flex: 1; + overflow-y: auto; + padding: var(--space-6); +} + +.page { + max-width: 1400px; +} + +.page-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: var(--space-6); + gap: var(--space-4); +} + +.page-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-shrink: 0; + flex-wrap: wrap; +} + +.page-title { + font-size: 1.5rem; + font-weight: 600; + letter-spacing: -0.02em; + margin: 0 0 var(--space-1); +} + +.page-desc { + font-size: 0.875rem; + color: var(--muted-foreground); + margin: 0; +} + +.stat-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.stat-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-5); +} + +.stat-card__label { + font-size: 0.875rem; + color: var(--muted-foreground); + margin-bottom: var(--space-2); +} + +.stat-card__value { + font-size: 1.75rem; + font-weight: 600; +} + +.app-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + margin-bottom: var(--space-4); +} + +.page > .app-card:last-child, +.page > .content-grid:last-child { + margin-bottom: 0; +} + +.app-card__header { + padding: var(--space-4) var(--space-5); + border-bottom: 1px solid var(--border); +} + +.app-card__title { + font-size: 0.9375rem; + font-weight: 600; + margin: 0; +} + +.app-card__body--padded { padding: var(--space-5); } + +.content-grid { + display: grid; + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.content-grid--2-1 { grid-template-columns: 1.4fr 1fr; } +.content-grid--2 { grid-template-columns: 1fr 1fr; } +.content-grid--3 { grid-template-columns: repeat(3, 1fr); } + +.card-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-4) var(--space-5) 0; + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.card-toolbar--desc { + align-items: flex-start; +} + +.card-pager { + padding: var(--space-4) var(--space-5); + display: flex; + justify-content: flex-end; +} + +.card-footer-hint { + padding: 0 var(--space-5) var(--space-3); + margin: 0; +} + +.card-footer-hint + .card-pager { + padding-top: var(--space-3); +} + +.card-inset-block { + margin: 0 var(--space-5) var(--space-4); + padding: var(--space-3); + background: var(--muted); + border-radius: var(--radius); + font-size: 0.875rem; +} + +.tabs-bar { + padding: 0 var(--space-5); + border-bottom: 1px solid var(--border); +} + +.tabs-bar .el-tabs__header { margin-bottom: 0; } + +.page-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.inline-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-wrap: wrap; +} + +.card-header-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-4); +} + +.form-hint { + margin-top: 6px; + font-size: 0.75rem; + color: var(--muted-foreground); +} + +.form-hint--flush { margin-top: 0; } + +.u-mt-3 { margin-top: var(--space-3); } +.u-mt-4 { margin-top: var(--space-4); } +.u-mb-3 { margin-bottom: var(--space-3); } +.u-mb-4 { margin-bottom: var(--space-4); } +.u-mb-6 { margin-bottom: var(--space-6); } +.text-center { text-align: center; } +.w-full { width: 100%; } + +code.inline-code { + font-size: 0.75rem; + padding: 0 var(--space-1); + background: var(--muted); + border-radius: var(--radius); +} + +.section-title { + font-size: 0.875rem; + font-weight: 600; + margin-bottom: var(--space-4); +} + +.section-title:not(:first-child) { margin-top: var(--space-6); } + +.login-page { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: var(--background); + padding: var(--space-6); +} + +.login-wrap { max-width: 400px; width: 100%; text-align: center; } + +.login-brand-icon { + width: 48px; + height: 48px; + border-radius: 12px; + background: var(--primary); + color: var(--primary-foreground); + display: inline-flex; + align-items: center; + justify-content: center; + margin-bottom: var(--space-4); +} + +.login-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-8); + margin-top: var(--space-6); + text-align: left; +} + +.status-good { color: #047857; } +.status-warn { color: #b45309; } +.status-bad { color: #dc2626; } +.status-muted { color: var(--muted-foreground); } + +.toolbar-select { width: 120px; } +.toolbar-select--country { width: 160px; } +.toolbar-select--wide { width: 280px; } +.toolbar-input { width: 200px; } +.toolbar-input--wide { width: 260px; } +.toolbar-input--grow { flex: 1; min-width: 200px; } +.table-cell-select { width: 100%; min-width: 200px; } + +.el-form .el-select { width: 100%; } + +.app-card .el-table { + --el-table-header-bg-color: var(--muted); + font-size: 0.875rem; +} + +.app-card .el-table--small .el-table__cell { + padding: var(--space-2) var(--space-3); +} + +.app-card .el-table--small th.el-table__cell { + font-size: 0.75rem; + font-weight: 600; + color: var(--muted-foreground); +} + +.app-card .el-table--small td.el-table__cell { + color: var(--el-text-color-regular); +} + +.app-card .el-table--small .el-table__row { + height: 40px; +} + +.app-card .el-table .el-button.is-link { + padding: 0; + height: auto; +} + +.app-card .el-table .cell { + line-height: 1.4; +} + +.table-scroll--sm { max-height: 320px; } +.table-scroll--md { max-height: 360px; } +.table-scroll--lg { max-height: 480px; } + +.card-toolbar .toolbar-input--grow { + flex: 1; + min-width: 200px; +} + +.card-pager .el-pagination { + font-size: 0.875rem; +} + +.kv-block p { + margin: 0 0 var(--space-2); +} + +.kv-block p:last-child { + margin-bottom: 0; +} + +.kv-block .label { + display: inline-block; + width: 5rem; + color: var(--muted-foreground); +} + +.kv-block code { + font-size: 0.8125rem; +} + +.cell-stack { + display: flex; + flex-direction: column; + gap: var(--space-2); + width: 100%; +} + +.meta-list { + margin: 0; + padding: 0; + list-style: none; + font-size: 0.8125rem; + color: var(--muted-foreground); +} + +.meta-list li { + display: flex; + justify-content: space-between; + gap: var(--space-3); + padding: var(--space-1) 0; +} + +.meta-list__mono { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; +} + +.meta-list__ok { color: var(--el-color-success); } +.meta-list__warn { color: var(--el-color-warning); } + +.chart-box { + height: 280px; +} + +.custom-scrollbar { + scrollbar-width: thin; + scrollbar-color: #e4e4e7 transparent; +} + +.custom-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background: #e4e4e7; + border-radius: 3px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: transparent; +} + +@media (max-width: 1024px) { + .stat-grid { grid-template-columns: repeat(2, 1fr); } + .content-grid--2-1, + .content-grid--2, + .content-grid--3 { grid-template-columns: 1fr; } +} + +@media (max-width: 640px) { + .stat-grid { grid-template-columns: 1fr; } + .main-content { padding: var(--space-4); } + .page-header { flex-direction: column; } +} +``` + +--- + +*浅色后台管理系统 UI 设计规范* diff --git a/docs/image/IP规则.png b/docs/image/IP规则.png new file mode 100644 index 0000000000000000000000000000000000000000..1584b050f5bf3414ab826527e8d3c29bca2bb45f GIT binary patch literal 106180 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

+A4YkrojBW~V!QM6kOE5TS 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 literal 0 HcmV?d00001 diff --git a/docs/image/入口管理.png b/docs/image/入口管理.png new file mode 100644 index 0000000000000000000000000000000000000000..2950d972af7b71f8ee6f59e8ee306a9dafc60b5e GIT binary patch literal 207080 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 oY#PxjDU*vYBIY0G7KYwNH>ty-Nu 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

1@ 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%0DuFC^9|`Yo&&@oxf{<0ddzQ}Ld>>j}9Mt*Q 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 z킫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 z�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

e$W`?sbN4cB`4@V&ii- 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 A@)cswpy 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

3ZeOwb858Zed|z1T^=5PSn=&KbSd;;Xhj) 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%0A$-+Wq0B9>_J?|KyJo87Xn=)ubfEA<- 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ðK}2(}Kkm&0=H!-WLF${9TSBx3BMo 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 A82|tP literal 0 HcmV?d00001 diff --git a/docs/image/请求日志.png b/docs/image/请求日志.png new file mode 100644 index 0000000000000000000000000000000000000000..3a2e100c074c0f21edcead9564cb39fd66cf8657 GIT binary patch literal 335656 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

7_ft{f_m` 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�^;Q5IrL|w;wqmfJMHT4Z$HCezFAaU>~=J5@JxH4 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%0AFQei#6k5n@ArqGBDuy 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∈j+1BqC6C4&?~#~mLLiJbq{0#uLH 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

t7)uqT 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

Zmgf%j?C~l=XmV}UBrka20n@WWy}pEB2bC0 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 literal 0 HcmV?d00001 diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4a388c5 --- /dev/null +++ b/go.mod @@ -0,0 +1,52 @@ +module github.com/rose_cat707/luminary + +go 1.25.0 + +require ( + github.com/gin-gonic/gin v1.12.0 + github.com/glebarez/sqlite v1.11.0 + github.com/google/uuid v1.3.0 + github.com/gorilla/websocket v1.5.3 + golang.org/x/crypto v0.53.0 + gorm.io/gorm v1.31.1 +) + +require ( + github.com/bytedance/gopkg v0.1.3 // indirect + github.com/bytedance/sonic v1.15.0 // indirect + github.com/bytedance/sonic/loader v0.5.0 // indirect + github.com/cloudwego/base64x v0.1.6 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/gabriel-vasile/mimetype v1.4.12 // indirect + github.com/gin-contrib/sse v1.1.0 // indirect + github.com/glebarez/go-sqlite v1.21.2 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.30.1 // indirect + github.com/goccy/go-json v0.10.5 // indirect + github.com/goccy/go-yaml v1.19.2 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/leodido/go-urn v1.4.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/quic-go/qpack v0.6.0 // indirect + github.com/quic-go/quic-go v0.59.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.3.1 // indirect + go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect + golang.org/x/arch v0.22.0 // indirect + golang.org/x/net v0.55.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/text v0.38.0 // indirect + google.golang.org/protobuf v1.36.10 // indirect + modernc.org/libc v1.22.5 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/sqlite v1.23.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..47e3498 --- /dev/null +++ b/go.sum @@ -0,0 +1,118 @@ +github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= +github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= +github.com/bytedance/sonic v1.15.0 h1:/PXeWFaR5ElNcVE84U0dOHjiMHQOwNIx3K4ymzh/uSE= +github.com/bytedance/sonic v1.15.0/go.mod h1:tFkWrPz0/CUCLEF4ri4UkHekCIcdnkqXw9VduqpJh0k= +github.com/bytedance/sonic/loader v0.5.0 h1:gXH3KVnatgY7loH5/TkeVyXPfESoqSBSBEiDd5VjlgE= +github.com/bytedance/sonic/loader v0.5.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= +github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= +github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw= +github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= +github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w= +github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM= +github.com/gin-gonic/gin v1.12.0 h1:b3YAbrZtnf8N//yjKeU2+MQsh2mY5htkZidOM7O0wG8= +github.com/gin-gonic/gin v1.12.0/go.mod h1:VxccKfsSllpKshkBWgVgRniFFAzFb9csfngsqANjnLc= +github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo= +github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k= +github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw= +github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w= +github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM= +github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= +github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= +github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= +github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= +github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= +github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.3.1 h1:waO7eEiFDwidsBN6agj1vJQ4AG7lh2yqXyOXqhgQuyY= +github.com/ugorji/go/codec v1.3.1/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= +go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE= +go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= +go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= +go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= +golang.org/x/arch v0.22.0 h1:c/Zle32i5ttqRXjdLyyHZESLD/bB90DCU1g9l/0YBDI= +golang.org/x/arch v0.22.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/gorm v1.31.1 h1:7CA8FTFz/gRfgqgpeKIBcervUn3xSyPUmr6B2WXJ7kg= +gorm.io/gorm v1.31.1/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs= +modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= +modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM= +modernc.org/sqlite v1.23.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk= diff --git a/internal/auth/crypto.go b/internal/auth/crypto.go new file mode 100644 index 0000000..8c27de7 --- /dev/null +++ b/internal/auth/crypto.go @@ -0,0 +1,74 @@ +package auth + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "crypto/sha256" + "encoding/base64" + "errors" + "fmt" + "io" +) + +func deriveKey(secret string) []byte { + h := sha256.Sum256([]byte(secret)) + return h[:] +} + +func Encrypt(plaintext, secret string) (string, error) { + key := deriveKey(secret) + block, err := aes.NewCipher(key) + if err != nil { + return "", err + } + gcm, err := cipher.NewGCM(block) + if err != nil { + return "", err + } + nonce := make([]byte, gcm.NonceSize()) + if _, err := io.ReadFull(rand.Reader, nonce); err != nil { + return "", err + } + ciphertext := gcm.Seal(nonce, nonce, []byte(plaintext), nil) + return base64.StdEncoding.EncodeToString(ciphertext), nil +} + +func Decrypt(encoded, secret string) (string, error) { + data, err := base64.StdEncoding.DecodeString(encoded) + if err != nil { + return "", err + } + key := deriveKey(secret) + block, err := aes.NewCipher(key) + if err != nil { + return "", err + } + gcm, err := cipher.NewGCM(block) + if err != nil { + return "", err + } + nonceSize := gcm.NonceSize() + if len(data) < nonceSize { + return "", errors.New("ciphertext too short") + } + nonce, ciphertext := data[:nonceSize], data[nonceSize:] + plain, err := gcm.Open(nil, nonce, ciphertext, nil) + if err != nil { + return "", err + } + return string(plain), nil +} + +func HashToken(token string) string { + h := sha256.Sum256([]byte(token)) + return fmt.Sprintf("%x", h) +} + +func GenerateToken(n int) (string, error) { + b := make([]byte, n) + if _, err := rand.Read(b); err != nil { + return "", err + } + return base64.URLEncoding.EncodeToString(b)[:n], nil +} diff --git a/internal/auth/loginlimit/limit.go b/internal/auth/loginlimit/limit.go new file mode 100644 index 0000000..0e4c6d0 --- /dev/null +++ b/internal/auth/loginlimit/limit.go @@ -0,0 +1,93 @@ +package loginlimit + +import ( + "sync" + "time" +) + +// Limiter tracks failed admin login attempts per client IP. +type Limiter struct { + mu sync.Mutex + attempts map[string]*record + maxAttempts int + lockout time.Duration +} + +type record struct { + failures int + lockedUntil time.Time +} + +func New(maxAttempts int, lockout time.Duration) *Limiter { + if maxAttempts <= 0 { + maxAttempts = 5 + } + if lockout <= 0 { + lockout = 15 * time.Minute + } + return &Limiter{ + attempts: make(map[string]*record), + maxAttempts: maxAttempts, + lockout: lockout, + } +} + +// Check reports whether the IP is locked and how long to wait. +func (l *Limiter) Check(ip string) (locked bool, retryAfter time.Duration) { + l.mu.Lock() + defer l.mu.Unlock() + r := l.attempts[ip] + if r == nil { + return false, 0 + } + now := time.Now() + if now.Before(r.lockedUntil) { + return true, r.lockedUntil.Sub(now) + } + if r.failures >= l.maxAttempts { + delete(l.attempts, ip) + } + return false, 0 +} + +// RecordFailure increments the failure count and locks the IP when the limit is reached. +func (l *Limiter) RecordFailure(ip string) { + l.mu.Lock() + defer l.mu.Unlock() + now := time.Now() + r := l.attempts[ip] + if r == nil { + r = &record{} + l.attempts[ip] = r + } + if now.Before(r.lockedUntil) { + return + } + if r.failures >= l.maxAttempts && !r.lockedUntil.IsZero() && now.After(r.lockedUntil) { + r.failures = 0 + r.lockedUntil = time.Time{} + } + r.failures++ + if r.failures >= l.maxAttempts { + r.lockedUntil = now.Add(l.lockout) + } +} + +// Configure updates rate limit parameters at runtime. +func (l *Limiter) Configure(maxAttempts int, lockout time.Duration) { + l.mu.Lock() + defer l.mu.Unlock() + if maxAttempts > 0 { + l.maxAttempts = maxAttempts + } + if lockout > 0 { + l.lockout = lockout + } +} + +// Reset clears failure state after a successful login. +func (l *Limiter) Reset(ip string) { + l.mu.Lock() + defer l.mu.Unlock() + delete(l.attempts, ip) +} diff --git a/internal/auth/loginlimit/limit_test.go b/internal/auth/loginlimit/limit_test.go new file mode 100644 index 0000000..17b5a88 --- /dev/null +++ b/internal/auth/loginlimit/limit_test.go @@ -0,0 +1,36 @@ +package loginlimit + +import ( + "testing" + "time" +) + +func TestLimiterLockout(t *testing.T) { + l := New(3, time.Minute) + ip := "192.168.1.1" + + for i := 0; i < 2; i++ { + if locked, _ := l.Check(ip); locked { + t.Fatalf("unexpected lock at attempt %d", i) + } + l.RecordFailure(ip) + } + + if locked, _ := l.Check(ip); locked { + t.Fatal("should not lock before max attempts") + } + l.RecordFailure(ip) + + locked, retry := l.Check(ip) + if !locked { + t.Fatal("expected lock after max failures") + } + if retry <= 0 { + t.Fatal("expected positive retry duration") + } + + l.Reset(ip) + if locked, _ := l.Check(ip); locked { + t.Fatal("expected unlock after reset") + } +} diff --git a/internal/auth/password.go b/internal/auth/password.go new file mode 100644 index 0000000..f1eb40e --- /dev/null +++ b/internal/auth/password.go @@ -0,0 +1,30 @@ +package auth + +import ( + "strings" + + "golang.org/x/crypto/bcrypt" +) + +func HashPassword(password string) (string, error) { + b, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) + return string(b), err +} + +func CheckPassword(hash, password string) bool { + return bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) == nil +} + +// HashIngressKey stores a SHA-256 hex digest for O(1) cache lookup. +func HashIngressKey(key string) string { + return HashToken(key) +} + +func IsLegacyIngressHash(hash string) bool { + return strings.HasPrefix(hash, "$2a$") || strings.HasPrefix(hash, "$2b$") +} + +// CheckIngressKey verifies legacy bcrypt-hashed ingress keys. +func CheckIngressKey(hash, key string) bool { + return bcrypt.CompareHashAndPassword([]byte(hash), []byte(key)) == nil +} diff --git a/internal/balancer/weighted.go b/internal/balancer/weighted.go new file mode 100644 index 0000000..747a263 --- /dev/null +++ b/internal/balancer/weighted.go @@ -0,0 +1,49 @@ +package balancer + +import ( + "math/rand" + + "github.com/rose_cat707/luminary/internal/model" +) + +type KeyCandidate struct { + Key model.ProviderKey + Weight float64 +} + +func SelectWeighted(candidates []KeyCandidate) *model.ProviderKey { + if len(candidates) == 0 { + return nil + } + if len(candidates) == 1 { + k := candidates[0].Key + return &k + } + var total float64 + for _, c := range candidates { + w := c.Weight + if w <= 0 { + w = 1 + } + total += w + } + if total <= 0 { + k := candidates[0].Key + return &k + } + r := rand.Float64() * total + var acc float64 + for _, c := range candidates { + w := c.Weight + if w <= 0 { + w = 1 + } + acc += w + if r <= acc { + k := c.Key + return &k + } + } + k := candidates[len(candidates)-1].Key + return &k +} diff --git a/internal/balancer/weighted_test.go b/internal/balancer/weighted_test.go new file mode 100644 index 0000000..a4fd5c8 --- /dev/null +++ b/internal/balancer/weighted_test.go @@ -0,0 +1,32 @@ +package balancer_test + +import ( + "testing" + + "github.com/rose_cat707/luminary/internal/balancer" + "github.com/rose_cat707/luminary/internal/model" +) + +func TestSelectWeighted(t *testing.T) { + candidates := []balancer.KeyCandidate{ + {Key: model.ProviderKey{ID: 1, Name: "a"}, Weight: 1}, + {Key: model.ProviderKey{ID: 2, Name: "b"}, Weight: 3}, + } + counts := map[uint]int{} + for i := 0; i < 1000; i++ { + k := balancer.SelectWeighted(candidates) + if k == nil { + t.Fatal("nil key") + } + counts[k.ID]++ + } + if counts[2] <= counts[1] { + t.Fatalf("expected heavier weight key selected more often: %v", counts) + } +} + +func TestSelectWeightedEmpty(t *testing.T) { + if k := balancer.SelectWeighted(nil); k != nil { + t.Fatal("expected nil") + } +} diff --git a/internal/gateway/errors.go b/internal/gateway/errors.go new file mode 100644 index 0000000..7508093 --- /dev/null +++ b/internal/gateway/errors.go @@ -0,0 +1,11 @@ +package gateway + +import "errors" + +var ( + ErrModelNotAllowed = errors.New("model not allowed") + ErrBudgetExceeded = errors.New("budget exceeded") + ErrRateLimitExceeded = errors.New("rate limit exceeded") + ErrInvalidJSON = errors.New("invalid json") + ErrModelRequired = errors.New("model is required") +) diff --git a/internal/gateway/failover.go b/internal/gateway/failover.go new file mode 100644 index 0000000..be4ca14 --- /dev/null +++ b/internal/gateway/failover.go @@ -0,0 +1,160 @@ +package gateway + +import ( + "context" + "fmt" + "sort" + "time" + + "github.com/rose_cat707/luminary/internal/balancer" + "github.com/rose_cat707/luminary/internal/limiter" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/provider" + "github.com/rose_cat707/luminary/internal/store/cache" +) + +type attempt struct { + provider *model.Provider + key *model.ProviderKey + apiKey string +} + +func (s *Service) buildAttempts(providers []model.Provider, modelName string, route *routeTarget) ([]attempt, error) { + var attempts []attempt + var decryptFailures int + var eligibleKeys int + for i := range providers { + p := providers[i] + keys := s.listEligibleKeys(p.ID, modelName, route) + eligibleKeys += len(keys) + for _, k := range keys { + plain, err := s.DecryptAPIKey(k.APIKeyEnc) + if err != nil { + decryptFailures++ + continue + } + attempts = append(attempts, attempt{provider: &p, key: &k, apiKey: plain}) + } + } + if len(attempts) == 0 { + if decryptFailures > 0 { + return nil, fmt.Errorf("no available provider keys: %d key(s) failed to decrypt (check encryption_key in system settings)", decryptFailures) + } + if eligibleKeys == 0 { + return nil, fmt.Errorf("no available provider keys: none match model %q or are disabled/rate-limited", modelName) + } + return nil, fmt.Errorf("no available provider keys") + } + sort.SliceStable(attempts, func(i, j int) bool { + return attempts[i].key.Weight > attempts[j].key.Weight + }) + return attempts, nil +} + +func (s *Service) listEligibleKeys(providerID uint, modelName string, route *routeTarget) []model.ProviderKey { + if route != nil && route.ProviderKeyID > 0 && route.ProviderID == providerID { + if k, ok := s.cache.GetProviderKey(route.ProviderKeyID); ok && k.Enabled && limiter.IsProviderKeyAvailable(k) { + return []model.ProviderKey{k} + } + } + var candidates []balancer.KeyCandidate + for _, k := range s.cache.ListProviderKeys(providerID) { + if !limiter.IsProviderKeyAvailable(k) { + continue + } + allowed := cache.ParseJSONList(k.ModelsJSON) + if modelName != "" && !cache.MatchesList(allowed, "*") { + upstream := s.resolveUpstreamModelID(providerID, modelName) + if !cache.MatchesList(allowed, modelName) && !cache.MatchesList(allowed, upstream) { + continue + } + } + candidates = append(candidates, balancer.KeyCandidate{Key: k, Weight: k.Weight}) + } + // collect unique keys by weighted random sampling order + seen := map[uint]bool{} + var out []model.ProviderKey + for len(out) < len(candidates) { + selected := balancer.SelectWeighted(candidates) + if selected == nil { + break + } + if seen[selected.ID] { + // remove from candidates + filtered := candidates[:0] + for _, c := range candidates { + if c.Key.ID != selected.ID { + filtered = append(filtered, c) + } + } + candidates = filtered + if len(candidates) == 0 { + break + } + continue + } + seen[selected.ID] = true + out = append(out, *selected) + filtered := candidates[:0] + for _, c := range candidates { + if c.Key.ID != selected.ID { + filtered = append(filtered, c) + } + } + candidates = filtered + } + return out +} + +func (s *Service) forwardWithFailover(ctx context.Context, attempts []attempt, endpoint provider.EndpointType, body []byte) (*provider.ChatResponse, *attempt, error) { + var lastErr error + var lastAtt *attempt + var lastResp *provider.ChatResponse + maxRetries := s.settings.GatewayMaxRetries() + if maxRetries < 1 { + maxRetries = 1 + } + backoffMs := s.settings.GatewayRetryBackoffMs() + for _, att := range attempts { + if !s.canServeEndpoint(att.provider, endpoint) { + continue + } + for try := 0; try < maxRetries; try++ { + if try > 0 { + time.Sleep(time.Duration(backoffMs) * time.Millisecond) + } + resp, err := s.forward(ctx, att.provider, att.apiKey, endpoint, body) + cur := att + lastAtt = &cur + if resp != nil { + lastResp = resp + } + if err != nil { + lastErr = err + continue + } + if resp == nil { + lastErr = fmt.Errorf("empty upstream response") + continue + } + if resp.StatusCode < 400 { + return resp, &att, nil + } + lastErr = fmt.Errorf("%s", describeForwardError(nil, resp)) + if passThroughUpstreamStatus(resp.StatusCode) { + return resp, &att, nil + } + if tryNextKeyOnUpstreamStatus(resp.StatusCode) { + break // try next provider key + } + if retryableUpstreamStatus(resp.StatusCode) { + continue // retry same key + } + return resp, &att, nil + } + } + if lastErr == nil { + lastErr = fmt.Errorf("all providers failed") + } + return lastResp, lastAtt, lastErr +} diff --git a/internal/gateway/health_check.go b/internal/gateway/health_check.go new file mode 100644 index 0000000..00b9c7e --- /dev/null +++ b/internal/gateway/health_check.go @@ -0,0 +1,190 @@ +package gateway + +import ( + "context" + "encoding/json" + "fmt" + "time" + + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/provider" +) + +func (s *Service) healthCheckEndpoints(p *model.Provider) []provider.EndpointType { + var out []provider.EndpointType + if s.providerAllowsEndpoint(p, provider.EndpointListModels) { + out = append(out, provider.EndpointListModels) + } + switch p.Category { + case model.CategoryEmbedding: + if s.providerAllowsEndpoint(p, provider.EndpointEmbeddings) { + out = append(out, provider.EndpointEmbeddings) + } + case model.CategoryRerank: + if s.providerAllowsEndpoint(p, provider.EndpointRerank) { + out = append(out, provider.EndpointRerank) + } + } + return out +} + +func (s *Service) runHealthChecks( + ctx context.Context, + p *model.Provider, + keys []model.ProviderKey, + cfg provider.ProviderConfig, +) (model.ProviderStatus, int64, string) { + endpoints := s.healthCheckEndpoints(p) + if len(endpoints) == 0 { + return model.ProviderUnhealthy, 0, "no health check endpoint enabled" + } + start := time.Now() + var lastErr string + for _, ep := range endpoints { + status, _, msg := s.runHealthCheck(ctx, p, keys, cfg, ep) + if status == model.ProviderHealthy { + return model.ProviderHealthy, time.Since(start).Milliseconds(), "" + } + if msg != "" { + lastErr = msg + } + } + if lastErr == "" { + lastErr = "health check failed" + } + return model.ProviderUnhealthy, time.Since(start).Milliseconds(), lastErr +} + +func (s *Service) runHealthCheck( + ctx context.Context, + p *model.Provider, + keys []model.ProviderKey, + cfg provider.ProviderConfig, + endpoint provider.EndpointType, +) (model.ProviderStatus, int64, string) { + start := time.Now() + latency := func() int64 { return time.Since(start).Milliseconds() } + + switch endpoint { + case provider.EndpointListModels: + if len(keys) == 0 && p.Type == model.ProviderOllama { + if err := s.openai.HealthCheckWithConfig(ctx, "", cfg); err == nil { + return model.ProviderHealthy, latency(), "" + } + return model.ProviderUnhealthy, latency(), "health check failed" + } + for _, k := range keys { + if !k.Enabled { + continue + } + apiKey, err := s.DecryptAPIKey(k.APIKeyEnc) + if err != nil { + continue + } + var checkErr error + if p.Type == model.ProviderAnthropic { + checkErr = s.anthropic.HealthCheckWithConfig(ctx, apiKey, cfg) + } else { + checkErr = s.openai.HealthCheckWithConfig(ctx, apiKey, cfg) + } + if checkErr == nil { + return model.ProviderHealthy, latency(), "" + } + } + return model.ProviderUnhealthy, latency(), "health check failed" + + case provider.EndpointEmbeddings, provider.EndpointRerank: + body, err := healthProbeBody(s, p, endpoint) + if err != nil { + return model.ProviderUnhealthy, latency(), err.Error() + } + if len(keys) == 0 && p.Type == model.ProviderOllama { + ok, msg := s.probeEndpoint(ctx, "", cfg, endpoint, body) + if ok { + return model.ProviderHealthy, latency(), "" + } + return model.ProviderUnhealthy, latency(), msg + } + var lastErr string + for _, k := range keys { + if !k.Enabled { + continue + } + apiKey, err := s.DecryptAPIKey(k.APIKeyEnc) + if err != nil { + continue + } + if ok, msg := s.probeEndpoint(ctx, apiKey, cfg, endpoint, body); ok { + return model.ProviderHealthy, latency(), "" + } else if msg != "" { + lastErr = msg + } + } + if lastErr == "" { + lastErr = "health check failed" + } + return model.ProviderUnhealthy, latency(), lastErr + default: + return model.ProviderUnhealthy, latency(), "unsupported health check endpoint" + } +} + +func (s *Service) probeEndpoint( + ctx context.Context, + apiKey string, + cfg provider.ProviderConfig, + endpoint provider.EndpointType, + body []byte, +) (bool, string) { + resp, err := s.openai.ForwardWithConfig(ctx, apiKey, cfg, endpoint, body) + if err != nil { + return false, err.Error() + } + if resp == nil { + return false, "empty response" + } + if isHealthCheckHTTPStatus(resp.StatusCode) { + return true, "" + } + return false, fmt.Sprintf("%s: HTTP %d", endpoint, resp.StatusCode) +} + +func healthProbeBody(s *Service, p *model.Provider, endpoint provider.EndpointType) ([]byte, error) { + modelID := probeModelID(s, p.ID, endpoint) + switch endpoint { + case provider.EndpointEmbeddings: + return json.Marshal(map[string]string{"model": modelID, "input": "."}) + case provider.EndpointRerank: + return json.Marshal(map[string]any{ + "model": modelID, + "query": "ping", + "documents": []string{"ping"}, + }) + default: + return nil, fmt.Errorf("unsupported probe endpoint %s", endpoint) + } +} + +func probeModelID(s *Service, providerID uint, endpoint provider.EndpointType) string { + for _, m := range s.cache.GetModels(providerID) { + if m.Enabled && m.ModelID != "" { + return m.ModelID + } + } + switch endpoint { + case provider.EndpointEmbeddings: + return "text-embedding-3-small" + case provider.EndpointRerank: + return "rerank-multilingual-v3.0" + default: + return "health-check" + } +} + +func isHealthCheckHTTPStatus(code int) bool { + if code >= 200 && code < 300 { + return true + } + // Upstream reachable but rejected payload/model — still counts as healthy. + return code == 400 || code == 422 +} diff --git a/internal/gateway/health_check_test.go b/internal/gateway/health_check_test.go new file mode 100644 index 0000000..84173dc --- /dev/null +++ b/internal/gateway/health_check_test.go @@ -0,0 +1,51 @@ +package gateway + +import ( + "testing" + + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/provider" +) + +func TestIsHealthCheckHTTPStatus(t *testing.T) { + cases := map[int]bool{ + 200: true, + 204: true, + 400: true, + 422: true, + 401: false, + 404: false, + 500: false, + } + for code, want := range cases { + if got := isHealthCheckHTTPStatus(code); got != want { + t.Fatalf("code %d: got %v want %v", code, got, want) + } + } +} + +func TestHealthCheckEndpointsEmbedding(t *testing.T) { + s := &Service{} + p := &model.Provider{ + Category: model.CategoryEmbedding, + Type: model.ProviderOpenAI, + AllowedEndpointsJSON: `["embeddings"]`, + } + eps := s.healthCheckEndpoints(p) + if len(eps) != 1 || eps[0] != provider.EndpointEmbeddings { + t.Fatalf("got %v", eps) + } +} + +func TestHealthCheckEndpointsEmbeddingWithListModels(t *testing.T) { + s := &Service{} + p := &model.Provider{ + Category: model.CategoryEmbedding, + Type: model.ProviderOpenAI, + AllowedEndpointsJSON: `["list_models","embeddings"]`, + } + eps := s.healthCheckEndpoints(p) + if len(eps) != 2 || eps[0] != provider.EndpointListModels || eps[1] != provider.EndpointEmbeddings { + t.Fatalf("got %v", eps) + } +} diff --git a/internal/gateway/logbody.go b/internal/gateway/logbody.go new file mode 100644 index 0000000..8867482 --- /dev/null +++ b/internal/gateway/logbody.go @@ -0,0 +1,90 @@ +package gateway + +import ( + "encoding/json" + "fmt" + "strings" + + "github.com/rose_cat707/luminary/internal/provider" +) + +const maxLogBodyBytes = 16384 + +func truncateLogBody(b []byte) string { + if len(b) == 0 { + return "" + } + if len(b) <= maxLogBodyBytes { + return string(b) + } + return string(b[:maxLogBodyBytes]) + "\n...(truncated)" +} + +func extractModelName(body []byte) string { + if len(body) == 0 { + return "" + } + var payload struct { + Model string `json:"model"` + } + if err := json.Unmarshal(body, &payload); err != nil { + return "" + } + return payload.Model +} + +func describeForwardError(err error, resp *provider.ChatResponse) string { + if err != nil { + return err.Error() + } + if resp == nil { + return "unknown error" + } + if resp.StatusCode < 400 { + return "" + } + if msg := extractAPIErrorMessage(resp.Body); msg != "" { + return fmt.Sprintf("status %d: %s", resp.StatusCode, msg) + } + if len(resp.Body) > 0 { + return fmt.Sprintf("status %d: %s", resp.StatusCode, truncateLogBody(resp.Body)) + } + return fmt.Sprintf("status %d", resp.StatusCode) +} + +func extractAPIErrorMessage(body []byte) string { + if len(body) == 0 { + return "" + } + var openAI struct { + Error struct { + Message string `json:"message"` + Type string `json:"type"` + } `json:"error"` + } + if err := json.Unmarshal(body, &openAI); err == nil { + if openAI.Error.Message != "" { + if openAI.Error.Type != "" { + return openAI.Error.Type + ": " + openAI.Error.Message + } + return openAI.Error.Message + } + } + var simple struct { + Message string `json:"message"` + Error string `json:"error"` + } + if err := json.Unmarshal(body, &simple); err == nil { + if simple.Message != "" { + return simple.Message + } + if simple.Error != "" { + return simple.Error + } + } + s := strings.TrimSpace(string(body)) + if len(s) > 240 { + return s[:240] + "..." + } + return s +} diff --git a/internal/gateway/logbody_test.go b/internal/gateway/logbody_test.go new file mode 100644 index 0000000..60de370 --- /dev/null +++ b/internal/gateway/logbody_test.go @@ -0,0 +1,25 @@ +package gateway + +import ( + "testing" + + "github.com/rose_cat707/luminary/internal/provider" +) + +func TestExtractAPIErrorMessage_OpenAI(t *testing.T) { + body := []byte(`{"error":{"message":"Invalid API key","type":"invalid_request_error"}}`) + got := extractAPIErrorMessage(body) + if got != "invalid_request_error: Invalid API key" { + t.Fatalf("got %q", got) + } +} + +func TestDescribeForwardError_WithBody(t *testing.T) { + got := describeForwardError(nil, &provider.ChatResponse{ + StatusCode: 400, + Body: []byte(`{"error":{"message":"model not found"}}`), + }) + if got != "status 400: model not found" { + t.Fatalf("got %q", got) + } +} diff --git a/internal/gateway/model_resolve.go b/internal/gateway/model_resolve.go new file mode 100644 index 0000000..810b313 --- /dev/null +++ b/internal/gateway/model_resolve.go @@ -0,0 +1,53 @@ +package gateway + +import ( + "encoding/json" + + "github.com/rose_cat707/luminary/internal/model" +) + +// IngressModelID returns the model identifier exposed to ingress clients. +func IngressModelID(m model.ModelEntry) string { + return m.IngressID() +} + +func modelEntryMatches(m model.ModelEntry, name string) bool { + return m.MatchesIngressName(name) +} + +func (s *Service) resolveUpstreamModelID(providerID uint, ingressModel string) string { + if ingressModel == "" { + return "" + } + for _, m := range s.cache.GetModels(providerID) { + if modelEntryMatches(m, ingressModel) { + return m.ModelID + } + } + return ingressModel +} + +func rewriteModelInBody(body []byte, upstreamModel string) ([]byte, error) { + if upstreamModel == "" || len(body) == 0 { + return body, nil + } + var payload map[string]any + if err := json.Unmarshal(body, &payload); err != nil { + return body, nil + } + current, _ := payload["model"].(string) + if current == "" || current == upstreamModel { + return body, nil + } + payload["model"] = upstreamModel + return json.Marshal(payload) +} + +func (s *Service) rewriteBodyForProvider(providerID uint, body []byte) ([]byte, error) { + ingressModel := extractModelName(body) + if ingressModel == "" { + return body, nil + } + upstream := s.resolveUpstreamModelID(providerID, ingressModel) + return rewriteModelInBody(body, upstream) +} diff --git a/internal/gateway/model_resolve_test.go b/internal/gateway/model_resolve_test.go new file mode 100644 index 0000000..7ee3676 --- /dev/null +++ b/internal/gateway/model_resolve_test.go @@ -0,0 +1,32 @@ +package gateway + +import ( + "encoding/json" + "testing" + + "github.com/rose_cat707/luminary/internal/model" +) + +func TestIngressModelID(t *testing.T) { + if got := IngressModelID(model.ModelEntry{ModelID: "text-embedding-3-small", Alias: "my-embed"}); got != "my-embed" { + t.Fatalf("got %q", got) + } + if got := (model.ModelEntry{ModelID: "gpt-4o"}).IngressID(); got != "gpt-4o" { + t.Fatalf("got %q", got) + } +} + +func TestRewriteModelInBody(t *testing.T) { + body := []byte(`{"model":"my-embed","input":"hi"}`) + out, err := rewriteModelInBody(body, "text-embedding-3-small") + if err != nil { + t.Fatal(err) + } + var payload map[string]string + if err := json.Unmarshal(out, &payload); err != nil { + t.Fatal(err) + } + if payload["model"] != "text-embedding-3-small" { + t.Fatalf("got %q", payload["model"]) + } +} diff --git a/internal/gateway/routing.go b/internal/gateway/routing.go new file mode 100644 index 0000000..dc2b0ef --- /dev/null +++ b/internal/gateway/routing.go @@ -0,0 +1,104 @@ +package gateway + +import ( + "strings" + + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/store/cache" +) + +type routeTarget struct { + ProviderID uint + ProviderKeyID uint // 0 = auto load balance +} + +func (s *Service) resolveRoute(ingressID uint, modelName string) *routeTarget { + rules := s.cache.ListRoutingRules(ingressID) + var best *model.RoutingRule + for i := range rules { + r := rules[i] + if !r.Enabled { + continue + } + if !matchPattern(r.ModelPattern, modelName) { + continue + } + if best == nil || r.Priority > best.Priority { + best = &r + } + } + if best == nil { + return nil + } + return &routeTarget{ProviderID: best.ProviderID, ProviderKeyID: best.ProviderKeyID} +} + +func matchPattern(pattern, model string) bool { + if pattern == "" || pattern == "*" { + return true + } + if strings.HasSuffix(pattern, "*") { + return strings.HasPrefix(model, strings.TrimSuffix(pattern, "*")) + } + return pattern == model +} + +func (s *Service) findProvidersForModel(modelName string, allowed []string, category model.ProviderCategory, route *routeTarget) ([]model.Provider, error) { + if route != nil { + if p, ok := s.cache.GetProvider(route.ProviderID); ok && p.Category == category && p.Enabled { + if cache.MatchesList(allowed, p.Name) || cache.MatchesList(allowed, string(p.Type)) || cache.MatchesList(allowed, "*") { + return []model.Provider{p}, nil + } + } + } + var matched []model.Provider + for _, p := range s.cache.ListProviders() { + if p.Category != category || !model.IsCategorySupported(p.Category) || !p.Enabled { + continue + } + if !cache.MatchesList(allowed, p.Name) && !cache.MatchesList(allowed, string(p.Type)) { + continue + } + if s.providerSupportsModel(&p, modelName) { + matched = append(matched, p) + } + } + if len(matched) == 0 { + if parts := strings.SplitN(modelName, "/", 2); len(parts) == 2 { + if p, ok := s.cache.GetProviderByName(parts[0]); ok && p.Category == category && p.Enabled { + if s.providerSupportsModel(&p, parts[1]) { + return []model.Provider{p}, nil + } + } + } + return nil, errNoProvider(modelName) + } + return matched, nil +} + +func (s *Service) providerSupportsModel(p *model.Provider, modelName string) bool { + models := s.cache.GetModels(p.ID) + if len(models) == 0 { + for _, k := range s.cache.ListProviderKeys(p.ID) { + allowed := cache.ParseJSONList(k.ModelsJSON) + if cache.MatchesList(allowed, modelName) || cache.MatchesList(allowed, "*") { + return true + } + } + return false + } + for _, m := range models { + if m.Enabled && modelEntryMatches(m, modelName) { + return true + } + } + return false +} + +func errNoProvider(model string) error { + return &gatewayError{msg: "no provider found for model " + model} +} + +type gatewayError struct{ msg string } + +func (e *gatewayError) Error() string { return e.msg } diff --git a/internal/gateway/service.go b/internal/gateway/service.go new file mode 100644 index 0000000..5bef403 --- /dev/null +++ b/internal/gateway/service.go @@ -0,0 +1,475 @@ +package gateway + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "time" + + "github.com/rose_cat707/luminary/internal/auth" + "github.com/rose_cat707/luminary/internal/limiter" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/pricing" + "github.com/rose_cat707/luminary/internal/provider" + "github.com/rose_cat707/luminary/internal/provider/anthropic" + "github.com/rose_cat707/luminary/internal/provider/comfyui" + "github.com/rose_cat707/luminary/internal/provider/openai" + "github.com/rose_cat707/luminary/internal/settings" + "github.com/rose_cat707/luminary/internal/store/cache" +) + +type Service struct { + cache *cache.Store + settings *settings.Runtime + openai *openai.Client + anthropic *anthropic.Client + streamClient *provider.HTTPClientWrapper +} + +func New(c *cache.Store, rt *settings.Runtime) *Service { + return &Service{ + cache: c, + settings: rt, + openai: openai.New(), + anthropic: anthropic.New(), + streamClient: &provider.HTTPClientWrapper{Client: provider.NewStreamHTTPClient()}, + } +} + +func (s *Service) ResolveIngressKey(plainKey string) (*model.IngressKey, error) { + k, ok := s.cache.LookupIngressKey(plainKey) + if !ok { + return nil, fmt.Errorf("invalid api key") + } + if k.ExpiresAt != nil && k.ExpiresAt.Before(time.Now()) { + return nil, fmt.Errorf("api key expired") + } + return k, nil +} + +func (s *Service) providerConfig(p *model.Provider) provider.ProviderConfig { + return provider.ProviderConfig{ + Type: p.Type, + Category: p.Category, + BaseURL: p.BaseURL, + EndpointPaths: provider.ParseEndpointPaths(p.EndpointPathsJSON), + } +} + +func (s *Service) DecryptAPIKey(enc string) (string, error) { + return auth.Decrypt(enc, s.settings.EncryptionKey()) +} + +func (s *Service) providerAllowsEndpoint(p *model.Provider, endpoint provider.EndpointType) bool { + allowed := provider.ParseAllowedEndpoints(p.AllowedEndpointsJSON, p.Category) + return provider.IsEndpointAllowed(allowed, endpoint) +} + +func (s *Service) canServeEndpoint(p *model.Provider, endpoint provider.EndpointType) bool { + if s.providerAllowsEndpoint(p, endpoint) { + return true + } + return endpoint == provider.EndpointResponses && s.providerAllowsEndpoint(p, provider.EndpointChatCompletion) +} + +func (s *Service) shouldAdaptResponses(p *model.Provider) bool { + return !s.providerAllowsEndpoint(p, provider.EndpointResponses) && s.providerAllowsEndpoint(p, provider.EndpointChatCompletion) +} + +func (s *Service) forward(ctx context.Context, p *model.Provider, apiKey string, endpoint provider.EndpointType, body []byte) (*provider.ChatResponse, error) { + var err error + body, err = s.rewriteBodyForProvider(p.ID, body) + if err != nil { + return nil, err + } + actualEndpoint := endpoint + actualBody := body + adaptResponses := false + + if endpoint == provider.EndpointResponses { + if s.shouldAdaptResponses(p) { + adapted, err := provider.ResponsesToChatCompletion(body) + if err != nil { + return nil, err + } + actualBody = adapted + actualEndpoint = provider.EndpointChatCompletion + adaptResponses = true + } else if !s.providerAllowsEndpoint(p, endpoint) { + return nil, fmt.Errorf("endpoint %s not enabled on provider %s", endpoint, p.Name) + } + } else if !s.providerAllowsEndpoint(p, endpoint) { + return nil, fmt.Errorf("endpoint %s not enabled on provider %s", endpoint, p.Name) + } + + resp, err := s.forwardRaw(ctx, p, apiKey, actualEndpoint, actualBody) + if err != nil { + return nil, err + } + + if endpoint == provider.EndpointResponses && !adaptResponses && resp != nil && resp.StatusCode == http.StatusNotFound && s.providerAllowsEndpoint(p, provider.EndpointChatCompletion) { + adaptedBody, adaptErr := provider.ResponsesToChatCompletion(body) + if adaptErr == nil { + if resp2, err2 := s.forwardRaw(ctx, p, apiKey, provider.EndpointChatCompletion, adaptedBody); err2 == nil && resp2 != nil { + resp = resp2 + adaptResponses = true + } + } + } + + if adaptResponses && resp != nil && resp.StatusCode < 400 { + converted, convErr := provider.ChatCompletionToResponses(resp.Body) + if convErr == nil { + resp.Body = converted + } + } + return resp, nil +} + +func (s *Service) forwardRaw(ctx context.Context, p *model.Provider, apiKey string, endpoint provider.EndpointType, body []byte) (*provider.ChatResponse, error) { + cfg := s.providerConfig(p) + if p.Type == model.ProviderAnthropic && endpoint == provider.EndpointChatCompletion { + return s.anthropic.ForwardWithConfig(ctx, apiKey, cfg, endpoint, body) + } + return s.openai.ForwardWithConfig(ctx, apiKey, cfg, endpoint, body) +} + +func (s *Service) forwardStream(ctx context.Context, p *model.Provider, apiKey string, endpoint provider.EndpointType, body []byte, w io.Writer, flusher http.Flusher) (*provider.StreamResult, error) { + var err error + body, err = s.rewriteBodyForProvider(p.ID, body) + if err != nil { + return nil, err + } + actualEndpoint := endpoint + actualBody := body + adaptResponses := false + + if endpoint == provider.EndpointResponses { + if s.shouldAdaptResponses(p) { + adapted, err := provider.ResponsesToChatCompletion(body) + if err != nil { + return nil, err + } + actualBody = adapted + actualEndpoint = provider.EndpointChatCompletion + adaptResponses = true + } else if !s.providerAllowsEndpoint(p, endpoint) { + return nil, fmt.Errorf("endpoint %s not enabled", endpoint) + } + } else if !s.providerAllowsEndpoint(p, endpoint) { + return nil, fmt.Errorf("endpoint %s not enabled", endpoint) + } + + cfg := s.providerConfig(p) + url := cfg.ResolveEndpointURL(actualEndpoint) + + if adaptResponses { + pr, pw := io.Pipe() + errCh := make(chan error, 1) + go func() { + _, err := provider.ForwardStreamHTTP(ctx, s.streamClient.Client, "POST", url, apiKey, p.Type, actualBody, pw, nil) + _ = pw.Close() + errCh <- err + }() + result, err := provider.AdaptResponsesStream(body, pr, w, flusher) + if streamErr := <-errCh; err == nil && streamErr != nil { + err = streamErr + } + return result, err + } + + return provider.ForwardStreamHTTP(ctx, s.streamClient.Client, "POST", url, apiKey, p.Type, actualBody, w, flusher) +} + +type forwardParams struct { + ingress *model.IngressKey + endpoint provider.EndpointType + category model.ProviderCategory + body []byte + stream bool +} + +func (s *Service) prepareForward(params forwardParams) (modelName string, providers []model.Provider, route *routeTarget, err error) { + if len(params.body) > 0 { + var payload map[string]any + if err := json.Unmarshal(params.body, &payload); err != nil { + return "", nil, nil, fmt.Errorf("%w: %v", ErrInvalidJSON, err) + } + modelName, _ = payload["model"].(string) + } + if params.endpoint != provider.EndpointListModels && modelName == "" { + return "", nil, nil, ErrModelRequired + } + allowedProviders := cache.ParseJSONList(params.ingress.AllowedProvidersJSON) + if modelName != "" { + allowedModels := cache.ParseJSONList(params.ingress.AllowedModelsJSON) + if !cache.MatchesList(allowedModels, modelName) && !cache.MatchesList(allowedModels, "*") { + return "", nil, nil, ErrModelNotAllowed + } + } + if !limiter.CheckIngressBudget(params.ingress, 0) { + return "", nil, nil, ErrBudgetExceeded + } + if !limiter.CheckRateLimit(s.cache, params.ingress.ID, params.ingress.RateLimitRPM, params.ingress.RateLimitTPM, 1000) { + return "", nil, nil, ErrRateLimitExceeded + } + route = s.resolveRoute(params.ingress.ID, modelName) + providers, err = s.findProvidersForModel(modelName, allowedProviders, params.category, route) + return modelName, providers, route, err +} + +func (s *Service) recordUsage(ingress *model.IngressKey, att *attempt, clientIP, modelName, endpoint string, stream bool, tokensIn, tokensOut int, latency int64, status, errMsg, requestBody, responseBody string) { + var providerKeyID, providerID uint + if att != nil { + providerKeyID = att.key.ID + providerID = att.provider.ID + } + cost := pricing.Estimate(modelName, tokensIn, tokensOut, endpoint) + s.cache.RecordUsage(cache.UsageDelta{ + IngressKeyID: ingress.ID, + ProviderKeyID: providerKeyID, + ProviderID: providerID, + ClientIP: clientIP, + Endpoint: endpoint, + Model: modelName, + TokensIn: tokensIn, + TokensOut: tokensOut, + Cost: cost, + LatencyMs: latency, + Status: status, + Stream: stream, + ErrorMsg: errMsg, + RequestBody: requestBody, + ResponseBody: responseBody, + BudgetUsed: cost, + Requests: 1, + Tokens: int64(tokensIn + tokensOut), + }) +} + +func (s *Service) ForwardEndpoint(ctx context.Context, ingress *model.IngressKey, endpoint provider.EndpointType, rawBody []byte, clientIP string) (*provider.ChatResponse, error) { + category := categoryForEndpoint(endpoint) + modelName, providers, route, err := s.prepareForward(forwardParams{ + ingress: ingress, endpoint: endpoint, category: category, body: rawBody, + }) + if err != nil { + s.recordUsage(ingress, nil, clientIP, modelNameOrBody(rawBody, modelName), string(endpoint), false, 0, 0, 0, "error", err.Error(), truncateLogBody(rawBody), "") + return nil, err + } + attempts, err := s.buildAttempts(providers, modelName, route) + if err != nil { + s.recordUsage(ingress, nil, clientIP, modelName, string(endpoint), false, 0, 0, 0, "error", err.Error(), truncateLogBody(rawBody), "") + return nil, err + } + start := time.Now() + resp, att, err := s.forwardWithFailover(ctx, attempts, endpoint, rawBody) + latency := time.Since(start).Milliseconds() + status := "success" + if err != nil || (resp != nil && resp.StatusCode >= 400) { + status = "error" + } + errMsg := describeForwardError(err, resp) + tokensIn, tokensOut := 0, 0 + var respBody []byte + if resp != nil { + tokensIn, tokensOut = resp.TokensIn, resp.TokensOut + respBody = resp.Body + } + s.recordUsage(ingress, att, clientIP, modelName, string(endpoint), false, tokensIn, tokensOut, latency, status, errMsg, truncateLogBody(rawBody), truncateLogBody(respBody)) + if err != nil && resp != nil && resp.StatusCode >= 400 { + return resp, nil + } + return resp, err +} + +func modelNameOrBody(body []byte, modelName string) string { + if modelName != "" { + return modelName + } + return extractModelName(body) +} + +func (s *Service) ForwardStream(ctx context.Context, ingress *model.IngressKey, endpoint provider.EndpointType, rawBody []byte, clientIP string, w io.Writer, flusher http.Flusher) error { + category := categoryForEndpoint(endpoint) + modelName, providers, route, err := s.prepareForward(forwardParams{ + ingress: ingress, endpoint: endpoint, category: category, body: rawBody, stream: true, + }) + if err != nil { + s.recordUsage(ingress, nil, clientIP, modelNameOrBody(rawBody, modelName), string(endpoint), true, 0, 0, 0, "error", err.Error(), truncateLogBody(rawBody), "") + return err + } + attempts, err := s.buildAttempts(providers, modelName, route) + if err != nil { + s.recordUsage(ingress, nil, clientIP, modelName, string(endpoint), true, 0, 0, 0, "error", err.Error(), truncateLogBody(rawBody), "") + return err + } + var lastErr error + var lastAtt *attempt + maxRetries := s.settings.GatewayMaxRetries() + if maxRetries < 1 { + maxRetries = 1 + } + backoffMs := s.settings.GatewayRetryBackoffMs() + for _, att := range attempts { + if !s.canServeEndpoint(att.provider, endpoint) { + continue + } + for try := 0; try < maxRetries; try++ { + if try > 0 { + time.Sleep(time.Duration(backoffMs) * time.Millisecond) + } + start := time.Now() + result, err := s.forwardStream(ctx, att.provider, att.apiKey, endpoint, rawBody, w, flusher) + latency := time.Since(start).Milliseconds() + lastAtt = &att + if err != nil { + lastErr = err + continue + } + if result == nil { + lastErr = fmt.Errorf("empty upstream stream response") + continue + } + if result.StatusCode < 400 { + s.recordUsage(ingress, &att, clientIP, modelName, string(endpoint), true, result.TokensIn, result.TokensOut, latency, "success", "", truncateLogBody(rawBody), "[SSE stream]") + return nil + } + errMsg := describeForwardError(nil, &provider.ChatResponse{StatusCode: result.StatusCode, Body: result.Body}) + lastErr = fmt.Errorf("%s", errMsg) + respBody := "[SSE stream]" + if len(result.Body) > 0 { + respBody = truncateLogBody(result.Body) + } + if passThroughUpstreamStatus(result.StatusCode) { + s.recordUsage(ingress, &att, clientIP, modelName, string(endpoint), true, result.TokensIn, result.TokensOut, latency, "error", errMsg, truncateLogBody(rawBody), respBody) + return nil + } + if tryNextKeyOnUpstreamStatus(result.StatusCode) { + break + } + if retryableUpstreamStatus(result.StatusCode) { + continue + } + s.recordUsage(ingress, &att, clientIP, modelName, string(endpoint), true, result.TokensIn, result.TokensOut, latency, "error", errMsg, truncateLogBody(rawBody), respBody) + return nil + } + } + if lastErr == nil { + lastErr = fmt.Errorf("all providers failed") + } + s.recordUsage(ingress, lastAtt, clientIP, modelName, string(endpoint), true, 0, 0, 0, "error", lastErr.Error(), truncateLogBody(rawBody), "[SSE stream]") + return lastErr +} + +func categoryForEndpoint(ep provider.EndpointType) model.ProviderCategory { + switch ep { + case provider.EndpointEmbeddings: + return model.CategoryEmbedding + case provider.EndpointRerank: + return model.CategoryRerank + default: + return model.CategoryLLM + } +} + +func listModelsCategories() []model.ProviderCategory { + return []model.ProviderCategory{ + model.CategoryLLM, + model.CategoryEmbedding, + model.CategoryRerank, + } +} + +func providerInListModelsCategory(cat model.ProviderCategory) bool { + for _, c := range listModelsCategories() { + if c == cat { + return true + } + } + return false +} + +func (s *Service) ListModels(ctx context.Context, ingress *model.IngressKey) ([]map[string]any, error) { + allowedProviders := cache.ParseJSONList(ingress.AllowedProvidersJSON) + var result []map[string]any + var hasLLM bool + for _, p := range s.cache.ListProviders() { + if !providerInListModelsCategory(p.Category) { + continue + } + if !cache.MatchesList(allowedProviders, p.Name) && !cache.MatchesList(allowedProviders, string(p.Type)) { + continue + } + if !s.providerAllowsEndpoint(&p, provider.EndpointListModels) { + continue + } + if p.Category == model.CategoryLLM { + hasLLM = true + } + for _, m := range s.cache.GetModels(p.ID) { + if m.Enabled { + result = append(result, map[string]any{ + "id": IngressModelID(m), "object": "model", "owned_by": p.Name, + }) + } + } + } + if len(result) == 0 && hasLLM { + result = append(result, map[string]any{"id": "gpt-4o-mini", "object": "model", "owned_by": "luminary"}) + } + return result, nil +} + +func (s *Service) FetchModels(ctx context.Context, providerID uint) ([]provider.ModelInfo, error) { + p, ok := s.cache.GetProvider(providerID) + if !ok { + return nil, fmt.Errorf("provider not found") + } + if !s.providerAllowsEndpoint(&p, provider.EndpointListModels) { + return nil, fmt.Errorf("list_models endpoint not enabled") + } + keys := s.cache.ListProviderKeys(providerID) + var firstKey string + for _, k := range keys { + if k.Enabled { + plain, err := s.DecryptAPIKey(k.APIKeyEnc) + if err == nil { + firstKey = plain + break + } + } + } + if firstKey == "" && p.Type != model.ProviderOllama { + return nil, fmt.Errorf("no enabled keys") + } + cfg := s.providerConfig(&p) + if p.Type == model.ProviderAnthropic { + return s.anthropic.ListModelsWithConfig(ctx, firstKey, cfg) + } + return s.openai.ListModelsWithConfig(ctx, firstKey, cfg) +} + +func (s *Service) HealthCheckProvider(ctx context.Context, providerID uint) (model.ProviderStatus, int64, string) { + p, ok := s.cache.GetProvider(providerID) + if !ok { + return model.ProviderUnhealthy, 0, "not found" + } + if !model.IsCategorySupported(p.Category) { + return model.ProviderUnhealthy, 0, "category not supported" + } + if p.Type == model.ProviderComfyUI { + start := time.Now() + if err := comfyui.New(p.BaseURL).HealthCheck(ctx); err != nil { + return model.ProviderUnhealthy, time.Since(start).Milliseconds(), err.Error() + } + return model.ProviderHealthy, time.Since(start).Milliseconds(), "" + } + keys := s.cache.ListProviderKeys(providerID) + if len(keys) == 0 && p.Type != model.ProviderOllama { + return model.ProviderUnhealthy, 0, "no provider keys configured" + } + cfg := s.providerConfig(&p) + return s.runHealthChecks(ctx, &p, keys, cfg) +} diff --git a/internal/gateway/upstream.go b/internal/gateway/upstream.go new file mode 100644 index 0000000..54d3dd2 --- /dev/null +++ b/internal/gateway/upstream.go @@ -0,0 +1,43 @@ +package gateway + +import "net/http" + +// retryableUpstreamStatus reports HTTP codes that should trigger retry / failover. +func retryableUpstreamStatus(code int) bool { + switch code { + case http.StatusTooManyRequests, + http.StatusRequestTimeout, + http.StatusBadGateway, + http.StatusServiceUnavailable, + http.StatusGatewayTimeout: + return true + default: + return code >= 500 + } +} + +// tryNextKeyOnUpstreamStatus reports auth/rate errors where another provider key may work. +func tryNextKeyOnUpstreamStatus(code int) bool { + switch code { + case http.StatusUnauthorized, + http.StatusForbidden, + http.StatusTooManyRequests, + http.StatusPaymentRequired: + return true + default: + return retryableUpstreamStatus(code) + } +} + +// passThroughUpstreamStatus reports client errors that should be returned as-is. +func passThroughUpstreamStatus(code int) bool { + switch code { + case http.StatusBadRequest, + http.StatusNotFound, + http.StatusUnprocessableEntity, + http.StatusUnsupportedMediaType: + return true + default: + return false + } +} diff --git a/internal/gateway/upstream_test.go b/internal/gateway/upstream_test.go new file mode 100644 index 0000000..e48d9ec --- /dev/null +++ b/internal/gateway/upstream_test.go @@ -0,0 +1,27 @@ +package gateway + +import ( + "net/http" + "testing" +) + +func TestRetryableUpstreamStatus(t *testing.T) { + if !retryableUpstreamStatus(http.StatusTooManyRequests) { + t.Fatal("429 should be retryable") + } + if !retryableUpstreamStatus(http.StatusServiceUnavailable) { + t.Fatal("503 should be retryable") + } + if retryableUpstreamStatus(http.StatusBadRequest) { + t.Fatal("400 should not be retryable") + } +} + +func TestTryNextKeyOnUpstreamStatus(t *testing.T) { + if !tryNextKeyOnUpstreamStatus(http.StatusTooManyRequests) { + t.Fatal("429 should try next key") + } + if !tryNextKeyOnUpstreamStatus(http.StatusUnauthorized) { + t.Fatal("401 should try next key") + } +} diff --git a/internal/handler/admin/auth.go b/internal/handler/admin/auth.go new file mode 100644 index 0000000..0fc9831 --- /dev/null +++ b/internal/handler/admin/auth.go @@ -0,0 +1,273 @@ +package admin + +import ( + "crypto/rand" + "encoding/hex" + "encoding/json" + "fmt" + "net/http" + "strconv" + "time" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/auth" + "github.com/rose_cat707/luminary/internal/auth/loginlimit" + "github.com/rose_cat707/luminary/internal/gateway" + "github.com/rose_cat707/luminary/internal/middleware" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/monitor" + "github.com/rose_cat707/luminary/internal/prediction" + "github.com/rose_cat707/luminary/internal/settings" + "github.com/rose_cat707/luminary/internal/storage/imagestore" + "github.com/rose_cat707/luminary/internal/store/cache" + sqlitestore "github.com/rose_cat707/luminary/internal/store/sqlite" +) + +type Handler struct { + repo *sqlitestore.Repository + db *sqlitestore.Store + cache *cache.Store + gateway *gateway.Service + settings *settings.Runtime + monitor *monitor.Service + loginLimit *loginlimit.Limiter + predictions *prediction.Service + images *imagestore.Store + publicURL func() string +} + +func New(repo *sqlitestore.Repository, db *sqlitestore.Store, c *cache.Store, gw *gateway.Service, rt *settings.Runtime, mon *monitor.Service, pred *prediction.Service, imgs *imagestore.Store, publicURL func() string) *Handler { + return &Handler{ + repo: repo, + db: db, + cache: c, + gateway: gw, + settings: rt, + monitor: mon, + loginLimit: loginlimit.New(rt.LoginMaxAttempts(), rt.LoginLockout()), + predictions: pred, + images: imgs, + publicURL: publicURL, + } +} + +func (h *Handler) publicBaseURL() string { + if h.publicURL != nil { + return h.publicURL() + } + return "http://localhost:8293" +} + +func (h *Handler) Register(r *gin.RouterGroup) { + r.POST("/login", h.Login) + r.GET("/auth/status", h.AuthStatus) + + authGroup := r.Group("", middleware.AdminAuth(h.validateSession)) + authGroup.POST("/logout", h.Logout) + authGroup.PUT("/password", h.ChangePassword) + + authGroup.GET("/endpoint-meta", h.ListEndpointMeta) + authGroup.GET("/providers", h.ListProviders) + authGroup.POST("/providers", h.CreateProvider) + authGroup.GET("/providers/:id", h.GetProvider) + authGroup.PUT("/providers/:id", h.UpdateProvider) + authGroup.DELETE("/providers/:id", h.DeleteProvider) + authGroup.POST("/providers/:id/sync-models", h.SyncModels) + + authGroup.GET("/providers/:id/keys", h.ListProviderKeys) + authGroup.POST("/providers/:id/keys", h.CreateProviderKey) + authGroup.PUT("/provider-keys/:keyId", h.UpdateProviderKey) + authGroup.DELETE("/provider-keys/:keyId", h.DeleteProviderKey) + + authGroup.GET("/providers/:id/models", h.ListModels) + authGroup.POST("/providers/:id/models", h.CreateModel) + authGroup.PUT("/providers/:id/models/:modelId", h.UpdateModel) + authGroup.DELETE("/providers/:id/models/:modelId", h.DeleteModel) + authGroup.PUT("/models/:modelId", h.UpdateModel) + authGroup.DELETE("/models/:modelId", h.DeleteModel) + + authGroup.GET("/ingress-keys", h.ListIngressKeys) + authGroup.POST("/ingress-keys", h.CreateIngressKey) + authGroup.GET("/ingress-keys/:id", h.GetIngressKey) + authGroup.PUT("/ingress-keys/:id", h.UpdateIngressKey) + authGroup.DELETE("/ingress-keys/:id", h.DeleteIngressKey) + authGroup.GET("/ingress-keys/:id/usage", h.IngressUsage) + + authGroup.GET("/ingress-keys/:id/routing-rules", h.ListRoutingRules) + authGroup.POST("/ingress-keys/:id/routing-rules", h.CreateRoutingRule) + authGroup.PUT("/routing-rules/:ruleId", h.UpdateRoutingRule) + authGroup.DELETE("/routing-rules/:ruleId", h.DeleteRoutingRule) + + authGroup.GET("/workflows/param-meta", h.GetWorkflowParamMeta) + authGroup.POST("/workflows/analyze", h.AnalyzeWorkflow) + authGroup.GET("/predictions/:id", h.GetPrediction) + authGroup.GET("/images/:id", h.ServeAdminImage) + + authGroup.GET("/request-logs", h.ListRequestLogs) + authGroup.GET("/request-logs/:id", h.GetRequestLog) + authGroup.GET("/pricing/catalog", h.PricingCatalog) + + authGroup.GET("/ip-rules", h.ListIPRules) + authGroup.POST("/ip-rules", h.CreateIPRule) + authGroup.PUT("/ip-rules/:id", h.UpdateIPRule) + authGroup.DELETE("/ip-rules/:id", h.DeleteIPRule) + + authGroup.GET("/settings", h.GetSettings) + authGroup.PUT("/settings", h.UpdateSettings) + + authGroup.GET("/dashboard/overview", h.DashboardOverview) + authGroup.GET("/dashboard/providers", h.DashboardProviders) + authGroup.GET("/dashboard/ingress-usage", h.DashboardIngressUsage) + authGroup.GET("/dashboard/egress-usage", h.DashboardEgressUsage) + authGroup.GET("/dashboard/provider-model-usage", h.DashboardProviderModelUsage) + authGroup.GET("/dashboard/client-ip-usage", h.DashboardClientIPUsage) + authGroup.GET("/dashboard/request-trend", h.DashboardRequestTrend) +} + +func (h *Handler) validateSession(token string) (bool, time.Time) { + hash := auth.HashToken(token) + var session model.AdminSession + if err := h.db.DB().Where("token_hash = ?", hash).First(&session).Error; err != nil { + return false, time.Time{} + } + return session.ExpiresAt.After(time.Now()), session.ExpiresAt +} + +func (h *Handler) Login(c *gin.Context) { + ip := middleware.ClientIP(c) + if locked, retryAfter := h.loginLimit.Check(ip); locked { + sec := int(retryAfter.Seconds()) + 1 + c.Header("Retry-After", strconv.Itoa(sec)) + h.recordLoginLog(ip, "", "error", "登录尝试次数过多", "", fmt.Sprintf(`{"retry_after_sec":%d}`, sec)) + c.JSON(http.StatusTooManyRequests, gin.H{ + "error": "登录尝试次数过多,请稍后再试", + "retry_after_sec": sec, + }) + return + } + + var req struct { + Username string `json:"username"` + Password string `json:"password"` + } + if err := c.ShouldBindJSON(&req); err != nil { + h.recordLoginLog(ip, "", "error", "invalid request", "", "") + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + reqBody := loginRequestBody(req.Username) + + var user model.AdminUser + if err := h.db.DB().Where("username = ?", req.Username).First(&user).Error; err != nil { + h.loginLimit.RecordFailure(ip) + h.recordLoginLog(ip, req.Username, "error", "invalid credentials", reqBody, "") + c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid credentials"}) + return + } + if !auth.CheckPassword(user.PasswordHash, req.Password) { + h.loginLimit.RecordFailure(ip) + h.recordLoginLog(ip, req.Username, "error", "invalid credentials", reqBody, "") + c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid credentials"}) + return + } + h.loginLimit.Reset(ip) + token, err := generateSessionToken() + if err != nil { + h.recordLoginLog(ip, req.Username, "error", "session error", reqBody, "") + c.JSON(http.StatusInternalServerError, gin.H{"error": "session error"}) + return + } + session := model.AdminSession{ + TokenHash: auth.HashToken(token), + ExpiresAt: time.Now().Add(h.settings.SessionTTL()), + } + if err := h.db.DB().Create(&session).Error; err != nil { + h.recordLoginLog(ip, req.Username, "error", "session error", reqBody, "") + c.JSON(http.StatusInternalServerError, gin.H{"error": "session error"}) + return + } + respBody := fmt.Sprintf(`{"expires_at":%q}`, session.ExpiresAt.Format(time.RFC3339)) + h.recordLoginLog(ip, req.Username, "success", "", reqBody, respBody) + c.SetSameSite(http.SameSiteStrictMode) + c.SetCookie(middleware.SessionCookieName(), token, int(h.settings.SessionTTL().Seconds()), "/", "", false, true) + c.JSON(http.StatusOK, gin.H{"token": token, "expires_at": session.ExpiresAt}) +} + +func loginRequestBody(username string) string { + b, _ := json.Marshal(map[string]string{"username": username}) + return string(b) +} + +func (h *Handler) recordLoginLog(ip, username, status, errMsg, requestBody, responseBody string) { + h.repo.RecordRequestLog(model.UsageRecord{ + ClientIP: ip, + Endpoint: model.EndpointAdminLogin, + Model: username, + Status: status, + ErrorMsg: errMsg, + RequestBody: requestBody, + ResponseBody: responseBody, + }) +} + +func (h *Handler) Logout(c *gin.Context) { + token, _ := c.Get("session_token") + if t, ok := token.(string); ok { + h.db.DB().Where("token_hash = ?", auth.HashToken(t)).Delete(&model.AdminSession{}) + } + c.SetCookie(middleware.SessionCookieName(), "", -1, "/", "", false, true) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (h *Handler) AuthStatus(c *gin.Context) { + token := c.GetHeader("Authorization") + if len(token) > 7 { + token = token[7:] + } + if token == "" { + if cookie, err := c.Cookie(middleware.SessionCookieName()); err == nil { + token = cookie + } + } + valid := false + if token != "" { + valid, _ = h.validateSession(token) + } + c.JSON(http.StatusOK, gin.H{"authenticated": valid}) +} + +func (h *Handler) ChangePassword(c *gin.Context) { + var req struct { + OldPassword string `json:"old_password"` + NewPassword string `json:"new_password"` + } + if err := c.ShouldBindJSON(&req); err != nil || req.NewPassword == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + var user model.AdminUser + if err := h.db.DB().First(&user).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "user not found"}) + return + } + if !auth.CheckPassword(user.PasswordHash, req.OldPassword) { + c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid old password"}) + return + } + hash, err := auth.HashPassword(req.NewPassword) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "hash error"}) + return + } + user.PasswordHash = hash + h.db.DB().Save(&user) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func generateSessionToken() (string, error) { + b := make([]byte, 32) + if _, err := rand.Read(b); err != nil { + return "", err + } + return hex.EncodeToString(b), nil +} diff --git a/internal/handler/admin/helpers.go b/internal/handler/admin/helpers.go new file mode 100644 index 0000000..2ab63a3 --- /dev/null +++ b/internal/handler/admin/helpers.go @@ -0,0 +1,29 @@ +package admin + +import ( + "fmt" + "strconv" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/provider" + "github.com/rose_cat707/luminary/internal/provider/anthropic" + "github.com/rose_cat707/luminary/internal/provider/custom" + "github.com/rose_cat707/luminary/internal/provider/openai" +) + +func parseUint(s string) uint { + v, _ := strconv.ParseUint(s, 10, 64) + return uint(v) +} + +func (h *Handler) gatewayClient(t model.ProviderType) (provider.Client, error) { + switch t { + case model.ProviderOpenAI, model.ProviderAzureOpenAI, model.ProviderOpenRouter, model.ProviderOllama: + return openai.New(), nil + case model.ProviderAnthropic: + return anthropic.New(), nil + case model.ProviderCustom: + return custom.New(), nil + default: + return nil, fmt.Errorf("unsupported provider type: %s", t) + } +} diff --git a/internal/handler/admin/ingress.go b/internal/handler/admin/ingress.go new file mode 100644 index 0000000..57b7557 --- /dev/null +++ b/internal/handler/admin/ingress.go @@ -0,0 +1,163 @@ +package admin + +import ( + "crypto/rand" + "encoding/hex" + "net/http" + "time" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/auth" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/store/cache" +) + +func (h *Handler) ListIngressKeys(c *gin.Context) { + keys := h.cache.ListIngressKeys() + c.JSON(http.StatusOK, gin.H{"data": keys}) +} + +func (h *Handler) CreateIngressKey(c *gin.Context) { + var req struct { + Name string `json:"name"` + BudgetLimit float64 `json:"budget_limit"` + RateLimitRPM int `json:"rate_limit_rpm"` + RateLimitTPM int `json:"rate_limit_tpm"` + AllowedProviders []string `json:"allowed_providers"` + AllowedModels []string `json:"allowed_models"` + ExpiresAt *time.Time `json:"expires_at"` + } + if err := c.ShouldBindJSON(&req); err != nil || req.Name == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + plainKey, err := generateIngressKey() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "key generation failed"}) + return + } + hash := auth.HashIngressKey(plainKey) + providersJSON := `["*"]` + modelsJSON := `["*"]` + if req.AllowedProviders != nil { + if len(req.AllowedProviders) == 0 { + providersJSON = `["*"]` + } else { + providersJSON = cache.ModelsToJSON(req.AllowedProviders) + } + } + if req.AllowedModels != nil { + if len(req.AllowedModels) == 0 { + modelsJSON = `["*"]` + } else { + modelsJSON = cache.ModelsToJSON(req.AllowedModels) + } + } + k := model.IngressKey{ + Name: req.Name, + KeyHash: hash, + Prefix: plainKey[:12] + "...", + Enabled: true, + BudgetLimit: req.BudgetLimit, + RateLimitRPM: req.RateLimitRPM, + RateLimitTPM: req.RateLimitTPM, + AllowedProvidersJSON: providersJSON, + AllowedModelsJSON: modelsJSON, + ExpiresAt: req.ExpiresAt, + } + if err := h.db.DB().Create(&k).Error; err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + h.cache.SetIngressKey(k) + c.JSON(http.StatusCreated, gin.H{"key": k, "plain_key": plainKey}) +} + +func (h *Handler) GetIngressKey(c *gin.Context) { + id := parseUint(c.Param("id")) + k, ok := h.cache.GetIngressKey(id) + if !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + c.JSON(http.StatusOK, k) +} + +func (h *Handler) UpdateIngressKey(c *gin.Context) { + id := parseUint(c.Param("id")) + k, ok := h.cache.GetIngressKey(id) + if !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + var req struct { + Name string `json:"name"` + Enabled *bool `json:"enabled"` + BudgetLimit *float64 `json:"budget_limit"` + RateLimitRPM *int `json:"rate_limit_rpm"` + RateLimitTPM *int `json:"rate_limit_tpm"` + AllowedProviders []string `json:"allowed_providers"` + AllowedModels []string `json:"allowed_models"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + if req.Name != "" { + k.Name = req.Name + } + if req.Enabled != nil { + k.Enabled = *req.Enabled + } + if req.BudgetLimit != nil { + k.BudgetLimit = *req.BudgetLimit + } + if req.RateLimitRPM != nil { + k.RateLimitRPM = *req.RateLimitRPM + } + if req.RateLimitTPM != nil { + k.RateLimitTPM = *req.RateLimitTPM + } + if req.AllowedProviders != nil { + if len(req.AllowedProviders) == 0 { + k.AllowedProvidersJSON = `["*"]` + } else { + k.AllowedProvidersJSON = cache.ModelsToJSON(req.AllowedProviders) + } + } + if req.AllowedModels != nil { + if len(req.AllowedModels) == 0 { + k.AllowedModelsJSON = `["*"]` + } else { + k.AllowedModelsJSON = cache.ModelsToJSON(req.AllowedModels) + } + } + h.db.DB().Save(&k) + h.cache.SetIngressKey(k) + c.JSON(http.StatusOK, k) +} + +func (h *Handler) DeleteIngressKey(c *gin.Context) { + id := parseUint(c.Param("id")) + h.db.DB().Where("ingress_key_id = ?", id).Delete(&model.RoutingRule{}) + h.db.DB().Delete(&model.IngressKey{}, id) + h.cache.DeleteIngressKey(id) + h.cache.DeleteRoutingRulesForIngress(id) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (h *Handler) IngressUsage(c *gin.Context) { + id := parseUint(c.Param("id")) + var records []model.UsageRecord + h.db.DB().Where("ingress_key_id = ?", id).Order("created_at desc").Limit(50).Find(&records) + k, _ := h.cache.GetIngressKey(id) + c.JSON(http.StatusOK, gin.H{"key": k, "recent": records}) +} + +func generateIngressKey() (string, error) { + b := make([]byte, 24) + if _, err := rand.Read(b); err != nil { + return "", err + } + return "sk-lum-" + hex.EncodeToString(b), nil +} diff --git a/internal/handler/admin/ip_dashboard.go b/internal/handler/admin/ip_dashboard.go new file mode 100644 index 0000000..8412863 --- /dev/null +++ b/internal/handler/admin/ip_dashboard.go @@ -0,0 +1,243 @@ +package admin + +import ( + "net/http" + "time" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/model" +) + +func (h *Handler) ListIPRules(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"data": h.cache.ListIPRules()}) +} + +func (h *Handler) CreateIPRule(c *gin.Context) { + var req struct { + CIDR string `json:"cidr"` + Type model.IPRuleType `json:"type"` + Scope model.IPRuleScope `json:"scope"` + Enabled *bool `json:"enabled"` + } + if err := c.ShouldBindJSON(&req); err != nil || req.CIDR == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + if req.Type == "" { + req.Type = model.IPRuleAllow + } + if req.Scope == "" { + req.Scope = model.IPScopeProxy + } + rule := model.IPRule{CIDR: req.CIDR, Type: req.Type, Scope: req.Scope, Enabled: true} + if req.Enabled != nil { + rule.Enabled = *req.Enabled + } + if err := h.db.DB().Create(&rule).Error; err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + rules := h.cache.ListIPRules() + rules = append(rules, rule) + h.cache.SetIPRules(rules) + c.JSON(http.StatusCreated, rule) +} + +func (h *Handler) UpdateIPRule(c *gin.Context) { + id := parseUint(c.Param("id")) + var rule model.IPRule + if err := h.db.DB().First(&rule, id).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + var req struct { + CIDR string `json:"cidr"` + Type model.IPRuleType `json:"type"` + Scope model.IPRuleScope `json:"scope"` + Enabled *bool `json:"enabled"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + if req.CIDR != "" { + rule.CIDR = req.CIDR + } + if req.Type != "" { + rule.Type = req.Type + } + if req.Scope != "" { + rule.Scope = req.Scope + } + if req.Enabled != nil { + rule.Enabled = *req.Enabled + } + h.db.DB().Save(&rule) + h.reloadIPRules() + c.JSON(http.StatusOK, rule) +} + +func (h *Handler) DeleteIPRule(c *gin.Context) { + id := parseUint(c.Param("id")) + h.db.DB().Delete(&model.IPRule{}, id) + h.reloadIPRules() + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (h *Handler) reloadIPRules() { + var rules []model.IPRule + h.db.DB().Find(&rules) + h.cache.SetIPRules(rules) +} + +func (h *Handler) DashboardOverview(c *gin.Context) { + since := time.Now().Add(-24 * time.Hour) + var totalRequests int64 + var totalTokens int64 + var errorCount int64 + h.db.DB().Model(&model.UsageRecord{}).Where("created_at >= ?", since).Count(&totalRequests) + h.db.DB().Model(&model.UsageRecord{}).Where("created_at >= ?", since).Select("COALESCE(SUM(tokens_in + tokens_out), 0)").Scan(&totalTokens) + h.db.DB().Model(&model.UsageRecord{}).Where("created_at >= ? AND status = ?", since, "error").Count(&errorCount) + activeKeys := len(h.cache.ListIngressKeys()) + errorRate := 0.0 + if totalRequests > 0 { + errorRate = float64(errorCount) / float64(totalRequests) + } + c.JSON(http.StatusOK, gin.H{ + "total_requests_24h": totalRequests, + "total_tokens_24h": totalTokens, + "error_rate": errorRate, + "active_ingress_keys": activeKeys, + "providers": len(h.cache.ListProviders()), + }) +} + +func (h *Handler) DashboardProviders(c *gin.Context) { + providers := h.cache.ListProviders() + health := h.cache.GetHealthStatus() + type item struct { + model.Provider + Health model.HealthCheckRecord `json:"health"` + } + var out []item + for _, p := range providers { + out = append(out, item{Provider: p, Health: health[p.ID]}) + } + c.JSON(http.StatusOK, gin.H{"data": out}) +} + +func (h *Handler) DashboardIngressUsage(c *gin.Context) { + keys := h.cache.ListIngressKeys() + c.JSON(http.StatusOK, gin.H{"data": keys}) +} + +func (h *Handler) DashboardEgressUsage(c *gin.Context) { + keys := h.cache.ListAllProviderKeys() + c.JSON(http.StatusOK, gin.H{"data": keys}) +} + +func (h *Handler) DashboardProviderModelUsage(c *gin.Context) { + since := time.Now().Add(-24 * time.Hour) + type row struct { + ProviderID uint `json:"provider_id"` + Model string `json:"model"` + RequestCount int64 `json:"request_count"` + TokenCount int64 `json:"token_count"` + Cost float64 `json:"cost"` + } + var rows []row + h.db.DB().Model(&model.UsageRecord{}). + Select("provider_id, model, COUNT(*) as request_count, COALESCE(SUM(tokens_in + tokens_out), 0) as token_count, COALESCE(SUM(cost), 0) as cost"). + Where("created_at >= ? AND provider_id > 0 AND model != ''", since). + Group("provider_id, model"). + Order("request_count desc"). + Limit(50). + Scan(&rows) + + type item struct { + ProviderID uint `json:"provider_id"` + ProviderName string `json:"provider_name"` + Model string `json:"model"` + RequestCount int64 `json:"request_count"` + TokenCount int64 `json:"token_count"` + Cost float64 `json:"cost"` + } + out := make([]item, 0, len(rows)) + for _, r := range rows { + name := "" + if p, ok := h.cache.GetProvider(r.ProviderID); ok { + name = p.Name + } + out = append(out, item{ + ProviderID: r.ProviderID, + ProviderName: name, + Model: r.Model, + RequestCount: r.RequestCount, + TokenCount: r.TokenCount, + Cost: r.Cost, + }) + } + c.JSON(http.StatusOK, gin.H{"data": out}) +} + +func (h *Handler) DashboardClientIPUsage(c *gin.Context) { + since := time.Now().Add(-24 * time.Hour) + type item struct { + ClientIP string `json:"client_ip"` + RequestCount int64 `json:"request_count"` + TokenCount int64 `json:"token_count"` + Cost float64 `json:"cost"` + } + var out []item + h.db.DB().Model(&model.UsageRecord{}). + Select("client_ip, COUNT(*) as request_count, COALESCE(SUM(tokens_in + tokens_out), 0) as token_count, COALESCE(SUM(cost), 0) as cost"). + Where("created_at >= ? AND client_ip != ''", since). + Group("client_ip"). + Order("request_count desc"). + Limit(50). + Scan(&out) + c.JSON(http.StatusOK, gin.H{"data": out}) +} + +func (h *Handler) DashboardRequestTrend(c *gin.Context) { + since := time.Now().Add(-23 * time.Hour).Truncate(time.Hour) + type aggRow struct { + Hour string `gorm:"column:hour"` + Requests int64 `gorm:"column:requests"` + Errors int64 `gorm:"column:errors"` + Tokens int64 `gorm:"column:tokens"` + } + var rows []aggRow + h.db.DB().Model(&model.UsageRecord{}). + Select(`strftime('%Y-%m-%d %H:00', created_at) as hour, + COUNT(*) as requests, + SUM(CASE WHEN status = 'error' THEN 1 ELSE 0 END) as errors, + COALESCE(SUM(tokens_in + tokens_out), 0) as tokens`). + Where("created_at >= ?", since). + Group("hour"). + Order("hour"). + Scan(&rows) + + byHour := make(map[string]aggRow, len(rows)) + for _, r := range rows { + byHour[r.Hour] = r + } + + type bucket struct { + Hour string `json:"hour"` + Requests int64 `json:"requests"` + Errors int64 `json:"errors"` + Tokens int64 `json:"tokens"` + } + out := make([]bucket, 24) + for i := 0; i < 24; i++ { + t := since.Add(time.Duration(i) * time.Hour) + key := t.Format("2006-01-02 15:00") + if r, ok := byHour[key]; ok { + out[i] = bucket{Hour: key, Requests: r.Requests, Errors: r.Errors, Tokens: r.Tokens} + } else { + out[i] = bucket{Hour: key} + } + } + c.JSON(http.StatusOK, gin.H{"data": out}) +} diff --git a/internal/handler/admin/providers.go b/internal/handler/admin/providers.go new file mode 100644 index 0000000..fe0e806 --- /dev/null +++ b/internal/handler/admin/providers.go @@ -0,0 +1,196 @@ +package admin + +import ( + "encoding/json" + "net/http" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/provider" + "github.com/rose_cat707/luminary/internal/store/cache" +) + +func (h *Handler) ListEndpointMeta(c *gin.Context) { + category := model.ProviderCategory(c.Query("category")) + if category == "" { + category = model.CategoryLLM + } + providerType := model.ProviderType(c.Query("type")) + if providerType == "" { + providerType = provider.DefaultProviderType(category) + } + endpoints := provider.EndpointsForCategory(category) + providerTypes := provider.TypesForCategory(category) + type item struct { + provider.EndpointMeta + DefaultPath string `json:"default_path"` + } + out := make([]item, 0, len(endpoints)) + for _, e := range endpoints { + out = append(out, item{ + EndpointMeta: e, + DefaultPath: provider.DefaultPath(providerType, e.Key), + }) + } + c.JSON(http.StatusOK, gin.H{ + "categories": []gin.H{ + {"key": model.CategoryLLM, "label": provider.CategoryLabel(model.CategoryLLM), "supported": true}, + {"key": model.CategoryEmbedding, "label": provider.CategoryLabel(model.CategoryEmbedding), "supported": true}, + {"key": model.CategoryRerank, "label": provider.CategoryLabel(model.CategoryRerank), "supported": true}, + {"key": model.CategorySpeech, "label": provider.CategoryLabel(model.CategorySpeech), "supported": false}, + {"key": model.CategoryImage, "label": provider.CategoryLabel(model.CategoryImage), "supported": true}, + {"key": model.CategoryAudio, "label": provider.CategoryLabel(model.CategoryAudio), "supported": false}, + }, + "provider_types": providerTypes, + "all_provider_types": provider.AllProviderTypes(), + "endpoints": out, + }) +} + +func (h *Handler) ListProviders(c *gin.Context) { + category := c.Query("category") + providers := h.cache.ListProviders() + if category != "" { + filtered := providers[:0] + for _, p := range providers { + if string(p.Category) == category { + filtered = append(filtered, p) + } + } + providers = filtered + } + out := make([]model.Provider, 0, len(providers)) + for _, p := range providers { + p.Models = h.cache.GetModels(p.ID) + out = append(out, p) + } + c.JSON(http.StatusOK, gin.H{"data": out}) +} + +func (h *Handler) CreateProvider(c *gin.Context) { + var req struct { + Name string `json:"name"` + Type model.ProviderType `json:"type"` + Category model.ProviderCategory `json:"category"` + BaseURL string `json:"base_url"` + AllowedEndpoints []string `json:"allowed_endpoints"` + EndpointPaths map[string]string `json:"endpoint_paths"` + } + if err := c.ShouldBindJSON(&req); err != nil || req.Name == "" || req.Type == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + if req.Category == "" { + req.Category = model.CategoryLLM + } + if !model.IsCategorySupported(req.Category) { + c.JSON(http.StatusBadRequest, gin.H{"error": "category not supported"}) + return + } + if !provider.IsTypeValidForCategory(req.Category, req.Type) { + c.JSON(http.StatusBadRequest, gin.H{"error": "protocol type not supported for this category"}) + return + } + if h.providerNameTaken(req.Name, 0) { + c.JSON(http.StatusBadRequest, gin.H{"error": "provider name already exists"}) + return + } + allowed := req.AllowedEndpoints + if len(allowed) == 0 { + allowed = provider.DefaultEndpointsForCategory(req.Category) + } + if err := provider.ValidateCategoryEndpoints(req.Category, allowed); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + pathsJSON, _ := json.Marshal(req.EndpointPaths) + if req.EndpointPaths == nil { + pathsJSON = []byte("{}") + } + p := model.Provider{ + Name: req.Name, + Type: req.Type, + Category: req.Category, + BaseURL: req.BaseURL, + AllowedEndpointsJSON: cache.ModelsToJSON(allowed), + EndpointPathsJSON: string(pathsJSON), + Status: model.ProviderUnknown, + } + if err := h.db.DB().Create(&p).Error; err != nil { + if h.providerNameTaken(req.Name, 0) { + c.JSON(http.StatusBadRequest, gin.H{"error": "provider name already exists"}) + return + } + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + h.cache.SetProvider(p) + c.JSON(http.StatusCreated, p) +} + +func (h *Handler) GetProvider(c *gin.Context) { + id := parseUint(c.Param("id")) + p, ok := h.cache.GetProvider(id) + if !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + p.Keys = h.cache.ListProviderKeys(id) + p.Models = h.cache.GetModels(id) + c.JSON(http.StatusOK, p) +} + +func (h *Handler) UpdateProvider(c *gin.Context) { + id := parseUint(c.Param("id")) + p, ok := h.cache.GetProvider(id) + if !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + var req struct { + Name string `json:"name"` + BaseURL string `json:"base_url"` + Category model.ProviderCategory `json:"category"` + AllowedEndpoints []string `json:"allowed_endpoints"` + EndpointPaths map[string]string `json:"endpoint_paths"` + Enabled *bool `json:"enabled"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + if req.Name != "" && req.Name != p.Name { + if h.providerNameTaken(req.Name, p.ID) { + c.JSON(http.StatusBadRequest, gin.H{"error": "provider name already exists"}) + return + } + p.Name = req.Name + } + if req.BaseURL != "" { + p.BaseURL = req.BaseURL + } + if req.Category != "" { + if !model.IsCategorySupported(req.Category) { + c.JSON(http.StatusBadRequest, gin.H{"error": "category not supported yet"}) + return + } + p.Category = req.Category + } + if req.AllowedEndpoints != nil { + if err := provider.ValidateCategoryEndpoints(p.Category, req.AllowedEndpoints); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + p.AllowedEndpointsJSON = cache.ModelsToJSON(req.AllowedEndpoints) + } + if req.EndpointPaths != nil { + b, _ := json.Marshal(req.EndpointPaths) + p.EndpointPathsJSON = string(b) + } + if req.Enabled != nil { + p.Enabled = *req.Enabled + } + h.db.DB().Save(&p) + h.cache.SetProvider(p) + c.JSON(http.StatusOK, p) +} diff --git a/internal/handler/admin/providers_keys.go b/internal/handler/admin/providers_keys.go new file mode 100644 index 0000000..52007c7 --- /dev/null +++ b/internal/handler/admin/providers_keys.go @@ -0,0 +1,418 @@ +package admin + +import ( + "encoding/json" + "net/http" + "slices" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/auth" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/prediction" + "github.com/rose_cat707/luminary/internal/provider" + "github.com/rose_cat707/luminary/internal/store/cache" +) + +func (h *Handler) DeleteProvider(c *gin.Context) { + id := parseUint(c.Param("id")) + h.db.DB().Where("provider_id = ?", id).Delete(&model.ProviderKey{}) + h.db.DB().Where("provider_id = ?", id).Delete(&model.ModelEntry{}) + h.db.DB().Delete(&model.Provider{}, id) + h.cache.DeleteProvider(id) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (h *Handler) SyncModels(c *gin.Context) { + id := parseUint(c.Param("id")) + p, ok := h.cache.GetProvider(id) + if !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "provider not found"}) + return + } + allowed := provider.ParseAllowedEndpoints(p.AllowedEndpointsJSON, p.Category) + if !slices.Contains(allowed, string(provider.EndpointListModels)) { + c.JSON(http.StatusBadRequest, gin.H{"error": "list_models endpoint not enabled"}) + return + } + models, err := h.gateway.FetchModels(c.Request.Context(), id) + if err != nil { + c.JSON(http.StatusBadGateway, gin.H{"error": err.Error()}) + return + } + existing := h.cache.GetModels(id) + existingByModelID := make(map[string]model.ModelEntry, len(existing)) + for _, e := range existing { + existingByModelID[e.ModelID] = e + } + upstreamIDs := make(map[string]bool, len(models)) + var entries []model.ModelEntry + for _, m := range models { + upstreamIDs[m.ID] = true + if old, ok := existingByModelID[m.ID]; ok { + old.DisplayName = m.DisplayName + if old.DisplayName == "" { + old.DisplayName = m.ID + } + if err := h.db.DB().Save(&old).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + entries = append(entries, old) + continue + } + displayName := m.DisplayName + if displayName == "" { + displayName = m.ID + } + entry := model.ModelEntry{ + ProviderID: id, + ModelID: m.ID, + DisplayName: displayName, + Enabled: true, + } + if err := h.db.DB().Create(&entry).Error; err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + entries = append(entries, entry) + } + for _, e := range existing { + if !upstreamIDs[e.ModelID] { + entries = append(entries, e) + } + } + h.cache.SetModels(id, entries) + c.JSON(http.StatusOK, gin.H{"synced": len(models), "models": entries}) +} + +func (h *Handler) ListProviderKeys(c *gin.Context) { + id := parseUint(c.Param("id")) + c.JSON(http.StatusOK, gin.H{"data": h.cache.ListProviderKeys(id)}) +} + +func (h *Handler) CreateProviderKey(c *gin.Context) { + providerID := parseUint(c.Param("id")) + var req struct { + Name string `json:"name"` + APIKey string `json:"api_key"` + Weight float64 `json:"weight"` + Models []string `json:"models"` + Enabled *bool `json:"enabled"` + MaxRequestsPerDay int `json:"max_requests_per_day"` + MaxTokensPerDay int64 `json:"max_tokens_per_day"` + } + if err := c.ShouldBindJSON(&req); err != nil || req.Name == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + if req.APIKey == "" { + var p model.Provider + h.db.DB().First(&p, providerID) + if p.Type != model.ProviderOllama { + c.JSON(http.StatusBadRequest, gin.H{"error": "api_key required"}) + return + } + req.APIKey = "ollama" + } + enc, err := auth.Encrypt(req.APIKey, h.settings.EncryptionKey()) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "encrypt failed"}) + return + } + modelsJSON := cache.ModelsToJSON(req.Models) + if req.Models == nil { + modelsJSON = `["*"]` + } + k := model.ProviderKey{ + ProviderID: providerID, + Name: req.Name, + APIKeyEnc: enc, + Weight: req.Weight, + ModelsJSON: modelsJSON, + Enabled: true, + MaxRequestsPerDay: req.MaxRequestsPerDay, + MaxTokensPerDay: req.MaxTokensPerDay, + } + if req.Weight <= 0 { + k.Weight = 1 + } + if req.Enabled != nil { + k.Enabled = *req.Enabled + } + if err := h.db.DB().Create(&k).Error; err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + h.cache.SetProviderKey(k) + c.JSON(http.StatusCreated, k) +} + +func (h *Handler) UpdateProviderKey(c *gin.Context) { + keyID := parseUint(c.Param("keyId")) + k, ok := h.cache.GetProviderKey(keyID) + if !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + var req struct { + Name string `json:"name"` + APIKey string `json:"api_key"` + Weight float64 `json:"weight"` + Models []string `json:"models"` + Enabled *bool `json:"enabled"` + MaxRequestsPerDay int `json:"max_requests_per_day"` + MaxTokensPerDay int64 `json:"max_tokens_per_day"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + if req.Name != "" { + k.Name = req.Name + } + if req.APIKey != "" { + enc, err := auth.Encrypt(req.APIKey, h.settings.EncryptionKey()) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "encrypt failed"}) + return + } + k.APIKeyEnc = enc + } + if req.Weight > 0 { + k.Weight = req.Weight + } + if req.Models != nil { + k.ModelsJSON = cache.ModelsToJSON(req.Models) + } + if req.Enabled != nil { + k.Enabled = *req.Enabled + } + if req.MaxRequestsPerDay >= 0 { + k.MaxRequestsPerDay = req.MaxRequestsPerDay + } + if req.MaxTokensPerDay >= 0 { + k.MaxTokensPerDay = req.MaxTokensPerDay + } + h.db.DB().Save(&k) + h.cache.SetProviderKey(k) + c.JSON(http.StatusOK, k) +} + +func (h *Handler) DeleteProviderKey(c *gin.Context) { + keyID := parseUint(c.Param("keyId")) + h.db.DB().Delete(&model.ProviderKey{}, keyID) + h.cache.DeleteProviderKey(keyID) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (h *Handler) ListModels(c *gin.Context) { + id := parseUint(c.Param("id")) + if _, ok := h.cache.GetProvider(id); !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "provider not found"}) + return + } + c.JSON(http.StatusOK, gin.H{"data": h.cache.GetModels(id)}) +} + +func (h *Handler) CreateModel(c *gin.Context) { + providerID := parseUint(c.Param("id")) + prov, ok := h.cache.GetProvider(providerID) + if !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "provider not found"}) + return + } + var req struct { + ModelID string `json:"model_id"` + Alias string `json:"alias"` + DisplayName string `json:"display_name"` + WorkflowType model.WorkflowType `json:"workflow_type"` + WorkflowJSON string `json:"workflow_json"` + InputBindingJSON string `json:"input_binding_json"` + InputBinding map[string]*prediction.NodeField `json:"input_binding"` + } + if err := c.ShouldBindJSON(&req); err != nil || req.ModelID == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + for _, existing := range h.cache.GetModels(providerID) { + if existing.ModelID == req.ModelID { + c.JSON(http.StatusBadRequest, gin.H{"error": "model already exists"}) + return + } + } + if msg := validateModelAlias(h, req.Alias, 0); msg != "" { + c.JSON(http.StatusBadRequest, gin.H{"error": msg}) + return + } + if prov.Category == model.CategoryImage { + if err := validateImageModelCreate(struct { + ModelID, DisplayName string + WorkflowType model.WorkflowType + WorkflowJSON, InputBindingJSON string + InputBinding map[string]*prediction.NodeField + }{req.ModelID, req.DisplayName, req.WorkflowType, req.WorkflowJSON, req.InputBindingJSON, req.InputBinding}); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + } + bindingJSON := req.InputBindingJSON + if bindingJSON == "" && req.InputBinding != nil { + b, _ := json.Marshal(req.InputBinding) + bindingJSON = string(b) + } + wt := req.WorkflowType + if wt == "" { + wt = model.WorkflowTxt2Img + } + m := model.ModelEntry{ + ProviderID: providerID, + ModelID: req.ModelID, + Alias: normalizeAlias(req.Alias), + DisplayName: req.DisplayName, + WorkflowType: wt, + WorkflowJSON: req.WorkflowJSON, + InputBindingJSON: bindingJSON, + VersionHash: prediction.HashWorkflowJSON(req.WorkflowJSON), + Enabled: true, + } + if m.DisplayName == "" { + m.DisplayName = req.ModelID + } + if err := h.db.DB().Create(&m).Error; err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + models := h.cache.GetModels(providerID) + models = append(models, m) + h.cache.SetModels(providerID, models) + c.JSON(http.StatusCreated, m) +} + +func (h *Handler) UpdateModel(c *gin.Context) { + providerID := parseUint(c.Param("id")) + modelID := parseUint(c.Param("modelId")) + var req struct { + Enabled *bool `json:"enabled"` + DisplayName string `json:"display_name"` + Alias *string `json:"alias"` + ModelID string `json:"model_id"` + WorkflowType model.WorkflowType `json:"workflow_type"` + WorkflowJSON string `json:"workflow_json"` + InputBindingJSON string `json:"input_binding_json"` + InputBinding map[string]*prediction.NodeField `json:"input_binding"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + m, ok := h.findModelEntry(providerID, modelID, req.ModelID) + if !ok { + c.JSON(http.StatusNotFound, gin.H{"error": "model not found"}) + return + } + if req.Enabled != nil { + m.Enabled = *req.Enabled + } + if req.DisplayName != "" { + m.DisplayName = req.DisplayName + } + if req.Alias != nil { + normalized := normalizeAlias(*req.Alias) + if msg := validateModelAlias(h, normalized, m.ID); msg != "" { + c.JSON(http.StatusBadRequest, gin.H{"error": msg}) + return + } + m.Alias = normalized + } + if req.ModelID != "" && req.ModelID != m.ModelID { + for _, existing := range h.cache.GetModels(m.ProviderID) { + if existing.ID != m.ID && existing.ModelID == req.ModelID { + c.JSON(http.StatusBadRequest, gin.H{"error": "model already exists"}) + return + } + } + m.ModelID = req.ModelID + } + if req.WorkflowType != "" { + m.WorkflowType = req.WorkflowType + } + if req.WorkflowJSON != "" { + m.WorkflowJSON = req.WorkflowJSON + m.VersionHash = prediction.HashWorkflowJSON(req.WorkflowJSON) + } + if req.InputBindingJSON != "" { + m.InputBindingJSON = req.InputBindingJSON + } else if req.InputBinding != nil { + b, _ := json.Marshal(req.InputBinding) + m.InputBindingJSON = string(b) + } + prov, _ := h.cache.GetProvider(m.ProviderID) + if prov.Category == model.CategoryImage && m.WorkflowJSON != "" { + if err := validateImageModelCreate(struct { + ModelID, DisplayName string + WorkflowType model.WorkflowType + WorkflowJSON, InputBindingJSON string + InputBinding map[string]*prediction.NodeField + }{m.ModelID, m.DisplayName, m.WorkflowType, m.WorkflowJSON, m.InputBindingJSON, nil}); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + } + if err := h.db.DB().Save(&m).Error; err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + models := h.cache.GetModels(m.ProviderID) + for i := range models { + if models[i].ID == m.ID { + models[i] = m + break + } + } + h.cache.SetModels(m.ProviderID, models) + c.JSON(http.StatusOK, m) +} + +func (h *Handler) findModelEntry(providerID, entryID uint, modelID string) (model.ModelEntry, bool) { + var m model.ModelEntry + if entryID > 0 { + if err := h.db.DB().First(&m, entryID).Error; err == nil { + if providerID > 0 && m.ProviderID != providerID { + return model.ModelEntry{}, false + } + return m, true + } + } + if providerID > 0 && modelID != "" { + if err := h.db.DB().Where("provider_id = ? AND model_id = ?", providerID, modelID).First(&m).Error; err == nil { + return m, true + } + } + return model.ModelEntry{}, false +} + +func (h *Handler) DeleteModel(c *gin.Context) { + modelID := parseUint(c.Param("modelId")) + var m model.ModelEntry + if err := h.db.DB().First(&m, modelID).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if providerID := parseUint(c.Param("id")); providerID > 0 && m.ProviderID != providerID { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + if err := h.db.DB().Delete(&m).Error; err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + models := h.cache.GetModels(m.ProviderID) + filtered := models[:0] + for _, item := range models { + if item.ID != modelID { + filtered = append(filtered, item) + } + } + h.cache.SetModels(m.ProviderID, filtered) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} diff --git a/internal/handler/admin/providers_util.go b/internal/handler/admin/providers_util.go new file mode 100644 index 0000000..298230f --- /dev/null +++ b/internal/handler/admin/providers_util.go @@ -0,0 +1,51 @@ +package admin + +import ( + "strings" +) + +func (h *Handler) providerNameTaken(name string, excludeID uint) bool { + name = strings.TrimSpace(name) + if name == "" { + return false + } + for _, p := range h.cache.ListProviders() { + if p.ID != excludeID && p.Name == name { + return true + } + } + return false +} + +func (h *Handler) modelAliasTaken(alias string, excludeModelID uint) bool { + alias = strings.TrimSpace(alias) + if alias == "" { + return false + } + for _, p := range h.cache.ListProviders() { + for _, m := range h.cache.GetModels(p.ID) { + if m.ID == excludeModelID { + continue + } + if m.Alias == alias { + return true + } + } + } + return false +} + +func normalizeAlias(alias string) string { + return strings.TrimSpace(alias) +} + +func validateModelAlias(h *Handler, alias string, excludeModelID uint) string { + alias = normalizeAlias(alias) + if alias == "" { + return "" + } + if h.modelAliasTaken(alias, excludeModelID) { + return "model alias already exists" + } + return "" +} diff --git a/internal/handler/admin/routing_logs.go b/internal/handler/admin/routing_logs.go new file mode 100644 index 0000000..da23947 --- /dev/null +++ b/internal/handler/admin/routing_logs.go @@ -0,0 +1,220 @@ +package admin + +import ( + "net/http" + "strconv" + "time" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/pricing" +) + +func (h *Handler) ListRoutingRules(c *gin.Context) { + ingressID := parseUint(c.Param("id")) + c.JSON(http.StatusOK, gin.H{"data": h.cache.ListRoutingRules(ingressID)}) +} + +func (h *Handler) CreateRoutingRule(c *gin.Context) { + ingressID := parseUint(c.Param("id")) + var req struct { + ModelPattern string `json:"model_pattern"` + ProviderID uint `json:"provider_id"` + ProviderKeyID uint `json:"provider_key_id"` + Priority int `json:"priority"` + Enabled *bool `json:"enabled"` + } + if err := c.ShouldBindJSON(&req); err != nil || req.ModelPattern == "" || req.ProviderID == 0 { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + rule := model.RoutingRule{ + IngressKeyID: ingressID, + ModelPattern: req.ModelPattern, + ProviderID: req.ProviderID, + ProviderKeyID: req.ProviderKeyID, + Priority: req.Priority, + Enabled: true, + } + if req.Enabled != nil { + rule.Enabled = *req.Enabled + } + if err := h.db.DB().Create(&rule).Error; err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + rules := h.cache.ListRoutingRules(ingressID) + rules = append(rules, rule) + h.cache.SetRoutingRules(ingressID, rules) + c.JSON(http.StatusCreated, rule) +} + +func (h *Handler) UpdateRoutingRule(c *gin.Context) { + ruleID := parseUint(c.Param("ruleId")) + var rule model.RoutingRule + if err := h.db.DB().First(&rule, ruleID).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + var req struct { + ModelPattern string `json:"model_pattern"` + ProviderID uint `json:"provider_id"` + ProviderKeyID uint `json:"provider_key_id"` + Priority int `json:"priority"` + Enabled *bool `json:"enabled"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + if req.ModelPattern != "" { + rule.ModelPattern = req.ModelPattern + } + if req.ProviderID > 0 { + rule.ProviderID = req.ProviderID + } + if req.ProviderKeyID >= 0 { + rule.ProviderKeyID = req.ProviderKeyID + } + rule.Priority = req.Priority + if req.Enabled != nil { + rule.Enabled = *req.Enabled + } + h.db.DB().Save(&rule) + h.reloadRoutingRules(rule.IngressKeyID) + c.JSON(http.StatusOK, rule) +} + +func (h *Handler) DeleteRoutingRule(c *gin.Context) { + ruleID := parseUint(c.Param("ruleId")) + var rule model.RoutingRule + if err := h.db.DB().First(&rule, ruleID).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + h.db.DB().Delete(&rule) + h.reloadRoutingRules(rule.IngressKeyID) + c.JSON(http.StatusOK, gin.H{"ok": true}) +} + +func (h *Handler) reloadRoutingRules(ingressID uint) { + var rules []model.RoutingRule + h.db.DB().Where("ingress_key_id = ?", ingressID).Find(&rules) + h.cache.SetRoutingRules(ingressID, rules) +} + +func (h *Handler) ListRequestLogs(c *gin.Context) { + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "20")) + if page < 1 { + page = 1 + } + if pageSize <= 0 || pageSize > 50 { + pageSize = 20 + } + + q := h.db.DB().Model(&model.UsageRecord{}) + if ingressID := c.Query("ingress_key_id"); ingressID != "" { + q = q.Where("ingress_key_id = ?", ingressID) + } + if status := c.Query("status"); status != "" { + q = q.Where("status = ?", status) + } + if endpoint := c.Query("endpoint"); endpoint != "" { + q = q.Where("endpoint = ?", endpoint) + } + if clientIP := c.Query("client_ip"); clientIP != "" { + q = q.Where("client_ip LIKE ?", "%"+clientIP+"%") + } + if modelName := c.Query("model"); modelName != "" { + q = q.Where("model LIKE ?", "%"+modelName+"%") + } + + var total int64 + q.Count(&total) + + var logs []model.UsageRecord + q.Order("created_at desc"). + Offset((page - 1) * pageSize). + Limit(pageSize). + Find(&logs) + + type item struct { + ID uint `json:"id"` + IngressKeyID uint `json:"ingress_key_id"` + IngressName string `json:"ingress_name"` + ClientIP string `json:"client_ip"` + Endpoint string `json:"endpoint"` + Model string `json:"model"` + LatencyMs int64 `json:"latency_ms"` + Status string `json:"status"` + Stream bool `json:"stream"` + ErrorMsg string `json:"error_msg"` + CreatedAt time.Time `json:"created_at"` + } + out := make([]item, 0, len(logs)) + for _, log := range logs { + name := "" + if log.Endpoint == model.EndpointAdminLogin { + name = "管理台" + } else if k, ok := h.cache.GetIngressKey(log.IngressKeyID); ok { + name = k.Name + } + out = append(out, item{ + ID: log.ID, + IngressKeyID: log.IngressKeyID, + IngressName: name, + ClientIP: log.ClientIP, + Endpoint: log.Endpoint, + Model: log.Model, + LatencyMs: log.LatencyMs, + Status: log.Status, + Stream: log.Stream, + ErrorMsg: log.ErrorMsg, + CreatedAt: log.CreatedAt, + }) + } + c.JSON(http.StatusOK, gin.H{ + "data": out, + "total": total, + "page": page, + "page_size": pageSize, + "max_kept": model.MaxUsageLogRecords, + }) +} + +func (h *Handler) GetRequestLog(c *gin.Context) { + id := parseUint(c.Param("id")) + var log model.UsageRecord + if err := h.db.DB().First(&log, id).Error; err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + name := "" + if log.Endpoint == model.EndpointAdminLogin { + name = "管理台" + } else if k, ok := h.cache.GetIngressKey(log.IngressKeyID); ok { + name = k.Name + } + c.JSON(http.StatusOK, gin.H{ + "data": gin.H{ + "id": log.ID, + "ingress_key_id": log.IngressKeyID, + "ingress_name": name, + "client_ip": log.ClientIP, + "endpoint": log.Endpoint, + "model": log.Model, + "latency_ms": log.LatencyMs, + "status": log.Status, + "stream": log.Stream, + "error_msg": log.ErrorMsg, + "request_body": log.RequestBody, + "response_body": log.ResponseBody, + "created_at": log.CreatedAt, + }, + }) +} + +func (h *Handler) PricingCatalog(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"data": pricing.ListCatalog()}) +} diff --git a/internal/handler/admin/settings.go b/internal/handler/admin/settings.go new file mode 100644 index 0000000..0d6161b --- /dev/null +++ b/internal/handler/admin/settings.go @@ -0,0 +1,29 @@ +package admin + +import ( + "net/http" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/settings" +) + +func (h *Handler) GetSettings(c *gin.Context) { + c.JSON(http.StatusOK, h.settings.PublicView()) +} + +func (h *Handler) UpdateSettings(c *gin.Context) { + var in settings.UpdateInput + if err := c.ShouldBindJSON(&in); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"}) + return + } + if err := h.settings.Update(in); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + h.loginLimit.Configure(h.settings.LoginMaxAttempts(), h.settings.LoginLockout()) + if h.monitor != nil { + h.monitor.NotifySettingsChanged() + } + c.JSON(http.StatusOK, h.settings.PublicView()) +} diff --git a/internal/handler/admin/workflows.go b/internal/handler/admin/workflows.go new file mode 100644 index 0000000..689a20e --- /dev/null +++ b/internal/handler/admin/workflows.go @@ -0,0 +1,116 @@ +package admin + +import ( + "encoding/json" + "net/http" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/prediction" +) + +func (h *Handler) GetWorkflowParamMeta(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "txt2img": prediction.Txt2ImgParams, + "img2img": prediction.Img2ImgParams, + }) +} + +func (h *Handler) AnalyzeWorkflow(c *gin.Context) { + var req struct { + WorkflowJSON string `json:"workflow_json"` + WorkflowType model.WorkflowType `json:"workflow_type"` + } + if err := c.ShouldBindJSON(&req); err != nil || req.WorkflowJSON == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "workflow_json required"}) + return + } + if req.WorkflowType == "" { + req.WorkflowType = model.WorkflowTxt2Img + } + result, err := prediction.AnalyzeWorkflow(req.WorkflowJSON, req.WorkflowType) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, result) +} + +func (h *Handler) GetPrediction(c *gin.Context) { + if h.predictions == nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + p, err := h.predictions.GetDBPrediction(c.Param("id")) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + images, _ := h.images.ListByPrediction(p.ID) + c.JSON(http.StatusOK, gin.H{ + "prediction": h.predictions.APIView(p, h.publicBaseURL()), + "images": images, + }) +} + +func (h *Handler) ServeAdminImage(c *gin.Context) { + if h.images == nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + img, err := h.images.Get(c.Param("id")) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + c.Header("Content-Type", img.Mime) + c.File(img.LocalPath) +} + +func bindingFromSuggestions(suggestions []prediction.BindingSuggestion, overrides map[string]*prediction.NodeField) prediction.InputBinding { + binding := prediction.InputBinding{} + for _, s := range suggestions { + if o, ok := overrides[s.Param]; ok && o != nil { + if o.Node != "" && o.Field != "" { + binding[s.Param] = o + } + continue + } + if s.Node != "" && s.Field != "" { + binding[s.Param] = &prediction.NodeField{Node: s.Node, Field: s.Field} + } + } + return binding +} + +func validateImageModelCreate(req struct { + ModelID string + DisplayName string + WorkflowType model.WorkflowType + WorkflowJSON string + InputBindingJSON string + InputBinding map[string]*prediction.NodeField +}) error { + if req.WorkflowJSON == "" { + return nil + } + var workflow map[string]any + if err := json.Unmarshal([]byte(req.WorkflowJSON), &workflow); err != nil { + return err + } + var binding prediction.InputBinding + if req.InputBindingJSON != "" { + b, err := prediction.ParseBinding(req.InputBindingJSON) + if err != nil { + return err + } + binding = b + } else if req.InputBinding != nil { + binding = req.InputBinding + } + wt := req.WorkflowType + if wt == "" { + wt = model.WorkflowTxt2Img + } + return binding.Validate(workflow, prediction.RequiredBindings(wt)) +} diff --git a/internal/handler/files/handler.go b/internal/handler/files/handler.go new file mode 100644 index 0000000..2d7e623 --- /dev/null +++ b/internal/handler/files/handler.go @@ -0,0 +1,43 @@ +package files + +import ( + "net/http" + "strconv" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/storage/imagestore" +) + +type Handler struct { + store *imagestore.Store +} + +func New(store *imagestore.Store) *Handler { + return &Handler{store: store} +} + +func (h *Handler) Register(r *gin.Engine) { + r.GET("/files/:id", h.Serve) +} + +func (h *Handler) Serve(c *gin.Context) { + id := c.Param("id") + expStr := c.Query("exp") + sig := c.Query("sig") + exp, err := strconv.ParseInt(expStr, 10, 64) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid exp"}) + return + } + if !h.store.Verify(id, exp, sig) { + c.JSON(http.StatusForbidden, gin.H{"error": "invalid signature"}) + return + } + img, err := h.store.Get(id) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + c.Header("Content-Type", img.Mime) + c.File(img.LocalPath) +} diff --git a/internal/handler/proxy/errors.go b/internal/handler/proxy/errors.go new file mode 100644 index 0000000..58b8e6f --- /dev/null +++ b/internal/handler/proxy/errors.go @@ -0,0 +1,30 @@ +package proxy + +import ( + "errors" + "net/http" + "strings" + + "github.com/rose_cat707/luminary/internal/gateway" +) + +func gatewayHTTPStatus(err error) int { + switch { + case errors.Is(err, gateway.ErrRateLimitExceeded): + return http.StatusTooManyRequests + case errors.Is(err, gateway.ErrModelNotAllowed), + errors.Is(err, gateway.ErrBudgetExceeded): + return http.StatusForbidden + case errors.Is(err, gateway.ErrInvalidJSON), + errors.Is(err, gateway.ErrModelRequired): + return http.StatusBadRequest + } + msg := err.Error() + if strings.Contains(msg, "not enabled") || strings.Contains(msg, "not allowed") { + return http.StatusForbidden + } + if strings.Contains(msg, "invalid api key") || strings.Contains(msg, "expired") { + return http.StatusUnauthorized + } + return http.StatusBadGateway +} diff --git a/internal/handler/proxy/handler.go b/internal/handler/proxy/handler.go new file mode 100644 index 0000000..f76f6f0 --- /dev/null +++ b/internal/handler/proxy/handler.go @@ -0,0 +1,100 @@ +package proxy + +import ( + "bufio" + "io" + "net/http" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/gateway" + "github.com/rose_cat707/luminary/internal/middleware" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/provider" +) + +type Handler struct { + gateway *gateway.Service +} + +func New(gw *gateway.Service) *Handler { + return &Handler{gateway: gw} +} + +func (h *Handler) Register(r *gin.RouterGroup) { + r.GET("/models", h.ListModels) + r.POST("/chat/completions", h.forward(provider.EndpointChatCompletion)) + r.POST("/completions", h.forward(provider.EndpointTextCompletion)) + r.POST("/responses", h.forward(provider.EndpointResponses)) + r.POST("/embeddings", h.forward(provider.EndpointEmbeddings)) + r.POST("/rerank", h.forward(provider.EndpointRerank)) +} + +func (h *Handler) ingressKey(c *gin.Context) (*model.IngressKey, bool) { + v, ok := c.Get("ingress_key") + if !ok { + return nil, false + } + k, ok := v.(*model.IngressKey) + return k, ok +} + +func (h *Handler) ListModels(c *gin.Context) { + ingress, ok := h.ingressKey(c) + if !ok { + c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) + return + } + models, err := h.gateway.ListModels(c.Request.Context(), ingress) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + c.JSON(http.StatusOK, gin.H{"object": "list", "data": models}) +} + +func (h *Handler) forward(endpoint provider.EndpointType) gin.HandlerFunc { + return func(c *gin.Context) { + ingress, ok := h.ingressKey(c) + if !ok { + c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) + return + } + body, err := io.ReadAll(c.Request.Body) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "invalid body"}) + return + } + if provider.IsStreamRequest(body) && provider.SupportsStreaming(endpoint) { + h.handleStream(c, ingress, endpoint, body) + return + } + clientIP := middleware.ClientIP(c) + resp, err := h.gateway.ForwardEndpoint(c.Request.Context(), ingress, endpoint, body, clientIP) + if err != nil { + c.JSON(gatewayHTTPStatus(err), gin.H{"error": gin.H{"message": err.Error(), "type": "gateway_error"}}) + return + } + c.Data(resp.StatusCode, "application/json", resp.Body) + } +} + +func (h *Handler) handleStream(c *gin.Context, ingress *model.IngressKey, endpoint provider.EndpointType, body []byte) { + c.Header("Content-Type", "text/event-stream") + c.Header("Cache-Control", "no-cache") + c.Header("Connection", "keep-alive") + c.Status(http.StatusOK) + + flusher, ok := c.Writer.(http.Flusher) + if !ok { + c.JSON(http.StatusInternalServerError, gin.H{"error": "streaming not supported"}) + return + } + w := bufio.NewWriter(c.Writer) + clientIP := middleware.ClientIP(c) + err := h.gateway.ForwardStream(c.Request.Context(), ingress, endpoint, body, clientIP, w, flusher) + w.Flush() + if err != nil { + _, _ = c.Writer.Write([]byte("data: {\"error\":\"" + err.Error() + "\"}\n\n")) + flusher.Flush() + } +} diff --git a/internal/handler/replicate/handler.go b/internal/handler/replicate/handler.go new file mode 100644 index 0000000..69e2a57 --- /dev/null +++ b/internal/handler/replicate/handler.go @@ -0,0 +1,159 @@ +package replicate + +import ( + "bufio" + "encoding/json" + "fmt" + "net/http" + "strings" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/prediction" +) + +type Handler struct { + svc *prediction.Service + baseURL func() string +} + +func New(svc *prediction.Service, baseURL func() string) *Handler { + return &Handler{svc: svc, baseURL: baseURL} +} + +func (h *Handler) Register(r *gin.RouterGroup) { + r.POST("/predictions", h.Create) + r.GET("/predictions", h.List) + r.GET("/predictions/:id", h.Get) + r.POST("/predictions/:id/cancel", h.Cancel) + r.GET("/predictions/:id/stream", h.Stream) +} + +func (h *Handler) ingress(c *gin.Context) (*model.IngressKey, bool) { + v, ok := c.Get("ingress_key") + if !ok { + return nil, false + } + k, ok := v.(*model.IngressKey) + return k, ok +} + +func (h *Handler) Create(c *gin.Context) { + ingress, ok := h.ingress(c) + if !ok { + c.JSON(http.StatusUnauthorized, gin.H{"detail": "unauthorized"}) + return + } + var req prediction.CreateRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"detail": "invalid request body"}) + return + } + wait := strings.Contains(c.GetHeader("Prefer"), "wait") + p, err := h.svc.Create(c.Request.Context(), ingress, req, c.ClientIP(), wait) + if err != nil { + code := http.StatusBadRequest + if strings.Contains(err.Error(), "not found") { + code = http.StatusNotFound + } + c.JSON(code, gin.H{"detail": err.Error()}) + return + } + c.JSON(http.StatusCreated, h.svc.APIView(p, h.baseURL())) +} + +func (h *Handler) Get(c *gin.Context) { + ingress, ok := h.ingress(c) + if !ok { + c.JSON(http.StatusUnauthorized, gin.H{"detail": "unauthorized"}) + return + } + p, err := h.svc.Get(c.Request.Context(), c.Param("id"), ingress) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"detail": err.Error()}) + return + } + c.JSON(http.StatusOK, h.svc.APIView(p, h.baseURL())) +} + +func (h *Handler) List(c *gin.Context) { + ingress, ok := h.ingress(c) + if !ok { + c.JSON(http.StatusUnauthorized, gin.H{"detail": "unauthorized"}) + return + } + items, err := h.svc.List(c.Request.Context(), ingress, c.Query("cursor"), 100) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"detail": err.Error()}) + return + } + results := make([]map[string]any, 0, len(items)) + for _, p := range items { + results = append(results, h.svc.APIView(p, h.baseURL())) + } + c.JSON(http.StatusOK, gin.H{"results": results}) +} + +func (h *Handler) Cancel(c *gin.Context) { + ingress, ok := h.ingress(c) + if !ok { + c.JSON(http.StatusUnauthorized, gin.H{"detail": "unauthorized"}) + return + } + p, err := h.svc.Cancel(c.Request.Context(), c.Param("id"), ingress) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"detail": err.Error()}) + return + } + c.JSON(http.StatusOK, h.svc.APIView(p, h.baseURL())) +} + +func (h *Handler) Stream(c *gin.Context) { + ingress, ok := h.ingress(c) + if !ok { + c.JSON(http.StatusUnauthorized, gin.H{"detail": "unauthorized"}) + return + } + id := c.Param("id") + if _, err := h.svc.Get(c.Request.Context(), id, ingress); err != nil { + c.JSON(http.StatusNotFound, gin.H{"detail": err.Error()}) + return + } + + c.Header("Content-Type", "text/event-stream") + c.Header("Cache-Control", "no-cache") + c.Header("Connection", "keep-alive") + c.Status(http.StatusOK) + + flusher, ok := c.Writer.(http.Flusher) + if !ok { + return + } + w := bufio.NewWriter(c.Writer) + ch := h.svc.Hub().Subscribe(id) + defer h.svc.Hub().Unsubscribe(id, ch) + + for { + select { + case <-c.Request.Context().Done(): + return + case ev, open := <-ch: + if !open { + return + } + payload, _ := json.Marshal(map[string]any{ + "id": id, "status": ev.Status, "logs": ev.Logs, + "metrics": ev.Metrics, "output": ev.Output, "error": ev.Error, + }) + _, _ = fmt.Fprintf(w, "data: %s\n\n", payload) + w.Flush() + flusher.Flush() + if ev.Done { + _, _ = fmt.Fprintf(w, "event: done\ndata: {}\n\n") + w.Flush() + flusher.Flush() + return + } + } + } +} diff --git a/internal/handler/static/handler.go b/internal/handler/static/handler.go new file mode 100644 index 0000000..957dbe3 --- /dev/null +++ b/internal/handler/static/handler.go @@ -0,0 +1,63 @@ +package static + +import ( + "embed" + "io/fs" + "mime" + "net/http" + "path/filepath" + "strings" + + "github.com/gin-gonic/gin" +) + +type Handler struct { + content embed.FS +} + +func New(content embed.FS) *Handler { + return &Handler{content: content} +} + +func (h *Handler) Register(r *gin.Engine) { + sub, err := fs.Sub(h.content, "dist") + if err != nil { + sub = h.content + } + r.NoRoute(func(c *gin.Context) { + if strings.HasPrefix(c.Request.URL.Path, "/api/") || strings.HasPrefix(c.Request.URL.Path, "/v1/") { + c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) + return + } + h.serve(c, sub) + }) + r.GET("/", func(c *gin.Context) { h.serve(c, sub) }) + r.GET("/assets/*filepath", func(c *gin.Context) { h.serve(c, sub) }) +} + +func (h *Handler) serve(c *gin.Context, sub fs.FS) { + path := strings.TrimPrefix(c.Request.URL.Path, "/") + if path == "" { + path = "index.html" + } + data, err := fs.ReadFile(sub, path) + if err != nil { + data, err = fs.ReadFile(sub, "index.html") + if err != nil { + c.String(http.StatusNotFound, "UI not built. Run: make build-web") + return + } + path = "index.html" + } + ext := filepath.Ext(path) + ct := mime.TypeByExtension(ext) + if ct == "" { + ct = "text/html" + } + if strings.HasPrefix(path, "assets/") { + c.Header("Cache-Control", "public, max-age=31536000, immutable") + } else { + c.Header("Cache-Control", "no-cache") + } + c.Data(http.StatusOK, ct, data) +} diff --git a/internal/limiter/limiter.go b/internal/limiter/limiter.go new file mode 100644 index 0000000..2275d9e --- /dev/null +++ b/internal/limiter/limiter.go @@ -0,0 +1,30 @@ +package limiter + +import ( + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/store/cache" +) + +func IsProviderKeyAvailable(k model.ProviderKey) bool { + if !k.Enabled { + return false + } + if k.MaxRequestsPerDay > 0 && k.RequestsToday >= k.MaxRequestsPerDay { + return false + } + if k.MaxTokensPerDay > 0 && k.TokensToday >= k.MaxTokensPerDay { + return false + } + return true +} + +func CheckIngressBudget(k *model.IngressKey, estimatedCost float64) bool { + if k.BudgetLimit <= 0 { + return true + } + return k.BudgetUsed+estimatedCost <= k.BudgetLimit +} + +func CheckRateLimit(c *cache.Store, ingressKeyID uint, rpm, tpm, tokens int) bool { + return c.CheckRateLimit(ingressKeyID, rpm, tpm, tokens) +} diff --git a/internal/middleware/clientip.go b/internal/middleware/clientip.go new file mode 100644 index 0000000..aeb6922 --- /dev/null +++ b/internal/middleware/clientip.go @@ -0,0 +1,88 @@ +package middleware + +import ( + "net" + "strings" + "sync" + + "github.com/gin-gonic/gin" +) + +var ( + trustedMu sync.RWMutex + trustedProxies []*net.IPNet + trustedIPs []net.IP +) + +// ConfigureTrustedProxies sets CIDRs/IPs allowed to set X-Forwarded-For / X-Real-IP. +// When empty, only the direct remote address is used. +func ConfigureTrustedProxies(cidrs []string) { + trustedMu.Lock() + defer trustedMu.Unlock() + trustedProxies = nil + trustedIPs = nil + for _, cidr := range cidrs { + cidr = strings.TrimSpace(cidr) + if cidr == "" { + continue + } + if strings.Contains(cidr, "/") { + _, network, err := net.ParseCIDR(cidr) + if err == nil { + trustedProxies = append(trustedProxies, network) + } + continue + } + if ip := net.ParseIP(cidr); ip != nil { + trustedIPs = append(trustedIPs, ip) + } + } +} + +func isTrustedProxy(ip net.IP) bool { + trustedMu.RLock() + defer trustedMu.RUnlock() + if len(trustedProxies) == 0 && len(trustedIPs) == 0 { + return false + } + for _, tip := range trustedIPs { + if tip.Equal(ip) { + return true + } + } + for _, network := range trustedProxies { + if network.Contains(ip) { + return true + } + } + return false +} + +func directRemoteIP(ctx *gin.Context) string { + host, _, err := net.SplitHostPort(ctx.Request.RemoteAddr) + if err != nil { + return strings.TrimSpace(ctx.Request.RemoteAddr) + } + return host +} + +// ClientIP returns the client IP. Forwarded headers are honored only when the +// direct remote address is a configured trusted proxy. +func ClientIP(ctx *gin.Context) string { + remote := directRemoteIP(ctx) + remoteIP := net.ParseIP(remote) + if remoteIP == nil || !isTrustedProxy(remoteIP) { + if remoteIP != nil { + return remoteIP.String() + } + return ctx.ClientIP() + } + if xff := ctx.GetHeader("X-Forwarded-For"); xff != "" { + parts := strings.Split(xff, ",") + return strings.TrimSpace(parts[0]) + } + if xri := ctx.GetHeader("X-Real-IP"); xri != "" { + return strings.TrimSpace(xri) + } + return remoteIP.String() +} diff --git a/internal/middleware/clientip_test.go b/internal/middleware/clientip_test.go new file mode 100644 index 0000000..141ad88 --- /dev/null +++ b/internal/middleware/clientip_test.go @@ -0,0 +1,38 @@ +package middleware + +import ( + "net/http/httptest" + "testing" + + "github.com/gin-gonic/gin" +) + +func TestClientIP_IgnoresXFFWithoutTrustedProxy(t *testing.T) { + gin.SetMode(gin.TestMode) + ConfigureTrustedProxies(nil) + + w := httptest.NewRecorder() + c, _ := gin.CreateTestContext(w) + c.Request = httptest.NewRequest("GET", "/", nil) + c.Request.RemoteAddr = "203.0.113.10:12345" + c.Request.Header.Set("X-Forwarded-For", "1.2.3.4") + + if got := ClientIP(c); got != "203.0.113.10" { + t.Fatalf("got %s want direct remote", got) + } +} + +func TestClientIP_UsesXFFFromTrustedProxy(t *testing.T) { + gin.SetMode(gin.TestMode) + ConfigureTrustedProxies([]string{"127.0.0.1"}) + + w := httptest.NewRecorder() + c, _ := gin.CreateTestContext(w) + c.Request = httptest.NewRequest("GET", "/", nil) + c.Request.RemoteAddr = "127.0.0.1:12345" + c.Request.Header.Set("X-Forwarded-For", "1.2.3.4") + + if got := ClientIP(c); got != "1.2.3.4" { + t.Fatalf("got %s want forwarded client", got) + } +} diff --git a/internal/middleware/ipfilter_test.go b/internal/middleware/ipfilter_test.go new file mode 100644 index 0000000..363ebae --- /dev/null +++ b/internal/middleware/ipfilter_test.go @@ -0,0 +1,31 @@ +package middleware + +import ( + "net" + "testing" +) + +func TestIPMatchesRule_LoopbackEquivalence(t *testing.T) { + v4 := net.ParseIP("127.0.0.1") + v6 := net.ParseIP("::1") + + if !ipMatchesRule("127.0.0.1", v6) { + t.Fatal("::1 should match 127.0.0.1 allow rule") + } + if !ipMatchesRule("::1", v4) { + t.Fatal("127.0.0.1 should match ::1 allow rule") + } + if !ipMatchesRule("127.0.0.0/8", v6) { + t.Fatal("::1 should match 127.0.0.0/8 via loopback equivalence") + } +} + +func TestIPMatchesRule_CIDR(t *testing.T) { + ip := net.ParseIP("10.0.0.5") + if !ipMatchesRule("10.0.0.0/24", ip) { + t.Fatal("expected CIDR match") + } + if ipMatchesRule("192.168.1.0/24", ip) { + t.Fatal("expected no match") + } +} diff --git a/internal/middleware/middleware.go b/internal/middleware/middleware.go new file mode 100644 index 0000000..22c0bed --- /dev/null +++ b/internal/middleware/middleware.go @@ -0,0 +1,166 @@ +package middleware + +import ( + "net" + "net/http" + "strings" + "time" + + "github.com/gin-gonic/gin" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/store/cache" +) + +func IPFilter(c *cache.Store, scope model.IPRuleScope) gin.HandlerFunc { + return func(ctx *gin.Context) { + rules := c.ListIPRules() + if len(rules) == 0 { + ctx.Next() + return + } + clientIP := clientIP(ctx) + ip := net.ParseIP(clientIP) + if ip == nil { + ctx.AbortWithStatusJSON(http.StatusForbidden, gin.H{"error": "invalid client ip"}) + return + } + var allowRules, denyRules []model.IPRule + for _, r := range rules { + if !r.Enabled { + continue + } + if r.Scope != scope && r.Scope != model.IPScopeAll { + continue + } + if r.Type == model.IPRuleAllow { + allowRules = append(allowRules, r) + } else { + denyRules = append(denyRules, r) + } + } + for _, r := range denyRules { + if ipMatchesRule(r.CIDR, ip) { + ctx.AbortWithStatusJSON(http.StatusForbidden, gin.H{"error": "ip denied"}) + return + } + } + if len(allowRules) > 0 { + allowed := false + for _, r := range allowRules { + if ipMatchesRule(r.CIDR, ip) { + allowed = true + break + } + } + if !allowed { + ctx.AbortWithStatusJSON(http.StatusForbidden, gin.H{"error": "ip not allowed"}) + return + } + } + ctx.Next() + } +} + +func cidrContains(cidr string, ip net.IP) bool { + if !strings.Contains(cidr, "/") { + return ip.String() == cidr + } + _, network, err := net.ParseCIDR(cidr) + if err != nil { + return false + } + return network.Contains(ip) +} + +// ipMatchesRule checks CIDR/IP match, treating IPv4/IPv6 loopback as equivalent. +func ipMatchesRule(cidr string, ip net.IP) bool { + if cidrContains(cidr, ip) { + return true + } + if !ip.IsLoopback() { + return false + } + alt := loopbackAlt(ip) + return alt != nil && cidrContains(cidr, alt) +} + +func loopbackAlt(ip net.IP) net.IP { + if v4 := ip.To4(); v4 != nil && v4.IsLoopback() { + return net.ParseIP("::1") + } + if ip.Equal(net.ParseIP("::1")) { + return net.ParseIP("127.0.0.1") + } + return nil +} + +func clientIP(ctx *gin.Context) string { + return ClientIP(ctx) +} + +const sessionCookie = "luminary_session" + +type SessionValidator func(token string) (bool, time.Time) + +func AdminAuth(validate SessionValidator) gin.HandlerFunc { + return func(ctx *gin.Context) { + token := extractToken(ctx) + if token == "" { + ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) + return + } + ok, expires := validate(token) + if !ok || time.Now().After(expires) { + ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "session expired"}) + return + } + ctx.Set("session_token", token) + ctx.Next() + } +} + +func extractToken(ctx *gin.Context) string { + if auth := ctx.GetHeader("Authorization"); strings.HasPrefix(auth, "Bearer ") { + return strings.TrimPrefix(auth, "Bearer ") + } + if cookie, err := ctx.Cookie(sessionCookie); err == nil { + return cookie + } + return "" +} + +func SessionCookieName() string { return sessionCookie } + +func IngressAuth(gw IngressKeyResolver) gin.HandlerFunc { + return func(ctx *gin.Context) { + key := extractIngressKey(ctx) + if key == "" { + ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "missing api key"}) + return + } + ingress, err := gw.ResolveIngressKey(key) + if err != nil { + ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "invalid api key"}) + return + } + ctx.Set("ingress_key", ingress) + ctx.Next() + } +} + +func extractIngressKey(ctx *gin.Context) string { + if auth := ctx.GetHeader("Authorization"); strings.HasPrefix(auth, "Bearer ") { + return strings.TrimPrefix(auth, "Bearer ") + } + return ctx.GetHeader("x-api-key") +} + +type IngressKeyResolver interface { + ResolveIngressKey(key string) (*model.IngressKey, error) +} + +func Logger() gin.HandlerFunc { + return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { + return param.TimeStamp.Format(time.RFC3339) + " " + param.Method + " " + param.Path + " " + param.ClientIP + "\n" + }) +} diff --git a/internal/model/category.go b/internal/model/category.go new file mode 100644 index 0000000..22953fc --- /dev/null +++ b/internal/model/category.go @@ -0,0 +1,26 @@ +package model + +// ProviderCategory 出口服务分类 +type ProviderCategory string + +const ( + CategoryLLM ProviderCategory = "llm" // 语言模型 + CategoryEmbedding ProviderCategory = "embedding" // 向量嵌入 + CategoryRerank ProviderCategory = "rerank" // 重排序 + CategorySpeech ProviderCategory = "speech" // 语音合成(预留) + CategoryImage ProviderCategory = "image" // 图像生成 + CategoryAudio ProviderCategory = "audio" // 音频转写(预留) +) + +func SupportedCategories() []ProviderCategory { + return []ProviderCategory{CategoryLLM, CategoryEmbedding, CategoryRerank, CategoryImage} +} + +func IsCategorySupported(c ProviderCategory) bool { + for _, s := range SupportedCategories() { + if s == c { + return true + } + } + return false +} diff --git a/internal/model/entities.go b/internal/model/entities.go new file mode 100644 index 0000000..2078732 --- /dev/null +++ b/internal/model/entities.go @@ -0,0 +1,243 @@ +package model + +import ( + "time" +) + +type ProviderType string + +const ( + ProviderOpenAI ProviderType = "openai" + ProviderAnthropic ProviderType = "anthropic" + ProviderCustom ProviderType = "custom" + ProviderAzureOpenAI ProviderType = "azure_openai" + ProviderOpenRouter ProviderType = "openrouter" + ProviderOllama ProviderType = "ollama" + ProviderComfyUI ProviderType = "comfyui" +) + +type WorkflowType string + +const ( + WorkflowTxt2Img WorkflowType = "txt2img" + WorkflowImg2Img WorkflowType = "img2img" +) + +type PredictionStatus string + +const ( + PredictionStarting PredictionStatus = "starting" + PredictionProcessing PredictionStatus = "processing" + PredictionSucceeded PredictionStatus = "succeeded" + PredictionFailed PredictionStatus = "failed" + PredictionCanceled PredictionStatus = "canceled" +) + +type ProviderStatus string + +const ( + ProviderHealthy ProviderStatus = "healthy" + ProviderUnhealthy ProviderStatus = "unhealthy" + ProviderUnknown ProviderStatus = "unknown" +) + +type Provider struct { + ID uint `gorm:"primaryKey" json:"id"` + Name string `gorm:"uniqueIndex;not null" json:"name"` + Type ProviderType `gorm:"not null" json:"type"` + Category ProviderCategory `gorm:"not null;default:llm" json:"category"` + BaseURL string `json:"base_url"` + AllowedEndpointsJSON string `gorm:"default:'[\"list_models\",\"chat_completion\"]'" json:"allowed_endpoints_json"` + EndpointPathsJSON string `gorm:"default:'{}'" json:"endpoint_paths_json"` + Status ProviderStatus `gorm:"default:unknown" json:"status"` + Enabled bool `gorm:"default:true" json:"enabled"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + Keys []ProviderKey `gorm:"foreignKey:ProviderID" json:"keys,omitempty"` + Models []ModelEntry `gorm:"foreignKey:ProviderID" json:"models,omitempty"` +} + +type ProviderKey struct { + ID uint `gorm:"primaryKey" json:"id"` + ProviderID uint `gorm:"index;not null" json:"provider_id"` + Name string `gorm:"not null" json:"name"` + APIKeyEnc string `gorm:"not null" json:"-"` + Weight float64 `gorm:"default:1" json:"weight"` + ModelsJSON string `gorm:"default:'[\"*\"]'" json:"models_json"` + Enabled bool `gorm:"default:true" json:"enabled"` + MaxRequestsPerDay int `gorm:"default:0" json:"max_requests_per_day"` + MaxTokensPerDay int64 `gorm:"default:0" json:"max_tokens_per_day"` + RequestsToday int `gorm:"default:0" json:"requests_today"` + TokensToday int64 `gorm:"default:0" json:"tokens_today"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type ModelEntry struct { + ID uint `gorm:"primaryKey" json:"id"` + ProviderID uint `gorm:"index;not null" json:"provider_id"` + ModelID string `gorm:"not null" json:"model_id"` + Alias string `gorm:"index" json:"alias"` + DisplayName string `json:"display_name"` + WorkflowType WorkflowType `gorm:"default:txt2img" json:"workflow_type"` + WorkflowJSON string `gorm:"type:text" json:"workflow_json"` + InputBindingJSON string `gorm:"type:text" json:"input_binding_json"` + VersionHash string `gorm:"index" json:"version_hash"` + Enabled bool `gorm:"default:true" json:"enabled"` + CreatedAt time.Time `json:"created_at"` +} + +type IngressKey struct { + ID uint `gorm:"primaryKey" json:"id"` + Name string `gorm:"not null" json:"name"` + KeyHash string `gorm:"uniqueIndex;not null" json:"-"` + Prefix string `gorm:"not null" json:"prefix"` + Enabled bool `gorm:"default:true" json:"enabled"` + BudgetLimit float64 `gorm:"default:0" json:"budget_limit"` + BudgetUsed float64 `gorm:"default:0" json:"budget_used"` + RateLimitRPM int `gorm:"default:0" json:"rate_limit_rpm"` + RateLimitTPM int `gorm:"default:0" json:"rate_limit_tpm"` + AllowedProvidersJSON string `gorm:"default:'[\"*\"]'" json:"allowed_providers_json"` + AllowedModelsJSON string `gorm:"default:'[\"*\"]'" json:"allowed_models_json"` + RequestCount int64 `gorm:"default:0" json:"request_count"` + TokenCount int64 `gorm:"default:0" json:"token_count"` + ExpiresAt *time.Time `json:"expires_at"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type AdminUser struct { + ID uint `gorm:"primaryKey" json:"id"` + Username string `gorm:"uniqueIndex;not null" json:"username"` + PasswordHash string `gorm:"not null" json:"-"` + CreatedAt time.Time `json:"created_at"` +} + +type AdminSession struct { + ID uint `gorm:"primaryKey" json:"id"` + TokenHash string `gorm:"uniqueIndex;not null" json:"-"` + ExpiresAt time.Time `gorm:"index" json:"expires_at"` + CreatedAt time.Time `json:"created_at"` +} + +type IPRuleType string + +const ( + IPRuleAllow IPRuleType = "allow" + IPRuleDeny IPRuleType = "deny" +) + +type IPRuleScope string + +const ( + IPScopeAdmin IPRuleScope = "admin" + IPScopeProxy IPRuleScope = "proxy" + IPScopeAll IPRuleScope = "all" +) + +type IPRule struct { + ID uint `gorm:"primaryKey" json:"id"` + CIDR string `gorm:"column:cidr;not null" json:"cidr"` + Type IPRuleType `gorm:"not null" json:"type"` + Scope IPRuleScope `gorm:"not null;default:proxy" json:"scope"` + Enabled bool `gorm:"default:true" json:"enabled"` + CreatedAt time.Time `json:"created_at"` +} + +type UsageRecord struct { + ID uint `gorm:"primaryKey" json:"id"` + IngressKeyID uint `gorm:"index" json:"ingress_key_id"` + ProviderID uint `gorm:"index" json:"provider_id"` + ProviderKeyID uint `gorm:"index" json:"provider_key_id"` + ClientIP string `gorm:"index" json:"client_ip"` + Endpoint string `json:"endpoint"` + Model string `json:"model"` + TokensIn int `json:"tokens_in"` + TokensOut int `json:"tokens_out"` + Cost float64 `json:"cost"` + LatencyMs int64 `json:"latency_ms"` + Status string `json:"status"` + Stream bool `json:"stream"` + ErrorMsg string `json:"error_msg"` + RequestBody string `gorm:"type:text" json:"request_body,omitempty"` + ResponseBody string `gorm:"type:text" json:"response_body,omitempty"` + CreatedAt time.Time `gorm:"index" json:"created_at"` +} + +const ( + MaxUsageLogRecords = 500 + EndpointAdminLogin = "admin_login" + EndpointPrediction = "prediction" +) + +type Prediction struct { + ID string `gorm:"primaryKey" json:"id"` + IngressKeyID uint `gorm:"index;not null" json:"ingress_key_id"` + ProviderID uint `gorm:"index;not null" json:"provider_id"` + ProviderKeyID uint `gorm:"index" json:"provider_key_id"` + ModelEntryID uint `gorm:"index" json:"model_entry_id"` + Version string `json:"version"` + Model string `json:"model"` + InputJSON string `gorm:"type:text" json:"input_json"` + Status PredictionStatus `gorm:"index;not null;default:starting" json:"status"` + ComfyPromptID string `json:"comfy_prompt_id"` + ClientID string `json:"client_id"` + OutputJSON string `gorm:"type:text" json:"output_json"` + Error string `gorm:"type:text" json:"error"` + Logs string `gorm:"type:text" json:"logs"` + MetricsJSON string `gorm:"type:text" json:"metrics_json"` + CreatedAt time.Time `json:"created_at"` + StartedAt *time.Time `json:"started_at"` + CompletedAt *time.Time `json:"completed_at"` +} + +type StoredImage struct { + ID string `gorm:"primaryKey" json:"id"` + PredictionID string `gorm:"index;not null" json:"prediction_id"` + Filename string `json:"filename"` + LocalPath string `json:"-"` + Mime string `json:"mime"` + Size int64 `json:"size"` + CreatedAt time.Time `json:"created_at"` +} + +// RoutingRule Virtual Key 路由:按模型匹配绑定 Provider / ProviderKey +type RoutingRule struct { + ID uint `gorm:"primaryKey" json:"id"` + IngressKeyID uint `gorm:"index;not null" json:"ingress_key_id"` + ModelPattern string `gorm:"not null" json:"model_pattern"` + ProviderID uint `gorm:"not null" json:"provider_id"` + ProviderKeyID uint `gorm:"default:0" json:"provider_key_id"` + Priority int `gorm:"default:0" json:"priority"` + Enabled bool `gorm:"default:true" json:"enabled"` + CreatedAt time.Time `json:"created_at"` +} + +// SystemSettings singleton (id=1) for runtime configuration managed via admin UI. +type SystemSettings struct { + ID uint `gorm:"primaryKey" json:"id"` + EncryptionKey string `gorm:"not null" json:"-"` + SessionTTLSeconds int64 `gorm:"not null;default:86400" json:"session_ttl_seconds"` + LoginMaxAttempts int `gorm:"not null;default:5" json:"login_max_attempts"` + LoginLockoutSeconds int64 `gorm:"not null;default:900" json:"login_lockout_seconds"` + TrustedProxiesJSON string `gorm:"default:'[]'" json:"trusted_proxies_json"` + UsageFlushSeconds int64 `gorm:"not null;default:5" json:"usage_flush_seconds"` + HealthCheckSeconds int64 `gorm:"not null;default:30" json:"health_check_seconds"` + GatewayMaxRetries int `gorm:"not null;default:3" json:"gateway_max_retries"` + GatewayRetryBackoffMs int `gorm:"not null;default:200" json:"gateway_retry_backoff_ms"` + ImageStoragePath string `gorm:"default:'images'" json:"image_storage_path"` + PublicBaseURL string `json:"public_base_url"` + SignedURLTTLSeconds int64 `gorm:"not null;default:3600" json:"signed_url_ttl_seconds"` + PredictionWaitSeconds int64 `gorm:"not null;default:60" json:"prediction_wait_seconds"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type HealthCheckRecord struct { + ID uint `gorm:"primaryKey" json:"id"` + ProviderID uint `gorm:"index" json:"provider_id"` + Status ProviderStatus `json:"status"` + LatencyMs int64 `json:"latency_ms"` + ErrorMsg string `json:"error_msg"` + CheckedAt time.Time `gorm:"index" json:"checked_at"` +} diff --git a/internal/model/model_entry.go b/internal/model/model_entry.go new file mode 100644 index 0000000..fab3782 --- /dev/null +++ b/internal/model/model_entry.go @@ -0,0 +1,20 @@ +package model + +// IngressID returns the model name exposed to ingress API clients. +func (m ModelEntry) IngressID() string { + if m.Alias != "" { + return m.Alias + } + return m.ModelID +} + +// MatchesIngressName reports whether the entry matches an ingress model identifier. +func (m ModelEntry) MatchesIngressName(name string) bool { + if name == "" || !m.Enabled { + return false + } + if m.ModelID == name || m.VersionHash == name { + return true + } + return m.Alias != "" && m.Alias == name +} diff --git a/internal/monitor/service.go b/internal/monitor/service.go new file mode 100644 index 0000000..4608c43 --- /dev/null +++ b/internal/monitor/service.go @@ -0,0 +1,175 @@ +package monitor + +import ( + "context" + "log" + "time" + + "github.com/rose_cat707/luminary/internal/gateway" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/settings" + "github.com/rose_cat707/luminary/internal/store/cache" + sqlitestore "github.com/rose_cat707/luminary/internal/store/sqlite" + "gorm.io/gorm" +) + +type Service struct { + gateway *gateway.Service + cache *cache.Store + db *gorm.DB + settings *settings.Runtime + stop chan struct{} + healthRestart chan struct{} + flushRestart chan struct{} + flushFn func([]cache.UsageDelta) +} + +func New(gw *gateway.Service, c *cache.Store, store *sqlitestore.Store, rt *settings.Runtime) *Service { + return &Service{ + gateway: gw, + cache: c, + db: store.DB(), + settings: rt, + stop: make(chan struct{}), + healthRestart: make(chan struct{}, 1), + flushRestart: make(chan struct{}, 1), + } +} + +func (s *Service) Start(flushFn func([]cache.UsageDelta)) { + s.flushFn = flushFn + go s.healthLoop() + go s.usageFlushLoop() + go s.dailyResetLoop() +} + +func (s *Service) Stop() { + close(s.stop) +} + +func (s *Service) NotifySettingsChanged() { + select { + case s.healthRestart <- struct{}{}: + default: + } + select { + case s.flushRestart <- struct{}{}: + default: + } +} + +func (s *Service) healthInterval() time.Duration { + interval := s.settings.HealthCheckInterval() + if interval < time.Second { + return 30 * time.Second + } + return interval +} + +func (s *Service) flushInterval() time.Duration { + interval := s.settings.UsageFlushInterval() + if interval < time.Second { + return 5 * time.Second + } + return interval +} + +func (s *Service) healthLoop() { + var ticker *time.Ticker + resetTicker := func() { + if ticker != nil { + ticker.Stop() + } + ticker = time.NewTicker(s.healthInterval()) + } + resetTicker() + defer ticker.Stop() + s.runChecks() + for { + select { + case <-ticker.C: + s.runChecks() + case <-s.healthRestart: + resetTicker() + case <-s.stop: + return + } + } +} + +func (s *Service) usageFlushLoop() { + var ticker *time.Ticker + resetTicker := func() { + if ticker != nil { + ticker.Stop() + } + ticker = time.NewTicker(s.flushInterval()) + } + resetTicker() + defer ticker.Stop() + for { + select { + case <-ticker.C: + s.flushUsage() + case <-s.flushRestart: + resetTicker() + case <-s.stop: + s.flushUsage() + return + } + } +} + +func (s *Service) flushUsage() { + if s.flushFn == nil { + return + } + deltas := s.cache.DrainUsageDeltas() + if len(deltas) > 0 { + s.flushFn(deltas) + } +} + +func (s *Service) runChecks() { + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + for _, p := range s.cache.ListProviders() { + status, latency, errMsg := s.gateway.HealthCheckProvider(ctx, p.ID) + rec := model.HealthCheckRecord{ + ProviderID: p.ID, + Status: status, + LatencyMs: latency, + ErrorMsg: errMsg, + CheckedAt: time.Now(), + } + s.cache.SetHealthStatus(p.ID, rec) + if err := s.db.Create(&rec).Error; err != nil { + log.Printf("save health check: %v", err) + } + } +} + +func (s *Service) dailyResetLoop() { + for { + now := time.Now() + next := time.Date(now.Year(), now.Month(), now.Day()+1, 0, 0, 0, 0, now.Location()) + timer := time.NewTimer(time.Until(next)) + select { + case <-timer.C: + s.resetDailyCounters() + case <-s.stop: + timer.Stop() + return + } + } +} + +func (s *Service) resetDailyCounters() { + s.cache.ResetProviderKeyDailyCounts() + if err := s.db.Model(&model.ProviderKey{}).Updates(map[string]any{ + "requests_today": 0, + "tokens_today": 0, + }).Error; err != nil { + log.Printf("reset daily provider key counters: %v", err) + } +} diff --git a/internal/prediction/binding.go b/internal/prediction/binding.go new file mode 100644 index 0000000..e9642d7 --- /dev/null +++ b/internal/prediction/binding.go @@ -0,0 +1,57 @@ +package prediction + +import ( + "encoding/json" + "fmt" +) + +type NodeField struct { + Node string `json:"node"` + Field string `json:"field"` +} + +type InputBinding map[string]*NodeField + +func ParseBinding(raw string) (InputBinding, error) { + if raw == "" { + return InputBinding{}, nil + } + var b InputBinding + if err := json.Unmarshal([]byte(raw), &b); err != nil { + return nil, err + } + return b, nil +} + +func (b InputBinding) Validate(workflow map[string]any, required []string) error { + for _, name := range required { + f, ok := b[name] + if !ok || f == nil || f.Node == "" || f.Field == "" { + return fmt.Errorf("required binding missing: %s", name) + } + } + for name, f := range b { + if f == nil || f.Node == "" || f.Field == "" { + continue + } + if err := validateNodeField(workflow, f.Node, f.Field); err != nil { + return fmt.Errorf("binding %s: %w", name, err) + } + } + return nil +} + +func validateNodeField(workflow map[string]any, nodeID, field string) error { + node, ok := workflow[nodeID].(map[string]any) + if !ok { + return fmt.Errorf("node %s not found", nodeID) + } + inputs, ok := node["inputs"].(map[string]any) + if !ok { + return fmt.Errorf("node %s has no inputs", nodeID) + } + if _, ok := inputs[field]; !ok { + return fmt.Errorf("field %s not found on node %s", field, nodeID) + } + return nil +} diff --git a/internal/prediction/hub.go b/internal/prediction/hub.go new file mode 100644 index 0000000..e75d58c --- /dev/null +++ b/internal/prediction/hub.go @@ -0,0 +1,57 @@ +package prediction + +import ( + "sync" +) + +type Event struct { + Status string `json:"status"` + Logs string `json:"logs,omitempty"` + Metrics map[string]any `json:"metrics,omitempty"` + Output any `json:"output,omitempty"` + Error string `json:"error,omitempty"` + Done bool `json:"-"` +} + +type Hub struct { + mu sync.RWMutex + subs map[string]map[chan Event]struct{} +} + +func NewHub() *Hub { + return &Hub{subs: make(map[string]map[chan Event]struct{})} +} + +func (h *Hub) Subscribe(predictionID string) chan Event { + ch := make(chan Event, 16) + h.mu.Lock() + if h.subs[predictionID] == nil { + h.subs[predictionID] = make(map[chan Event]struct{}) + } + h.subs[predictionID][ch] = struct{}{} + h.mu.Unlock() + return ch +} + +func (h *Hub) Unsubscribe(predictionID string, ch chan Event) { + h.mu.Lock() + if m := h.subs[predictionID]; m != nil { + delete(m, ch) + if len(m) == 0 { + delete(h.subs, predictionID) + } + } + h.mu.Unlock() + close(ch) +} + +func (h *Hub) Publish(predictionID string, ev Event) { + h.mu.RLock() + defer h.mu.RUnlock() + for ch := range h.subs[predictionID] { + select { + case ch <- ev: + default: + } + } +} diff --git a/internal/prediction/inject.go b/internal/prediction/inject.go new file mode 100644 index 0000000..42e185a --- /dev/null +++ b/internal/prediction/inject.go @@ -0,0 +1,48 @@ +package prediction + +import ( + "crypto/rand" + "encoding/json" + "fmt" + "math/big" +) + +func BuildPrompt(workflowJSON string, binding InputBinding, input map[string]any) (map[string]any, error) { + var workflow map[string]any + if err := json.Unmarshal([]byte(workflowJSON), &workflow); err != nil { + return nil, fmt.Errorf("invalid workflow: %w", err) + } + prompt := deepCopyMap(workflow) + for name, target := range binding { + if target == nil || target.Node == "" || target.Field == "" { + continue + } + val, ok := input[name] + if !ok { + continue + } + if name == "seed" { + if iv, ok := val.(int); ok && iv < 0 { + n, _ := rand.Int(rand.Reader, big.NewInt(1<<31-1)) + val = int(n.Int64()) + } + } + node, ok := prompt[target.Node].(map[string]any) + if !ok { + return nil, fmt.Errorf("node %s not found", target.Node) + } + inputs, ok := node["inputs"].(map[string]any) + if !ok { + return nil, fmt.Errorf("node %s inputs missing", target.Node) + } + inputs[target.Field] = val + } + return prompt, nil +} + +func deepCopyMap(src map[string]any) map[string]any { + b, _ := json.Marshal(src) + var dst map[string]any + _ = json.Unmarshal(b, &dst) + return dst +} diff --git a/internal/prediction/params.go b/internal/prediction/params.go new file mode 100644 index 0000000..0b878b2 --- /dev/null +++ b/internal/prediction/params.go @@ -0,0 +1,122 @@ +package prediction + +import ( + "fmt" + + "github.com/rose_cat707/luminary/internal/model" +) + +type ParamType string + +const ( + ParamString ParamType = "string" + ParamInt ParamType = "int" + ParamFloat ParamType = "float" +) + +type ParamDef struct { + Name string `json:"name"` + Label string `json:"label"` + Type ParamType `json:"type"` + Required bool `json:"required"` + Default any `json:"default,omitempty"` +} + +var Txt2ImgParams = []ParamDef{ + {Name: "prompt", Label: "正向提示词", Type: ParamString, Required: true}, + {Name: "negative_prompt", Label: "负向提示词", Type: ParamString, Default: ""}, + {Name: "seed", Label: "随机种子", Type: ParamInt, Default: -1}, + {Name: "width", Label: "宽度", Type: ParamInt, Default: 1024}, + {Name: "height", Label: "高度", Type: ParamInt, Default: 1024}, + {Name: "steps", Label: "采样步数", Type: ParamInt, Default: 20}, + {Name: "cfg_scale", Label: "CFG", Type: ParamFloat, Default: 7.0}, +} + +var Img2ImgParams = []ParamDef{ + {Name: "prompt", Label: "正向提示词", Type: ParamString, Required: true}, + {Name: "negative_prompt", Label: "负向提示词", Type: ParamString, Default: ""}, + {Name: "image", Label: "输入图 URL", Type: ParamString, Required: true}, + {Name: "seed", Label: "随机种子", Type: ParamInt, Default: -1}, + {Name: "steps", Label: "采样步数", Type: ParamInt, Default: 20}, + {Name: "cfg_scale", Label: "CFG", Type: ParamFloat, Default: 7.0}, + {Name: "denoise", Label: "重绘幅度", Type: ParamFloat, Default: 0.75}, +} + +func ParamsForWorkflowType(wt model.WorkflowType) []ParamDef { + switch wt { + case model.WorkflowImg2Img: + return Img2ImgParams + default: + return Txt2ImgParams + } +} + +func RequiredBindings(wt model.WorkflowType) []string { + switch wt { + case model.WorkflowImg2Img: + return []string{"prompt", "image"} + default: + return []string{"prompt"} + } +} + +func ValidateInput(wt model.WorkflowType, input map[string]any) (map[string]any, error) { + defs := ParamsForWorkflowType(wt) + out := make(map[string]any, len(defs)) + for _, d := range defs { + v, ok := input[d.Name] + if !ok || v == nil { + if d.Required { + return nil, fmt.Errorf("missing required field: %s", d.Name) + } + if d.Default != nil { + out[d.Name] = d.Default + } + continue + } + coerced, err := coerceValue(d, v) + if err != nil { + return nil, fmt.Errorf("%s: %w", d.Name, err) + } + out[d.Name] = coerced + } + return out, nil +} + +func coerceValue(d ParamDef, v any) (any, error) { + switch d.Type { + case ParamString: + s, ok := v.(string) + if !ok { + return nil, fmt.Errorf("expected string") + } + if d.Required && s == "" { + return nil, fmt.Errorf("cannot be empty") + } + return s, nil + case ParamInt: + switch n := v.(type) { + case float64: + return int(n), nil + case int: + return n, nil + case int64: + return int(n), nil + default: + return nil, fmt.Errorf("expected integer") + } + case ParamFloat: + switch n := v.(type) { + case float64: + return n, nil + case int: + return float64(n), nil + case int64: + return float64(n), nil + default: + return nil, fmt.Errorf("expected number") + } + default: + return v, nil + } +} diff --git a/internal/prediction/service.go b/internal/prediction/service.go new file mode 100644 index 0000000..becb807 --- /dev/null +++ b/internal/prediction/service.go @@ -0,0 +1,475 @@ +package prediction + +import ( + "context" + "crypto/rand" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "net/http" + "path" + "strings" + "sync" + "time" + + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/provider/comfyui" + "github.com/rose_cat707/luminary/internal/storage/imagestore" + "github.com/rose_cat707/luminary/internal/store/cache" + "gorm.io/gorm" +) + +type Service struct { + db *gorm.DB + cache *cache.Store + images *imagestore.Store + hub *Hub + publicURL string + waitSec int64 + mu sync.Mutex + running map[string]context.CancelFunc +} + +func NewService(db *gorm.DB, c *cache.Store, images *imagestore.Store, publicURL string, waitSec int64) *Service { + if waitSec <= 0 { + waitSec = 60 + } + return &Service{ + db: db, cache: c, images: images, hub: NewHub(), + publicURL: strings.TrimRight(publicURL, "/"), waitSec: waitSec, + running: make(map[string]context.CancelFunc), + } +} + +func (s *Service) Hub() *Hub { return s.hub } + +func NewPredictionID() (string, error) { + b := make([]byte, 12) + if _, err := rand.Read(b); err != nil { + return "", err + } + return hex.EncodeToString(b), nil +} + +type CreateRequest struct { + Version string `json:"version"` + Input map[string]any `json:"input"` +} + +func (s *Service) Create(ctx context.Context, ingress *model.IngressKey, req CreateRequest, clientIP string, wait bool) (*model.Prediction, error) { + if req.Version == "" { + return nil, fmt.Errorf("version is required") + } + entry, provider, err := s.resolveModel(req.Version, ingress) + if err != nil { + return nil, err + } + if !provider.Enabled { + return nil, fmt.Errorf("provider disabled") + } + input, err := ValidateInput(entry.WorkflowType, req.Input) + if err != nil { + return nil, err + } + binding, err := ParseBinding(entry.InputBindingJSON) + if err != nil { + return nil, err + } + var workflow map[string]any + _ = json.Unmarshal([]byte(entry.WorkflowJSON), &workflow) + if err := binding.Validate(workflow, RequiredBindings(entry.WorkflowType)); err != nil { + return nil, fmt.Errorf("model binding invalid: %w", err) + } + + id, err := NewPredictionID() + if err != nil { + return nil, err + } + inputJSON, _ := json.Marshal(input) + p := model.Prediction{ + ID: id, + IngressKeyID: ingress.ID, + ProviderID: provider.ID, + ModelEntryID: entry.ID, + Version: req.Version, + Model: entry.ModelID, + InputJSON: string(inputJSON), + Status: model.PredictionStarting, + ClientID: "luminary-" + id, + CreatedAt: time.Now(), + } + if err := s.db.Create(&p).Error; err != nil { + return nil, err + } + + runCtx, cancel := context.WithCancel(context.Background()) + s.mu.Lock() + s.running[id] = cancel + s.mu.Unlock() + + go s.execute(runCtx, &p, entry, &provider, binding, input, clientIP) + + if wait { + deadline := time.After(time.Duration(s.waitSec) * time.Second) + for { + select { + case <-deadline: + return s.Get(ctx, id, ingress) + case <-time.After(200 * time.Millisecond): + cur, err := s.Get(ctx, id, ingress) + if err != nil { + return nil, err + } + if cur.Status == model.PredictionSucceeded || cur.Status == model.PredictionFailed || cur.Status == model.PredictionCanceled { + return cur, nil + } + } + } + } + return s.toAPI(&p), nil +} + +func (s *Service) resolveModel(version string, ingress *model.IngressKey) (model.ModelEntry, model.Provider, error) { + allowedProviders := cache.ParseJSONList(ingress.AllowedProvidersJSON) + allowedModels := cache.ParseJSONList(ingress.AllowedModelsJSON) + var candidates []model.ModelEntry + for _, p := range s.cache.ListProviders() { + if p.Category != model.CategoryImage || !p.Enabled { + continue + } + if !cache.MatchesList(allowedProviders, p.Name) && !cache.MatchesList(allowedProviders, string(p.Type)) && !cache.MatchesList(allowedProviders, "*") { + continue + } + for _, m := range s.cache.GetModels(p.ID) { + if !m.Enabled { + continue + } + ingressID := m.IngressID() + if !m.MatchesIngressName(version) { + continue + } + if !cache.MatchesList(allowedModels, ingressID) && !cache.MatchesList(allowedModels, m.ModelID) && !cache.MatchesList(allowedModels, "*") { + continue + } + candidates = append(candidates, m) + } + } + if len(candidates) == 0 { + return model.ModelEntry{}, model.Provider{}, fmt.Errorf("no model found for version %s", version) + } + m := candidates[0] + p, ok := s.cache.GetProvider(m.ProviderID) + if !ok { + return model.ModelEntry{}, model.Provider{}, fmt.Errorf("provider not found") + } + return m, p, nil +} + +func (s *Service) execute(ctx context.Context, p *model.Prediction, entry model.ModelEntry, provider *model.Provider, binding InputBinding, input map[string]any, clientIP string) { + defer func() { + s.mu.Lock() + delete(s.running, p.ID) + s.mu.Unlock() + }() + + start := time.Now() + s.updateStatus(p, model.PredictionProcessing, "", nil) + s.hub.Publish(p.ID, Event{Status: string(model.PredictionProcessing)}) + + client := comfyui.New(provider.BaseURL) + runInput := cloneMap(input) + if entry.WorkflowType == model.WorkflowImg2Img { + imageURL, _ := runInput["image"].(string) + data, err := downloadURL(ctx, imageURL) + if err != nil { + s.fail(p, clientIP, start, fmt.Errorf("download image: %w", err)) + return + } + name := path.Base(imageURL) + if name == "" || name == "." || name == "/" { + name = "input.png" + } + uploaded, err := client.UploadImage(ctx, data, name) + if err != nil { + s.fail(p, clientIP, start, fmt.Errorf("upload image: %w", err)) + return + } + runInput["image"] = uploaded + } + + prompt, err := BuildPrompt(entry.WorkflowJSON, binding, runInput) + if err != nil { + s.fail(p, clientIP, start, err) + return + } + + wsCtx, wsCancel := context.WithCancel(ctx) + defer wsCancel() + go client.Watch(wsCtx, p.ClientID, func(ev comfyui.ProgressEvent) { + switch ev.Type { + case "progress": + if ev.Max > 0 { + logs := fmt.Sprintf("progress %.0f/%.0f", ev.Value, ev.Max) + s.appendLogs(p, logs) + s.hub.Publish(p.ID, Event{Status: string(model.PredictionProcessing), Logs: logs}) + } + case "execution_error": + s.appendLogs(p, ev.ErrorText) + } + }) + + submit, err := client.SubmitPrompt(ctx, prompt, p.ClientID) + if err != nil { + s.fail(p, clientIP, start, err) + return + } + p.ComfyPromptID = submit.PromptID + now := time.Now() + p.StartedAt = &now + s.db.Model(p).Updates(map[string]any{"comfy_prompt_id": p.ComfyPromptID, "started_at": p.StartedAt}) + + for { + select { + case <-ctx.Done(): + _ = client.Interrupt(context.Background()) + s.updateStatus(p, model.PredictionCanceled, "canceled", nil) + s.hub.Publish(p.ID, Event{Status: string(model.PredictionCanceled), Done: true}) + s.recordUsage(ingressByID(s.cache, p.IngressKeyID), provider, clientIP, p, start, "canceled", "canceled") + return + case <-time.After(2 * time.Second): + history, err := client.GetHistory(ctx, p.ComfyPromptID) + if err != nil { + continue + } + if _, ok := history[p.ComfyPromptID]; !ok { + continue + } + images := comfyui.CollectOutputImages(history, p.ComfyPromptID) + if len(images) == 0 { + continue + } + var urls []string + for _, img := range images { + data, mime, err := client.DownloadView(ctx, img.Filename, img.Subfolder, img.Type) + if err != nil { + s.fail(p, clientIP, start, err) + return + } + stored, err := s.images.Save(p.ID, img.Filename, data, mime) + if err != nil { + s.fail(p, clientIP, start, err) + return + } + urls = append(urls, s.images.SignURL(stored.ID)) + } + outJSON, _ := json.Marshal(urls) + p.OutputJSON = string(outJSON) + completed := time.Now() + p.CompletedAt = &completed + metrics, _ := json.Marshal(map[string]any{ + "predict_time": time.Since(start).Seconds(), + "total_time": completed.Sub(p.CreatedAt).Seconds(), + }) + p.MetricsJSON = string(metrics) + s.updateStatus(p, model.PredictionSucceeded, "", &completed) + s.hub.Publish(p.ID, Event{ + Status: string(model.PredictionSucceeded), Output: urls, + Metrics: map[string]any{"predict_time": time.Since(start).Seconds()}, + Done: true, + }) + s.recordUsage(ingressByID(s.cache, p.IngressKeyID), provider, clientIP, p, start, "success", "") + return + } + } +} + +func (s *Service) fail(p *model.Prediction, clientIP string, start time.Time, err error) { + completed := time.Now() + p.CompletedAt = &completed + p.Error = err.Error() + s.updateStatus(p, model.PredictionFailed, err.Error(), &completed) + s.hub.Publish(p.ID, Event{Status: string(model.PredictionFailed), Error: err.Error(), Done: true}) + prov, _ := s.cache.GetProvider(p.ProviderID) + s.recordUsage(ingressByID(s.cache, p.IngressKeyID), &prov, clientIP, p, start, "error", err.Error()) +} + +func (s *Service) updateStatus(p *model.Prediction, status model.PredictionStatus, errMsg string, completed *time.Time) { + p.Status = status + if errMsg != "" { + p.Error = errMsg + } + updates := map[string]any{"status": status, "error": p.Error, "logs": p.Logs, "output_json": p.OutputJSON, "metrics_json": p.MetricsJSON} + if completed != nil { + updates["completed_at"] = completed + } + s.db.Model(p).Where("id = ?", p.ID).Updates(updates) +} + +func (s *Service) appendLogs(p *model.Prediction, line string) { + if p.Logs != "" { + p.Logs += "\n" + } + p.Logs += line + s.db.Model(p).Where("id = ?", p.ID).Update("logs", p.Logs) +} + +func (s *Service) Get(ctx context.Context, id string, ingress *model.IngressKey) (*model.Prediction, error) { + var p model.Prediction + if err := s.db.First(&p, "id = ?", id).Error; err != nil { + return nil, fmt.Errorf("prediction not found") + } + if ingress != nil && p.IngressKeyID != ingress.ID { + return nil, fmt.Errorf("prediction not found") + } + return s.toAPI(&p), nil +} + +func (s *Service) List(ctx context.Context, ingress *model.IngressKey, cursor string, limit int) ([]*model.Prediction, error) { + if limit <= 0 || limit > 100 { + limit = 100 + } + q := s.db.Where("ingress_key_id = ?", ingress.ID).Order("created_at desc").Limit(limit) + if cursor != "" { + q = q.Where("id < ?", cursor) + } + var rows []model.Prediction + if err := q.Find(&rows).Error; err != nil { + return nil, err + } + out := make([]*model.Prediction, 0, len(rows)) + for i := range rows { + out = append(out, s.toAPI(&rows[i])) + } + return out, nil +} + +func (s *Service) Cancel(ctx context.Context, id string, ingress *model.IngressKey) (*model.Prediction, error) { + p, err := s.Get(ctx, id, ingress) + if err != nil { + return nil, err + } + if p.Status == model.PredictionSucceeded || p.Status == model.PredictionFailed || p.Status == model.PredictionCanceled { + return p, nil + } + s.mu.Lock() + if cancel, ok := s.running[id]; ok { + cancel() + } + s.mu.Unlock() + return s.Get(ctx, id, ingress) +} + +func (s *Service) toAPI(p *model.Prediction) *model.Prediction { + return p +} + +func (s *Service) APIView(p *model.Prediction, baseURL string) map[string]any { + var input any + _ = json.Unmarshal([]byte(p.InputJSON), &input) + var output any + if p.OutputJSON != "" { + _ = json.Unmarshal([]byte(p.OutputJSON), &output) + } + var metrics any + if p.MetricsJSON != "" { + _ = json.Unmarshal([]byte(p.MetricsJSON), &metrics) + } + base := strings.TrimRight(baseURL, "/") + return map[string]any{ + "id": p.ID, + "version": p.Version, + "input": input, + "output": output, + "error": nilIfEmpty(p.Error), + "status": p.Status, + "created_at": p.CreatedAt.UTC().Format(time.RFC3339Nano), + "started_at": formatTime(p.StartedAt), + "completed_at": formatTime(p.CompletedAt), + "logs": p.Logs, + "metrics": metrics, + "urls": map[string]string{ + "get": fmt.Sprintf("%s/v1/predictions/%s", base, p.ID), + "cancel": fmt.Sprintf("%s/v1/predictions/%s/cancel", base, p.ID), + "stream": fmt.Sprintf("%s/v1/predictions/%s/stream", base, p.ID), + }, + } +} + +func nilIfEmpty(s string) any { + if s == "" { + return nil + } + return s +} + +func formatTime(t *time.Time) any { + if t == nil { + return nil + } + return t.UTC().Format(time.RFC3339Nano) +} + +func downloadURL(ctx context.Context, raw string) ([]byte, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, raw, nil) + if err != nil { + return nil, err + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + if resp.StatusCode >= 400 { + return nil, fmt.Errorf("http %d", resp.StatusCode) + } + return io.ReadAll(resp.Body) +} + +func cloneMap(in map[string]any) map[string]any { + b, _ := json.Marshal(in) + var out map[string]any + _ = json.Unmarshal(b, &out) + return out +} + +func ingressByID(c *cache.Store, id uint) *model.IngressKey { + for _, k := range c.ListIngressKeys() { + if k.ID == id { + kCopy := k + return &kCopy + } + } + return nil +} + +func (s *Service) recordUsage(ingress *model.IngressKey, provider *model.Provider, clientIP string, p *model.Prediction, start time.Time, status, errMsg string) { + if ingress == nil { + return + } + var providerID uint + if provider != nil { + providerID = provider.ID + } + s.cache.RecordUsage(cache.UsageDelta{ + IngressKeyID: ingress.ID, + ProviderID: providerID, + ClientIP: clientIP, + Endpoint: model.EndpointPrediction, + Model: p.ID, + LatencyMs: time.Since(start).Milliseconds(), + Status: status, + ErrorMsg: errMsg, + RequestBody: p.InputJSON, + ResponseBody: p.OutputJSON, + Requests: 1, + }) +} + +func (s *Service) GetDBPrediction(id string) (*model.Prediction, error) { + var p model.Prediction + if err := s.db.First(&p, "id = ?", id).Error; err != nil { + return nil, err + } + return &p, nil +} diff --git a/internal/prediction/workflow_analyze.go b/internal/prediction/workflow_analyze.go new file mode 100644 index 0000000..a6fb5a0 --- /dev/null +++ b/internal/prediction/workflow_analyze.go @@ -0,0 +1,268 @@ +package prediction + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "strings" + + "github.com/rose_cat707/luminary/internal/model" +) + +type WorkflowNode struct { + ID string `json:"id"` + ClassType string `json:"class_type"` + Title string `json:"title"` + InjectableFields []string `json:"injectable_fields"` +} + +type BindingCandidate struct { + Node string `json:"node"` + Field string `json:"field"` +} + +type BindingSuggestion struct { + Param string `json:"param"` + Node string `json:"node,omitempty"` + Field string `json:"field,omitempty"` + Type ParamType `json:"type"` + DefaultFromWorkflow any `json:"default_from_workflow,omitempty"` + Confidence string `json:"confidence"` + Candidates []BindingCandidate `json:"candidates"` +} + +type AnalyzeResult struct { + VersionHashPreview string `json:"version_hash_preview"` + Nodes []WorkflowNode `json:"nodes"` + Suggestions []BindingSuggestion `json:"suggestions"` +} + +func HashWorkflowJSON(raw string) string { + sum := sha256.Sum256([]byte(raw)) + return hex.EncodeToString(sum[:]) +} + +func AnalyzeWorkflow(workflowJSON string, wt model.WorkflowType) (*AnalyzeResult, error) { + var workflow map[string]any + if err := json.Unmarshal([]byte(workflowJSON), &workflow); err != nil { + return nil, fmt.Errorf("invalid workflow json: %w", err) + } + nodes := parseNodes(workflow) + suggestions := suggestBindings(workflow, nodes, wt) + return &AnalyzeResult{ + VersionHashPreview: HashWorkflowJSON(workflowJSON), + Nodes: nodes, + Suggestions: suggestions, + }, nil +} + +func parseNodes(workflow map[string]any) []WorkflowNode { + var out []WorkflowNode + for id, raw := range workflow { + node, ok := raw.(map[string]any) + if !ok { + continue + } + classType, _ := node["class_type"].(string) + title := "" + if meta, ok := node["_meta"].(map[string]any); ok { + title, _ = meta["title"].(string) + } + var fields []string + if inputs, ok := node["inputs"].(map[string]any); ok { + for k, v := range inputs { + if isInjectableValue(v) { + fields = append(fields, k) + } + } + } + out = append(out, WorkflowNode{ + ID: id, ClassType: classType, Title: title, InjectableFields: fields, + }) + } + return out +} + +func isInjectableValue(v any) bool { + switch v.(type) { + case string, float64, bool, int, int64: + return true + default: + return false + } +} + +func suggestBindings(workflow map[string]any, nodes []WorkflowNode, wt model.WorkflowType) []BindingSuggestion { + defs := ParamsForWorkflowType(wt) + var clipNodes []WorkflowNode + var samplerNodes []WorkflowNode + var latentNodes []WorkflowNode + var loadImageNodes []WorkflowNode + for _, n := range nodes { + switch n.ClassType { + case "CLIPTextEncode": + clipNodes = append(clipNodes, n) + case "KSampler", "KSamplerAdvanced", "RandomNoise": + samplerNodes = append(samplerNodes, n) + case "EmptyLatentImage": + latentNodes = append(latentNodes, n) + case "LoadImage": + loadImageNodes = append(loadImageNodes, n) + } + } + var out []BindingSuggestion + for _, d := range defs { + s := BindingSuggestion{Param: d.Name, Type: d.Type, Confidence: "low"} + switch d.Name { + case "prompt": + s = suggestCLIP(clipNodes, workflow, false) + case "negative_prompt": + s = suggestCLIP(clipNodes, workflow, true) + case "seed": + s = suggestSamplerField(samplerNodes, workflow, "seed", d.Type) + if s.Node == "" { + s = suggestSamplerField(samplerNodes, workflow, "noise_seed", d.Type) + } + case "steps": + s = suggestSamplerField(samplerNodes, workflow, "steps", d.Type) + case "cfg_scale": + s = suggestSamplerField(samplerNodes, workflow, "cfg", d.Type) + case "denoise": + s = suggestSamplerField(samplerNodes, workflow, "denoise", d.Type) + case "width": + s = suggestLatentField(latentNodes, workflow, "width", d.Type) + case "height": + s = suggestLatentField(latentNodes, workflow, "height", d.Type) + case "image": + s = suggestLoadImage(loadImageNodes, workflow, d.Type) + default: + s.Param = d.Name + s.Type = d.Type + } + if s.Param == "" { + s.Param = d.Name + s.Type = d.Type + } + if s.Node != "" { + s.Confidence = "high" + } + out = append(out, s) + } + return out +} + +func suggestCLIP(nodes []WorkflowNode, workflow map[string]any, negative bool) BindingSuggestion { + s := BindingSuggestion{Param: "prompt", Type: ParamString, Confidence: "low"} + if negative { + s.Param = "negative_prompt" + } + var candidates []BindingCandidate + var picked *WorkflowNode + for i := range nodes { + n := nodes[i] + titleLower := strings.ToLower(n.Title) + isNeg := strings.Contains(titleLower, "negative") || strings.Contains(titleLower, "neg") + if !hasField(n, "text") { + continue + } + candidates = append(candidates, BindingCandidate{Node: n.ID, Field: "text"}) + if negative && isNeg && picked == nil { + picked = &nodes[i] + } + if !negative && !isNeg && picked == nil { + picked = &nodes[i] + } + } + if picked == nil && len(candidates) > 0 { + idx := 0 + if negative && len(candidates) > 1 { + idx = 1 + } + for i := range nodes { + if nodes[i].ID == candidates[idx].Node { + picked = &nodes[i] + break + } + } + } + s.Candidates = candidates + if picked != nil { + s.Node = picked.ID + s.Field = "text" + s.DefaultFromWorkflow = nodeFieldValue(workflow, picked.ID, "text") + } + return s +} + +func suggestSamplerField(nodes []WorkflowNode, workflow map[string]any, field string, pt ParamType) BindingSuggestion { + paramName := field + if field == "cfg" { + paramName = "cfg_scale" + } + s := BindingSuggestion{Param: paramName, Type: pt, Confidence: "low"} + var candidates []BindingCandidate + for _, n := range nodes { + if hasField(n, field) { + candidates = append(candidates, BindingCandidate{Node: n.ID, Field: field}) + if s.Node == "" { + s.Node = n.ID + s.Field = field + s.DefaultFromWorkflow = nodeFieldValue(workflow, n.ID, field) + } + } + } + s.Candidates = candidates + return s +} + +func suggestLatentField(nodes []WorkflowNode, workflow map[string]any, field string, pt ParamType) BindingSuggestion { + s := BindingSuggestion{Param: field, Type: pt, Confidence: "low"} + for _, n := range nodes { + if hasField(n, field) { + s.Candidates = append(s.Candidates, BindingCandidate{Node: n.ID, Field: field}) + if s.Node == "" { + s.Node = n.ID + s.Field = field + s.DefaultFromWorkflow = nodeFieldValue(workflow, n.ID, field) + } + } + } + return s +} + +func suggestLoadImage(nodes []WorkflowNode, workflow map[string]any, pt ParamType) BindingSuggestion { + s := BindingSuggestion{Param: "image", Type: pt, Confidence: "low"} + for _, n := range nodes { + if hasField(n, "image") { + s.Candidates = append(s.Candidates, BindingCandidate{Node: n.ID, Field: "image"}) + if s.Node == "" { + s.Node = n.ID + s.Field = "image" + s.DefaultFromWorkflow = nodeFieldValue(workflow, n.ID, "image") + } + } + } + return s +} + +func hasField(n WorkflowNode, field string) bool { + for _, f := range n.InjectableFields { + if f == field { + return true + } + } + return false +} + +func nodeFieldValue(workflow map[string]any, nodeID, field string) any { + node, ok := workflow[nodeID].(map[string]any) + if !ok { + return nil + } + inputs, ok := node["inputs"].(map[string]any) + if !ok { + return nil + } + return inputs[field] +} diff --git a/internal/pricing/cost.go b/internal/pricing/cost.go new file mode 100644 index 0000000..78dc3cb --- /dev/null +++ b/internal/pricing/cost.go @@ -0,0 +1,66 @@ +package pricing + +import "strings" + +// 价格单位:美元 / 1M tokens +type ModelPrice struct { + InputPer1M float64 + OutputPer1M float64 +} + +var catalog = map[string]ModelPrice{ + "gpt-4o": {InputPer1M: 2.5, OutputPer1M: 10}, + "gpt-4o-mini": {InputPer1M: 0.15, OutputPer1M: 0.6}, + "gpt-4-turbo": {InputPer1M: 10, OutputPer1M: 30}, + "gpt-3.5-turbo": {InputPer1M: 0.5, OutputPer1M: 1.5}, + "claude-3-5-sonnet": {InputPer1M: 3, OutputPer1M: 15}, + "claude-3-5-haiku": {InputPer1M: 0.8, OutputPer1M: 4}, + "claude-3-opus": {InputPer1M: 15, OutputPer1M: 75}, + "text-embedding-3-small": {InputPer1M: 0.02, OutputPer1M: 0}, + "text-embedding-3-large": {InputPer1M: 0.13, OutputPer1M: 0}, + "text-embedding-ada-002": {InputPer1M: 0.1, OutputPer1M: 0}, + "bge-reranker-v2-m3": {InputPer1M: 0.1, OutputPer1M: 0}, + "rerank-english-v3.0": {InputPer1M: 2.0, OutputPer1M: 0}, + "rerank-multilingual-v3.0": {InputPer1M: 2.0, OutputPer1M: 0}, +} + +func Estimate(model string, tokensIn, tokensOut int, endpoint string) float64 { + if strings.Contains(endpoint, "embeddings") || strings.Contains(endpoint, "rerank") { + tokensOut = 0 + } + price, ok := lookup(model) + if !ok { + // fallback: average small model pricing + price = ModelPrice{InputPer1M: 0.5, OutputPer1M: 1.5} + } + inCost := float64(tokensIn) / 1_000_000 * price.InputPer1M + outCost := float64(tokensOut) / 1_000_000 * price.OutputPer1M + return inCost + outCost +} + +func lookup(model string) (ModelPrice, bool) { + if p, ok := catalog[model]; ok { + return p, true + } + // strip provider prefix + if i := strings.LastIndex(model, "/"); i >= 0 { + if p, ok := catalog[model[i+1:]]; ok { + return p, true + } + } + // prefix match + for k, v := range catalog { + if strings.HasPrefix(model, k) { + return v, true + } + } + return ModelPrice{}, false +} + +func ListCatalog() map[string]ModelPrice { + out := make(map[string]ModelPrice, len(catalog)) + for k, v := range catalog { + out[k] = v + } + return out +} diff --git a/internal/provider/anthropic/client.go b/internal/provider/anthropic/client.go new file mode 100644 index 0000000..6d122b5 --- /dev/null +++ b/internal/provider/anthropic/client.go @@ -0,0 +1,283 @@ +package anthropic + +import ( + "context" + "encoding/json" + "fmt" + "strings" + + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/provider" +) + +type Client struct { + http *provider.HTTPClientWrapper +} + +func New() *Client { + return &Client{http: provider.NewHTTPClientWrapper()} +} + +func (c *Client) Type() string { return "anthropic" } + +func (c *Client) ListModels(ctx context.Context, apiKey, baseURL string) ([]provider.ModelInfo, error) { + return c.ListModelsWithConfig(ctx, apiKey, provider.ProviderConfig{ + Type: model.ProviderAnthropic, + BaseURL: provider.NormalizeBaseURL(baseURL, model.ProviderAnthropic), + }) +} + +func (c *Client) ListModelsWithConfig(ctx context.Context, apiKey string, cfg provider.ProviderConfig) ([]provider.ModelInfo, error) { + cfg.Type = model.ProviderAnthropic + cfg.BaseURL = provider.NormalizeBaseURL(cfg.BaseURL, model.ProviderAnthropic) + url := cfg.ResolveEndpointURL(provider.EndpointListModels) + resp, err := provider.ForwardHTTP(ctx, c.http.Client, "GET", url, apiKey, model.ProviderAnthropic, nil, nil) + if err != nil { + return nil, err + } + if resp.StatusCode >= 400 { + return nil, fmt.Errorf("anthropic list models: status %d: %s", resp.StatusCode, string(resp.Body)) + } + var out struct { + Data []struct { + ID string `json:"id"` + Name string `json:"display_name"` + } `json:"data"` + } + if err := json.Unmarshal(resp.Body, &out); err != nil { + return nil, err + } + models := make([]provider.ModelInfo, 0, len(out.Data)) + for _, m := range out.Data { + name := m.Name + if name == "" { + name = m.ID + } + models = append(models, provider.ModelInfo{ID: m.ID, DisplayName: name}) + } + return models, nil +} + +func (c *Client) ChatCompletion(ctx context.Context, apiKey, baseURL string, req *provider.ChatRequest) (*provider.ChatResponse, error) { + cfg := provider.ProviderConfig{ + Type: model.ProviderAnthropic, + BaseURL: provider.NormalizeBaseURL(baseURL, model.ProviderAnthropic), + } + anthropicReq, err := convertOpenAIToAnthropic(req) + if err != nil { + return nil, err + } + body, err := json.Marshal(anthropicReq) + if err != nil { + return nil, err + } + url := cfg.ResolveEndpointURL(provider.EndpointChatCompletion) + resp, err := provider.ForwardHTTP(ctx, c.http.Client, "POST", url, apiKey, model.ProviderAnthropic, body, nil) + if err != nil { + return nil, err + } + if resp.StatusCode >= 400 { + return &provider.ChatResponse{StatusCode: resp.StatusCode, Body: resp.Body}, nil + } + openAIResp, tokensIn, tokensOut := convertAnthropicToOpenAI(resp.Body, req.Model) + return &provider.ChatResponse{ + StatusCode: 200, + Body: openAIResp, + TokensIn: tokensIn, + TokensOut: tokensOut, + }, nil +} + +func (c *Client) ForwardWithConfig(ctx context.Context, apiKey string, cfg provider.ProviderConfig, endpoint provider.EndpointType, body []byte) (*provider.ChatResponse, error) { + cfg.Type = model.ProviderAnthropic + cfg.BaseURL = provider.NormalizeBaseURL(cfg.BaseURL, model.ProviderAnthropic) + if endpoint == provider.EndpointChatCompletion { + var payload map[string]any + if err := json.Unmarshal(body, &payload); err == nil { + modelName, _ := payload["model"].(string) + anthropicReq, err := convertOpenAIToAnthropic(&provider.ChatRequest{Model: modelName, Raw: body}) + if err == nil { + body, _ = json.Marshal(anthropicReq) + } + } + } + url := cfg.ResolveEndpointURL(endpoint) + resp, err := provider.ForwardHTTP(ctx, c.http.Client, "POST", url, apiKey, model.ProviderAnthropic, body, nil) + if err != nil { + return nil, err + } + if endpoint == provider.EndpointChatCompletion && resp.StatusCode < 400 { + var payload map[string]any + modelName := "" + _ = json.Unmarshal(body, &payload) + if m, ok := payload["model"].(string); ok { + modelName = m + } + openAIResp, tokensIn, tokensOut := convertAnthropicToOpenAI(resp.Body, modelName) + return &provider.ChatResponse{StatusCode: 200, Body: openAIResp, TokensIn: tokensIn, TokensOut: tokensOut}, nil + } + return &provider.ChatResponse{StatusCode: resp.StatusCode, Body: resp.Body, TokensIn: resp.TokensIn, TokensOut: resp.TokensOut}, nil +} + +func (c *Client) HealthCheck(ctx context.Context, apiKey, baseURL string) error { + _, err := c.ListModels(ctx, apiKey, baseURL) + return err +} + +func (c *Client) HealthCheckWithConfig(ctx context.Context, apiKey string, cfg provider.ProviderConfig) error { + _, err := c.ListModelsWithConfig(ctx, apiKey, cfg) + return err +} + +// convertOpenAIToAnthropic and convertAnthropicToOpenAI unchanged below + +func convertOpenAIToAnthropic(req *provider.ChatRequest) (map[string]any, error) { + var payload map[string]any + raw := req.Raw + if len(raw) == 0 { + b, _ := json.Marshal(req) + raw = b + } + if err := json.Unmarshal(raw, &payload); err != nil { + return nil, err + } + model, _ := payload["model"].(string) + if model == "" { + model = req.Model + } + msgs, _ := payload["messages"].([]any) + var system string + var anthropicMsgs []map[string]any + for _, m := range msgs { + msg, _ := m.(map[string]any) + role, _ := msg["role"].(string) + if role == "system" { + system = extractOpenAIContent(msg["content"]) + continue + } + if role != "assistant" { + role = "user" + } + content := convertOpenAIContentBlocks(msg["content"]) + anthropicMsgs = append(anthropicMsgs, map[string]any{"role": role, "content": content}) + } + out := map[string]any{ + "model": model, + "max_tokens": 4096, + "messages": anthropicMsgs, + } + if system != "" { + out["system"] = system + } + if maxTok, ok := payload["max_tokens"].(float64); ok { + out["max_tokens"] = int(maxTok) + } + return out, nil +} + +func extractOpenAIContent(content any) string { + switch v := content.(type) { + case string: + return v + case []any: + var parts []string + for _, p := range v { + part, ok := p.(map[string]any) + if !ok { + continue + } + if text, ok := part["text"].(string); ok { + parts = append(parts, text) + } + } + return strings.Join(parts, "\n") + default: + return "" + } +} + +func convertOpenAIContentBlocks(content any) any { + switch v := content.(type) { + case string: + if v == "" { + return "" + } + return v + case []any: + blocks := make([]map[string]any, 0, len(v)) + for _, p := range v { + part, ok := p.(map[string]any) + if !ok { + continue + } + partType, _ := part["type"].(string) + switch partType { + case "text": + if text, ok := part["text"].(string); ok { + blocks = append(blocks, map[string]any{"type": "text", "text": text}) + } + case "image_url": + if imageURL, ok := part["image_url"].(map[string]any); ok { + if url, ok := imageURL["url"].(string); ok && url != "" { + blocks = append(blocks, map[string]any{ + "type": "image", + "source": map[string]any{ + "type": "url", + "url": url, + }, + }) + } + } + case "image": + if source, ok := part["source"].(map[string]any); ok { + blocks = append(blocks, map[string]any{"type": "image", "source": source}) + } + default: + if text, ok := part["text"].(string); ok { + blocks = append(blocks, map[string]any{"type": "text", "text": text}) + } + } + } + if len(blocks) == 1 { + if text, ok := blocks[0]["text"].(string); ok && blocks[0]["type"] == "text" { + return text + } + } + if len(blocks) > 0 { + return blocks + } + return "" + default: + return "" + } +} + +func convertAnthropicToOpenAI(body []byte, model string) ([]byte, int, int) { + var resp struct { + Content []struct { + Text string `json:"text"` + } `json:"content"` + Usage struct { + InputTokens int `json:"input_tokens"` + OutputTokens int `json:"output_tokens"` + } `json:"usage"` + } + _ = json.Unmarshal(body, &resp) + text := "" + if len(resp.Content) > 0 { + text = resp.Content[0].Text + } + openAI := map[string]any{ + "id": "chatcmpl-luminary", + "object": "chat.completion", + "model": model, + "choices": []any{map[string]any{"index": 0, "message": map[string]string{"role": "assistant", "content": text}, "finish_reason": "stop"}}, + "usage": map[string]int{ + "prompt_tokens": resp.Usage.InputTokens, + "completion_tokens": resp.Usage.OutputTokens, + "total_tokens": resp.Usage.InputTokens + resp.Usage.OutputTokens, + }, + } + b, _ := json.Marshal(openAI) + return b, resp.Usage.InputTokens, resp.Usage.OutputTokens +} diff --git a/internal/provider/anthropic/content_test.go b/internal/provider/anthropic/content_test.go new file mode 100644 index 0000000..63eca42 --- /dev/null +++ b/internal/provider/anthropic/content_test.go @@ -0,0 +1,26 @@ +package anthropic + +import "testing" + +func TestConvertOpenAIContentBlocks_TextAndImage(t *testing.T) { + content := []any{ + map[string]any{"type": "text", "text": "describe this"}, + map[string]any{"type": "image_url", "image_url": map[string]any{"url": "https://example.com/a.png"}}, + } + blocks, ok := convertOpenAIContentBlocks(content).([]map[string]any) + if !ok || len(blocks) != 2 { + t.Fatalf("expected 2 blocks, got %#v", convertOpenAIContentBlocks(content)) + } + if blocks[0]["text"] != "describe this" { + t.Fatalf("unexpected text block: %#v", blocks[0]) + } + if blocks[1]["type"] != "image" { + t.Fatalf("unexpected image block: %#v", blocks[1]) + } +} + +func TestExtractOpenAIContent_String(t *testing.T) { + if got := extractOpenAIContent("hello"); got != "hello" { + t.Fatalf("got %q", got) + } +} diff --git a/internal/provider/comfyui/client.go b/internal/provider/comfyui/client.go new file mode 100644 index 0000000..e15ba6c --- /dev/null +++ b/internal/provider/comfyui/client.go @@ -0,0 +1,290 @@ +package comfyui + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "mime/multipart" + "net/http" + "net/url" + "strings" + "time" + + "github.com/gorilla/websocket" +) + +type Client struct { + BaseURL string + HTTPClient *http.Client +} + +func New(baseURL string) *Client { + return &Client{ + BaseURL: strings.TrimRight(baseURL, "/"), + HTTPClient: &http.Client{Timeout: 120 * time.Second}, + } +} + +type PromptResponse struct { + PromptID string `json:"prompt_id"` + Number int `json:"number"` +} + +func (c *Client) SubmitPrompt(ctx context.Context, prompt map[string]any, clientID string) (*PromptResponse, error) { + body, _ := json.Marshal(map[string]any{ + "prompt": prompt, + "client_id": clientID, + }) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, c.BaseURL+"/prompt", bytes.NewReader(body)) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", "application/json") + resp, err := c.HTTPClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + data, _ := io.ReadAll(resp.Body) + if resp.StatusCode >= 400 { + return nil, fmt.Errorf("comfyui prompt %d: %s", resp.StatusCode, string(data)) + } + var out PromptResponse + if err := json.Unmarshal(data, &out); err != nil { + return nil, err + } + return &out, nil +} + +func (c *Client) Interrupt(ctx context.Context) error { + req, err := http.NewRequestWithContext(ctx, http.MethodPost, c.BaseURL+"/interrupt", nil) + if err != nil { + return err + } + resp, err := c.HTTPClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode >= 400 { + data, _ := io.ReadAll(resp.Body) + return fmt.Errorf("comfyui interrupt %d: %s", resp.StatusCode, string(data)) + } + return nil +} + +type HistoryEntry struct { + Outputs map[string]HistoryNodeOutput `json:"outputs"` + Status map[string]any `json:"status"` +} + +type HistoryNodeOutput struct { + Images []OutputImage `json:"images"` +} + +type OutputImage struct { + Filename string `json:"filename"` + Subfolder string `json:"subfolder"` + Type string `json:"type"` +} + +func (c *Client) GetHistory(ctx context.Context, promptID string) (map[string]HistoryEntry, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.BaseURL+"/history/"+promptID, nil) + if err != nil { + return nil, err + } + resp, err := c.HTTPClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + data, _ := io.ReadAll(resp.Body) + if resp.StatusCode >= 400 { + return nil, fmt.Errorf("comfyui history %d: %s", resp.StatusCode, string(data)) + } + var out map[string]HistoryEntry + if err := json.Unmarshal(data, &out); err != nil { + return nil, err + } + return out, nil +} + +func (c *Client) DownloadView(ctx context.Context, filename, subfolder, imageType string) ([]byte, string, error) { + q := url.Values{} + q.Set("filename", filename) + if subfolder != "" { + q.Set("subfolder", subfolder) + } + if imageType == "" { + imageType = "output" + } + q.Set("type", imageType) + u := c.BaseURL + "/view?" + q.Encode() + req, err := http.NewRequestWithContext(ctx, http.MethodGet, u, nil) + if err != nil { + return nil, "", err + } + resp, err := c.HTTPClient.Do(req) + if err != nil { + return nil, "", err + } + defer resp.Body.Close() + data, err := io.ReadAll(resp.Body) + if err != nil { + return nil, "", err + } + if resp.StatusCode >= 400 { + return nil, "", fmt.Errorf("comfyui view %d", resp.StatusCode) + } + mime := resp.Header.Get("Content-Type") + if mime == "" { + mime = "image/png" + } + return data, mime, nil +} + +func (c *Client) UploadImage(ctx context.Context, data []byte, filename string) (string, error) { + var buf bytes.Buffer + w := multipart.NewWriter(&buf) + part, err := w.CreateFormFile("image", filename) + if err != nil { + return "", err + } + if _, err := part.Write(data); err != nil { + return "", err + } + _ = w.WriteField("overwrite", "true") + _ = w.Close() + req, err := http.NewRequestWithContext(ctx, http.MethodPost, c.BaseURL+"/upload/image", &buf) + if err != nil { + return "", err + } + req.Header.Set("Content-Type", w.FormDataContentType()) + resp, err := c.HTTPClient.Do(req) + if err != nil { + return "", err + } + defer resp.Body.Close() + body, _ := io.ReadAll(resp.Body) + if resp.StatusCode >= 400 { + return "", fmt.Errorf("comfyui upload %d: %s", resp.StatusCode, string(body)) + } + var out struct { + Name string `json:"name"` + } + if err := json.Unmarshal(body, &out); err != nil { + return "", err + } + return out.Name, nil +} + +func (c *Client) HealthCheck(ctx context.Context) error { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.BaseURL+"/system_stats", nil) + if err != nil { + return err + } + resp, err := c.HTTPClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode >= 400 { + return fmt.Errorf("status %d", resp.StatusCode) + } + return nil +} + +type ProgressEvent struct { + Type string + Data map[string]any + Node string + Value float64 + Max float64 + PromptID string + ErrorText string +} + +func (c *Client) wsURL(clientID string) string { + u, _ := url.Parse(c.BaseURL) + scheme := "ws" + if u.Scheme == "https" { + scheme = "wss" + } + return fmt.Sprintf("%s://%s/ws?clientId=%s", scheme, u.Host, url.QueryEscape(clientID)) +} + +func (c *Client) Watch(ctx context.Context, clientID string, onEvent func(ProgressEvent)) error { + conn, _, err := websocket.DefaultDialer.DialContext(ctx, c.wsURL(clientID), nil) + if err != nil { + return err + } + defer conn.Close() + done := make(chan struct{}) + go func() { + defer close(done) + for { + _, msg, err := conn.ReadMessage() + if err != nil { + return + } + var envelope struct { + Type string `json:"type"` + Data json.RawMessage `json:"data"` + } + if err := json.Unmarshal(msg, &envelope); err != nil { + continue + } + ev := ProgressEvent{Type: envelope.Type} + var data map[string]any + _ = json.Unmarshal(envelope.Data, &data) + ev.Data = data + if envelope.Type == "progress" { + if n, ok := data["node"].(string); ok { + ev.Node = n + } + if v, ok := data["value"].(float64); ok { + ev.Value = v + } + if m, ok := data["max"].(float64); ok { + ev.Max = m + } + } + if envelope.Type == "executing" { + if n, ok := data["node"].(string); ok { + ev.Node = n + } + if pid, ok := data["prompt_id"].(string); ok { + ev.PromptID = pid + } + } + if envelope.Type == "execution_error" { + if msgs, ok := data["exception_message"].(string); ok { + ev.ErrorText = msgs + } + } + onEvent(ev) + } + }() + select { + case <-ctx.Done(): + _ = conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) + <-done + return ctx.Err() + case <-done: + return nil + } +} + +func CollectOutputImages(history map[string]HistoryEntry, promptID string) []OutputImage { + entry, ok := history[promptID] + if !ok { + return nil + } + var images []OutputImage + for _, out := range entry.Outputs { + images = append(images, out.Images...) + } + return images +} diff --git a/internal/provider/custom/client.go b/internal/provider/custom/client.go new file mode 100644 index 0000000..4980c98 --- /dev/null +++ b/internal/provider/custom/client.go @@ -0,0 +1,16 @@ +package custom + +import ( + "github.com/rose_cat707/luminary/internal/provider/openai" +) + +// Custom providers use OpenAI-compatible API at a custom base URL. +type Client struct { + *openai.Client +} + +func New() *Client { + return &Client{Client: openai.New()} +} + +func (c *Client) Type() string { return "custom" } diff --git a/internal/provider/endpoints.go b/internal/provider/endpoints.go new file mode 100644 index 0000000..0b16192 --- /dev/null +++ b/internal/provider/endpoints.go @@ -0,0 +1,176 @@ +package provider + +import ( + "strings" + + "github.com/rose_cat707/luminary/internal/model" +) + +// EndpointType 接口类型,对应入口 /v1/* 与上游 path 映射 +type EndpointType string + +const ( + EndpointListModels EndpointType = "list_models" + EndpointTextCompletion EndpointType = "text_completion" + EndpointChatCompletion EndpointType = "chat_completion" + EndpointResponses EndpointType = "responses" + EndpointEmbeddings EndpointType = "embeddings" + EndpointRerank EndpointType = "rerank" + EndpointSpeech EndpointType = "speech" + EndpointTranscription EndpointType = "transcription" + EndpointImageGeneration EndpointType = "image_generation" +) + +type EndpointMeta struct { + Key EndpointType `json:"key"` + Label string `json:"label"` + Method string `json:"method"` + IngressPath string `json:"ingress_path"` + Categories []model.ProviderCategory `json:"categories"` +} + +var AllEndpoints = []EndpointMeta{ + {Key: EndpointListModels, Label: "List Models", Method: "GET", IngressPath: "/v1/models", Categories: []model.ProviderCategory{model.CategoryLLM, model.CategoryEmbedding, model.CategoryRerank}}, + {Key: EndpointTextCompletion, Label: "Text Completion", Method: "POST", IngressPath: "/v1/completions", Categories: []model.ProviderCategory{model.CategoryLLM}}, + {Key: EndpointChatCompletion, Label: "Chat Completion", Method: "POST", IngressPath: "/v1/chat/completions", Categories: []model.ProviderCategory{model.CategoryLLM}}, + {Key: EndpointResponses, Label: "Responses", Method: "POST", IngressPath: "/v1/responses", Categories: []model.ProviderCategory{model.CategoryLLM}}, + {Key: EndpointEmbeddings, Label: "Embeddings", Method: "POST", IngressPath: "/v1/embeddings", Categories: []model.ProviderCategory{model.CategoryEmbedding}}, + {Key: EndpointRerank, Label: "Rerank", Method: "POST", IngressPath: "/v1/rerank", Categories: []model.ProviderCategory{model.CategoryRerank}}, + {Key: EndpointSpeech, Label: "Speech", Method: "POST", IngressPath: "/v1/audio/speech", Categories: []model.ProviderCategory{model.CategorySpeech}}, + {Key: EndpointTranscription, Label: "Transcription", Method: "POST", IngressPath: "/v1/audio/transcriptions", Categories: []model.ProviderCategory{model.CategoryAudio}}, + {Key: EndpointImageGeneration, Label: "Image Generation", Method: "POST", IngressPath: "/v1/images/generations", Categories: []model.ProviderCategory{model.CategoryImage}}, +} + +// DefaultPaths 各 Provider 类型的默认上游 path(相对 base_url) +var DefaultPaths = map[model.ProviderType]map[EndpointType]string{ + model.ProviderOpenAI: { + EndpointListModels: "/models", + EndpointTextCompletion: "/completions", + EndpointChatCompletion: "/chat/completions", + EndpointResponses: "/responses", + EndpointEmbeddings: "/embeddings", + EndpointRerank: "/rerank", + EndpointSpeech: "/audio/speech", + EndpointTranscription: "/audio/transcriptions", + EndpointImageGeneration: "/images/generations", + }, + model.ProviderAnthropic: { + EndpointListModels: "/models", + EndpointChatCompletion: "/messages", + }, + model.ProviderCustom: { + EndpointListModels: "/models", + EndpointTextCompletion: "/completions", + EndpointChatCompletion: "/chat/completions", + EndpointResponses: "/responses", + EndpointEmbeddings: "/embeddings", + EndpointRerank: "/rerank", + EndpointSpeech: "/audio/speech", + EndpointTranscription: "/audio/transcriptions", + EndpointImageGeneration: "/images/generations", + }, + model.ProviderAzureOpenAI: { + EndpointListModels: "/models", + EndpointChatCompletion: "/chat/completions", + EndpointResponses: "/responses", + EndpointEmbeddings: "/embeddings", + EndpointRerank: "/rerank", + }, + model.ProviderOpenRouter: { + EndpointListModels: "/models", + EndpointChatCompletion: "/chat/completions", + EndpointResponses: "/responses", + EndpointEmbeddings: "/embeddings", + EndpointRerank: "/rerank", + }, + model.ProviderOllama: { + EndpointListModels: "/models", + EndpointChatCompletion: "/chat/completions", + EndpointEmbeddings: "/embeddings", + EndpointRerank: "/rerank", + }, + model.ProviderComfyUI: {}, +} + +func DefaultPath(providerType model.ProviderType, endpoint EndpointType) string { + if m, ok := DefaultPaths[providerType]; ok { + if p, ok := m[endpoint]; ok { + return p + } + } + if p, ok := DefaultPaths[model.ProviderOpenAI][endpoint]; ok { + return p + } + return "" +} + +// DefaultEndpointsForCategory 创建出口时默认启用的 endpoint keys +func DefaultEndpointsForCategory(cat model.ProviderCategory) []string { + switch cat { + case model.CategoryEmbedding: + return []string{string(EndpointListModels), string(EndpointEmbeddings)} + case model.CategoryRerank: + return []string{string(EndpointListModels), string(EndpointRerank)} + case model.CategoryImage: + return []string{} + default: + return []string{string(EndpointListModels), string(EndpointChatCompletion)} + } +} + +func EndpointsForCategory(cat model.ProviderCategory) []EndpointMeta { + var out []EndpointMeta + for _, e := range AllEndpoints { + for _, c := range e.Categories { + if c == cat { + out = append(out, e) + break + } + } + } + return out +} + +// ResolveURL 解析最终请求 URL:override 可为相对 path 或完整 URL +func ResolveURL(baseURL, override, defaultPath string) string { + if override != "" { + if strings.HasPrefix(override, "http://") || strings.HasPrefix(override, "https://") { + return override + } + return joinURL(baseURL, override) + } + return joinURL(baseURL, defaultPath) +} + +func joinURL(base, path string) string { + base = strings.TrimRight(base, "/") + if path == "" { + return base + } + if !strings.HasPrefix(path, "/") { + path = "/" + path + } + if base == "" { + return path + } + return base + path +} + +func CategoryLabel(cat model.ProviderCategory) string { + switch cat { + case model.CategoryLLM: + return "语言模型" + case model.CategoryEmbedding: + return "向量嵌入" + case model.CategoryRerank: + return "重排序" + case model.CategorySpeech: + return "语音合成" + case model.CategoryImage: + return "图像生成" + case model.CategoryAudio: + return "音频转写" + default: + return string(cat) + } +} diff --git a/internal/provider/forward.go b/internal/provider/forward.go new file mode 100644 index 0000000..55b4ca1 --- /dev/null +++ b/internal/provider/forward.go @@ -0,0 +1,198 @@ +package provider + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "time" + + "github.com/rose_cat707/luminary/internal/model" +) + +type ForwardRequest struct { + Endpoint EndpointType + Method string + Body []byte + Headers map[string]string +} + +type ForwardResponse struct { + StatusCode int + Body []byte + TokensIn int + TokensOut int +} + +type ProviderConfig struct { + Type model.ProviderType + Category model.ProviderCategory + BaseURL string + EndpointPaths map[string]string // endpoint key -> path override +} + +func ParseEndpointPaths(jsonStr string) map[string]string { + out := map[string]string{} + if jsonStr == "" || jsonStr == "{}" { + return out + } + _ = json.Unmarshal([]byte(jsonStr), &out) + return out +} + +func ParseAllowedEndpoints(jsonStr string, category model.ProviderCategory) []string { + var out []string + if jsonStr == "" { + return DefaultEndpointsForCategory(category) + } + _ = json.Unmarshal([]byte(jsonStr), &out) + if len(out) == 0 { + return DefaultEndpointsForCategory(category) + } + return out +} + +func (cfg *ProviderConfig) ResolveEndpointURL(endpoint EndpointType) string { + override := cfg.EndpointPaths[string(endpoint)] + defaultPath := DefaultPath(cfg.Type, endpoint) + return ResolveURL(cfg.BaseURL, override, defaultPath) +} + +func ForwardHTTP(ctx context.Context, client *http.Client, method, url string, apiKey string, providerType model.ProviderType, body []byte, extraHeaders map[string]string) (*ForwardResponse, error) { + var reader io.Reader + if len(body) > 0 { + reader = bytes.NewReader(body) + } + req, err := http.NewRequestWithContext(ctx, method, url, reader) + if err != nil { + return nil, err + } + setAuthHeaders(req, apiKey, providerType) + req.Header.Set("Content-Type", "application/json") + for k, v := range extraHeaders { + req.Header.Set(k, v) + } + resp, err := client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + respBody, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + tokensIn, tokensOut := parseUsageJSON(respBody) + return &ForwardResponse{ + StatusCode: resp.StatusCode, + Body: respBody, + TokensIn: tokensIn, + TokensOut: tokensOut, + }, nil +} + +func setAuthHeaders(req *http.Request, apiKey string, providerType model.ProviderType) { + switch providerType { + case model.ProviderAnthropic: + req.Header.Set("x-api-key", apiKey) + req.Header.Set("anthropic-version", "2023-06-01") + case model.ProviderAzureOpenAI: + if apiKey != "" { + req.Header.Set("api-key", apiKey) + } + case model.ProviderOllama: + if apiKey != "" { + req.Header.Set("Authorization", "Bearer "+apiKey) + } + default: + if apiKey != "" { + req.Header.Set("Authorization", "Bearer "+apiKey) + } + } +} + +func parseUsageJSON(body []byte) (int, int) { + var u struct { + Usage struct { + PromptTokens int `json:"prompt_tokens"` + CompletionTokens int `json:"completion_tokens"` + InputTokens int `json:"input_tokens"` + OutputTokens int `json:"output_tokens"` + } `json:"usage"` + } + _ = json.Unmarshal(body, &u) + in := u.Usage.PromptTokens + out := u.Usage.CompletionTokens + if in == 0 { + in = u.Usage.InputTokens + } + if out == 0 { + out = u.Usage.OutputTokens + } + return in, out +} + +func DefaultBaseURL(providerType model.ProviderType) string { + switch providerType { + case model.ProviderAnthropic: + return "https://api.anthropic.com/v1" + case model.ProviderAzureOpenAI: + return "" // must be configured per deployment + case model.ProviderOpenRouter: + return "https://openrouter.ai/api/v1" + case model.ProviderOllama: + return "http://127.0.0.1:11434/v1" + default: + return "https://api.openai.com/v1" + } +} + +func IsOpenAICompatible(t model.ProviderType) bool { + switch t { + case model.ProviderOpenAI, model.ProviderCustom, model.ProviderAzureOpenAI, model.ProviderOpenRouter, model.ProviderOllama: + return true + default: + return false + } +} + +func NormalizeBaseURL(baseURL string, providerType model.ProviderType) string { + if baseURL == "" { + return DefaultBaseURL(providerType) + } + return baseURL +} + +func IsEndpointAllowed(allowed []string, endpoint EndpointType) bool { + for _, a := range allowed { + if a == string(endpoint) || a == "*" { + return true + } + } + return false +} + +func NewHTTPClient() *http.Client { + return &http.Client{Timeout: 120 * time.Second} +} + +func ValidateCategoryEndpoints(category model.ProviderCategory, allowed []string) error { + if !model.IsCategorySupported(category) { + return fmt.Errorf("category %s is not supported yet", category) + } + valid := EndpointsForCategory(category) + validSet := map[string]bool{} + for _, e := range valid { + validSet[string(e.Key)] = true + } + for _, a := range allowed { + if a == "*" { + continue + } + if !validSet[a] { + return fmt.Errorf("endpoint %s is not available for category %s", a, category) + } + } + return nil +} diff --git a/internal/provider/http_client.go b/internal/provider/http_client.go new file mode 100644 index 0000000..07872c8 --- /dev/null +++ b/internal/provider/http_client.go @@ -0,0 +1,11 @@ +package provider + +import "net/http" + +type HTTPClientWrapper struct { + Client *http.Client +} + +func NewHTTPClientWrapper() *HTTPClientWrapper { + return &HTTPClientWrapper{Client: NewHTTPClient()} +} diff --git a/internal/provider/openai/client.go b/internal/provider/openai/client.go new file mode 100644 index 0000000..291f700 --- /dev/null +++ b/internal/provider/openai/client.go @@ -0,0 +1,94 @@ +package openai + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/provider" +) + +type Client struct { + http *provider.HTTPClientWrapper +} + +func New() *Client { + return &Client{http: provider.NewHTTPClientWrapper()} +} + +func (c *Client) Type() string { return "openai" } + +func (c *Client) cfg(baseURL string) provider.ProviderConfig { + return provider.ProviderConfig{ + Type: model.ProviderOpenAI, + Category: model.CategoryLLM, + BaseURL: provider.NormalizeBaseURL(baseURL, model.ProviderOpenAI), + } +} + +func (c *Client) ListModels(ctx context.Context, apiKey, baseURL string) ([]provider.ModelInfo, error) { + return c.ListModelsWithConfig(ctx, apiKey, provider.ProviderConfig{ + Type: model.ProviderOpenAI, + BaseURL: provider.NormalizeBaseURL(baseURL, model.ProviderOpenAI), + }) +} + +func (c *Client) ListModelsWithConfig(ctx context.Context, apiKey string, cfg provider.ProviderConfig) ([]provider.ModelInfo, error) { + cfg.Type = model.ProviderOpenAI + cfg.BaseURL = provider.NormalizeBaseURL(cfg.BaseURL, model.ProviderOpenAI) + url := cfg.ResolveEndpointURL(provider.EndpointListModels) + resp, err := provider.ForwardHTTP(ctx, c.http.Client, "GET", url, apiKey, cfg.Type, nil, nil) + if err != nil { + return nil, err + } + if resp.StatusCode >= 400 { + return nil, fmt.Errorf("list models: %s", string(resp.Body)) + } + var out struct { + Data []struct { + ID string `json:"id"` + } `json:"data"` + } + if err := json.Unmarshal(resp.Body, &out); err != nil { + return nil, err + } + models := make([]provider.ModelInfo, 0, len(out.Data)) + for _, m := range out.Data { + models = append(models, provider.ModelInfo{ID: m.ID, DisplayName: m.ID}) + } + return models, nil +} + +func (c *Client) ChatCompletion(ctx context.Context, apiKey, baseURL string, req *provider.ChatRequest) (*provider.ChatResponse, error) { + return c.ForwardWithConfig(ctx, apiKey, provider.ProviderConfig{ + Type: model.ProviderOpenAI, + BaseURL: provider.NormalizeBaseURL(baseURL, model.ProviderOpenAI), + }, provider.EndpointChatCompletion, req.Raw) +} + +func (c *Client) ForwardWithConfig(ctx context.Context, apiKey string, cfg provider.ProviderConfig, endpoint provider.EndpointType, body []byte) (*provider.ChatResponse, error) { + cfg.Type = model.ProviderOpenAI + cfg.BaseURL = provider.NormalizeBaseURL(cfg.BaseURL, model.ProviderOpenAI) + url := cfg.ResolveEndpointURL(endpoint) + resp, err := provider.ForwardHTTP(ctx, c.http.Client, "POST", url, apiKey, cfg.Type, body, nil) + if err != nil { + return nil, err + } + return &provider.ChatResponse{ + StatusCode: resp.StatusCode, + Body: resp.Body, + TokensIn: resp.TokensIn, + TokensOut: resp.TokensOut, + }, nil +} + +func (c *Client) HealthCheck(ctx context.Context, apiKey, baseURL string) error { + _, err := c.ListModels(ctx, apiKey, baseURL) + return err +} + +func (c *Client) HealthCheckWithConfig(ctx context.Context, apiKey string, cfg provider.ProviderConfig) error { + _, err := c.ListModelsWithConfig(ctx, apiKey, cfg) + return err +} diff --git a/internal/provider/provider.go b/internal/provider/provider.go new file mode 100644 index 0000000..4d4dae9 --- /dev/null +++ b/internal/provider/provider.go @@ -0,0 +1,33 @@ +package provider + +import ( + "context" + "encoding/json" +) + +type ModelInfo struct { + ID string `json:"id"` + DisplayName string `json:"display_name,omitempty"` +} + +type ChatRequest struct { + Model string `json:"model"` + Messages json.RawMessage `json:"messages"` + Stream bool `json:"stream"` + Raw json.RawMessage `json:"-"` +} + +type ChatResponse struct { + StatusCode int + Body []byte + Headers map[string]string + TokensIn int + TokensOut int +} + +type Client interface { + Type() string + ListModels(ctx context.Context, apiKey, baseURL string) ([]ModelInfo, error) + ChatCompletion(ctx context.Context, apiKey, baseURL string, req *ChatRequest) (*ChatResponse, error) + HealthCheck(ctx context.Context, apiKey, baseURL string) error +} diff --git a/internal/provider/responses_adapter.go b/internal/provider/responses_adapter.go new file mode 100644 index 0000000..6dd3b23 --- /dev/null +++ b/internal/provider/responses_adapter.go @@ -0,0 +1,640 @@ +package provider + +import ( + "bufio" + "encoding/json" + "fmt" + "io" + "net/http" + "strings" +) + +// CanAdaptResponses reports whether responses ingress can be served via chat completions. +func CanAdaptResponses(allowsResponses, allowsChat bool) bool { + return allowsChat && !allowsResponses +} + +// ResponsesToChatCompletion converts an OpenAI Responses API request to chat completions format. +func ResponsesToChatCompletion(body []byte) ([]byte, error) { + var req map[string]json.RawMessage + if err := json.Unmarshal(body, &req); err != nil { + return nil, fmt.Errorf("invalid json: %w", err) + } + + out := make(map[string]any) + if raw, ok := req["model"]; ok { + var model string + if err := json.Unmarshal(raw, &model); err != nil || model == "" { + return nil, fmt.Errorf("model is required") + } + out["model"] = model + } + + messages := make([]map[string]any, 0, 4) + if raw, ok := req["instructions"]; ok { + var instructions string + if err := json.Unmarshal(raw, &instructions); err == nil && instructions != "" { + messages = append(messages, map[string]any{"role": "system", "content": instructions}) + } else { + var instructionParts []json.RawMessage + if err := json.Unmarshal(raw, &instructionParts); err == nil { + if text := joinContentPartTexts(instructionParts); text != "" { + messages = append(messages, map[string]any{"role": "system", "content": text}) + } + } + } + } + if raw, ok := req["input"]; ok { + inputMsgs, err := parseResponsesInput(raw) + if err != nil { + return nil, err + } + messages = append(messages, inputMsgs...) + } + if len(messages) == 0 { + return nil, fmt.Errorf("input is required") + } + out["messages"] = messages + + copyField(req, out, "stream") + copyField(req, out, "temperature") + copyField(req, out, "top_p") + copyField(req, out, "user") + copyField(req, out, "stop") + copyField(req, out, "tools") + copyField(req, out, "tool_choice") + copyField(req, out, "parallel_tool_calls") + copyField(req, out, "seed") + copyField(req, out, "n") + copyField(req, out, "presence_penalty") + copyField(req, out, "frequency_penalty") + copyField(req, out, "logit_bias") + copyField(req, out, "response_format") + + if raw, ok := req["max_output_tokens"]; ok { + var v int + if err := json.Unmarshal(raw, &v); err == nil && v > 0 { + out["max_tokens"] = v + } + } else { + copyField(req, out, "max_tokens") + } + + if raw, ok := req["text"]; ok { + if rf := responsesTextToResponseFormat(raw); rf != nil { + out["response_format"] = rf + } + } + + return json.Marshal(out) +} + +func copyField(src map[string]json.RawMessage, dst map[string]any, key string) { + if raw, ok := src[key]; ok && len(raw) > 0 && string(raw) != "null" { + var v any + if json.Unmarshal(raw, &v) == nil { + dst[key] = v + } + } +} + +func responsesTextToResponseFormat(raw json.RawMessage) any { + var text struct { + Format struct { + Type string `json:"type"` + } `json:"format"` + } + if err := json.Unmarshal(raw, &text); err != nil || text.Format.Type == "" { + return nil + } + switch text.Format.Type { + case "json_object": + return map[string]any{"type": "json_object"} + case "text": + return map[string]any{"type": "text"} + default: + return map[string]any{"type": text.Format.Type} + } +} + +func parseResponsesInput(raw json.RawMessage) ([]map[string]any, error) { + var asString string + if err := json.Unmarshal(raw, &asString); err == nil { + if asString == "" { + return nil, fmt.Errorf("input is required") + } + return []map[string]any{{"role": "user", "content": asString}}, nil + } + + var asArray []json.RawMessage + if err := json.Unmarshal(raw, &asArray); err != nil { + return nil, fmt.Errorf("invalid input") + } + out := make([]map[string]any, 0, len(asArray)) + for _, item := range asArray { + msg, err := parseResponsesInputItem(item) + if err != nil { + return nil, err + } + out = append(out, msg) + } + return out, nil +} + +func parseResponsesInputItem(raw json.RawMessage) (map[string]any, error) { + var asString string + if err := json.Unmarshal(raw, &asString); err == nil { + return map[string]any{"role": "user", "content": asString}, nil + } + + var item map[string]json.RawMessage + if err := json.Unmarshal(raw, &item); err != nil { + return nil, fmt.Errorf("invalid input item") + } + + itemType := "" + if rawType, ok := item["type"]; ok { + _ = json.Unmarshal(rawType, &itemType) + } + + role := "user" + if rawRole, ok := item["role"]; ok { + _ = json.Unmarshal(rawRole, &role) + } + if role == "" { + role = "user" + } + role = normalizeResponsesRole(role) + + switch itemType { + case "message": + if rawContent, ok := item["content"]; ok { + content, err := parseResponsesContent(rawContent) + if err != nil { + return nil, err + } + return map[string]any{"role": role, "content": content}, nil + } + case "input_text": + var text string + if rawText, ok := item["text"]; ok { + _ = json.Unmarshal(rawText, &text) + } + if text != "" { + return map[string]any{"role": role, "content": text}, nil + } + case "function_call_output": + return parseFunctionCallOutputItem(item, role) + } + + if rawContent, ok := item["content"]; ok { + content, err := parseResponsesContent(rawContent) + if err != nil { + return nil, err + } + return map[string]any{"role": role, "content": content}, nil + } + if rawText, ok := item["text"]; ok { + var text string + if err := json.Unmarshal(rawText, &text); err == nil { + return map[string]any{"role": role, "content": text}, nil + } + } + if rawInput, ok := item["input"]; ok { + var text string + if err := json.Unmarshal(rawInput, &text); err == nil { + return map[string]any{"role": role, "content": text}, nil + } + } + return nil, fmt.Errorf("unsupported input item") +} + +func normalizeResponsesRole(role string) string { + switch role { + case "developer": + return "system" + default: + return role + } +} + +func parseResponsesContent(raw json.RawMessage) (any, error) { + var asString string + if err := json.Unmarshal(raw, &asString); err == nil { + return asString, nil + } + var parts []json.RawMessage + if err := json.Unmarshal(raw, &parts); err != nil { + return nil, fmt.Errorf("invalid content") + } + converted := make([]any, 0, len(parts)) + for _, part := range parts { + if item, ok := convertResponsesContentPart(part); ok { + converted = append(converted, item) + } + } + if len(converted) == 0 { + return "", nil + } + if len(converted) == 1 { + if text, ok := converted[0].(string); ok { + return text, nil + } + if m, ok := converted[0].(map[string]any); ok { + if m["type"] == "text" { + if text, ok := m["text"].(string); ok { + return text, nil + } + } + } + } + return converted, nil +} + +func convertResponsesContentPart(raw json.RawMessage) (any, bool) { + var asString string + if err := json.Unmarshal(raw, &asString); err == nil { + return asString, true + } + var part map[string]json.RawMessage + if err := json.Unmarshal(raw, &part); err != nil { + return nil, false + } + typ := "" + if rawType, ok := part["type"]; ok { + _ = json.Unmarshal(rawType, &typ) + } + switch typ { + case "input_text", "text", "output_text": + var text string + if rawText, ok := part["text"]; ok { + _ = json.Unmarshal(rawText, &text) + } + if text == "" { + return nil, false + } + return map[string]any{"type": "text", "text": text}, true + case "input_image": + out := map[string]any{"type": "image_url", "image_url": map[string]any{}} + img := out["image_url"].(map[string]any) + if rawURL, ok := part["image_url"]; ok { + var url string + if err := json.Unmarshal(rawURL, &url); err == nil { + img["url"] = url + } else { + var nested map[string]any + if err := json.Unmarshal(rawURL, &nested); err == nil { + for k, v := range nested { + img[k] = v + } + } + } + } + if rawDetail, ok := part["detail"]; ok { + var detail string + if json.Unmarshal(rawDetail, &detail) == nil { + img["detail"] = detail + } + } + if img["url"] == nil { + return nil, false + } + return out, true + case "image_url": + var v any + _ = json.Unmarshal(raw, &v) + return v, true + case "input_file": + var fileID, filename string + if rawID, ok := part["file_id"]; ok { + _ = json.Unmarshal(rawID, &fileID) + } + if rawName, ok := part["filename"]; ok { + _ = json.Unmarshal(rawName, &filename) + } + label := filename + if label == "" { + label = fileID + } + if label == "" { + return nil, false + } + return map[string]any{"type": "text", "text": "[file:" + label + "]"}, true + default: + return nil, false + } +} + +func joinContentPartTexts(parts []json.RawMessage) string { + var texts []string + for _, part := range parts { + if item, ok := convertResponsesContentPart(part); ok { + if text, ok := item.(string); ok { + texts = append(texts, text) + } else if m, ok := item.(map[string]any); ok && m["type"] == "text" { + if text, ok := m["text"].(string); ok { + texts = append(texts, text) + } + } + } + } + return strings.Join(texts, "\n") +} + +func parseFunctionCallOutputItem(item map[string]json.RawMessage, role string) (map[string]any, error) { + var output, callID string + if rawOutput, ok := item["output"]; ok { + _ = json.Unmarshal(rawOutput, &output) + } + if rawCallID, ok := item["call_id"]; ok { + _ = json.Unmarshal(rawCallID, &callID) + } + if output == "" { + return nil, fmt.Errorf("unsupported input item") + } + msg := map[string]any{"role": "tool", "content": output} + if callID != "" { + msg["tool_call_id"] = callID + } + if role != "" && role != "user" { + msg["role"] = role + } + return msg, nil +} + +// ChatCompletionToResponses converts a chat completions response to Responses API format. +func ChatCompletionToResponses(body []byte) ([]byte, error) { + var chat map[string]any + if err := json.Unmarshal(body, &chat); err != nil { + return nil, err + } + if _, ok := chat["error"]; ok { + return body, nil + } + + content := extractChatContent(chat) + chatID, _ := chat["id"].(string) + model, _ := chat["model"].(string) + created := extractCreatedAt(chat) + respID := responsesIDFromChatID(chatID) + msgID := messageIDFromResponseID(respID) + usage := chatUsageToResponses(chat["usage"]) + + resp := buildResponseObject(respID, msgID, model, created, content, usage, "completed") + return json.Marshal(resp) +} + +func extractCreatedAt(chat map[string]any) int64 { + switch v := chat["created"].(type) { + case float64: + return int64(v) + case int64: + return v + case int: + return int64(v) + default: + return 0 + } +} + +func responsesIDFromChatID(chatID string) string { + if chatID == "" { + return "resp_adapted" + } + if strings.HasPrefix(chatID, "resp_") { + return chatID + } + if strings.HasPrefix(chatID, "chatcmpl-") { + return "resp_" + strings.TrimPrefix(chatID, "chatcmpl-") + } + return "resp_" + chatID +} + +func messageIDFromResponseID(respID string) string { + if strings.HasPrefix(respID, "resp_") { + return "msg_" + strings.TrimPrefix(respID, "resp_") + } + return "msg_" + respID +} + +func buildOutputTextContent(text string) map[string]any { + return map[string]any{ + "type": "output_text", + "text": text, + "annotations": []any{}, + } +} + +func buildOutputMessage(msgID, content, status string) map[string]any { + return map[string]any{ + "type": "message", + "id": msgID, + "role": "assistant", + "status": status, + "content": []map[string]any{buildOutputTextContent(content)}, + } +} + +func buildResponseObject(respID, msgID, model string, created int64, content string, usage map[string]any, status string) map[string]any { + msgStatus := status + if status == "in_progress" || status == "queued" { + msgStatus = "in_progress" + } + resp := map[string]any{ + "id": respID, + "object": "response", + "created_at": created, + "status": status, + "model": model, + "output_text": content, + "error": nil, + "incomplete_details": nil, + "parallel_tool_calls": true, + "output": []map[string]any{buildOutputMessage(msgID, content, msgStatus)}, + } + if usage != nil { + resp["usage"] = usage + } + return resp +} + +func extractChatContent(chat map[string]any) string { + choices, ok := chat["choices"].([]any) + if !ok || len(choices) == 0 { + return "" + } + choice, ok := choices[0].(map[string]any) + if !ok { + return "" + } + if msg, ok := choice["message"].(map[string]any); ok { + if content, ok := msg["content"].(string); ok { + return content + } + } + if delta, ok := choice["delta"].(map[string]any); ok { + if content, ok := delta["content"].(string); ok { + return content + } + } + return "" +} + +func chatUsageToResponses(usage any) map[string]any { + u, ok := usage.(map[string]any) + if !ok { + return nil + } + in, hasIn := numberAsInt(u["prompt_tokens"]) + out, hasOut := numberAsInt(u["completion_tokens"]) + total, hasTotal := numberAsInt(u["total_tokens"]) + if !hasIn && !hasOut && !hasTotal { + return nil + } + if !hasTotal && hasIn && hasOut { + total = in + out + } + return map[string]any{ + "input_tokens": in, + "output_tokens": out, + "total_tokens": total, + "input_tokens_details": map[string]any{ + "cached_tokens": 0, + }, + "output_tokens_details": map[string]any{ + "reasoning_tokens": 0, + }, + } +} + +func numberAsInt(v any) (int, bool) { + switch n := v.(type) { + case float64: + return int(n), true + case int: + return n, true + case int64: + return int(n), true + default: + return 0, false + } +} + +// AdaptResponsesStream wraps a chat-completions SSE stream as Responses API SSE events. +func AdaptResponsesStream(chatBody []byte, upstream io.Reader, w io.Writer, flusher http.Flusher) (*StreamResult, error) { + var req map[string]any + _ = json.Unmarshal(chatBody, &req) + model, _ := req["model"].(string) + + result := &StreamResult{StatusCode: http.StatusOK} + respID := "resp_adapted" + msgID := "msg_adapted" + seq := 0 + var fullText string + var usage map[string]any + started := false + + writeEvent := func(eventType string, payload map[string]any) error { + payload["type"] = eventType + payload["sequence_number"] = seq + seq++ + b, err := json.Marshal(payload) + if err != nil { + return err + } + if _, err := fmt.Fprintf(w, "event: %s\ndata: %s\n\n", eventType, b); err != nil { + return err + } + if flusher != nil { + flusher.Flush() + } + return nil + } + + emitCreated := func(status string) error { + response := buildResponseObject(respID, msgID, model, 0, "", nil, status) + response["output"] = []any{} + response["output_text"] = "" + return writeEvent("response.created", map[string]any{"response": response}) + } + + scanner := bufio.NewScanner(upstream) + scanner.Buffer(make([]byte, 64*1024), 1024*1024) + for scanner.Scan() { + line := scanner.Text() + if !strings.HasPrefix(line, "data: ") { + continue + } + data := strings.TrimPrefix(line, "data: ") + if data == "[DONE]" { + break + } + tokensIn, tokensOut := parseStreamChunk([]byte(data)) + result.TokensIn += tokensIn + result.TokensOut += tokensOut + + var chunk map[string]any + if err := json.Unmarshal([]byte(data), &chunk); err != nil { + continue + } + if id, ok := chunk["id"].(string); ok && id != "" { + respID = responsesIDFromChatID(id) + msgID = messageIDFromResponseID(respID) + } + if m, ok := chunk["model"].(string); ok && m != "" { + model = m + } + if u := chatUsageToResponses(chunk["usage"]); u != nil { + usage = u + } + + delta := extractChatContent(chunk) + if delta == "" { + continue + } + + if !started { + started = true + if err := emitCreated("in_progress"); err != nil { + return result, err + } + if err := writeEvent("response.in_progress", map[string]any{ + "response": buildResponseObject(respID, msgID, model, 0, "", nil, "in_progress"), + }); err != nil { + return result, err + } + if err := writeEvent("response.output_item.added", map[string]any{ + "output_index": 0, + "item": map[string]any{ + "type": "message", "id": msgID, "role": "assistant", "status": "in_progress", "content": []any{}, + }, + }); err != nil { + return result, err + } + } + + fullText += delta + if err := writeEvent("response.output_text.delta", map[string]any{ + "item_id": msgID, "output_index": 0, "content_index": 0, "delta": delta, "logprobs": []any{}, + }); err != nil { + return result, err + } + } + if err := scanner.Err(); err != nil { + return result, err + } + + if started { + _ = writeEvent("response.output_text.done", map[string]any{ + "item_id": msgID, "output_index": 0, "content_index": 0, "text": fullText, "logprobs": []any{}, + }) + doneItem := buildOutputMessage(msgID, fullText, "completed") + _ = writeEvent("response.output_item.done", map[string]any{ + "output_index": 0, + "item": doneItem, + }) + final := buildResponseObject(respID, msgID, model, 0, fullText, usage, "completed") + _ = writeEvent("response.completed", map[string]any{"response": final}) + } + return result, nil +} diff --git a/internal/provider/responses_adapter_test.go b/internal/provider/responses_adapter_test.go new file mode 100644 index 0000000..acf54f6 --- /dev/null +++ b/internal/provider/responses_adapter_test.go @@ -0,0 +1,179 @@ +package provider + +import ( + "encoding/json" + "strings" + "testing" +) + +func TestResponsesToChatCompletion_StringInput(t *testing.T) { + body := []byte(`{"model":"gpt-4o-mini","instructions":"Be brief","input":"Hello"}`) + out, err := ResponsesToChatCompletion(body) + if err != nil { + t.Fatal(err) + } + var req map[string]any + if err := json.Unmarshal(out, &req); err != nil { + t.Fatal(err) + } + if req["model"] != "gpt-4o-mini" { + t.Fatalf("model: %v", req["model"]) + } + msgs := req["messages"].([]any) + if len(msgs) != 2 { + t.Fatalf("messages len: %d", len(msgs)) + } + sys := msgs[0].(map[string]any) + user := msgs[1].(map[string]any) + if sys["role"] != "system" || sys["content"] != "Be brief" { + t.Fatalf("system: %#v", sys) + } + if user["role"] != "user" || user["content"] != "Hello" { + t.Fatalf("user: %#v", user) + } +} + +func TestChatCompletionToResponses(t *testing.T) { + body := []byte(`{"id":"chatcmpl-abc123","model":"gpt-4o-mini","created":123,"choices":[{"message":{"role":"assistant","content":"Hi"}}],"usage":{"prompt_tokens":3,"completion_tokens":1,"total_tokens":4}}`) + out, err := ChatCompletionToResponses(body) + if err != nil { + t.Fatal(err) + } + var resp map[string]any + if err := json.Unmarshal(out, &resp); err != nil { + t.Fatal(err) + } + if resp["object"] != "response" { + t.Fatalf("object: %v", resp["object"]) + } + if resp["id"] != "resp_abc123" { + t.Fatalf("id: %v", resp["id"]) + } + if resp["output_text"] != "Hi" { + t.Fatalf("output_text: %v", resp["output_text"]) + } + output := resp["output"].([]any) + msg := output[0].(map[string]any) + content := msg["content"].([]any) + text := content[0].(map[string]any) + if text["type"] != "output_text" || text["text"] != "Hi" { + t.Fatalf("text: %#v", text) + } + if _, ok := text["annotations"]; !ok { + t.Fatalf("missing annotations: %#v", text) + } + usage := resp["usage"].(map[string]any) + if usage["input_tokens"].(float64) != 3 { + t.Fatalf("usage: %#v", usage) + } + if _, ok := usage["input_tokens_details"]; !ok { + t.Fatalf("missing input_tokens_details") + } +} + +func TestResponsesToChatCompletion_InputTextParts(t *testing.T) { + body := []byte(`{ + "model":"gpt-4o-mini", + "input":[{"role":"user","content":[{"type":"input_text","text":"Hello"}]}] + }`) + out, err := ResponsesToChatCompletion(body) + if err != nil { + t.Fatal(err) + } + var req map[string]any + if err := json.Unmarshal(out, &req); err != nil { + t.Fatal(err) + } + msgs := req["messages"].([]any) + user := msgs[0].(map[string]any) + if user["content"] != "Hello" { + t.Fatalf("content: %#v", user["content"]) + } +} + +func TestResponsesToChatCompletion_InputTextAndImage(t *testing.T) { + body := []byte(`{ + "model":"gpt-4o-mini", + "input":[{"role":"user","content":[ + {"type":"input_text","text":"describe"}, + {"type":"input_image","image_url":"https://example.com/a.png","detail":"auto"} + ]}] + }`) + out, err := ResponsesToChatCompletion(body) + if err != nil { + t.Fatal(err) + } + var req map[string]any + if err := json.Unmarshal(out, &req); err != nil { + t.Fatal(err) + } + msgs := req["messages"].([]any) + user := msgs[0].(map[string]any) + parts := user["content"].([]any) + if len(parts) != 2 { + t.Fatalf("parts: %#v", parts) + } + textPart := parts[0].(map[string]any) + if textPart["type"] != "text" || textPart["text"] != "describe" { + t.Fatalf("text part: %#v", textPart) + } + imgPart := parts[1].(map[string]any) + if imgPart["type"] != "image_url" { + t.Fatalf("image part: %#v", imgPart) + } +} + +func TestResponsesToChatCompletion_MessageItem(t *testing.T) { + body := []byte(`{ + "model":"gpt-4o-mini", + "input":[{"type":"message","role":"user","content":[{"type":"input_text","text":"Hi"}]}] + }`) + out, err := ResponsesToChatCompletion(body) + if err != nil { + t.Fatal(err) + } + if strings.Contains(string(out), "input_text") { + t.Fatalf("should not contain input_text: %s", out) + } + var req map[string]any + if err := json.Unmarshal(out, &req); err != nil { + t.Fatal(err) + } + msgs := req["messages"].([]any) + user := msgs[0].(map[string]any) + if user["content"] != "Hi" { + t.Fatalf("content: %#v", user["content"]) + } +} + +func TestAdaptResponsesStream(t *testing.T) { + upstream := strings.NewReader("data: {\"id\":\"chatcmpl-1\",\"model\":\"gpt-4o-mini\",\"choices\":[{\"delta\":{\"content\":\"Hi\"}}]}\n\ndata: [DONE]\n\n") + var out strings.Builder + result, err := AdaptResponsesStream([]byte(`{"model":"gpt-4o-mini","stream":true}`), upstream, &out, nil) + if err != nil { + t.Fatal(err) + } + if result.StatusCode != 200 { + t.Fatalf("status: %d", result.StatusCode) + } + s := out.String() + for _, event := range []string{ + "response.created", + "response.in_progress", + "response.output_item.added", + "response.output_text.delta", + "response.output_text.done", + "response.output_item.done", + "response.completed", + } { + if !strings.Contains(s, event) { + t.Fatalf("missing event %s: %s", event, s) + } + } + if !strings.Contains(s, `"delta":"Hi"`) { + t.Fatalf("missing delta text: %s", s) + } + if !strings.Contains(s, `"output_text":"Hi"`) { + t.Fatalf("missing output_text in completed: %s", s) + } +} diff --git a/internal/provider/stream.go b/internal/provider/stream.go new file mode 100644 index 0000000..3ff8df1 --- /dev/null +++ b/internal/provider/stream.go @@ -0,0 +1,100 @@ +package provider + +import ( + "bufio" + "bytes" + "context" + "encoding/json" + "io" + "net/http" + "strings" + + "github.com/rose_cat707/luminary/internal/model" +) + +type StreamResult struct { + StatusCode int + TokensIn int + TokensOut int + Body []byte // populated for non-2xx responses +} + +func ForwardStreamHTTP(ctx context.Context, client *http.Client, method, url string, apiKey string, providerType model.ProviderType, body []byte, w io.Writer, flusher http.Flusher) (*StreamResult, error) { + var reader io.Reader + if len(body) > 0 { + reader = bytes.NewReader(body) + } + req, err := http.NewRequestWithContext(ctx, method, url, reader) + if err != nil { + return nil, err + } + setAuthHeaders(req, apiKey, providerType) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "text/event-stream") + resp, err := client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode >= 400 { + b, _ := io.ReadAll(resp.Body) + if flusher != nil { + w.Write(b) + flusher.Flush() + } + return &StreamResult{StatusCode: resp.StatusCode, Body: b}, nil + } + + result := &StreamResult{StatusCode: resp.StatusCode} + scanner := bufio.NewScanner(resp.Body) + scanner.Buffer(make([]byte, 64*1024), 1024*1024) + for scanner.Scan() { + line := scanner.Text() + if strings.HasPrefix(line, "data: ") { + data := strings.TrimPrefix(line, "data: ") + if data == "[DONE]" { + continue + } + tokensIn, tokensOut := parseStreamChunk([]byte(data)) + result.TokensIn += tokensIn + result.TokensOut += tokensOut + } + if _, err := w.Write([]byte(line + "\n")); err != nil { + return result, err + } + if flusher != nil { + flusher.Flush() + } + } + return result, scanner.Err() +} + +func parseStreamChunk(data []byte) (int, int) { + var chunk struct { + Usage struct { + PromptTokens int `json:"prompt_tokens"` + CompletionTokens int `json:"completion_tokens"` + } `json:"usage"` + } + if err := json.Unmarshal(data, &chunk); err == nil && chunk.Usage.PromptTokens+chunk.Usage.CompletionTokens > 0 { + return chunk.Usage.PromptTokens, chunk.Usage.CompletionTokens + } + return 0, 0 +} + +func NewStreamHTTPClient() *http.Client { + return &http.Client{} // no timeout for streams +} + +func IsStreamRequest(body []byte) bool { + var payload struct { + Stream bool `json:"stream"` + } + _ = json.Unmarshal(body, &payload) + return payload.Stream +} + +func SupportsStreaming(endpoint EndpointType) bool { + return endpoint == EndpointChatCompletion || endpoint == EndpointResponses +} diff --git a/internal/provider/types.go b/internal/provider/types.go new file mode 100644 index 0000000..fb67d12 --- /dev/null +++ b/internal/provider/types.go @@ -0,0 +1,96 @@ +package provider + +import "github.com/rose_cat707/luminary/internal/model" + +type ProviderTypeMeta struct { + Key model.ProviderType `json:"key"` + Label string `json:"label"` +} + +var allProviderTypes = []ProviderTypeMeta{ + {Key: model.ProviderOpenAI, Label: "OpenAI"}, + {Key: model.ProviderAnthropic, Label: "Anthropic"}, + {Key: model.ProviderAzureOpenAI, Label: "Azure OpenAI"}, + {Key: model.ProviderOpenRouter, Label: "OpenRouter"}, + {Key: model.ProviderOllama, Label: "Ollama"}, + {Key: model.ProviderCustom, Label: "Custom (OpenAI compatible)"}, + {Key: model.ProviderComfyUI, Label: "ComfyUI"}, +} + +func ProviderTypeLabel(t model.ProviderType) string { + for _, m := range allProviderTypes { + if m.Key == t { + return m.Label + } + } + return string(t) +} + +// TypesForCategory 各出口分类支持的协议类型 +func TypesForCategory(cat model.ProviderCategory) []ProviderTypeMeta { + switch cat { + case model.CategoryImage: + return []ProviderTypeMeta{{Key: model.ProviderComfyUI, Label: "ComfyUI"}} + case model.CategoryEmbedding: + return filterTypes( + model.ProviderOpenAI, + model.ProviderAzureOpenAI, + model.ProviderOpenRouter, + model.ProviderOllama, + model.ProviderCustom, + ) + case model.CategoryRerank: + return filterTypes( + model.ProviderOpenAI, + model.ProviderAzureOpenAI, + model.ProviderOpenRouter, + model.ProviderOllama, + model.ProviderCustom, + ) + default: + return filterTypes( + model.ProviderOpenAI, + model.ProviderAnthropic, + model.ProviderAzureOpenAI, + model.ProviderOpenRouter, + model.ProviderOllama, + model.ProviderCustom, + ) + } +} + +func filterTypes(keys ...model.ProviderType) []ProviderTypeMeta { + set := map[model.ProviderType]bool{} + for _, k := range keys { + set[k] = true + } + out := make([]ProviderTypeMeta, 0, len(keys)) + for _, m := range allProviderTypes { + if set[m.Key] { + out = append(out, m) + } + } + return out +} + +func DefaultProviderType(cat model.ProviderCategory) model.ProviderType { + types := TypesForCategory(cat) + if len(types) == 0 { + return model.ProviderOpenAI + } + return types[0].Key +} + +func IsTypeValidForCategory(cat model.ProviderCategory, t model.ProviderType) bool { + for _, m := range TypesForCategory(cat) { + if m.Key == t { + return true + } + } + return false +} + +// AllProviderTypes 返回全部协议类型(用于管理台展示标签) +func AllProviderTypes() []ProviderTypeMeta { + return append([]ProviderTypeMeta(nil), allProviderTypes...) +} diff --git a/internal/provider/types_test.go b/internal/provider/types_test.go new file mode 100644 index 0000000..ef5e769 --- /dev/null +++ b/internal/provider/types_test.go @@ -0,0 +1,30 @@ +package provider + +import ( + "testing" + + "github.com/rose_cat707/luminary/internal/model" +) + +func TestTypesForCategory(t *testing.T) { + llm := TypesForCategory(model.CategoryLLM) + if len(llm) != 6 { + t.Fatalf("llm types: got %d want 6", len(llm)) + } + image := TypesForCategory(model.CategoryImage) + if len(image) != 1 || image[0].Key != model.ProviderComfyUI { + t.Fatalf("image types: %+v", image) + } + embedding := TypesForCategory(model.CategoryEmbedding) + for _, m := range embedding { + if m.Key == model.ProviderAnthropic { + t.Fatal("anthropic should not support embedding category") + } + } + if !IsTypeValidForCategory(model.CategoryRerank, model.ProviderCustom) { + t.Fatal("custom should be valid for rerank") + } + if IsTypeValidForCategory(model.CategoryRerank, model.ProviderAnthropic) { + t.Fatal("anthropic should not be valid for rerank") + } +} diff --git a/internal/settings/encryption.go b/internal/settings/encryption.go new file mode 100644 index 0000000..9651b92 --- /dev/null +++ b/internal/settings/encryption.go @@ -0,0 +1,66 @@ +package settings + +import ( + "log" + "os" + "strings" + + "github.com/rose_cat707/luminary/internal/auth" + "github.com/rose_cat707/luminary/internal/model" + "gorm.io/gorm" +) + +// encryptionKeyCandidates returns possible keys ordered for repair attempts. +func encryptionKeyCandidates() []string { + seen := map[string]bool{} + var out []string + add := func(key string) { + key = strings.TrimSpace(key) + if key == "" || seen[key] { + return + } + seen[key] = true + out = append(out, key) + } + + add(os.Getenv("LUMINARY_ENCRYPTION_KEY")) + add(legacyDefaultEncryptionKey) + return out +} + +// EnsureEncryptionKeyWorks verifies provider keys can be decrypted and repairs the +// stored encryption_key from legacy sources when needed. +func (r *Runtime) EnsureEncryptionKeyWorks() { + var sample model.ProviderKey + err := r.db.Where("api_key_enc <> ''").First(&sample).Error + if err == gorm.ErrRecordNotFound { + return + } + if err != nil { + log.Printf("settings: check encryption key: %v", err) + return + } + + current := r.EncryptionKey() + if _, err := auth.Decrypt(sample.APIKeyEnc, current); err == nil { + return + } + + for _, candidate := range encryptionKeyCandidates() { + if candidate == current { + continue + } + if _, err := auth.Decrypt(sample.APIKeyEnc, candidate); err != nil { + continue + } + key := candidate + if err := r.Update(UpdateInput{EncryptionKey: &key}); err != nil { + log.Printf("settings: repair encryption_key: %v", err) + return + } + log.Printf("settings: repaired encryption_key from legacy source") + return + } + + log.Printf("settings: provider keys cannot be decrypted; set the correct encryption_key in admin system settings or re-save provider keys") +} diff --git a/internal/settings/legacy.go b/internal/settings/legacy.go new file mode 100644 index 0000000..6eee5d9 --- /dev/null +++ b/internal/settings/legacy.go @@ -0,0 +1,22 @@ +package settings + +import ( + "os" + "strings" + + "github.com/rose_cat707/luminary/internal/model" +) + +const legacyDefaultEncryptionKey = "change-me-in-production-32bytes!!" + +func mergeLegacySettings(s model.SystemSettings) model.SystemSettings { + if key := strings.TrimSpace(os.Getenv("LUMINARY_ENCRYPTION_KEY")); key != "" { + s.EncryptionKey = key + } + return s +} + +// LegacyAdminCredentials returns default bootstrap credentials for first admin. +func LegacyAdminCredentials() (username, password string) { + return "admin", "admin123" +} diff --git a/internal/settings/runtime.go b/internal/settings/runtime.go new file mode 100644 index 0000000..e7656c6 --- /dev/null +++ b/internal/settings/runtime.go @@ -0,0 +1,262 @@ +package settings + +import ( + "crypto/rand" + "encoding/hex" + "encoding/json" + "sync" + "time" + + "github.com/rose_cat707/luminary/internal/middleware" + "github.com/rose_cat707/luminary/internal/model" + "gorm.io/gorm" +) + +// Runtime holds mutable system settings loaded from the database. +type Runtime struct { + mu sync.RWMutex + db *gorm.DB + data model.SystemSettings +} + +func NewRuntime(db *gorm.DB) *Runtime { + return &Runtime{db: db} +} + +func (r *Runtime) Load() error { + var s model.SystemSettings + err := r.db.First(&s, 1).Error + if err == gorm.ErrRecordNotFound { + s = defaultSettings() + s = mergeLegacySettings(s) + if err := r.db.Create(&s).Error; err != nil { + return err + } + } else if err != nil { + return err + } + r.mu.Lock() + r.data = s + r.mu.Unlock() + r.applySideEffects() + return nil +} + +// AfterLoad runs post-bootstrap checks that depend on other tables. +func (r *Runtime) AfterLoad() { + r.EnsureEncryptionKeyWorks() +} + +func defaultSettings() model.SystemSettings { + key := make([]byte, 32) + _, _ = rand.Read(key) + return model.SystemSettings{ + ID: 1, + EncryptionKey: hex.EncodeToString(key), + SessionTTLSeconds: int64((24 * time.Hour).Seconds()), + LoginMaxAttempts: 5, + LoginLockoutSeconds: int64((15 * time.Minute).Seconds()), + TrustedProxiesJSON: "[]", + UsageFlushSeconds: 5, + HealthCheckSeconds: 30, + GatewayMaxRetries: 3, + GatewayRetryBackoffMs: 200, + ImageStoragePath: "images", + SignedURLTTLSeconds: 3600, + PredictionWaitSeconds: 60, + } +} + +func (r *Runtime) Snapshot() model.SystemSettings { + r.mu.RLock() + defer r.mu.RUnlock() + return r.data +} + +func (r *Runtime) EncryptionKey() string { + r.mu.RLock() + defer r.mu.RUnlock() + return r.data.EncryptionKey +} + +func (r *Runtime) SessionTTL() time.Duration { + r.mu.RLock() + defer r.mu.RUnlock() + return time.Duration(r.data.SessionTTLSeconds) * time.Second +} + +func (r *Runtime) LoginMaxAttempts() int { + r.mu.RLock() + defer r.mu.RUnlock() + return r.data.LoginMaxAttempts +} + +func (r *Runtime) LoginLockout() time.Duration { + r.mu.RLock() + defer r.mu.RUnlock() + return time.Duration(r.data.LoginLockoutSeconds) * time.Second +} + +func (r *Runtime) TrustedProxies() []string { + r.mu.RLock() + defer r.mu.RUnlock() + var out []string + _ = json.Unmarshal([]byte(r.data.TrustedProxiesJSON), &out) + return out +} + +func (r *Runtime) UsageFlushInterval() time.Duration { + r.mu.RLock() + defer r.mu.RUnlock() + return time.Duration(r.data.UsageFlushSeconds) * time.Second +} + +func (r *Runtime) HealthCheckInterval() time.Duration { + r.mu.RLock() + defer r.mu.RUnlock() + return time.Duration(r.data.HealthCheckSeconds) * time.Second +} + +func (r *Runtime) GatewayMaxRetries() int { + r.mu.RLock() + defer r.mu.RUnlock() + return r.data.GatewayMaxRetries +} + +func (r *Runtime) GatewayRetryBackoffMs() int { + r.mu.RLock() + defer r.mu.RUnlock() + return r.data.GatewayRetryBackoffMs +} + +func (r *Runtime) ImageStoragePath() string { + r.mu.RLock() + defer r.mu.RUnlock() + if r.data.ImageStoragePath == "" { + return "images" + } + return r.data.ImageStoragePath +} + +func (r *Runtime) PublicBaseURL() string { + r.mu.RLock() + defer r.mu.RUnlock() + return r.data.PublicBaseURL +} + +func (r *Runtime) SignedURLTTL() time.Duration { + r.mu.RLock() + defer r.mu.RUnlock() + sec := r.data.SignedURLTTLSeconds + if sec <= 0 { + sec = 3600 + } + return time.Duration(sec) * time.Second +} + +func (r *Runtime) PredictionWaitSeconds() int64 { + r.mu.RLock() + defer r.mu.RUnlock() + if r.data.PredictionWaitSeconds <= 0 { + return 60 + } + return r.data.PredictionWaitSeconds +} + +type UpdateInput struct { + EncryptionKey *string `json:"encryption_key"` + SessionTTLSeconds *int64 `json:"session_ttl_seconds"` + LoginMaxAttempts *int `json:"login_max_attempts"` + LoginLockoutSeconds *int64 `json:"login_lockout_seconds"` + TrustedProxies []string `json:"trusted_proxies"` + UsageFlushSeconds *int64 `json:"usage_flush_seconds"` + HealthCheckSeconds *int64 `json:"health_check_seconds"` + GatewayMaxRetries *int `json:"gateway_max_retries"` + GatewayRetryBackoffMs *int `json:"gateway_retry_backoff_ms"` + ImageStoragePath *string `json:"image_storage_path"` + PublicBaseURL *string `json:"public_base_url"` + SignedURLTTLSeconds *int64 `json:"signed_url_ttl_seconds"` + PredictionWaitSeconds *int64 `json:"prediction_wait_seconds"` +} + +func (r *Runtime) Update(in UpdateInput) error { + r.mu.Lock() + s := r.data + if in.EncryptionKey != nil && *in.EncryptionKey != "" { + s.EncryptionKey = *in.EncryptionKey + } + if in.SessionTTLSeconds != nil && *in.SessionTTLSeconds > 0 { + s.SessionTTLSeconds = *in.SessionTTLSeconds + } + if in.LoginMaxAttempts != nil && *in.LoginMaxAttempts > 0 { + s.LoginMaxAttempts = *in.LoginMaxAttempts + } + if in.LoginLockoutSeconds != nil && *in.LoginLockoutSeconds > 0 { + s.LoginLockoutSeconds = *in.LoginLockoutSeconds + } + if in.TrustedProxies != nil { + b, _ := json.Marshal(in.TrustedProxies) + s.TrustedProxiesJSON = string(b) + } + if in.UsageFlushSeconds != nil && *in.UsageFlushSeconds > 0 { + s.UsageFlushSeconds = *in.UsageFlushSeconds + } + if in.HealthCheckSeconds != nil && *in.HealthCheckSeconds > 0 { + s.HealthCheckSeconds = *in.HealthCheckSeconds + } + if in.GatewayMaxRetries != nil && *in.GatewayMaxRetries > 0 { + s.GatewayMaxRetries = *in.GatewayMaxRetries + } + if in.GatewayRetryBackoffMs != nil && *in.GatewayRetryBackoffMs >= 0 { + s.GatewayRetryBackoffMs = *in.GatewayRetryBackoffMs + } + if in.ImageStoragePath != nil { + s.ImageStoragePath = *in.ImageStoragePath + } + if in.PublicBaseURL != nil { + s.PublicBaseURL = *in.PublicBaseURL + } + if in.SignedURLTTLSeconds != nil && *in.SignedURLTTLSeconds > 0 { + s.SignedURLTTLSeconds = *in.SignedURLTTLSeconds + } + if in.PredictionWaitSeconds != nil && *in.PredictionWaitSeconds > 0 { + s.PredictionWaitSeconds = *in.PredictionWaitSeconds + } + if err := r.db.Save(&s).Error; err != nil { + return err + } + r.data = s + r.mu.Unlock() + r.applySideEffects() + return nil +} + +func (r *Runtime) applySideEffects() { + middleware.ConfigureTrustedProxies(r.TrustedProxies()) +} + +func (r *Runtime) PublicView() map[string]any { + s := r.Snapshot() + masked := "(已设置)" + if s.EncryptionKey == "" { + masked = "(未设置)" + } + var proxies []string + _ = json.Unmarshal([]byte(s.TrustedProxiesJSON), &proxies) + return map[string]any{ + "encryption_key_set": s.EncryptionKey != "", + "encryption_key_hint": masked, + "session_ttl_seconds": s.SessionTTLSeconds, + "login_max_attempts": s.LoginMaxAttempts, + "login_lockout_seconds": s.LoginLockoutSeconds, + "trusted_proxies": proxies, + "usage_flush_seconds": s.UsageFlushSeconds, + "health_check_seconds": s.HealthCheckSeconds, + "gateway_max_retries": s.GatewayMaxRetries, + "gateway_retry_backoff_ms": s.GatewayRetryBackoffMs, + "image_storage_path": s.ImageStoragePath, + "public_base_url": s.PublicBaseURL, + "signed_url_ttl_seconds": s.SignedURLTTLSeconds, + "prediction_wait_seconds": s.PredictionWaitSeconds, + } +} diff --git a/internal/storage/imagestore/store.go b/internal/storage/imagestore/store.go new file mode 100644 index 0000000..d3bd66e --- /dev/null +++ b/internal/storage/imagestore/store.go @@ -0,0 +1,93 @@ +package imagestore + +import ( + "crypto/hmac" + "crypto/sha256" + "encoding/hex" + "fmt" + "os" + "path/filepath" + "strconv" + "strings" + "time" + + "github.com/google/uuid" + "github.com/rose_cat707/luminary/internal/model" + "gorm.io/gorm" +) + +type Store struct { + db *gorm.DB + baseDir string + signKey string + publicURL string + ttl time.Duration +} + +func New(db *gorm.DB, baseDir, publicURL, signKey string, ttl time.Duration) *Store { + return &Store{db: db, baseDir: baseDir, publicURL: strings.TrimRight(publicURL, "/"), signKey: signKey, ttl: ttl} +} + +func (s *Store) EnsureDir() error { + return os.MkdirAll(s.baseDir, 0o755) +} + +func (s *Store) Save(predictionID, filename string, data []byte, mime string) (*model.StoredImage, error) { + if err := s.EnsureDir(); err != nil { + return nil, err + } + dir := filepath.Join(s.baseDir, predictionID) + if err := os.MkdirAll(dir, 0o755); err != nil { + return nil, err + } + localPath := filepath.Join(dir, filename) + if err := os.WriteFile(localPath, data, 0o644); err != nil { + return nil, err + } + img := model.StoredImage{ + ID: uuid.NewString(), + PredictionID: predictionID, + Filename: filename, + LocalPath: localPath, + Mime: mime, + Size: int64(len(data)), + CreatedAt: time.Now(), + } + if err := s.db.Create(&img).Error; err != nil { + return nil, err + } + return &img, nil +} + +func (s *Store) Get(id string) (*model.StoredImage, error) { + var img model.StoredImage + if err := s.db.First(&img, "id = ?", id).Error; err != nil { + return nil, err + } + return &img, nil +} + +func (s *Store) ListByPrediction(predictionID string) ([]model.StoredImage, error) { + var imgs []model.StoredImage + err := s.db.Where("prediction_id = ?", predictionID).Order("created_at asc").Find(&imgs).Error + return imgs, err +} + +func (s *Store) SignURL(imageID string) string { + exp := time.Now().Add(s.ttl).Unix() + sig := s.sign(imageID, exp) + return fmt.Sprintf("%s/files/%s?exp=%d&sig=%s", s.publicURL, imageID, exp, sig) +} + +func (s *Store) Verify(imageID string, exp int64, sig string) bool { + if time.Now().Unix() > exp { + return false + } + return hmac.Equal([]byte(s.sign(imageID, exp)), []byte(sig)) +} + +func (s *Store) sign(imageID string, exp int64) string { + mac := hmac.New(sha256.New, []byte(s.signKey)) + mac.Write([]byte(imageID + "|" + strconv.FormatInt(exp, 10))) + return hex.EncodeToString(mac.Sum(nil)) +} diff --git a/internal/store/cache/cache.go b/internal/store/cache/cache.go new file mode 100644 index 0000000..3501c70 --- /dev/null +++ b/internal/store/cache/cache.go @@ -0,0 +1,455 @@ +package cache + +import ( + "encoding/json" + "sync" + "sync/atomic" + "time" + + "github.com/rose_cat707/luminary/internal/auth" + "github.com/rose_cat707/luminary/internal/model" +) + +type IngressKeySnapshot struct { + Key model.IngressKey + KeyPlain string // only set on create, not persisted in cache long-term +} + +type UsageDelta struct { + IngressKeyID uint + ProviderKeyID uint + ProviderID uint + ClientIP string + Endpoint string + Model string + TokensIn int + TokensOut int + Cost float64 + LatencyMs int64 + Status string + Stream bool + ErrorMsg string + RequestBody string + ResponseBody string + BudgetUsed float64 + Requests int64 + Tokens int64 +} + +type Store struct { + mu sync.RWMutex + + providers map[uint]*model.Provider + providerKeys map[uint]*model.ProviderKey + providerByName map[string]*model.Provider + models map[uint][]model.ModelEntry + + ingressKeys map[uint]*model.IngressKey + ingressByHash map[string]*model.IngressKey + + ipRules []model.IPRule + routingRules map[uint][]model.RoutingRule // ingressKeyID -> rules + + healthStatus map[uint]model.HealthCheckRecord + + usageDeltas []UsageDelta + usageMu sync.Mutex + + // rate limit counters: ingressKeyID -> window start + counts + rateMu sync.Mutex + rateWindows map[uint]*rateWindow +} + +type rateWindow struct { + start time.Time + requests int + tokens int +} + +func New() *Store { + return &Store{ + providers: make(map[uint]*model.Provider), + providerKeys: make(map[uint]*model.ProviderKey), + providerByName: make(map[string]*model.Provider), + models: make(map[uint][]model.ModelEntry), + ingressKeys: make(map[uint]*model.IngressKey), + ingressByHash: make(map[string]*model.IngressKey), + routingRules: make(map[uint][]model.RoutingRule), + healthStatus: make(map[uint]model.HealthCheckRecord), + rateWindows: make(map[uint]*rateWindow), + } +} + +func (c *Store) LoadProviders(providers []model.Provider) { + c.mu.Lock() + defer c.mu.Unlock() + c.providers = make(map[uint]*model.Provider) + c.providerByName = make(map[string]*model.Provider) + for i := range providers { + p := providers[i] + c.providers[p.ID] = &p + c.providerByName[p.Name] = &p + } +} + +func (c *Store) LoadProviderKeys(keys []model.ProviderKey) { + c.mu.Lock() + defer c.mu.Unlock() + c.providerKeys = make(map[uint]*model.ProviderKey) + for i := range keys { + k := keys[i] + c.providerKeys[k.ID] = &k + } +} + +func (c *Store) LoadModels(models []model.ModelEntry) { + c.mu.Lock() + defer c.mu.Unlock() + c.models = make(map[uint][]model.ModelEntry) + for _, m := range models { + c.models[m.ProviderID] = append(c.models[m.ProviderID], m) + } +} + +func (c *Store) LoadIngressKeys(keys []model.IngressKey) { + c.mu.Lock() + defer c.mu.Unlock() + c.ingressKeys = make(map[uint]*model.IngressKey) + c.ingressByHash = make(map[string]*model.IngressKey) + for i := range keys { + k := keys[i] + c.ingressKeys[k.ID] = &k + c.ingressByHash[k.KeyHash] = &k + } +} + +func (c *Store) LoadIPRules(rules []model.IPRule) { + c.mu.Lock() + defer c.mu.Unlock() + c.ipRules = rules +} + +func (c *Store) GetProvider(id uint) (model.Provider, bool) { + c.mu.RLock() + defer c.mu.RUnlock() + p, ok := c.providers[id] + if !ok { + return model.Provider{}, false + } + return *p, true +} + +func (c *Store) GetProviderByName(name string) (model.Provider, bool) { + c.mu.RLock() + defer c.mu.RUnlock() + p, ok := c.providerByName[name] + if !ok { + return model.Provider{}, false + } + return *p, true +} + +func (c *Store) ListProviders() []model.Provider { + c.mu.RLock() + defer c.mu.RUnlock() + out := make([]model.Provider, 0, len(c.providers)) + for _, p := range c.providers { + out = append(out, *p) + } + return out +} + +func (c *Store) SetProvider(p model.Provider) { + c.mu.Lock() + defer c.mu.Unlock() + c.providers[p.ID] = &p + c.providerByName[p.Name] = &p +} + +func (c *Store) DeleteProvider(id uint) { + c.mu.Lock() + defer c.mu.Unlock() + if p, ok := c.providers[id]; ok { + delete(c.providerByName, p.Name) + } + delete(c.providers, id) + delete(c.models, id) +} + +func (c *Store) GetProviderKey(id uint) (model.ProviderKey, bool) { + c.mu.RLock() + defer c.mu.RUnlock() + k, ok := c.providerKeys[id] + if !ok { + return model.ProviderKey{}, false + } + return *k, true +} + +func (c *Store) ListProviderKeys(providerID uint) []model.ProviderKey { + c.mu.RLock() + defer c.mu.RUnlock() + var out []model.ProviderKey + for _, k := range c.providerKeys { + if k.ProviderID == providerID { + out = append(out, *k) + } + } + return out +} + +func (c *Store) ListAllProviderKeys() []model.ProviderKey { + c.mu.RLock() + defer c.mu.RUnlock() + out := make([]model.ProviderKey, 0, len(c.providerKeys)) + for _, k := range c.providerKeys { + out = append(out, *k) + } + return out +} + +func (c *Store) SetProviderKey(k model.ProviderKey) { + c.mu.Lock() + defer c.mu.Unlock() + c.providerKeys[k.ID] = &k +} + +func (c *Store) DeleteProviderKey(id uint) { + c.mu.Lock() + defer c.mu.Unlock() + delete(c.providerKeys, id) +} + +func (c *Store) GetModels(providerID uint) []model.ModelEntry { + c.mu.RLock() + defer c.mu.RUnlock() + models := c.models[providerID] + if models == nil { + return []model.ModelEntry{} + } + return models +} + +func (c *Store) SetModels(providerID uint, models []model.ModelEntry) { + c.mu.Lock() + defer c.mu.Unlock() + c.models[providerID] = models +} + +func (c *Store) ListIngressKeys() []model.IngressKey { + c.mu.RLock() + defer c.mu.RUnlock() + out := make([]model.IngressKey, 0, len(c.ingressKeys)) + for _, k := range c.ingressKeys { + out = append(out, *k) + } + return out +} + +func (c *Store) GetIngressKey(id uint) (model.IngressKey, bool) { + c.mu.RLock() + defer c.mu.RUnlock() + k, ok := c.ingressKeys[id] + if !ok { + return model.IngressKey{}, false + } + return *k, true +} + +func (c *Store) SetIngressKey(k model.IngressKey) { + c.mu.Lock() + defer c.mu.Unlock() + c.ingressKeys[k.ID] = &k + c.ingressByHash[k.KeyHash] = &k +} + +func (c *Store) DeleteIngressKey(id uint) { + c.mu.Lock() + defer c.mu.Unlock() + if k, ok := c.ingressKeys[id]; ok { + delete(c.ingressByHash, k.KeyHash) + } + delete(c.ingressKeys, id) +} + +func (c *Store) LookupIngressKey(plain string) (*model.IngressKey, bool) { + c.mu.RLock() + defer c.mu.RUnlock() + hash := auth.HashIngressKey(plain) + if k, ok := c.ingressByHash[hash]; ok && k.Enabled { + cp := *k + return &cp, true + } + for _, k := range c.ingressKeys { + if !k.Enabled || !auth.IsLegacyIngressHash(k.KeyHash) { + continue + } + if auth.CheckIngressKey(k.KeyHash, plain) { + cp := *k + return &cp, true + } + } + return nil, false +} + +func (c *Store) ResetProviderKeyDailyCounts() { + c.mu.Lock() + defer c.mu.Unlock() + for _, k := range c.providerKeys { + k.RequestsToday = 0 + k.TokensToday = 0 + } +} + +func (c *Store) ListIPRules() []model.IPRule { + c.mu.RLock() + defer c.mu.RUnlock() + out := make([]model.IPRule, len(c.ipRules)) + copy(out, c.ipRules) + return out +} + +func (c *Store) SetIPRules(rules []model.IPRule) { + c.mu.Lock() + defer c.mu.Unlock() + c.ipRules = rules +} + +func (c *Store) SetHealthStatus(providerID uint, rec model.HealthCheckRecord) { + c.mu.Lock() + defer c.mu.Unlock() + c.healthStatus[providerID] = rec + if p, ok := c.providers[providerID]; ok { + p.Status = rec.Status + } +} + +func (c *Store) GetHealthStatus() map[uint]model.HealthCheckRecord { + c.mu.RLock() + defer c.mu.RUnlock() + out := make(map[uint]model.HealthCheckRecord, len(c.healthStatus)) + for k, v := range c.healthStatus { + out[k] = v + } + return out +} + +func (c *Store) RecordUsage(delta UsageDelta) { + c.mu.Lock() + if k, ok := c.ingressKeys[delta.IngressKeyID]; ok { + k.BudgetUsed += delta.BudgetUsed + k.RequestCount += delta.Requests + k.TokenCount += delta.Tokens + } + if pk, ok := c.providerKeys[delta.ProviderKeyID]; ok { + pk.RequestsToday += int(delta.Requests) + pk.TokensToday += delta.Tokens + } + c.mu.Unlock() + + c.usageMu.Lock() + c.usageDeltas = append(c.usageDeltas, delta) + c.usageMu.Unlock() +} + +func (c *Store) DrainUsageDeltas() []UsageDelta { + c.usageMu.Lock() + defer c.usageMu.Unlock() + if len(c.usageDeltas) == 0 { + return nil + } + out := c.usageDeltas + c.usageDeltas = nil + return out +} + +func (c *Store) CheckRateLimit(ingressKeyID uint, rpm, tpm int, tokens int) bool { + if rpm <= 0 && tpm <= 0 { + return true + } + c.rateMu.Lock() + defer c.rateMu.Unlock() + now := time.Now() + w, ok := c.rateWindows[ingressKeyID] + if !ok || now.Sub(w.start) >= time.Minute { + c.rateWindows[ingressKeyID] = &rateWindow{start: now, requests: 1, tokens: tokens} + return true + } + if rpm > 0 && w.requests >= rpm { + return false + } + if tpm > 0 && w.tokens+tokens > tpm { + return false + } + w.requests++ + w.tokens += tokens + return true +} + +func ParseJSONList(s string) []string { + var out []string + if s == "" { + return []string{"*"} + } + _ = json.Unmarshal([]byte(s), &out) + if len(out) == 0 { + return []string{"*"} + } + return out +} + +func MatchesList(list []string, value string) bool { + for _, item := range list { + if item == "*" || item == value { + return true + } + } + return false +} + +func ModelsToJSON(models []string) string { + b, _ := json.Marshal(models) + return string(b) +} + +func (c *Store) LoadRoutingRules(rules []model.RoutingRule) { + c.mu.Lock() + defer c.mu.Unlock() + c.routingRules = make(map[uint][]model.RoutingRule) + for _, r := range rules { + c.routingRules[r.IngressKeyID] = append(c.routingRules[r.IngressKeyID], r) + } +} + +func (c *Store) ListRoutingRules(ingressKeyID uint) []model.RoutingRule { + c.mu.RLock() + defer c.mu.RUnlock() + out := c.routingRules[ingressKeyID] + cp := make([]model.RoutingRule, len(out)) + copy(cp, out) + return cp +} + +func (c *Store) SetRoutingRules(ingressKeyID uint, rules []model.RoutingRule) { + c.mu.Lock() + defer c.mu.Unlock() + c.routingRules[ingressKeyID] = rules +} + +func (c *Store) DeleteRoutingRulesForIngress(ingressKeyID uint) { + c.mu.Lock() + defer c.mu.Unlock() + delete(c.routingRules, ingressKeyID) +} + +type Counter struct { + v atomic.Int64 +} + +func (c *Counter) Add(n int64) { + c.v.Add(n) +} + +func (c *Counter) Load() int64 { + return c.v.Load() +} diff --git a/internal/store/sqlite/repository.go b/internal/store/sqlite/repository.go new file mode 100644 index 0000000..c143744 --- /dev/null +++ b/internal/store/sqlite/repository.go @@ -0,0 +1,136 @@ +package sqlite + +import ( + "time" + + "github.com/rose_cat707/luminary/internal/auth" + "github.com/rose_cat707/luminary/internal/model" + "github.com/rose_cat707/luminary/internal/settings" + "github.com/rose_cat707/luminary/internal/store/cache" + "gorm.io/gorm" +) + +type Repository struct { + db *gorm.DB + cache *cache.Store +} + +func NewRepository(store *Store, c *cache.Store) *Repository { + return &Repository{db: store.DB(), cache: c} +} + +func (r *Repository) BootstrapFromDB() error { + var providers []model.Provider + if err := r.db.Find(&providers).Error; err != nil { + return err + } + r.cache.LoadProviders(providers) + + var keys []model.ProviderKey + if err := r.db.Find(&keys).Error; err != nil { + return err + } + r.cache.LoadProviderKeys(keys) + + var models []model.ModelEntry + if err := r.db.Find(&models).Error; err != nil { + return err + } + r.cache.LoadModels(models) + + var ingress []model.IngressKey + if err := r.db.Find(&ingress).Error; err != nil { + return err + } + r.cache.LoadIngressKeys(ingress) + + var rules []model.IPRule + if err := r.db.Find(&rules).Error; err != nil { + return err + } + r.cache.LoadIPRules(rules) + + var routing []model.RoutingRule + if err := r.db.Find(&routing).Error; err != nil { + return err + } + r.cache.LoadRoutingRules(routing) + r.PruneUsageRecords(model.MaxUsageLogRecords) + return nil +} + +func (r *Repository) EnsureAdmin() error { + var count int64 + r.db.Model(&model.AdminUser{}).Count(&count) + if count > 0 { + return nil + } + username, password := settings.LegacyAdminCredentials() + hash, err := auth.HashPassword(password) + if err != nil { + return err + } + return r.db.Create(&model.AdminUser{Username: username, PasswordHash: hash}).Error +} + +func (r *Repository) FlushUsage(deltas []cache.UsageDelta) { + for _, d := range deltas { + r.db.Create(&model.UsageRecord{ + IngressKeyID: d.IngressKeyID, + ProviderID: d.ProviderID, + ProviderKeyID: d.ProviderKeyID, + ClientIP: d.ClientIP, + Endpoint: d.Endpoint, + Model: d.Model, + TokensIn: d.TokensIn, + TokensOut: d.TokensOut, + Cost: d.Cost, + LatencyMs: d.LatencyMs, + Status: d.Status, + Stream: d.Stream, + ErrorMsg: d.ErrorMsg, + RequestBody: d.RequestBody, + ResponseBody: d.ResponseBody, + CreatedAt: time.Now(), + }) + if d.IngressKeyID > 0 { + r.db.Model(&model.IngressKey{}).Where("id = ?", d.IngressKeyID).Updates(map[string]any{ + "budget_used": gorm.Expr("budget_used + ?", d.BudgetUsed), + "request_count": gorm.Expr("request_count + ?", d.Requests), + "token_count": gorm.Expr("token_count + ?", d.Tokens), + }) + } + if d.ProviderKeyID > 0 { + r.db.Model(&model.ProviderKey{}).Where("id = ?", d.ProviderKeyID).Updates(map[string]any{ + "requests_today": gorm.Expr("requests_today + ?", d.Requests), + "tokens_today": gorm.Expr("tokens_today + ?", d.Tokens), + }) + } + } + r.PruneUsageRecords(model.MaxUsageLogRecords) +} + +func (r *Repository) RecordRequestLog(rec model.UsageRecord) { + if rec.CreatedAt.IsZero() { + rec.CreatedAt = time.Now() + } + r.db.Create(&rec) + r.PruneUsageRecords(model.MaxUsageLogRecords) +} + +func (r *Repository) PruneUsageRecords(max int) { + if max <= 0 { + return + } + var count int64 + r.db.Model(&model.UsageRecord{}).Count(&count) + if count <= int64(max) { + return + } + var keepIDs []uint + r.db.Model(&model.UsageRecord{}).Order("created_at desc").Limit(max).Pluck("id", &keepIDs) + if len(keepIDs) == 0 { + return + } + r.db.Where("id NOT IN ?", keepIDs).Delete(&model.UsageRecord{}) +} diff --git a/internal/store/sqlite/store.go b/internal/store/sqlite/store.go new file mode 100644 index 0000000..c827959 --- /dev/null +++ b/internal/store/sqlite/store.go @@ -0,0 +1,109 @@ +package sqlite + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/glebarez/sqlite" + "github.com/rose_cat707/luminary/internal/model" + "gorm.io/gorm" + "gorm.io/gorm/logger" +) + +type Store struct { + db *gorm.DB +} + +func New(path string) (*Store, error) { + if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { + return nil, fmt.Errorf("create data dir: %w", err) + } + db, err := gorm.Open(sqlite.Open(path+"?_pragma=journal_mode(WAL)&_pragma=busy_timeout(5000)"), &gorm.Config{ + Logger: logger.Default.LogMode(logger.Warn), + }) + if err != nil { + return nil, fmt.Errorf("open sqlite: %w", err) + } + sqlDB, err := db.DB() + if err != nil { + return nil, err + } + sqlDB.SetMaxOpenConns(1) + if err := ensureIPRulesSchema(db); err != nil { + return nil, fmt.Errorf("migrate ip_rules: %w", err) + } + if err := db.AutoMigrate( + &model.Provider{}, + &model.ProviderKey{}, + &model.ModelEntry{}, + &model.IngressKey{}, + &model.AdminUser{}, + &model.AdminSession{}, + &model.UsageRecord{}, + &model.HealthCheckRecord{}, + &model.RoutingRule{}, + &model.SystemSettings{}, + &model.Prediction{}, + &model.StoredImage{}, + ); err != nil { + return nil, fmt.Errorf("migrate: %w", err) + } + return &Store{db: db}, nil +} + +// ensureIPRulesSchema manages ip_rules without GORM AutoMigrate (avoids bad table rebuilds). +func ensureIPRulesSchema(db *gorm.DB) error { + if !tableExists(db, "ip_rules") { + return db.Exec(` + CREATE TABLE ip_rules ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + cidr TEXT NOT NULL, + type TEXT NOT NULL, + scope TEXT NOT NULL DEFAULT 'proxy', + enabled NUMERIC DEFAULT 1, + created_at DATETIME + ); + `).Error + } + if !tableHasColumn(db, "ip_rules", "c_id_r") { + return nil + } + + cidrExpr := "c_id_r" + if tableHasColumn(db, "ip_rules", "cidr") { + cidrExpr = "COALESCE(NULLIF(cidr, ''), c_id_r)" + } + + return db.Exec(` + CREATE TABLE ip_rules_mig ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + cidr TEXT NOT NULL, + type TEXT NOT NULL, + scope TEXT NOT NULL DEFAULT 'proxy', + enabled NUMERIC DEFAULT 1, + created_at DATETIME + ); + INSERT INTO ip_rules_mig (id, cidr, type, scope, enabled, created_at) + SELECT id, ` + cidrExpr + `, type, scope, enabled, created_at + FROM ip_rules; + DROP TABLE ip_rules; + ALTER TABLE ip_rules_mig RENAME TO ip_rules; + `).Error +} + +func tableHasColumn(db *gorm.DB, table, column string) bool { + var n int64 + db.Raw(`SELECT COUNT(*) FROM pragma_table_info(?) WHERE name = ?`, table, column).Scan(&n) + return n > 0 +} + +func tableExists(db *gorm.DB, table string) bool { + var n int64 + db.Raw(`SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name=?`, table).Scan(&n) + return n > 0 +} + +func (s *Store) DB() *gorm.DB { + return s.db +} diff --git a/internal/store/sqlite/store_test.go b/internal/store/sqlite/store_test.go new file mode 100644 index 0000000..bab34b6 --- /dev/null +++ b/internal/store/sqlite/store_test.go @@ -0,0 +1,69 @@ +package sqlite + +import ( + "os" + "path/filepath" + "testing" + + "github.com/glebarez/sqlite" + "github.com/rose_cat707/luminary/internal/model" + "gorm.io/gorm" + "gorm.io/gorm/logger" +) + +func TestPreMigrateIPRulesTable_LegacySchema(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "legacy.db") + + legacy, err := gorm.Open(sqlite.Open(path), &gorm.Config{Logger: logger.Default.LogMode(logger.Silent)}) + if err != nil { + t.Fatal(err) + } + if err := legacy.Exec(` + CREATE TABLE ip_rules ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + c_id_r TEXT NOT NULL, + type TEXT NOT NULL, + scope TEXT NOT NULL DEFAULT 'all', + enabled NUMERIC DEFAULT 1, + created_at DATETIME + ); + INSERT INTO ip_rules (c_id_r, type, scope, enabled) VALUES ('10.0.0.1', 'allow', 'proxy', 1); + `).Error; err != nil { + t.Fatal(err) + } + sqlDB, _ := legacy.DB() + sqlDB.Close() + + store, err := New(path) + if err != nil { + t.Fatalf("New() with legacy schema: %v", err) + } + + var rules []model.IPRule + if err := store.DB().Find(&rules).Error; err != nil { + t.Fatal(err) + } + if len(rules) != 1 || rules[0].CIDR != "10.0.0.1" { + t.Fatalf("unexpected rules: %+v", rules) + } + if store.DB().Migrator().HasColumn(&model.IPRule{}, "c_id_r") { + t.Fatal("legacy c_id_r column should be removed") + } + if tableHasColumn(store.DB(), "ip_rules", "c_id_r") { + t.Fatal("legacy c_id_r column should be removed") + } +} + +func TestNew_FreshDatabase(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "fresh.db") + store, err := New(path) + if err != nil { + t.Fatal(err) + } + if err := store.DB().Create(&model.IPRule{CIDR: "127.0.0.1", Type: model.IPRuleAllow, Scope: model.IPScopeProxy, Enabled: true}).Error; err != nil { + t.Fatal(err) + } + _ = os.Remove(path) +} diff --git a/scripts/luminary-recover.sh b/scripts/luminary-recover.sh new file mode 100755 index 0000000..d7dfcfb --- /dev/null +++ b/scripts/luminary-recover.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# Emergency recovery inside the container or local checkout. +set -eu + +DATA_DIR="${LUMINARY_DATA:-/data}" +REPO_DIR="${LUMINARY_HOME:-/opt/luminary}" + +if [ -x /usr/local/bin/luminary-recover ]; then + exec /usr/local/bin/luminary-recover -data-dir "$DATA_DIR" "$@" +fi + +if [ -x "${REPO_DIR}/luminary-recover" ]; then + exec "${REPO_DIR}/luminary-recover" -data-dir "$DATA_DIR" "$@" +fi + +if [ -f "${REPO_DIR}/go.mod" ]; then + cd "$REPO_DIR" + export CGO_ENABLED=0 + exec go run ./cmd/luminary-recover -data-dir "$DATA_DIR" "$@" +fi + +echo "luminary-recover binary not found" >&2 +exit 1 diff --git a/web/.npmrc b/web/.npmrc new file mode 100644 index 0000000..7549542 --- /dev/null +++ b/web/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmmirror.com diff --git a/web/dist/index.html b/web/dist/index.html new file mode 100644 index 0000000..4492bc4 --- /dev/null +++ b/web/dist/index.html @@ -0,0 +1,14 @@ + + + + + + + Luminary AI Gateway + + + + +

+ + diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..24662d8 --- /dev/null +++ b/web/index.html @@ -0,0 +1,13 @@ + + + + + + + Luminary AI Gateway + + +
+ + + diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 0000000..61cf72b --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,2188 @@ +{ + "name": "luminary-web", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "luminary-web", + "version": "0.1.0", + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "axios": "^1.7.9", + "echarts": "^5.6.0", + "element-plus": "^2.9.4", + "pinia": "^2.3.1", + "vue": "^3.5.13", + "vue-i18n": "^9.14.4", + "vue-router": "^4.5.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.2.1", + "typescript": "~5.7.3", + "vite": "^6.0.11", + "vue-tsc": "^2.2.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@intlify/core-base": { + "version": "9.14.4", + "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.14.4.tgz", + "integrity": "sha512-vtZCt7NqWhKEtHa3SD/322DlgP5uR9MqWxnE0y8Q0tjDs9H5Lxhss+b5wv8rmuXRoHKLESNgw9d+EN9ybBbj9g==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "9.14.4", + "@intlify/shared": "9.14.4" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.14.4", + "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.14.4.tgz", + "integrity": "sha512-vcyCLiVRN628U38c3PbahrhbbXrckrM9zpy0KZVlDk2Z0OnGwv8uQNNXP3twwGtfLsCf4gu3ci6FMIZnPaqZsw==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "9.14.4", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "9.14.4", + "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.14.4.tgz", + "integrity": "sha512-P9zv6i1WvMc9qDBWvIgKkymjY2ptIiQ065PjDv7z7fDqH3J/HBRBN5IoiR46r/ujRcU7hCuSIZWvCAFCyuOYZA==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.8", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz", + "integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.0.tgz", + "integrity": "sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.0.tgz", + "integrity": "sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.0.tgz", + "integrity": "sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.0.tgz", + "integrity": "sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.0.tgz", + "integrity": "sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.0.tgz", + "integrity": "sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.0.tgz", + "integrity": "sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.0.tgz", + "integrity": "sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.0.tgz", + "integrity": "sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.0.tgz", + "integrity": "sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.0.tgz", + "integrity": "sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.0.tgz", + "integrity": "sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.0.tgz", + "integrity": "sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.0.tgz", + "integrity": "sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.0.tgz", + "integrity": "sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.0.tgz", + "integrity": "sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.0.tgz", + "integrity": "sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.0.tgz", + "integrity": "sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.0.tgz", + "integrity": "sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.0.tgz", + "integrity": "sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.0.tgz", + "integrity": "sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.0.tgz", + "integrity": "sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.0.tgz", + "integrity": "sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.0.tgz", + "integrity": "sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.0.tgz", + "integrity": "sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.38.tgz", + "integrity": "sha512-s99aGxWYig9ErHbct27KXEGhrBYlRI6c4MwAgXErOAbX9xiW37/uMa+XUDO69zLz83dng8UUZ70CTOJrLrYrEQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/shared": "3.5.38", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.38.tgz", + "integrity": "sha512-JTqp25l8aFfJYF7/KmsXZjAxJz7T+SjmTJLoXVjHtc2BrSgSiW2n9Aem/cWq1OPe68A8JL06B3eVdhlP0H4TVw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.38", + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.38.tgz", + "integrity": "sha512-DuA2GiZawSEW442iw/9+Fkol8hTgb4Ke5KkhmSry65QA7YuyMbIdy8p0XZRMvNwJdgRz307W8g1CSzdvS4nuNg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@vue/compiler-core": "3.5.38", + "@vue/compiler-dom": "3.5.38", + "@vue/compiler-ssr": "3.5.38", + "@vue/shared": "3.5.38", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.38.tgz", + "integrity": "sha512-7s+W5Gc42FGxZMcuwl8H5B29T8BJPMdBT7KHFE+BbAuZ/iTEdTtv7z2XiMjiaUUw4w3ZcCEdHs36RuYJ2VA7bA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.38", + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.38.tgz", + "integrity": "sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.38.tgz", + "integrity": "sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.38", + "@vue/shared": "3.5.38" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.38.tgz", + "integrity": "sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.38", + "@vue/runtime-core": "3.5.38", + "@vue/shared": "3.5.38", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.38.tgz", + "integrity": "sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.38", + "@vue/shared": "3.5.38" + }, + "peerDependencies": { + "vue": "3.5.38" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.38.tgz", + "integrity": "sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "14.3.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-14.3.0.tgz", + "integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.3.0", + "@vueuse/shared": "14.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.3.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-14.3.0.tgz", + "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.3.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-14.3.0.tgz", + "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmmirror.com/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.18.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.18.0.tgz", + "integrity": "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.6.1" + } + }, + "node_modules/element-plus": { + "version": "2.14.2", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.14.2.tgz", + "integrity": "sha512-eNH9uP3wQoNqieEIHXiNvIVv+zO5sZDU0CAZq5b0zqSN06DD0/V9xIq1R/qm3rw5k3nBTM1JvpxhCfRbaFLzDQ==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.2.0", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.7.6", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.8", + "@types/lodash": "^4.17.24", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "14.3.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.20", + "lodash": "^4.18.1", + "lodash-es": "^4.18.1", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0", + "vue-component-type-helpers": "^3.3.3" + }, + "peerDependencies": { + "vue": "^3.3.7" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.1.tgz", + "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup": { + "version": "4.62.0", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.62.0.tgz", + "integrity": "sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.0", + "@rollup/rollup-android-arm64": "4.62.0", + "@rollup/rollup-darwin-arm64": "4.62.0", + "@rollup/rollup-darwin-x64": "4.62.0", + "@rollup/rollup-freebsd-arm64": "4.62.0", + "@rollup/rollup-freebsd-x64": "4.62.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.0", + "@rollup/rollup-linux-arm-musleabihf": "4.62.0", + "@rollup/rollup-linux-arm64-gnu": "4.62.0", + "@rollup/rollup-linux-arm64-musl": "4.62.0", + "@rollup/rollup-linux-loong64-gnu": "4.62.0", + "@rollup/rollup-linux-loong64-musl": "4.62.0", + "@rollup/rollup-linux-ppc64-gnu": "4.62.0", + "@rollup/rollup-linux-ppc64-musl": "4.62.0", + "@rollup/rollup-linux-riscv64-gnu": "4.62.0", + "@rollup/rollup-linux-riscv64-musl": "4.62.0", + "@rollup/rollup-linux-s390x-gnu": "4.62.0", + "@rollup/rollup-linux-x64-gnu": "4.62.0", + "@rollup/rollup-linux-x64-musl": "4.62.0", + "@rollup/rollup-openbsd-x64": "4.62.0", + "@rollup/rollup-openharmony-arm64": "4.62.0", + "@rollup/rollup-win32-arm64-msvc": "4.62.0", + "@rollup/rollup-win32-ia32-msvc": "4.62.0", + "@rollup/rollup-win32-x64-gnu": "4.62.0", + "@rollup/rollup-win32-x64-msvc": "4.62.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "6.4.3", + "resolved": "https://registry.npmmirror.com/vite/-/vite-6.4.3.tgz", + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.38", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.38.tgz", + "integrity": "sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.38", + "@vue/compiler-sfc": "3.5.38", + "@vue/runtime-dom": "3.5.38", + "@vue/server-renderer": "3.5.38", + "@vue/shared": "3.5.38" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-type-helpers": { + "version": "3.3.5", + "resolved": "https://registry.npmmirror.com/vue-component-type-helpers/-/vue-component-type-helpers-3.3.5.tgz", + "integrity": "sha512-Fe1jyPJoUGpJOYKOri44jduR7My4yYINOMJISuMAbmrs+L5LbIDUc8NTWZYY3EJLK0yPLuCmcd5zoCsE4k2/KA==", + "license": "MIT" + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-i18n": { + "version": "9.14.4", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.14.4.tgz", + "integrity": "sha512-B934C8yUyWLT0EMud3DySrwSUJI7ZNiWYsEEz2gknTthqKiG4dzWE/WSa8AzCuSQzwBEv4HtG1jZDhgzPfWSKQ==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "9.14.4", + "@intlify/shared": "9.14.4", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/zrender": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + } + } +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..34b4226 --- /dev/null +++ b/web/package.json @@ -0,0 +1,27 @@ +{ + "name": "luminary-web", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "axios": "^1.7.9", + "echarts": "^5.6.0", + "element-plus": "^2.9.4", + "pinia": "^2.3.1", + "vue": "^3.5.13", + "vue-i18n": "^9.14.4", + "vue-router": "^4.5.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.2.1", + "typescript": "~5.7.3", + "vite": "^6.0.11", + "vue-tsc": "^2.2.0" + } +} diff --git a/web/public/favicon.svg b/web/public/favicon.svg new file mode 100644 index 0000000..6e67969 --- /dev/null +++ b/web/public/favicon.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000..7ede937 --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,16 @@ + + + diff --git a/web/src/api/client.ts b/web/src/api/client.ts new file mode 100644 index 0000000..267dd57 --- /dev/null +++ b/web/src/api/client.ts @@ -0,0 +1,113 @@ +import axios from 'axios' + +const api = axios.create({ + baseURL: '/api/admin', + withCredentials: true, +}) + +api.interceptors.response.use( + (r) => r, + (err) => { + if (err.response?.status === 401 && !window.location.pathname.startsWith('/login')) { + window.location.href = '/login' + } + return Promise.reject(err) + }, +) + +export default api + +export interface Provider { + id: number + name: string + type: string + category: string + base_url: string + allowed_endpoints_json: string + endpoint_paths_json: string + status: string + enabled?: boolean + keys?: ProviderKey[] + models?: ModelEntry[] +} + +export interface ProviderKey { + id: number + provider_id: number + name: string + weight: number + models_json: string + enabled: boolean + max_requests_per_day: number + max_tokens_per_day: number + requests_today: number + tokens_today: number +} + +export interface ModelEntry { + id: number + provider_id: number + model_id: string + alias?: string + display_name: string + workflow_type?: string + workflow_json?: string + input_binding_json?: string + version_hash?: string + enabled: boolean + created_at?: string +} + +export interface IngressKey { + id: number + name: string + prefix: string + enabled: boolean + budget_limit: number + budget_used: number + rate_limit_rpm: number + rate_limit_tpm: number + allowed_providers_json: string + allowed_models_json: string + request_count: number + token_count: number +} + +export interface IPRule { + id: number + cidr: string + type: 'allow' | 'deny' + scope: 'admin' | 'proxy' | 'all' + enabled: boolean +} + +export interface DashboardOverview { + total_requests_24h: number + total_tokens_24h: number + error_rate: number + active_ingress_keys: number + providers: number +} + +export interface ProviderModelUsage { + provider_id: number + provider_name: string + model: string + request_count: number + token_count: number + cost: number +} + +export interface ClientIPUsage { + client_ip: string + request_count: number + token_count: number + cost: number +} + +export interface RequestTrendBucket { + hour: string + requests: number + errors: number + tokens: number +} diff --git a/web/src/components/AppCard.vue b/web/src/components/AppCard.vue new file mode 100644 index 0000000..04669e1 --- /dev/null +++ b/web/src/components/AppCard.vue @@ -0,0 +1,19 @@ + + + diff --git a/web/src/components/BrandIcon.vue b/web/src/components/BrandIcon.vue new file mode 100644 index 0000000..daf9f89 --- /dev/null +++ b/web/src/components/BrandIcon.vue @@ -0,0 +1,30 @@ + + + diff --git a/web/src/components/ChartBox.vue b/web/src/components/ChartBox.vue new file mode 100644 index 0000000..b44e4c6 --- /dev/null +++ b/web/src/components/ChartBox.vue @@ -0,0 +1,47 @@ + + + diff --git a/web/src/components/LocaleSwitcher.vue b/web/src/components/LocaleSwitcher.vue new file mode 100644 index 0000000..d1d4a2e --- /dev/null +++ b/web/src/components/LocaleSwitcher.vue @@ -0,0 +1,22 @@ + + + diff --git a/web/src/components/PageHeader.vue b/web/src/components/PageHeader.vue new file mode 100644 index 0000000..34a0b45 --- /dev/null +++ b/web/src/components/PageHeader.vue @@ -0,0 +1,18 @@ + + + diff --git a/web/src/components/StatCard.vue b/web/src/components/StatCard.vue new file mode 100644 index 0000000..c0a24a0 --- /dev/null +++ b/web/src/components/StatCard.vue @@ -0,0 +1,13 @@ + + + diff --git a/web/src/components/WorkflowModelDialog.vue b/web/src/components/WorkflowModelDialog.vue new file mode 100644 index 0000000..f59eac3 --- /dev/null +++ b/web/src/components/WorkflowModelDialog.vue @@ -0,0 +1,187 @@ + + + diff --git a/web/src/i18n/index.ts b/web/src/i18n/index.ts new file mode 100644 index 0000000..eafc0ad --- /dev/null +++ b/web/src/i18n/index.ts @@ -0,0 +1,30 @@ +import { createI18n } from 'vue-i18n' +import zhCN from './locales/zh-CN' +import en from './locales/en' + +const STORAGE_KEY = 'luminary-locale' + +function detectLocale(): string { + const saved = localStorage.getItem(STORAGE_KEY) + if (saved === 'zh-CN' || saved === 'en') return saved + const lang = navigator.language.toLowerCase() + return lang.startsWith('zh') ? 'zh-CN' : 'en' +} + +export const i18n = createI18n({ + legacy: false, + locale: detectLocale(), + fallbackLocale: 'zh-CN', + messages: { + 'zh-CN': zhCN, + en, + }, +}) + +export function setLocale(locale: 'zh-CN' | 'en') { + i18n.global.locale.value = locale + localStorage.setItem(STORAGE_KEY, locale) + document.documentElement.lang = locale === 'zh-CN' ? 'zh-CN' : 'en' +} + +document.documentElement.lang = i18n.global.locale.value === 'zh-CN' ? 'zh-CN' : 'en' diff --git a/web/src/i18n/locales/en.ts b/web/src/i18n/locales/en.ts new file mode 100644 index 0000000..9039eba --- /dev/null +++ b/web/src/i18n/locales/en.ts @@ -0,0 +1,244 @@ +export default { + common: { + brand: 'Luminary', + cancel: 'Cancel', + confirm: 'Confirm', + save: 'Save', + edit: 'Edit', + create: 'Create', + add: 'Add', + delete: 'Delete', + refresh: 'Refresh', + query: 'Search', + copy: 'Copy', + actions: 'Actions', + name: 'Name', + status: 'Status', + type: 'Type', + enabled: 'Enabled', + disabled: 'Disabled', + yes: 'Yes', + no: 'No', + all: 'All', + loading: 'Loading...', + empty: '(empty)', + dash: '—', + infinity: '∞', + confirmDelete: 'Delete this item?', + auto: 'Auto', + detail: 'Details', + model: 'Model', + requests: 'Requests', + tokens: 'Tokens', + cost: 'Cost ($)', + latencyMs: 'Latency (ms)', + latency: 'Latency', + stream: 'Stream', + error: 'Error', + time: 'Time', + username: 'Username', + password: 'Password', + weight: 'Weight', + priority: 'Priority', + category: 'Category', + budget: 'Budget', + soon: 'Coming soon', + whitelistMore: '{items} and {count} more', + language: 'Language', + zh: '中文', + en: 'English', + }, + nav: { + dashboard: 'Dashboard', + providers: 'Egress', + ingress: 'Ingress', + logs: 'Request Logs', + ipRules: 'IP Rules', + settings: 'Settings', + security: 'Security', + logout: 'Sign out', + }, + login: { + subtitle: 'AI Gateway Console', + title: 'Sign in', + username: 'Username', + passwordPlaceholder: 'Enter password', + submit: 'Sign in', + footer: 'Luminary Gateway — unified AI egress & ingress management', + success: 'Signed in successfully', + failed: 'Sign in failed. Check username and password.', + rateLimited: 'Too many attempts. Please try again later.', + rateLimitedSec: 'Too many attempts. Try again in {sec} seconds.', + ipBlocked: 'Your IP is not allowed to access the admin console. Check IP rules or contact an administrator.', + }, + dashboard: { + title: 'Dashboard', + description: 'Real-time gateway requests, error rate, and provider health', + requests24h: '24h Requests', + tokens24h: '24h Tokens', + errorRate: 'Error Rate', + activeIngressKeys: 'Active Ingress Keys', + requestTrend: '24h Request Trend', + tokenTrend: '24h Token Trend', + seriesRequests: 'Requests', + seriesErrors: 'Errors', + seriesTokens: 'Tokens', + providerHealth: 'Provider Health', + ingressTop5: 'Top 5 Ingress Keys', + providerModelUsage: 'Provider + Model Usage (24h)', + clientIpUsage: 'Client IP Usage (24h)', + clientIp: 'Client IP', + requestCount: 'Requests', + }, + providers: { + title: 'Egress Providers', + description: 'Configure upstream providers, API paths, and keys', + addProvider: 'Add Provider', + protocolType: 'Protocol', + baseUrl: 'Base URL', + baseUrlPlaceholder: 'Leave empty for default', + enabledEndpoints: 'Enabled Endpoints', + models: 'Models', + modelsEmpty: 'No models yet. Click Sync Models to pull from upstream.', + displayName: 'Display Name', + syncedAt: 'Synced At', + addDialogTitle: 'Add Provider', + endpointConfig: 'Endpoint Config', + endpointConfigTitle: 'Endpoint Config — {name}', + endpointDivider: 'Endpoints & Paths', + endpointEditDivider: 'Enabled Endpoints & Path Overrides', + pathHint: 'Path can be relative (based on Base URL) or a full http(s) URL', + keysTitle: 'Keys — {name}', + addKey: 'Add Key', + addKeyDialogTitle: 'Add Provider Key', + apiKey: 'API Key', + modelWhitelist: 'Model Whitelist', + modelWhitelistPlaceholder: '["*"] or gpt-4o-mini', + maxRequestsPerDay: 'Max Requests / Day', + maxTokensPerDay: 'Max Tokens / Day', + requestsToday: 'Requests Today', + modelsTitle: 'Models — {name}', + syncModels: 'Sync Models', + addModel: 'Add Model', + addModelDialogTitle: 'Add Model', + modelId: 'Model ID', + modelAlias: 'Ingress alias', + modelAliasPlaceholder: 'Optional; ingress API uses this name', + modelAliasHint: 'Leave empty to use upstream Model ID at ingress', + upstreamModelId: 'Upstream Model ID', + editModelDialogTitle: 'Edit model', + providerNameExists: 'Provider name already exists', + modelAliasExists: 'Model alias already exists', + modelIdRequired: 'Model ID is required', + modelAdded: 'Model added', + modelDeleted: 'Model deleted', + confirmDeleteModel: 'Delete this model?', + modelsSummary: '{total} models, {enabled} enabled', + modelsAction: 'Models', + endpointsAction: 'Endpoints', + keysAction: 'Keys', + modelNotLoaded: 'Model data not loaded. Refresh and try again.', + modelEnabled: 'Model enabled', + modelDisabled: 'Model disabled', + modelNotFound: 'Model not found. Sync models and try again.', + updateFailed: 'Update failed', + createSuccess: 'Created successfully', + saved: 'Saved', + deleted: 'Deleted', + syncedCount: 'Synced {count} models', + syncFailed: 'Sync failed', + keyAdded: 'Key added', + }, + ingress: { + title: 'Ingress Keys', + description: 'Create virtual keys with budget, rate limits, and routing', + createKey: 'Create Ingress Key', + keyPrefix: 'Key Prefix', + providerWhitelist: 'Provider Whitelist', + modelWhitelist: 'Model Whitelist', + budgetLimit: 'Budget Limit', + rpmLimit: 'RPM Limit', + tpmLimit: 'TPM Limit', + whitelistAction: 'Whitelist', + routingAction: 'Routing', + createDialogTitle: 'Create Ingress Key', + providerWhitelistPlaceholder: 'Empty means all providers', + modelWhitelistPlaceholder: 'Empty means all models', + whitelistHint: 'Empty selection allows all', + modelWhitelistHint: 'Empty allows all; sync models in Egress first', + editWhitelistTitle: 'Edit Whitelist', + plainKeyTitle: 'Save your key (shown once)', + plainKeyWarning: 'Copy now — the full key cannot be viewed again after closing', + routingTitle: 'Routing Rules — {name}', + addRule: 'Add Rule', + modelPattern: 'Model Pattern', + modelPatternPlaceholder: 'gpt-4o* or claude-3-5-sonnet', + providerId: 'Provider', + providerIdPlaceholder: 'Select provider', + keyIdOptional: 'Provider key', + keyIdPlaceholder: 'Leave empty for auto load balancing', + providerRequired: 'Please select a provider', + addRuleTitle: 'Add Routing Rule', + whitelistUpdated: 'Whitelist updated', + confirmDeleteKey: 'Delete this key?', + copied: 'Copied', + ruleAdded: 'Rule added', + }, + logs: { + title: 'Request Logs', + description: 'Latest 500 records including inference and admin login', + ingress: 'Ingress', + endpoint: 'Endpoint', + modelOrUser: 'Model / User', + modelOrUserPlaceholder: 'Model / username', + clientIpPlaceholder: 'Client IP', + statusSuccess: 'Success', + statusError: 'Error', + endpointAdminLogin: 'Admin Login', + pagerHint: '{total} total, up to {max} retained', + detailTitle: 'Request Details', + requestBody: 'Request Body', + responseBody: 'Response Body', + predictionStatus: 'Prediction status', + }, + ipRules: { + title: 'IP Rules', + description: 'Whitelist / blacklist for admin console and inference API', + addRule: 'Add IP Rule', + cidr: 'CIDR / IP', + cidrPlaceholder: '192.168.1.0/24 or 127.0.0.1', + scope: 'Scope', + typeAllow: 'Allow', + typeDeny: 'Deny', + scopeProxy: 'Inference API', + scopeAdmin: 'Admin Console', + scopeAll: 'All (Admin + API)', + allowWarning: 'Allow rules restrict admin access. Ensure your current IP is included.', + added: 'Added', + }, + settings: { + title: 'Settings', + description: 'All runtime parameters are managed here — no config file required', + securitySession: 'Security & Session', + gatewayMonitor: 'Gateway & Monitoring', + changePassword: 'Change Admin Password', + encryptionKey: 'Encryption Key', + encryptionKeyPlaceholder: 'Leave empty to keep unchanged; must match old key to decrypt existing provider keys', + encryptionKeyCurrent: 'Current: {hint}', + sessionTtl: 'Session TTL (seconds)', + loginMaxAttempts: 'Max Login Attempts', + loginLockout: 'Login Lockout (seconds)', + trustedProxies: 'Trusted Proxy IPs / CIDRs', + trustedProxiesPlaceholder: 'One per line, e.g. 127.0.0.1 or 10.0.0.0/8', + usageFlush: 'Usage Flush Interval (seconds)', + healthCheck: 'Health Check Interval (seconds)', + gatewayMaxRetries: 'Gateway Max Retries', + retryBackoff: 'Retry Backoff (ms)', + saveSettings: 'Save Settings', + oldPassword: 'Current Password', + newPassword: 'New Password', + savePassword: 'Save Password', + settingsSaved: 'Settings saved', + passwordUpdated: 'Password updated', + }, +} diff --git a/web/src/i18n/locales/zh-CN.ts b/web/src/i18n/locales/zh-CN.ts new file mode 100644 index 0000000..90aaadc --- /dev/null +++ b/web/src/i18n/locales/zh-CN.ts @@ -0,0 +1,265 @@ +export default { + common: { + brand: 'Luminary', + cancel: '取消', + confirm: '确认', + save: '保存', + edit: '编辑', + create: '创建', + add: '添加', + delete: '删除', + refresh: '刷新', + query: '查询', + copy: '复制', + actions: '操作', + name: '名称', + status: '状态', + type: '类型', + enabled: '启用', + disabled: '禁用', + yes: '是', + no: '否', + all: '全部', + loading: '加载中...', + empty: '(空)', + dash: '—', + infinity: '∞', + confirmDelete: '确认删除?', + auto: '自动', + detail: '详情', + model: '模型', + requests: '请求', + tokens: 'Token', + cost: '费用 ($)', + latencyMs: '延迟 (ms)', + latency: '延迟', + stream: '流式', + error: '错误', + time: '时间', + username: '用户名', + password: '密码', + weight: '权重', + priority: '优先级', + category: '分类', + budget: '预算', + soon: '即将支持', + whitelistMore: '{items} 等 {count} 项', + language: '语言', + zh: '中文', + en: 'English', + }, + nav: { + dashboard: '看板监控', + providers: '出口管理', + ingress: '入口管理', + logs: '请求日志', + ipRules: 'IP 规则', + settings: '系统设置', + security: '安全', + logout: '退出登录', + }, + login: { + subtitle: 'AI 网关管理台', + title: '登录', + username: '用户名', + passwordPlaceholder: '请输入密码', + submit: '登录', + footer: 'Luminary Gateway — 统一 AI 出口与入口管理', + success: '登录成功', + failed: '登录失败,请检查用户名和密码', + rateLimited: '登录尝试过多,请稍后再试', + rateLimitedSec: '登录尝试过多,请 {sec} 秒后再试', + ipBlocked: '当前 IP 不在白名单内,无法访问管理台。请检查 IP 规则或联系管理员。', + }, + dashboard: { + title: '看板监控', + description: '实时查看网关请求量、错误率与 Provider 健康状态', + requests24h: '24h 请求量', + tokens24h: '24h Token', + errorRate: '错误率', + activeIngressKeys: '活跃入口密钥', + requestTrend: '24h 请求趋势', + tokenTrend: '24h Token 趋势', + seriesRequests: '请求量', + seriesErrors: '错误数', + seriesTokens: 'Token', + providerHealth: 'Provider 健康状态', + ingressTop5: '入口密钥用量 Top 5', + providerModelUsage: 'Provider + 模型用量 (24h)', + clientIpUsage: '客户端 IP 用量 (24h)', + clientIp: '客户端 IP', + requestCount: '请求数', + }, + providers: { + title: '出口管理', + description: '配置上游 Provider、接口路径与 API 密钥', + addProvider: '添加 Provider', + protocolType: '协议类型', + baseUrl: 'Base URL', + baseUrlPlaceholder: '留空使用默认', + enabledEndpoints: '已启用接口', + models: '模型', + modelsEmpty: '暂无模型,请点击「同步模型」从上游拉取', + displayName: '显示名称', + syncedAt: '同步时间', + addDialogTitle: '添加 Provider', + endpointConfig: '接口配置', + endpointConfigTitle: '接口配置 - {name}', + endpointDivider: '接口与 Path 配置', + endpointEditDivider: '启用接口与 Path 覆盖', + pathHint: 'Path 可为相对路径(基于 Base URL)或完整 URL(http/https 开头)', + keysTitle: '密钥管理 - {name}', + addKey: '添加密钥', + addKeyDialogTitle: '添加 Provider 密钥', + apiKey: 'API Key', + modelWhitelist: '模型白名单', + modelWhitelistPlaceholder: '["*"] 或 gpt-4o-mini', + maxRequestsPerDay: '日请求上限', + maxTokensPerDay: '日 Token 上限', + requestsToday: '今日请求', + modelsTitle: '模型列表 - {name}', + syncModels: '同步模型', + modelsSummary: '共 {total} 个模型,已启用 {enabled} 个', + modelsAction: '模型', + endpointsAction: '接口配置', + keysAction: '密钥', + modelNotLoaded: '模型数据未加载,请刷新页面后重试', + modelEnabled: '模型已启用', + modelDisabled: '模型已禁用', + modelNotFound: '模型不存在,请同步模型后重试', + updateFailed: '更新失败', + createSuccess: '创建成功', + saved: '已保存', + deleted: '已删除', + syncedCount: '同步 {count} 个模型', + syncFailed: '同步失败', + keyAdded: '密钥已添加', + providerEnabled: '出口已启用', + providerDisabled: '出口已暂停', + addWorkflowModel: 'Add Workflow Model', + addModel: '添加模型', + addModelDialogTitle: '手动添加模型', + modelAdded: '模型已添加', + modelDeleted: '模型已删除', + confirmDeleteModel: '确认删除此模型?', + workflowDialogTitle: '注册 Workflow 模型', + modelId: 'Model ID', + modelAlias: '入口别名', + modelAliasPlaceholder: '可选,入口 API 使用此名称', + modelAliasHint: '留空则入口使用上游 Model ID', + upstreamModelId: '上游 Model ID', + editModelDialogTitle: '编辑模型', + providerNameExists: '出口名称已存在', + modelAliasExists: '模型别名已存在', + workflowType: '类型', + txt2img: '文生图', + img2img: '图生图', + workflowJson: 'Workflow JSON', + analyzeWorkflow: '解析 Workflow', + workflowJsonRequired: '请先粘贴 Workflow JSON', + analyzeFailed: '解析失败', + modelIdRequired: '请填写 Model ID', + workflowSaved: 'Workflow 模型已保存', + paramName: '参数', + bindEnabled: '绑定', + targetNode: '目标节点', + targetField: '目标字段', + }, + ingress: { + title: '入口管理', + description: '创建与管理 Virtual Key,配置预算、限流与路由规则', + createKey: '创建入口密钥', + keyPrefix: '密钥前缀', + providerWhitelist: 'Provider 白名单', + modelWhitelist: 'Model 白名单', + budgetLimit: '预算上限', + rpmLimit: 'RPM 限制', + tpmLimit: 'TPM 限制', + whitelistAction: '白名单', + routingAction: '路由', + createDialogTitle: '创建入口密钥', + providerWhitelistPlaceholder: '不选表示允许全部 Provider', + modelWhitelistPlaceholder: '不选表示允许全部模型', + whitelistHint: '不选或清空表示允许全部', + modelWhitelistHint: '不选或清空表示允许全部;需先在出口管理同步模型', + editWhitelistTitle: '编辑白名单', + plainKeyTitle: '请保存密钥(仅显示一次)', + plainKeyWarning: '请立即复制保存,关闭后将无法再次查看完整密钥', + routingTitle: '路由规则 - {name}', + addRule: '添加规则', + modelPattern: '模型匹配', + modelPatternPlaceholder: 'gpt-4o* 或 claude-3-5-sonnet', + providerId: '出口', + providerIdPlaceholder: '选择出口', + keyIdOptional: '出口密钥', + keyIdPlaceholder: '留空则自动负载均衡', + providerRequired: '请选择出口', + addRuleTitle: '添加路由规则', + whitelistUpdated: '白名单已更新', + confirmDeleteKey: '确认删除此密钥?', + copied: '已复制', + ruleAdded: '规则已添加', + }, + logs: { + title: '请求日志', + description: '最近保留 500 条记录,含推理请求与管理台登录日志', + ingress: '入口', + endpoint: '接口', + modelOrUser: '模型 / 用户', + modelOrUserPlaceholder: '模型 / 用户名', + clientIpPlaceholder: '客户端 IP', + statusSuccess: '成功', + statusError: '失败', + endpointAdminLogin: '管理台登录', + pagerHint: '共 {total} 条,最多保留 {max} 条', + detailTitle: '请求详情', + requestBody: '请求内容', + responseBody: '响应内容', + predictionStatus: '生图任务状态', + }, + ipRules: { + title: 'IP 规则', + description: '配置管理台与推理 API 的 IP 白名单 / 黑名单', + addRule: '添加 IP 规则', + cidr: 'CIDR / IP', + cidrPlaceholder: '192.168.1.0/24 或 127.0.0.1', + scope: '范围', + typeAllow: '允许 (allow)', + typeDeny: '拒绝 (deny)', + scopeProxy: '推理 API', + scopeAdmin: '管理台', + scopeAll: '全部(管理台 + API)', + allowWarning: '允许规则会限制管理台访问,请确保已包含你当前的 IP。', + added: '已添加', + }, + settings: { + title: '系统设置', + description: '所有运行参数在管理台维护,无需配置文件即可启动', + securitySession: '安全与会话', + gatewayMonitor: '网关与监控', + changePassword: '修改管理员密码', + encryptionKey: '加密密钥', + encryptionKeyPlaceholder: '留空则不修改;修改后需与旧密钥一致才能解密已有 Provider Key', + encryptionKeyCurrent: '当前:{hint}', + sessionTtl: '会话有效期(秒)', + loginMaxAttempts: '登录最大尝试次数', + loginLockout: '登录锁定时长(秒)', + trustedProxies: '信任代理 IP/CIDR', + trustedProxiesPlaceholder: '每行一个,例如 127.0.0.1 或 10.0.0.0/8', + usageFlush: '用量刷盘间隔(秒)', + healthCheck: '健康检查间隔(秒)', + gatewayMaxRetries: '网关最大重试次数', + retryBackoff: '重试退避(毫秒)', + imageStorage: '图像存储', + imageStoragePath: '存储目录(相对 data-dir)', + publicBaseUrl: '对外 Base URL', + signedUrlTtl: '签名 URL 有效期(秒)', + predictionWait: 'Prefer:wait 最长等待(秒)', + saveSettings: '保存系统设置', + oldPassword: '旧密码', + newPassword: '新密码', + savePassword: '保存密码', + settingsSaved: '系统设置已保存', + passwordUpdated: '密码已更新', + }, +} diff --git a/web/src/layouts/MainLayout.vue b/web/src/layouts/MainLayout.vue new file mode 100644 index 0000000..305be22 --- /dev/null +++ b/web/src/layouts/MainLayout.vue @@ -0,0 +1,97 @@ + + + diff --git a/web/src/main.ts b/web/src/main.ts new file mode 100644 index 0000000..4540a91 --- /dev/null +++ b/web/src/main.ts @@ -0,0 +1,29 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus, { ElDialog, ElDrawer } from 'element-plus' +import 'element-plus/dist/index.css' +import '@/styles/theme.css' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import App from './App.vue' +import router from './router' +import { i18n } from './i18n' + +function disableOverlayClose(component: typeof ElDialog) { + const props = component.props as Record + if (props.closeOnClickModal) { + props.closeOnClickModal.default = false + } +} + +disableOverlayClose(ElDialog) +disableOverlayClose(ElDrawer) + +const app = createApp(App) +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} +app.use(createPinia()) +app.use(i18n) +app.use(router) +app.use(ElementPlus) +app.mount('#app') diff --git a/web/src/router/index.ts b/web/src/router/index.ts new file mode 100644 index 0000000..c5ce8ad --- /dev/null +++ b/web/src/router/index.ts @@ -0,0 +1,40 @@ +import { createRouter, createWebHistory } from 'vue-router' +import Layout from '@/layouts/MainLayout.vue' + +const router = createRouter({ + history: createWebHistory(), + routes: [ + { + path: '/login', + name: 'login', + component: () => import('@/views/LoginView.vue'), + }, + { + path: '/', + component: Layout, + redirect: '/dashboard', + children: [ + { path: 'dashboard', name: 'dashboard', component: () => import('@/views/DashboardView.vue') }, + { path: 'egress/providers', name: 'providers', component: () => import('@/views/ProvidersView.vue') }, + { path: 'ingress/keys', name: 'ingress-keys', component: () => import('@/views/IngressKeysView.vue') }, + { path: 'logs', name: 'logs', component: () => import('@/views/RequestLogsView.vue') }, + { path: 'security/ip-rules', name: 'ip-rules', component: () => import('@/views/IPRulesView.vue') }, + { path: 'security/settings', name: 'settings', component: () => import('@/views/SettingsView.vue') }, + ], + }, + ], +}) + +router.beforeEach(async (to) => { + if (to.name === 'login') return true + try { + const res = await fetch('/api/admin/auth/status', { credentials: 'include' }) + const data = await res.json() + if (!data.authenticated) return '/login' + } catch { + return '/login' + } + return true +}) + +export default router diff --git a/web/src/styles/theme.css b/web/src/styles/theme.css new file mode 100644 index 0000000..8040887 --- /dev/null +++ b/web/src/styles/theme.css @@ -0,0 +1,602 @@ +:root { + --background: #f4f4f5; + --foreground: #18181b; + --card: #ffffff; + --card-foreground: #18181b; + --primary: #0f7a62; + --primary-hover: #0d6b56; + --primary-foreground: #fafafa; + --muted: #f4f4f5; + --muted-foreground: #71717a; + --border: #e4e4e7; + --input: #e4e4e7; + --destructive: #dc2626; + --success: #047857; + --warning: #b45309; + --danger: #dc2626; + --info: #a1a1aa; + --sidebar: rgba(250, 250, 250, 0.85); + --sidebar-foreground: #18181b; + --sidebar-accent: #f4f4f5; + --sidebar-border: #e4e4e7; + --sidebar-width: 15rem; + --radius: 0.5rem; + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + + --el-color-primary: #0f7a62; + --el-color-primary-light-3: #4da08c; + --el-color-primary-light-5: #76b8a8; + --el-color-primary-light-7: #a0d0c4; + --el-color-primary-light-8: #b8dcd2; + --el-color-primary-light-9: #d0e8e1; + --el-color-primary-dark-2: #0c624e; + --el-color-success: #047857; + --el-color-warning: #b45309; + --el-color-danger: #dc2626; + --el-color-info: #a1a1aa; + --el-border-radius-base: 0.5rem; + --el-border-color: #e4e4e7; + --el-bg-color-page: #f4f4f5; + --el-text-color-primary: #18181b; + --el-text-color-regular: #3f3f46; + --el-text-color-secondary: #71717a; + --el-font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif; +} + +* { box-sizing: border-box; } + +html, body, #app { + margin: 0; + padding: 0; + height: 100%; + font-size: 14px; + font-family: var(--el-font-family); + background: var(--background); + color: var(--foreground); +} + +.layout { + display: flex; + height: 100vh; +} + +.sidebar { + width: var(--sidebar-width); + flex-shrink: 0; + background: var(--sidebar); + border-right: 1px solid var(--sidebar-border); + backdrop-filter: blur(8px); + display: flex; + flex-direction: column; + overflow-y: auto; +} + +.sidebar-brand { + display: flex; + align-items: center; + gap: var(--space-3); + padding: var(--space-5) var(--space-4); +} + +.brand-icon { + width: 32px; + height: 32px; + border-radius: var(--radius); + background: var(--primary); + color: var(--primary-foreground); + display: flex; + align-items: center; + justify-content: center; +} + +.brand-name { + font-size: 1.125rem; + font-weight: 600; +} + +.nav-group-label { + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--muted-foreground); + padding: var(--space-4) var(--space-4) var(--space-2); +} + +.nav-item { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-2) var(--space-3); + margin: 0 var(--space-2); + border-radius: var(--radius); + color: var(--muted-foreground); + text-decoration: none; + font-size: 0.875rem; + font-weight: 500; +} + +.nav-item:hover { background: var(--sidebar-accent); } + +.nav-item.active { + background: var(--sidebar-accent); + color: var(--primary); + font-weight: 600; +} + +.main-area { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; +} + +.topbar { + height: 52px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 var(--space-6); + background: var(--card); + border-bottom: 1px solid var(--border); +} + +.topbar-title { + font-size: 0.875rem; + color: var(--muted-foreground); +} + +.main-content { + flex: 1; + overflow-y: auto; + padding: var(--space-6); +} + +.page { + max-width: 1400px; +} + +.page-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: var(--space-6); + gap: var(--space-4); +} + +.page-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-shrink: 0; + flex-wrap: wrap; +} + +.page-title { + font-size: 1.5rem; + font-weight: 600; + letter-spacing: -0.02em; + margin: 0 0 var(--space-1); +} + +.page-desc { + font-size: 0.875rem; + color: var(--muted-foreground); + margin: 0; +} + +.stat-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.stat-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-5); +} + +.stat-card__label { + font-size: 0.875rem; + color: var(--muted-foreground); + margin-bottom: var(--space-2); +} + +.stat-card__value { + font-size: 1.75rem; + font-weight: 600; +} + +.app-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + margin-bottom: var(--space-4); +} + +.page > .app-card:last-child, +.page > .content-grid:last-child { + margin-bottom: 0; +} + +.app-card__header { + padding: var(--space-4) var(--space-5); + border-bottom: 1px solid var(--border); +} + +.app-card__title { + font-size: 0.9375rem; + font-weight: 600; + margin: 0; +} + +.app-card__body--padded { padding: var(--space-5); } + +.content-grid { + display: grid; + gap: var(--space-4); + margin-bottom: var(--space-6); +} + +.content-grid--2-1 { grid-template-columns: 1.4fr 1fr; } +.content-grid--2 { grid-template-columns: 1fr 1fr; } +.content-grid--3 { grid-template-columns: repeat(3, 1fr); } + +.card-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-4) var(--space-5) 0; + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.card-toolbar--desc { + align-items: flex-start; +} + +.card-pager { + padding: var(--space-4) var(--space-5); + display: flex; + justify-content: flex-end; +} + +.card-footer-hint { + padding: 0 var(--space-5) var(--space-3); + margin: 0; +} + +.card-footer-hint + .card-pager { + padding-top: var(--space-3); +} + +.card-inset-block { + margin: 0 var(--space-5) var(--space-4); + padding: var(--space-3); + background: var(--muted); + border-radius: var(--radius); + font-size: 0.875rem; +} + +.tabs-bar { + padding: 0 var(--space-5); + border-bottom: 1px solid var(--border); +} + +.tabs-bar .el-tabs__header { margin-bottom: 0; } + +.page-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.inline-actions { + display: flex; + align-items: center; + gap: var(--space-2); + flex-wrap: wrap; +} + +.card-header-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-4); +} + +.form-hint { + margin-top: 6px; + font-size: 0.75rem; + color: var(--muted-foreground); +} + +.form-hint--flush { margin-top: 0; } + +.u-mt-3 { margin-top: var(--space-3); } +.u-mt-4 { margin-top: var(--space-4); } +.u-mb-3 { margin-bottom: var(--space-3); } +.u-mb-4 { margin-bottom: var(--space-4); } +.u-mb-6 { margin-bottom: var(--space-6); } +.text-center { text-align: center; } +.w-full { width: 100%; } + +code.inline-code { + font-size: 0.75rem; + padding: 0 var(--space-1); + background: var(--muted); + border-radius: var(--radius); +} + +.section-title { + font-size: 0.875rem; + font-weight: 600; + margin-bottom: var(--space-4); +} + +.section-title:not(:first-child) { margin-top: var(--space-6); } + +.login-page { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: var(--background); + padding: var(--space-6); +} + +.login-wrap { max-width: 400px; width: 100%; text-align: center; } + +.login-brand-icon { + width: 48px; + height: 48px; + border-radius: 12px; + background: var(--primary); + color: var(--primary-foreground); + display: inline-flex; + align-items: center; + justify-content: center; + margin-bottom: var(--space-4); +} + +.login-card { + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: var(--space-8); + margin-top: var(--space-6); + text-align: left; +} + +.status-good { color: #047857; } +.status-warn { color: #b45309; } +.status-bad { color: #dc2626; } +.status-muted { color: var(--muted-foreground); } + +.toolbar-select { width: 120px; } +.toolbar-select--country { width: 160px; } +.toolbar-select--wide { width: 280px; } +.toolbar-input { width: 200px; } +.toolbar-input--wide { width: 260px; } +.toolbar-input--grow { flex: 1; min-width: 200px; } +.table-cell-select { width: 100%; min-width: 200px; } + +.el-form .el-select { width: 100%; } + +.app-card .el-table { + --el-table-header-bg-color: var(--muted); + font-size: 0.875rem; +} + +.app-card .el-table--small .el-table__cell { + padding: var(--space-2) var(--space-3); +} + +.app-card .el-table--small th.el-table__cell { + font-size: 0.75rem; + font-weight: 600; + color: var(--muted-foreground); +} + +.app-card .el-table--small td.el-table__cell { + color: var(--el-text-color-regular); +} + +.app-card .el-table--small .el-table__row { + height: 40px; +} + +.app-card .el-table .el-button.is-link { + padding: 0; + height: auto; +} + +.app-card .el-table .cell { + line-height: 1.4; +} + +.table-scroll--sm { max-height: 320px; } +.table-scroll--md { max-height: 360px; } +.table-scroll--lg { max-height: 480px; } + +.card-toolbar .toolbar-input--grow { + flex: 1; + min-width: 200px; +} + +.card-pager .el-pagination { + font-size: 0.875rem; +} + +.kv-block p { + margin: 0 0 var(--space-2); +} + +.kv-block p:last-child { + margin-bottom: 0; +} + +.kv-block .label { + display: inline-block; + width: 5rem; + color: var(--muted-foreground); +} + +.kv-block code { + font-size: 0.8125rem; +} + +.cell-stack { + display: flex; + flex-direction: column; + gap: var(--space-2); + width: 100%; +} + +.meta-list { + margin: 0; + padding: 0; + list-style: none; + font-size: 0.8125rem; + color: var(--muted-foreground); +} + +.meta-list li { + display: flex; + justify-content: space-between; + gap: var(--space-3); + padding: var(--space-1) 0; +} + +.meta-list__mono { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; +} + +.meta-list__ok { color: var(--el-color-success); } +.meta-list__warn { color: var(--el-color-warning); } + +.chart-box { + height: 280px; +} + +.custom-scrollbar { + scrollbar-width: thin; + scrollbar-color: #e4e4e7 transparent; +} + +.custom-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background: #e4e4e7; + border-radius: 3px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: transparent; +} + +/* Luminary app extensions */ +.page-form { + max-width: 800px; +} + +.page-form--narrow { + max-width: 480px; +} + +.page > .page-form + .app-card, +.page > .page-form + .page-form { + margin-top: var(--space-4); +} + +.settings-form.el-form .el-form-item { + margin-bottom: var(--space-5); +} + +.settings-form.el-form .el-input-number { + width: 200px; +} + +.form-hint--destructive { + color: var(--destructive); +} + +.drawer-toolbar { + display: flex; + align-items: center; + gap: var(--space-2); + margin-bottom: var(--space-4); + flex-wrap: wrap; +} + +.el-drawer__body .card-inset-block { + margin-left: 0; + margin-right: 0; +} + +.el-drawer__body pre.card-inset-block { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + font-size: 0.8125rem; + line-height: 1.5; + max-height: 320px; + overflow: auto; + white-space: pre-wrap; + word-break: break-all; + border: 1px solid var(--border); +} + +.models-expand { + padding: var(--space-3) var(--space-6) var(--space-4) 48px; + background: var(--muted); +} + +.models-empty { + color: var(--muted-foreground); + font-size: 0.875rem; +} + +.models-table { + background: var(--card); +} + +.endpoint-row { + display: grid; + grid-template-columns: 200px 1fr; + gap: var(--space-3); + align-items: center; + margin-bottom: var(--space-3); +} + +.ep-tag { + margin: var(--space-1); +} + +.soon-tag { + margin-left: var(--space-2); +} + +@media (max-width: 1024px) { + .stat-grid { grid-template-columns: repeat(2, 1fr); } + .content-grid--2-1, + .content-grid--2, + .content-grid--3 { grid-template-columns: 1fr; } +} + +@media (max-width: 640px) { + .stat-grid { grid-template-columns: 1fr; } + .main-content { padding: var(--space-4); } + .page-header { flex-direction: column; } +} diff --git a/web/src/utils/chartTheme.ts b/web/src/utils/chartTheme.ts new file mode 100644 index 0000000..e81f745 --- /dev/null +++ b/web/src/utils/chartTheme.ts @@ -0,0 +1,64 @@ +import type { EChartsOption, LineSeriesOption } from 'echarts' + +/** Design system §6.16 chart palette */ +export const CHART_COLORS = { + primary: '#0f7a62', + secondary: '#71717a', + series: ['#0f7a62', '#71717a', '#4da08c', '#76b8a8', '#a0d0c4'] as const, + axis: '#71717a', + splitLine: '#e4e4e7', +} + +export const CHART_GRID = { left: 40, right: 16, top: 16, bottom: 28 } + +export function axisStyle() { + return { + axisLabel: { color: CHART_COLORS.axis, fontSize: 12 }, + axisLine: { lineStyle: { color: CHART_COLORS.splitLine } }, + } +} + +export function lineSeries( + name: string, + data: number[], + colorIndex = 0, +): LineSeriesOption { + return { + name, + type: 'line', + smooth: true, + data, + color: CHART_COLORS.series[colorIndex] ?? CHART_COLORS.primary, + lineStyle: { width: 2 }, + showSymbol: false, + } +} + +export function buildTrendChartOption(params: { + labels: string[] + series: Array<{ name: string; data: number[]; colorIndex?: number }> +}): EChartsOption { + return { + color: [...CHART_COLORS.series], + grid: CHART_GRID, + tooltip: { trigger: 'axis' }, + legend: { + bottom: 0, + textStyle: { fontSize: 12, color: CHART_COLORS.axis }, + }, + xAxis: { + type: 'category', + data: params.labels, + boundaryGap: false, + ...axisStyle(), + }, + yAxis: { + type: 'value', + ...axisStyle(), + splitLine: { lineStyle: { color: CHART_COLORS.splitLine } }, + }, + series: params.series.map((s, i) => + lineSeries(s.name, s.data, s.colorIndex ?? i), + ), + } +} diff --git a/web/src/utils/format.ts b/web/src/utils/format.ts new file mode 100644 index 0000000..6f3a8d0 --- /dev/null +++ b/web/src/utils/format.ts @@ -0,0 +1,23 @@ +export function formatDateTime(value?: string | null): string { + if (!value) return '—' + const d = new Date(value) + if (Number.isNaN(d.getTime())) return value + const pad = (n: number) => String(n).padStart(2, '0') + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}` +} + +export function formatChartHour(value: string, locale: string): string { + const d = new Date(value.replace(' ', 'T')) + if (Number.isNaN(d.getTime())) return value + const pad = (n: number) => String(n).padStart(2, '0') + if (locale === 'zh-CN') { + return `${pad(d.getMonth() + 1)}/${pad(d.getDate())} ${pad(d.getHours())}:00` + } + return `${pad(d.getHours())}:00` +} + +export function formatNumberCompact(n: number): string { + if (n >= 1_000_000) return (n / 1_000_000).toFixed(1) + 'M' + if (n >= 1_000) return (n / 1_000).toFixed(1) + 'K' + return String(n) +} diff --git a/web/src/views/DashboardView.vue b/web/src/views/DashboardView.vue new file mode 100644 index 0000000..cd1d041 --- /dev/null +++ b/web/src/views/DashboardView.vue @@ -0,0 +1,166 @@ + + + diff --git a/web/src/views/IPRulesView.vue b/web/src/views/IPRulesView.vue new file mode 100644 index 0000000..4c15321 --- /dev/null +++ b/web/src/views/IPRulesView.vue @@ -0,0 +1,92 @@ + + + diff --git a/web/src/views/IngressKeysView.vue b/web/src/views/IngressKeysView.vue new file mode 100644 index 0000000..ff19563 --- /dev/null +++ b/web/src/views/IngressKeysView.vue @@ -0,0 +1,462 @@ + + + diff --git a/web/src/views/LoginView.vue b/web/src/views/LoginView.vue new file mode 100644 index 0000000..5967732 --- /dev/null +++ b/web/src/views/LoginView.vue @@ -0,0 +1,65 @@ + + + diff --git a/web/src/views/ProvidersView.vue b/web/src/views/ProvidersView.vue new file mode 100644 index 0000000..b48948f --- /dev/null +++ b/web/src/views/ProvidersView.vue @@ -0,0 +1,716 @@ + + + diff --git a/web/src/views/RequestLogsView.vue b/web/src/views/RequestLogsView.vue new file mode 100644 index 0000000..7ad2e70 --- /dev/null +++ b/web/src/views/RequestLogsView.vue @@ -0,0 +1,299 @@ + + + diff --git a/web/src/views/SettingsView.vue b/web/src/views/SettingsView.vue new file mode 100644 index 0000000..6ee996e --- /dev/null +++ b/web/src/views/SettingsView.vue @@ -0,0 +1,221 @@ + + + diff --git a/web/src/vite-env.d.ts b/web/src/vite-env.d.ts new file mode 100644 index 0000000..323c78a --- /dev/null +++ b/web/src/vite-env.d.ts @@ -0,0 +1,7 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/web/static_embed.go b/web/static_embed.go new file mode 100644 index 0000000..d7dd86e --- /dev/null +++ b/web/static_embed.go @@ -0,0 +1,8 @@ +package webembed + +import "embed" + +// Placeholder dist/index.html is committed for CI and go test; production UI comes from npm run build. +// +//go:embed all:dist +var WebFS embed.FS diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..4b2626e --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "paths": { "@/*": ["./src/*"] }, + "baseUrl": "." + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/web/vite.config.ts b/web/vite.config.ts new file mode 100644 index 0000000..92efddf --- /dev/null +++ b/web/vite.config.ts @@ -0,0 +1,23 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import { fileURLToPath, URL } from 'node:url' + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + build: { + outDir: 'dist', + emptyOutDir: true, + }, + server: { + port: 5173, + proxy: { + '/api': { target: 'http://localhost:8293', changeOrigin: true }, + '/v1': { target: 'http://localhost:8293', changeOrigin: true }, + }, + }, +})

a%QPe@I6mh$&n08kF~R@4r@XrHL2}KNgs&)9#cn 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