wangbo
|
5d8ed1f293
|
fix(deploy): 固定证书同步的香港 SSH Host Key
通过已认证的香港管理连接读取 Ed25519 host 公钥,将 WireGuard 地址 10.77.0.2 的精确键写入宁波 known_hosts,再执行证书同步;不关闭 StrictHostKeyChecking。
验证:远端 host key 格式解析、bash -n、ShellCheck,首次同步因缺少 known_hosts 的现场复现。
|
2026-07-28 05:53:00 +08:00 |
|
wangbo
|
1c0c298267
|
fix(deploy): 放宽数据库 Operator 首次拉取超时
CNPG 与 Barman Cloud 的固定镜像经跨境 mirror 首次拉取可能超过 180 秒,将 rollout 门限提升到 600 秒;cert-manager 保持原 180 秒快速门禁。
验证:CNPG 已实际 Ready,Barman 证书与插件注册正常且事件显示仅处于镜像拉取。
|
2026-07-28 05:17:25 +08:00 |
|
wangbo
|
6d7b2e88ba
|
fix(deploy): 递归验证 containerd Registry 主机配置
K3s 1.36 将 Registry 镜像端点生成在 containerd/certs.d 子目录;验收改为递归检查整个 containerd 配置树,并继续以实际拉取 pause 镜像作为最终门禁。
验证:洛杉矶节点 Ready,三个 hosts.toml 端点存在,pause 镜像拉取成功。
|
2026-07-28 05:07:23 +08:00 |
|
wangbo
|
95ddfb2a04
|
fix(deploy): 为 K3s 配置容器镜像端点
三节点 containerd 增加 Docker Hub、GHCR 与 Quay 的 DaoCloud 镜像端点,解决生产节点直连公共 Registry 超时导致 Pod sandbox 无法创建的问题。
新增逐节点滚动刷新脚本,每次等待节点重新 Ready 并实际拉取 pause 镜像后才继续,避免同时重启 etcd 成员。初始 K3s 安装也会预置同一 registries.yaml。
验证:三节点镜像端点均返回 Registry 认证响应,bash -n、ShellCheck。
|
2026-07-28 05:05:33 +08:00 |
|
wangbo
|
44915c1343
|
fix(deploy): 使用 Server-Side Apply 安装大型 CRD
cert-manager、CloudNativePG 与 Barman 清单改用 server-side apply,避免 CNPG CRD 的 last-applied annotation 超过 Kubernetes 256KiB 限制;force-conflicts 仅用于已固定 checksum 的 operator 清单。
验证:cert-manager 组件已实际滚动成功,CNPG 客户端 apply 在 annotation 门禁处复现。
|
2026-07-28 05:00:52 +08:00 |
|
wangbo
|
19ce2d4272
|
fix(deploy): 保留 Kustomize digest 行缩进
替换真实 release manifest 的 API/Web digest 时固定输出 Kustomization 所需的四空格缩进,避免 awk 字段重建破坏 YAML。
验证:使用已发布 971540a 完整 manifest 实际渲染 696 行清单,确认所有应用镜像均为非零 digest。
|
2026-07-28 04:59:43 +08:00 |
|
wangbo
|
d342462a3d
|
fix(deploy): 兼容 macOS Bash 3.2 下载平台清单
将 operator URL 与固定 SHA-256 从关联数组改为并行索引数组,避免 macOS Bash 3.2 将带连字符的文件名解析为算术变量。远端资源复制前仍逐项校验 checksum。
验证:bash -n、ShellCheck、Bash 3.2 索引遍历。
|
2026-07-28 04:59:04 +08:00 |
|
wangbo
|
4e60bf1c64
|
fix(deploy): 本地校验并分发固定 K3s 二进制
生产节点访问 GitHub Release 失败时,改由本机下载 v1.36.2+k3s1 amd64 二进制,使用固定官方 SHA-256 校验后分发到三节点,再让官方安装器跳过远端下载。
同时将运行手册顺序改为先完成公网端口隔离,再安装 K3s。
验证:bash -n、ShellCheck、官方 checksum 获取与节点失败现场。
|
2026-07-28 04:50:54 +08:00 |
|
wangbo
|
85e14f2cb8
|
fix(deploy): 过滤 WireGuard 安装阶段标准输出
节点首次安装 wireguard-tools 时 apt 输出会混入公钥命令替换,导致格式门禁误判并安全停止。仅取远端输出最后一行作为公钥,同时保留原有长度和字符校验。
验证:bash -n、ShellCheck、远端公钥长度与权限只读检查。
|
2026-07-28 04:40:26 +08:00 |
|
wangbo
|
971540a2a4
|
feat(deploy): 增加三节点 K3s 高可用迁移能力
新增 WireGuard 全互联、三 server embedded-etcd K3s、CloudNativePG 双实例、Barman OSS 备份、双 NGINX、Kubernetes Secret/RBAC 与本地旧文件按严格 24 小时清理。
新增维护窗口数据迁移、digest 固定滚动发布、应用回滚、跨节点文件 E2E、节点和数据库故障演练、CNPG 恢复与 etcd 快照验收脚本;洛杉矶仅作为带 NoSchedule 污点的仲裁节点。
所有生产 Secret 只在执行时从 0600 本地环境和旧生产容器导入,仓库不保存凭据;公网入口保持人工 DNS 故障切换边界。
验证:bash -n、ShellCheck、kubectl kustomize、Node 语法检查、Secret 扫描、OSS put/head/delete 实测。
|
2026-07-28 04:37:31 +08:00 |
|
wangbo
|
edf7e66941
|
feat(cluster): 增加跨节点任务执行与请求素材场景
新增 AI_GATEWAY_ASYNC_QUEUE_WORKER_ENABLED,默认保持启用;关闭时仅停止 River 异步任务执行器,HTTP、健康检查、结算与其他后台任务继续运行。
新增 0089 迁移并同步管理端默认场景,将 request_asset 加入现有上传渠道,确保 multipart 请求素材先转换为跨节点共享 URL。
验证:gofmt、go test ./... -count=1、go vet ./...、pnpm lint、pnpm test、pnpm build、迁移测试。
|
2026-07-28 04:36:58 +08:00 |
|
wangbo
|
2c7f8c14eb
|
chore(release): 明确生产发布授权并支持集群发布
将发布与上线授权边界调整为一次明确的生产发布指令可连续执行 publish 和 deploy,同时保留仅构建镜像时的停止边界。
为现有发布脚本增加 compose/kubernetes helper 选择和显式 SSH 私钥支持,保持完整 SHA、digest 与生产基线校验不变。
验证:bash -n、ShellCheck、manual-release-test。
|
2026-07-28 04:36:53 +08:00 |
|
wangbo
|
31565af07a
|
refactor(runner): 收敛上游失败决策与轮转策略
将同平台重试、跨平台动作、健康副作用和冷却排队统一到单一失败决策,避免旧降级策略与 failover 重复执行。\n\n增加事务级单源保护、候选实时刷新、冷却错误契约、管理接口严格校验及兼容策略只读展示。\n\n验证:真实 Gateway HTTP/PostgreSQL 接受测试 10 项通过;go test ./...、pnpm openapi、pnpm lint、pnpm test、pnpm build 均通过。
|
2026-07-27 23:50:17 +08:00 |
|
wangbo
|
046c16fc69
|
fix(audio): 兼容百炼 OpenAI 音频输入
为阿里云百炼 OpenAI-compatible Chat 统一保留标准 input_audio,并将旧版 audio_url 转换为 input_audio,同时根据 MIME 或扩展名补齐音频格式。
补充请求资产水合测试,确认 input_audio.data 会转换为裸 Base64 且保留 format。
验证:在 apps/api 执行 env -u AI_GATEWAY_TEST_DATABASE_URL go test ./... -count=1 全部通过。
|
2026-07-27 23:50:17 +08:00 |
|
wangbo
|
95776c84f6
|
fix(media): 规范比例与 OpenAI 图像尺寸参数
统一过滤非 x:x 比例,避免默认值参与候选匹配或透传上游。
支持 xK 分辨率归一化,并按 Gemini、Volces 和 OpenAI 的参数规范生成上游请求;OpenAI 显式 WxH 始终保留用户原始尺寸。
验证:在独立临时 worktree 中执行 apps/api 全量 go test ./... -count=1 通过,真实 OpenAI 请求已到达上游但受本地无效凭据阻断。
|
2026-07-27 23:50:17 +08:00 |
|
wangbo
|
039220c835
|
feat(models): 注册 Kimi K3 和 Qwen3.8
|
2026-07-27 23:50:17 +08:00 |
|
chengcheng
|
31c32690b2
|
feat(models): 支持按使用场景筛选模型
Gateway 模型接口校验 usage_scene,并与 server-main 严格场景目录取交集;显式场景查询在上游不可用时关闭失败,避免返回不应暴露的模型。\n\n验证:env -u AI_GATEWAY_TEST_DATABASE_URL go test ./... -count=1
|
2026-07-27 13:15:23 +08:00 |
|
wangbo
|
de10875439
|
feat(admin): 优化后台运维与任务管理
完善平台、基准模型、定价规则和实时负载的紧凑查询与滚动展示,并固定关键操作列。
新增管理员任务记录、批量计费结算和用户组限流、额度及模型权限维护能力,同时补充任务脱敏、查询索引与 OpenAPI 契约。
验证:pnpm openapi、Go 全量测试、pnpm lint、pnpm test、pnpm build、gofmt 与差异格式检查均通过。
|
2026-07-25 01:32:49 +08:00 |
|
wangbo
|
b29d539d49
|
feat(database): 优化开发环境数据库连接配置逻辑
- 添加 database_url_targets_local_port 函数验证数据库URL端口匹配
- 新增 database_url_matches_container 变量标识数据库URL与容器匹配状态
- 更新 postgres_port 变量获取容器实际端口值
- 重构数据库URL配置条件判断逻辑
- 添加容器凭证刷新提示信息
- 优化Docker数据库创建条件判断流程
|
2026-07-24 23:54:31 +08:00 |
|
wangbo
|
152885bbb6
|
fix(routing): 对齐缓存亲和力硬规则与审计
|
2026-07-24 23:51:27 +08:00 |
|
easyai
|
d7a0ec56f5
|
feat(web): 支持登录密码显示与隐藏
原因:登录时缺少密码可见性切换,长密码输入难以核对。
影响:新增可复用 PasswordInput,在登录表单提供眼睛按钮,并补充禁用态、焦点样式和无障碍标签。
风险:密码仅在用户主动点击时于当前输入框显示,不改变提交、存储或日志行为。
验证:前端 112 项测试通过;pnpm lint 通过;@easyai-ai-gateway/web 生产构建通过。
|
2026-07-24 23:27:28 +08:00 |
|
easyai
|
1fc80ffe23
|
test(http): 防止集成测试误用非测试数据库
原因:共享迁移辅助函数会直接对 AI_GATEWAY_TEST_DATABASE_URL 指向的数据库执行迁移,需要在任何写入前阻止误连非测试库。
影响:HTTP 集成测试仅允许名称明确包含 test 边界的数据库;不影响未配置数据库环境变量时的普通单元测试。
风险:自定义测试库名称若不符合规则会被拒绝,需要改用 test、test_*、*_test 或包含 _test_ 的名称。
验证:gofmt 无差异;env -u AI_GATEWAY_TEST_DATABASE_URL go test ./... -count=1 通过。
|
2026-07-24 23:27:17 +08:00 |
|
wangbo
|
a2ed32447a
|
fix(storage): 补齐嵌套结果二进制转存
生产真实 Gemini 图片任务可能在标准 data 之外保留嵌套 Base64,导致最终持久化关口拒绝任务成功。\n\n在所有生成结果返回前统一执行递归转存,并对仍未被常规媒体转换识别的二进制回退到本地结果物化,确保 PostgreSQL 不接收原始二进制。\n\n验证:go test ./... -count=1;go vet ./...;使用生产 Gemini Flash Image 平台配置完成本地真实图片编辑请求,文件哈希一致且持久化结果无内联二进制。
|
2026-07-24 21:57:52 +08:00 |
|
wangbo
|
4f163ea6d7
|
perf(storage): 拦截任务二进制并本地暂存结果
原因:任务标准结果中的 Base64、Data URI 和 Buffer 会进入 PostgreSQL JSON,导致 TOAST 与备份体积快速增长。
影响:新增统一 JSON 持久化关口;upload_none 将二进制原子写入本地结果目录,数据库仅保存带 SHA-256 的有界占位符;任务详情、同步响应、异步查询和兼容协议按需校验恢复。补充 24 小时清理、容量上限、历史小批量治理命令及管理端说明。
风险:本地结果超过 TTL、丢失或损坏时分别返回明确的 410/500;空间不足时返回 503 且不重试上游。未自动执行历史治理。
验证:三种真实图片模型同步/异步与幂等重放通过;Go vet/全量测试、前端 111 测试、lint/typecheck/build、OpenAPI、迁移安全、govulncheck、依赖审计、手工发布测试及 Linux amd64 构建通过。
|
2026-07-24 21:13:09 +08:00 |
|
wangbo
|
2457de6a56
|
chore(release): 重新生成生产发布基线
首次发布时当前会话未加载生产 SSH 身份,导致 release manifest 无法记录现网基线。创建空提交生成新的不可变镜像 Tag,并在读取真实生产 release 后重新执行完整发布门禁;不包含源码变化。
|
2026-07-24 18:35:33 +08:00 |
|
wangbo
|
810dcfeee6
|
perf(storage): 极简化任务历史并增加保留治理
停止持久化 provider 原始响应、兼容响应快照、attempt/event/outbox 重复 JSON,并由标准任务结果动态生成 Kling/Keling/Volces 兼容响应。
增加事件去重与预算、极简 callback 投递、7/30 天分批清理、安全删除条件、并发迁移索引及可实际恢复的任务域排除备份。历史清理默认关闭,待兼容协议和异步恢复在线验证后单独启用。
验证:Go 全量测试与 go vet、PostgreSQL 18 集成与实际备份恢复、迁移安全测试、bash -n、ShellCheck、Compose 配置和人工发布脚本测试均通过。
|
2026-07-24 18:23:22 +08:00 |
|
wangbo
|
09375bfae7
|
fix(queue): 移除未配置的 GPT 图像并发上限
|
2026-07-24 17:03:28 +08:00 |
|
wangbo
|
20945dbbcb
|
fix(runner): 延长媒体上游请求超时
图像生成上游同步响应可能超过 120 秒,原共享 HTTP 客户端会把仍在处理的提交标记为结果不确定。将客户端超时调整为 10 分钟,并增加回归测试;任务执行仍由现有租约、任务超时和取消机制约束。\n\n验证:\n- env -u AI_GATEWAY_TEST_DATABASE_URL go test ./internal/runner -run 'TestProviderHTTPClientTimeoutAllowsLongRunningMediaRequests|TestPlatformProxyMode' -count=1\n- env -u AI_GATEWAY_TEST_DATABASE_URL go test ./... -count=1
|
2026-07-24 13:42:47 +08:00 |
|
wangbo
|
6c5daf29ca
|
perf(queue): 按策略动态扩缩异步 Worker
将 River 执行容量按平台模型与用户组的有效并发策略动态调整,并为长任务续租、并发租约原子抢占和限流退避补充保护。\n\n统一平台模型限流继承语义,兼容历史 platformLimits/modelLimits,并为三个迁移图像模型建立独立并发租约。补充管理端显式继承/覆盖配置、指标、单元测试及隔离 PostgreSQL 验收。\n\n验证:go test ./... -count=1;pnpm lint;pnpm test;pnpm build;隔离 PostgreSQL 并发原子性/续租测试;128 任务与三分钟长任务动态 Worker 验收。
|
2026-07-24 12:26:56 +08:00 |
|
wangbo
|
290b8c1854
|
fix(queue): 扩展生产媒体任务吞吐
|
2026-07-24 10:37:20 +08:00 |
|
wangbo
|
d80b2e5ebf
|
fix(queue): 提升媒体任务执行并发
|
2026-07-24 10:31:18 +08:00 |
|
wangbo
|
36d1b18e10
|
fix(images): 规范 OpenAI 图像尺寸参数
|
2026-07-24 09:28:18 +08:00 |
|
wangbo
|
8df87875de
|
fix(images): 优先转换编辑图片为 multipart 二进制
OpenAI 编辑即使声明支持 URL,也必须在 multipart 提交前转存为二进制文件。
|
2026-07-24 09:04:23 +08:00 |
|
wangbo
|
db640c1211
|
fix(images): 兼容 OpenAI 多图编辑 multipart
- 将 OpenAI images/edits 请求构造成 multipart/form-data
- 在运行时安全转存 URL 图片为 data URL 后提交二进制文件
- 覆盖多图字段、真实上游模型名和内部元数据过滤测试
|
2026-07-24 08:59:42 +08:00 |
|
wangbo
|
1da712854f
|
fix(migrations): 停用旧模型冲突别名
以可回滚的状态更新替代删除,满足生产迁移安全门禁。
|
2026-07-24 08:42:59 +08:00 |
|
wangbo
|
8b8e09cc22
|
fix(media): 支持大尺寸图像响应并补齐迁移契约
- 为图像协议放宽 JSON 响应上限并显式处理读取与超限错误
- 合并基础模型与平台能力,避免运行时丢失分辨率和比例约束
- 固化稳定 Gemini 图像模型的能力、计价和 preview 兼容别名
|
2026-07-24 08:40:30 +08:00 |
|
wangbo
|
fb7e08fe5c
|
fix(runtime): honor requested platform for routing
|
2026-07-24 07:56:48 +08:00 |
|
wangbo
|
22ee5bb624
|
fix(release): 修复首次发布基线解析
|
2026-07-23 23:54:31 +08:00 |
|
wangbo
|
76a7702925
|
fix(media): 对齐 EasyAI 媒体响应与转存策略
统一媒体异步提交和轮询响应,扩展 /ai/result 到当前用户的 Gateway 媒体任务,并保持既有 Gateway 字段兼容。\n\n启用转存但无可用渠道时回退到 24 小时本地静态资源;关闭转存时保留图片、音频等上游 Base64 字段。同步更新文件上传兼容结构、OpenAPI、管理端说明和回归测试。\n\n验证:cd apps/api && env -u AI_GATEWAY_TEST_DATABASE_URL go test ./... -count=1;gofmt -l 无输出;pnpm nx run web:typecheck。
|
2026-07-23 22:35:41 +08:00 |
|
wangbo
|
8b7d3e9c9a
|
feat(seedance): 同步输入图片约束与自动转换
|
2026-07-23 21:55:42 +08:00 |
|
wangbo
|
46cdb1a288
|
fix(api): 缺失输出能力配置时透传请求
|
2026-07-23 11:07:31 +08:00 |
|
wangbo
|
8d86c4b3b3
|
feat(catalog): 统一模型调用身份并梳理生命周期
新增官方调用名、供应商真实名、显示名和兼容别名的独立契约,调整路由、目录聚合、管理端与 OpenAPI。
增加 Gemini、Qwen、DeepSeek、Claude 和 MiniMax 生命周期迁移、别名观测及引用保护,并补充数据库与聚合测试。
|
2026-07-22 20:23:36 +08:00 |
|
easyai
|
e3f6c0fa3e
|
Merge pull request #27: 分类展示公开 API 文档并修复 DEV 启动
合并 API 文档分类、Compose 数据库 DEV 启动修复与人工发布协作规则。
|
2026-07-22 17:23:39 +08:00 |
|
easyai
|
fac6ec95da
|
docs(agent): 明确取消自动 CI/CD 后的合并规则
补充本地验证证据要求,明确经用户授权可合并 PR 或直接更新 main,并禁止等待或伪造已经取消的 CI 状态。\n\n同时继续隔离 Git 变更授权与 publish、deploy 两阶段生产授权。\n\n验证:tests/release/manual-release-test.sh
|
2026-07-22 17:22:50 +08:00 |
|
easyai
|
c305603589
|
fix(dev): 兼容 Compose 数据库容器启动
保留显式数据库连接配置,自动识别 Compose PostgreSQL 容器及宿主机端口,并在容器不存在时跳过不适用的 Docker 建库。\n\n验证:bash -n;ShellCheck;scripts/create-database.sh;pnpm dev 真实启动 API 与 Web
|
2026-07-22 17:12:48 +08:00 |
|
easyai
|
3de26d5157
|
feat(web): 分类展示公开 API 文档
将通用开放接口与兼容接口分层展示,补充完整接口目录、分类路由、搜索能力和接入约定。\n\n验证:pnpm nx run web:test;pnpm nx run web:build
|
2026-07-22 17:12:48 +08:00 |
|
easyai
|
fbe8d1d3ec
|
fix(openapi): 补回图片异步响应契约
通过 PR #26 修复 Images 异步 202 OpenAPI 契约回归。
|
2026-07-22 15:44:48 +08:00 |
|
easyai
|
2812cadd4f
|
fix(openapi): 补回图片异步响应契约
为 Images 生成与编辑接口重新声明 X-Async 参数和 202 TaskAcceptedResponse,保持 OpenAPI 与真实运行时行为一致。
已重新生成 Swagger,并通过 HTTP API 测试和桌面端生成客户端类型检查验证。
|
2026-07-22 15:43:32 +08:00 |
|
easyai
|
0b7c46cca9
|
feat(api): 合并官方兼容接口响应协议 (#24)
合并兼容协议响应统一、提交状态修正、兼容任务元数据迁移及相应契约测试。\n\n已在最新 main 上完成完整本地门禁验证。
|
2026-07-22 15:38:46 +08:00 |
|
easyai
|
e00851d7e6
|
fix(db): 调整兼容元数据迁移为可空列
生产迁移安全策略禁止在已有任务表上直接新增非空列。兼容提交响应读取已使用 COALESCE,因此将 JSONB 元数据列改为可空,不改变接口行为。
验证:ci-validate-migrations.mjs;migrations-test.sh;go test ./internal/store ./internal/httpapi。
|
2026-07-22 15:35:00 +08:00 |
|