- 新增 providers/models 数据库表、迁移和数据访问层 - 新增 15 个后端 API 路由(供应商/模型 CRUD + 连通性测试) - 新增 AI 服务层(registry.ts: buildProviderRegistry + testProviderConnection) - 新增前端模型管理页面(Tabs: 供应商/模型,含表格、表单、工具栏) - 新增前端 hooks(use-providers, use-models) - 新增共享类型和 MODEL_CAPABILITIES 常量 - 新增 10 个测试文件(66 个测试用例,4 个因 bun test ESM 兼容问题待修复) - 更新开发文档(architecture, backend, frontend) - 附带 apply-review 修复:统一错误响应、提取共享常量、清理重复测试 注意:registry.test.ts 中 4 个测试因 bun test 无法解析 createProviderRegistry ESM 导出而失败,详情见 context.md
4.9 KiB
4.9 KiB
add-model-management 当前进度
变更信息
- Change:
openspec/changes/add-model-management/ - Workflow: fast-drive (design.md + tasks.md)
- 状态: apply-review 修复进行中,有一个阻塞问题
已完成工作
核心功能(54/54 tasks 全部标记 [x])
所有代码已实现并通过验证:
- DB Schema: providers + models 表(含 FK、唯一索引)
- 数据访问层:
src/server/db/providers.ts,src/server/db/models.ts - 后端路由: 15 个路由(providers 8 + models 7)注册在
src/server/server.ts - AI 服务层:
src/server/ai/registry.ts(含testProviderConnection+buildProviderRegistry),src/server/ai/types.ts - 共享类型:
src/shared/api.ts(含MODEL_CAPABILITIES常量) - 前端 Hooks:
src/web/hooks/use-providers.ts,src/web/hooks/use-models.ts - 前端页面:
src/web/pages/models/(6 个组件 + index) - 前端路由+菜单:
src/web/routes.tsx,src/web/consoles/admin/menu.tsx - 测试: 10 个测试文件(66 个测试用例)
- 文档: backend.md, frontend.md, architecture.md, README.md 已更新
apply-review 修复(进行中)
已完成的修复:
- ✅ registry.ts 补充
buildProviderRegistry: 新增从 DB 查询启用供应商构建 AI SDK Provider Registry 的函数 - ✅ Q1 统一错误响应:
providers/get.ts和models/get.ts改用createApiError() - ✅ Q2 提取共享常量:
MODEL_CAPABILITIES从shared/api.ts导出,models/create.ts和models/update.ts不再重复定义 - ✅ Q3 清理重复测试:
tests/web/hooks/use-models.test.ts移除了残留的 provider 相关测试 - ✅ 文档修正:
docs/development/backend.md中buildProviderRegistry签名已更新为(db)而非(config) - ✅ design.md + tasks.md 更新: tasks 6.1 和 design 执行计划第 12 项已反映 registry 完整范围
阻塞问题
bun test 无法解析 createProviderRegistry
现象: 运行 bun test tests/server/ai/registry.test.ts 时报错:
SyntaxError: Export named 'createProviderRegistry' not found in module '...\node_modules\ai\dist\index.mjs'
已确认:
createProviderRegistry在node_modules/ai/dist/index.mjs中存在bun -e "import { createProviderRegistry } from 'ai'; ..."正常工作bun run typecheck通过(类型存在)- 问题仅出现在
bun test环境 - 此前 registry.ts 只导入
generateText时测试正常;添加createProviderRegistry后全部 registry 测试失败
可能原因: Bun 1.3.14 的 bun test ESM 模块解析缓存问题,或 mock.module("ai", ...) 与静态导入 createProviderRegistry 的交互问题
建议尝试方向:
- 清除 Bun 缓存:
rm -rf node_modules/.cache - 升级 Bun 版本
- 改用动态导入
const { createProviderRegistry } = await import("ai")在buildProviderRegistry函数内部 - 将
buildProviderRegistry的测试改为不 mockai模块(因为createProviderRegistry不需要 mock,只有generateText需要) - 将 registry 拆为两个文件:
connection-test.ts(mock generateText)和registry.ts(不 mock)
质量状态
bun run typecheck: ✅ 0 errorsbun run lint: ✅ 0 errors(修复后)- 模型管理相关测试: ❌ 62/66 pass(4 个 registry 测试因上述问题失败,其他 62 个全部通过)
- 已有 projects.test.tsx 有一个预存超时问题(与本次变更无关)
文件清单
新增文件(untracked)
drizzle/0001_wooden_rocket_raccoon.sql
drizzle/meta/0001_snapshot.json
src/server/ai/registry.ts
src/server/ai/types.ts
src/server/db/models.ts
src/server/db/providers.ts
src/server/routes/models/{create,delete,disable,enable,get,list,update}.ts
src/server/routes/providers/{create,delete,disable,enable,get,list,test,update}.ts
src/web/hooks/use-models.ts
src/web/hooks/use-providers.ts
src/web/pages/models/index.tsx
src/web/pages/models/components/{ModelFormModal,ModelTable,ModelToolbar,ProviderFormModal,ProviderTable,ProviderToolbar}.tsx
tests/server/ai/registry.test.ts
tests/server/db/models.test.ts
tests/server/db/providers.test.ts
tests/server/routes/models.test.ts
tests/server/routes/providers.test.ts
tests/web/components/ModelTable.test.tsx
tests/web/components/ProviderTable.test.tsx
tests/web/hooks/use-models.test.ts
tests/web/hooks/use-providers.test.ts
tests/web/routes/models.test.tsx
修改文件(modified)
bun.lock
docs/development/README.md
docs/development/architecture.md
docs/development/backend.md
docs/development/frontend.md
drizzle/meta/_journal.json
package.json
src/server/db/schema.ts
src/server/server.ts
src/shared/api.ts
src/web/consoles/admin/menu.tsx
src/web/routes.tsx
OpenSpec 变更文档
openspec/changes/add-model-management/design.md
openspec/changes/add-model-management/tasks.md
后续步骤
- 解决
bun test与createProviderRegistry的兼容问题 - 确保所有 66+ 测试通过
- 归档变更(
/opsx-archive)