Commit Graph
286 Commits
Author SHA1 Message Date
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
easyai e07a997aa9 feat(api): 统一官方兼容接口响应协议
兼容接口现在以入口协议作为最终响应协议,同协议保留官方 Wire 响应,跨协议统一转换成功、任务状态与错误结构。

同时修正异步提交状态边界,持久化兼容公开任务标识和官方提交响应,并新增迁移、流式响应及协议契约测试。

验证:go vet ./...;go test ./...;govulncheck ./...;pnpm lint;pnpm test;pnpm build;pnpm audit --audit-level high;pnpm openapi;全部 CI 脚本。
2026-07-22 15:34:59 +08:00
easyai 42e8b517fd feat(gateway): 补齐桌面端高级媒体直连接口
通过 PR #25 合并桌面端 AI Gateway 直连接口、计费、安全隔离及真实 DEV 验收实现。
2026-07-22 15:29:54 +08:00
easyai 762d61c9cf docs(release): 补充仓库 Actions 停用验收
记录仓库级 has_actions=false 和 main 无保护规则的只读验收命令。
2026-07-22 15:17:11 +08:00
easyai dae5d16a58 refactor(release): 改为 Agent 双阶段人工发布
删除 Gitea Actions、Tag/Main 自动流水线和旧 Runner 配置,取消 Git 操作与发布授权的绑定。\n\n新增本地镜像发布、固定生产部署助手、digest manifest、迁移安全检查、simulation 冒烟及显式回滚流程。\n\n验证:pnpm lint、pnpm test、pnpm build、Go 全量测试、ShellCheck、Compose 配置、人工发布测试和 linux/amd64 完整栈冒烟。
2026-07-22 15:13:40 +08:00
easyai 3056cf8fca feat(gateway): 补齐桌面端高级媒体直连接口
ci / verify (pull_request) Successful in 15m34s
新增图片矢量化、视频超分、每日用量、计价与任务隔离能力,并通过环境变量解析平台凭据。

已通过 Go 全量门禁、迁移检查、镜像构建以及 Vectorizer 五格式和 Topaz 3 秒视频真实 DEV 验收。
2026-07-22 14:02:53 +08:00
easyai cbebfd7baa chore(ci): 推进生产迁移基线至 v0.4.4 (#23)
ci / verify (push) Successful in 11m18s
生产发布、健康检查与隔离恢复演练均已通过;仅推进生产迁移基线。
2026-07-22 11:19:59 +08:00
easyai ee0256adb4 chore(ci): 推进生产迁移基线至 v0.4.4
ci / verify (pull_request) Successful in 14m30s
2026-07-22 11:04:42 +08:00
easyai fce76a30ba fix(keling): 统一 Omni 模型别名与生产绑定 (#22)
ci / verify (push) Successful in 12m40s
release-ci / verify-tag (push) Successful in 14m2s
线上真实任务验证发现官方兼容接口的模型别名与生产绑定不一致;统一使用原生模型名匹配候选,同时保留通用接口旧别名兼容。
v0.4.4
2026-07-22 10:23:18 +08:00
easyai d37fb3ea60 fix(keling): 统一 Omni 模型别名与生产绑定
ci / verify (pull_request) Successful in 21m44s
2026-07-22 10:00:30 +08:00
easyai 9872068596 Merge pull request #21: 统一公开 API 为 /api/v1 前缀
ci / verify (push) Successful in 12m50s
release-ci / verify-tag (push) Successful in 16m11s
合并公开 API V1 前缀统一、兼容路由、OpenAPI、部署健康检查与验证测试。
v0.4.3
2026-07-22 09:10:09 +08:00
easyai a23b28c27d test(api): 等待异步任务完成后校验结果
ci / verify (pull_request) Successful in 12m38s
真实队列环境中 X-Async 请求会先返回 queued。集成测试改为轮询任务完成并重新读取详情,避免把正确的异步受理状态误判为失败。
2026-07-22 08:56:30 +08:00
easyai eb37b568ae fix(deploy): 使用 /api/v1 执行发布健康检查
ci / verify (pull_request) Failing after 3m41s
将 Compose 发布脚本的 API、就绪和 Web 反代探针切换到统一公开前缀,避免发布完成后仍只验证旧兼容入口。\n\n验证:bash -n;ShellCheck;ci-build-images-test.sh;pipeline-test.sh。
2026-07-22 08:50:55 +08:00
easyai a8d1c550ef chore(deps): 升级 fast-uri 修复高危漏洞
ci / verify (pull_request) Failing after 3m45s
将构建链路中的 fast-uri 锁定到 3.1.4,修复 host confusion 高危公告,不改变应用运行时依赖。\n\n验证:pnpm install --frozen-lockfile;pnpm audit --audit-level high;pnpm lint;pnpm test;pnpm build。
2026-07-22 08:48:40 +08:00
easyai 5432760cf7 fix(identity): 避免未配置 SSF 时触发空指针
SecurityEventReceiver 不再把空 ConnectionManager 包装为非空接口;未启用 SSF 时公开端点明确返回 404。补充运行时和 HTTP 回归测试。\n\n验证:go test ./internal/identityruntime ./internal/httpapi。
2026-07-22 08:48:36 +08:00
easyai 7c5a999e32 feat(api): 统一公开接口为 /api/v1 前缀
将通用生成、Gemini、可灵、火山、健康检查与 OpenAPI 的推荐入口统一到 /api/v1,并保留历史路径作为兼容别名。同步更新代理配置、接入文档、接口清单和前缀回归测试。\n\n验证:go vet ./...;go test ./...;pnpm openapi;pnpm lint;pnpm test;pnpm build;公开 OpenAPI 71 个方法与接口清单机器比对一致。
2026-07-22 08:48:32 +08:00
easyai f7a5f2e808 Merge pull request #20: 前移生产迁移基线至 v0.4.2
ci / verify (push) Successful in 9m43s
2026-07-22 05:42:59 +08:00
easyai 152f9d1206 chore(deploy): 前移生产迁移基线至 v0.4.2
ci / verify (pull_request) Successful in 9m42s
2026-07-22 05:32:39 +08:00
easyai d95cecd0eb Merge pull request #19: 修复 Gemini 兼容平台版本路径重复拼接
ci / verify (push) Successful in 9m45s
release-ci / verify-tag (push) Successful in 9m54s
修复 Gemini 兼容平台已包含 /v1 时重复追加 /v1beta 的问题。

验证:精确 ci / verify (pull_request) 已通过。
v0.4.2
2026-07-22 05:04:12 +08:00
easyai 5954afef55 fix(gemini): 保留兼容平台的 API 版本路径
ci / verify (pull_request) Successful in 9m42s
2026-07-22 04:53:42 +08:00