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

130 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 的交互问题
**建议尝试方向**:
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.ts`mock generateText`registry.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 test``createProviderRegistry` 的兼容问题
2. 确保所有 66+ 测试通过
3. 归档变更(`/opsx-archive`