M2b:导入改造产出可审阅灵胚(启镜物化世谱)与组装管线(符文展开/火候进入 IR),Kernel 打通采样参数链路

This commit is contained in:
chenxin committed 2026-08-21 23:43:29 +08:00
1 parent e6a3b7121f
commit 5f36e3785c
86 files changed
+424 -14455

No files matched your search

-68
View File
@@ -1,68 +0,0 @@
import { describe, expect, it, vi } from "vitest";
vi.mock("./client", () => ({
apiDelete: vi.fn(),
apiGet: vi.fn(),
apiPatch: vi.fn(),
apiPost: vi.fn(),
}));
import { apiDelete, apiGet, apiPatch, apiPost } from "./client";
import {
createSession,
deleteSession,
listMessages,
listSessions,
sendMessage,
updateSession,
} from "./chat";
describe("chat api", () => {
it("createSession POST /chat/sessions", async () => {
vi.mocked(apiPost).mockResolvedValue({ id: "session_1" });
await createSession({ title: "新会话" });
expect(apiPost).toHaveBeenCalledWith("/chat/sessions", { title: "新会话" });
});
it("sendMessage POST 会话消息带 modality & idempotencyKey", async () => {
vi.mocked(apiPost).mockResolvedValue({ run_id: "run_1" });
await sendMessage("session_1", { content: "你好" }, "idem_1");
expect(apiPost).toHaveBeenCalledWith(
"/chat/sessions/session_1/messages",
{ content: "你好", modality: "text" },
{ idempotencyKey: "idem_1" },
);
});
it("listMessages GET 分页消息", async () => {
vi.mocked(apiGet).mockResolvedValue({ items: [], total: 0 });
await listMessages("session_1", { page: 1, page_size: 20 });
expect(apiGet).toHaveBeenCalledWith("/chat/sessions/session_1/messages", {
page: 1,
page_size: 20,
});
});
it("listSessions GET 支持 character_id 过滤", async () => {
vi.mocked(apiGet).mockResolvedValue({ items: [], total: 0 });
await listSessions({ character_id: "char_1", status: "active" });
expect(apiGet).toHaveBeenCalledWith("/chat/sessions", {
character_id: "char_1",
status: "active",
});
});
it("updateSession PATCH /chat/sessions/:id", async () => {
vi.mocked(apiPatch).mockResolvedValue({ id: "session_1" });
await updateSession("session_1", { title: "新标题" });
expect(apiPatch).toHaveBeenCalledWith("/chat/sessions/session_1", {
title: "新标题",
});
});
it("deleteSession DELETE /chat/sessions/:id", async () => {
vi.mocked(apiDelete).mockResolvedValue(undefined);
await deleteSession("session_1");
expect(apiDelete).toHaveBeenCalledWith("/chat/sessions/session_1");
});
});
-85
View File
@@ -1,85 +0,0 @@
/**
* 对话 API Client(对应 后端生成的 OpenAPI 契约 §7)。
* 创建会话、发送消息、拉取历史消息。
*/
import { apiDelete, apiGet, apiPatch, apiPost } from "./client";
import type {
ChatMessage,
ChatSession,
CreateSessionRequest,
Paginated,
SendMessageRequest,
SendMessageResponse,
UpdateSessionRequest,
} from "@/types/api";
/** 创建会话;character_id 省略时后端使用当前激活人物 */
export function createSession(body: CreateSessionRequest = {}) {
return apiPost<ChatSession>("/chat/sessions", body);
}
/** 获取单个会话详情 */
export function getSession(sessionId: string) {
return apiGet<ChatSession>(`/chat/sessions/${sessionId}`);
}
/**
* 发送文本消息。
* 使用 Idempotency-Key 防止重复提交产生重复 Run(API §5.6)。
*/
export function sendMessage(
sessionId: string,
body: SendMessageRequest,
idempotencyKey: string,
) {
return apiPost<SendMessageResponse>(
`/chat/sessions/${sessionId}/messages`,
{ ...body, modality: body.modality ?? "text" },
{ idempotencyKey },
);
}
/** 拉取会话历史消息 */
export function listMessages(
sessionId: string,
params?: { page?: number; page_size?: number },
) {
return apiGet<Paginated<ChatMessage>>(
`/chat/sessions/${sessionId}/messages`,
params,
);
}
/** 会话列表(可选按人物 / 状态过滤) */
export function listSessions(params?: {
character_id?: string;
status?: ChatSession["status"];
}) {
return apiGet<Paginated<ChatSession>>("/chat/sessions", params);
}
/** 更新会话(重命名 / 归档 / 删除态切换) */
export function updateSession(sessionId: string, body: UpdateSessionRequest) {
return apiPatch<ChatSession>(`/chat/sessions/${sessionId}`, body);
}
/** 删除会话(软删除,status → deleted) */
export function deleteSession(sessionId: string) {
return apiDelete<void>(`/chat/sessions/${sessionId}`);
}
/** 选择/激活消息的某个历史版本。后端存储 active_version_idx,refresh 后返回 */
export function selectVersion(
sessionId: string,
messageId: string,
versionIdx: number,
) {
return apiPatch<{
message_id: string;
active_version_idx: number;
versions: import("@/types/api").MessageVersion[];
}>(`/chat/sessions/${sessionId}/messages/${messageId}/version`, {
version_idx: versionIdx,
});
}
-55
View File
@@ -1,55 +0,0 @@
/**
* 辰正时态 API Client(对应 后端生成的 OpenAPI 契约 §10)。
*
* 提供数字生命对时间流逝的感知:时态快照、纪念日、相识时长与配置。
*/
import { apiDelete, apiGet, apiPatch, apiPost } from "./client";
import type {
AcquaintanceInfo,
Anniversary,
CreateAnniversaryRequest,
TimeConfig,
TimeSnapshotResponse,
UpdateAnniversaryRequest,
} from "@/types/api";
/** 当前时态快照 + 调制因子(GET /time/snapshot) */
export function getTimeSnapshot() {
return apiGet<TimeSnapshotResponse>("/time/snapshot");
}
/** 纪念日列表(GET /time/anniversaries) */
export function listAnniversaries() {
return apiGet<Anniversary[]>("/time/anniversaries");
}
/** 新增纪念日(POST /time/anniversaries) */
export function createAnniversary(body: CreateAnniversaryRequest) {
return apiPost<Anniversary>("/time/anniversaries", body);
}
/** 单条纪念日(GET /time/anniversaries/{id}) */
export function getAnniversary(id: string) {
return apiGet<Anniversary>(`/time/anniversaries/${id}`);
}
/** 更新纪念日(PATCH /time/anniversaries/{id}) */
export function updateAnniversary(id: string, body: UpdateAnniversaryRequest) {
return apiPatch<Anniversary>(`/time/anniversaries/${id}`, body);
}
/** 删除纪念日(DELETE /time/anniversaries/{id}) */
export function deleteAnniversary(id: string) {
return apiDelete<void>(`/time/anniversaries/${id}`);
}
/** 相识时长(GET /time/acquaintance) */
export function getAcquaintance() {
return apiGet<AcquaintanceInfo>("/time/acquaintance");
}
/** 时态配置(GET /time/config,只读) */
export function getTimeConfig() {
return apiGet<TimeConfig>("/time/config");
}