Files
Alfred/context.md
lanyuanxiaoyao 933c2133f0 feat: 新增模型管理功能(供应商 + 模型 CRUD)
- 新增 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
2026-05-29 12:40:10 +08:00

4.9 KiB
Raw Blame History

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.tsmodels/get.ts 改用 createApiError()
  • Q2 提取共享常量: MODEL_CAPABILITIESshared/api.ts 导出,models/create.tsmodels/update.ts 不再重复定义
  • Q3 清理重复测试: tests/web/hooks/use-models.test.ts 移除了残留的 provider 相关测试
  • 文档修正: docs/development/backend.mdbuildProviderRegistry 签名已更新为 (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'

已确认:

  • createProviderRegistrynode_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 的交互问题

建议尝试方向:

  1. 清除 Bun 缓存: rm -rf node_modules/.cache
  2. 升级 Bun 版本
  3. 改用动态导入 const { createProviderRegistry } = await import("ai")buildProviderRegistry 函数内部
  4. buildProviderRegistry 的测试改为不 mock ai 模块(因为 createProviderRegistry 不需要 mock只有 generateText 需要)
  5. 将 registry 拆为两个文件:connection-test.tsmock generateTextregistry.ts(不 mock

质量状态

  • bun run typecheck: 0 errors
  • bun run lint: 0 errors修复后
  • 模型管理相关测试: 62/66 pass4 个 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

后续步骤

  1. 解决 bun testcreateProviderRegistry 的兼容问题
  2. 确保所有 66+ 测试通过
  3. 归档变更(/opsx-archive