import { defineEventHandler, readBody } from "h3"; import { getCurrentUser } from "#server/utils/context"; import { getTempTokenFromCookie } from "#server/service/agent/temp-token"; import { getSessionByIdAndUser } from "#server/service/agent/session"; import { getStreamBuffer, markBufferDone } from "#server/service/agent/stream-buffer"; import { R } from "#server/utils/response"; import log4js from "logger"; const logger = log4js.getLogger("APP"); const activeControllers = new Map(); export function registerAbortController(sessionId: string, controller: AbortController) { activeControllers.set(sessionId, controller); } export function unregisterAbortController(sessionId: string) { activeControllers.delete(sessionId); } export function abortSessionStream(sessionId: string): boolean { const controller = activeControllers.get(sessionId); if (controller && !controller.signal.aborted) { controller.abort(); logger.info("[AGENT-STOP] aborted streamText for sessionId=%s", sessionId); return true; } return false; } export default defineEventHandler(async (event) => { const user = await getCurrentUser(event); const tempToken = getTempTokenFromCookie(event); if (!user && !tempToken) { throw createError({ statusCode: 401, statusMessage: "请先登录或创建临时会话" }); } const body = await readBody(event); const { sessionId } = body as { sessionId?: string }; if (!sessionId) { throw createError({ statusCode: 400, statusMessage: "缺少 sessionId 参数" }); } const session = await getSessionByIdAndUser(sessionId, user?.id ?? null, tempToken); if (!session) { throw createError({ statusCode: 404, statusMessage: "会话不存在" }); } const aborted = abortSessionStream(sessionId); if (!aborted) { const buf = getStreamBuffer(sessionId); if (buf && !buf.done) { markBufferDone(sessionId); } } return R.success({ aborted }); });