feat: 全栈 Logger 依赖注入 — DB/Route/AI 层传参 + 前端 Logger + 测试更新 + 归档 add-frontend-logger

This commit is contained in:
2026-06-01 20:32:19 +08:00
parent 4c72754739
commit 844562303c
60 changed files with 1648 additions and 778 deletions

View File

@@ -11,6 +11,7 @@ import { createNoopLogger } from "../../../src/server/logger";
import { createMigratedMemoryTestDatabase } from "../../helpers";
const MODE: RuntimeMode = "test";
const LOG = createNoopLogger();
void mock.module("ai", () => ({
createAgentUIStreamResponse: (opts: {
@@ -49,65 +50,73 @@ void mock.module("ai", () => ({
async function createConversationViaHandler(req: Request, db: Database): Promise<Response> {
const { handleCreateConversation: h } = await import("../../../src/server/routes/chat/create");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function deleteConversationViaHandler(req: Request, db: Database): Promise<Response> {
const { handleDeleteConversation: h } = await import("../../../src/server/routes/chat/delete");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function getConversationViaHandler(req: Request, db: Database): Promise<Response> {
const { handleGetConversation: h } = await import("../../../src/server/routes/chat/get");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function listConversationsViaHandler(req: Request, db: Database): Promise<Response> {
const { handleListConversations: h } = await import("../../../src/server/routes/chat/list");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function listMessagesViaHandler(req: Request, db: Database): Promise<Response> {
const { handleListMessages: h } = await import("../../../src/server/routes/chat/messages");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
async function patchConversationViaHandler(req: Request, db: Database): Promise<Response> {
const { handleUpdateConversation: h } = await import("../../../src/server/routes/chat/update");
return h(req, db, MODE);
return h(req, db, MODE, LOG);
}
function seedModel(db: Database, providerId: string, modelName = "GPT-4o", modelId = "gpt-4o"): string {
const result = createModel(db, {
capabilities: ["text"],
modelId,
name: modelName,
providerId,
});
const result = createModel(
db,
{
capabilities: ["text"],
modelId,
name: modelName,
providerId,
},
LOG,
);
if ("error" in result) throw new Error(result.error);
return result.model.id;
}
function seedProject(db: Database, name = "测试项目"): string {
const result = createProject(db, { description: "测试", name });
const result = createProject(db, { description: "测试", name }, LOG);
if ("error" in result) throw new Error(result.error);
return result.project.id;
}
function seedProvider(db: Database, name = "测试供应商"): string {
const result = createProvider(db, {
apiKey: "sk-test",
baseUrl: "https://api.test.com/v1",
name,
type: "openai",
});
const result = createProvider(
db,
{
apiKey: "sk-test",
baseUrl: "https://api.test.com/v1",
name,
type: "openai",
},
LOG,
);
if ("error" in result) throw new Error(result.error);
return result.provider.id;
}
async function sendChatViaHandler(req: Request, db: Database): Promise<Response> {
const { handleSendChat: h } = await import("../../../src/server/routes/chat/send");
return h(req, db, MODE, createNoopLogger());
return h(req, db, MODE, LOG);
}
describe("聊天 API 路由", () => {