From 69eab0c0337c154841a69c8361cf72931c22af38 Mon Sep 17 00:00:00 2001 From: RuoJi6 Date: Tue, 27 Oct 2026 19:09:52 +0800 Subject: [PATCH] fix: finding agent chat tests and IME enter Test: (cd web && node --test src/lib/finding-agent-chat.test.cjs) Build: ARTEX_SKIP_NPM_CI=1 ./build.sh --- web/src/components/finding-agent-chat-drawer.tsx | 9 +++++---- web/src/components/finding-agent-chat.ts | 4 ++-- web/src/lib/finding-agent-chat.test.cjs | 11 ++++++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/web/src/components/finding-agent-chat-drawer.tsx b/web/src/components/finding-agent-chat-drawer.tsx index 5898c87..fb5a883 100644 --- a/web/src/components/finding-agent-chat-drawer.tsx +++ b/web/src/components/finding-agent-chat-drawer.tsx @@ -14,6 +14,7 @@ import { ScrollArea } from "@/components/ui/scroll-area"; import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle } from "@/components/ui/sheet"; import { Textarea } from "@/components/ui/textarea"; import { api, openSSE } from "@/lib/api"; +import { shouldSubmitOnKey, useChatSendMode } from "@/lib/chat-send-mode"; import type { Activity, Finding } from "@/lib/types"; import { @@ -69,6 +70,7 @@ export function FindingAgentChatDrawer({ finding }: FindingAgentChatDrawerProps) const [sending, setSending] = React.useState(false); const [running, setRunning] = React.useState(false); const [stopping, setStopping] = React.useState(false); + const sendMode = useChatSendMode(); const [taskAvailable, setTaskAvailable] = React.useState(null); const [unavailableReason, setUnavailableReason] = React.useState(""); const eventSourceRef = React.useRef(null); @@ -250,10 +252,9 @@ export function FindingAgentChatDrawer({ finding }: FindingAgentChatDrawerProps) value={input} onChange={(event) => setInput(event.target.value)} onKeyDown={(event) => { - if (event.key === "Enter" && !event.shiftKey) { - event.preventDefault(); - void send(); - } + if (!shouldSubmitOnKey(event, sendMode)) return; + event.preventDefault(); + void send(); }} disabled={!canAskFindingAgent(finding) || taskAvailable !== true || sending || running} placeholder={running ? "主 Agent 正在运行…" : "描述复现现象或继续提问…"} diff --git a/web/src/components/finding-agent-chat.ts b/web/src/components/finding-agent-chat.ts index 5fce455..bd92c82 100644 --- a/web/src/components/finding-agent-chat.ts +++ b/web/src/components/finding-agent-chat.ts @@ -1,5 +1,5 @@ -import { mentionToken } from "@/lib/chat-mentions"; -import type { Finding } from "@/lib/types"; +import { mentionToken } from "../lib/chat-mentions"; +import type { Finding } from "../lib/types"; type FindingContextFields = Finding & { url?: string; diff --git a/web/src/lib/finding-agent-chat.test.cjs b/web/src/lib/finding-agent-chat.test.cjs index fc43024..6600177 100644 --- a/web/src/lib/finding-agent-chat.test.cjs +++ b/web/src/lib/finding-agent-chat.test.cjs @@ -1,10 +1,19 @@ const assert = require("node:assert/strict"); +const { createRequire } = require("node:module"); const test = require("node:test"); + +// Keep the tests runnable on Node 20, which does not load TypeScript natively. +const requireFromTest = createRequire(__filename); +requireFromTest("ts-node").register({ + transpileOnly: true, + compilerOptions: { module: "CommonJS", moduleResolution: "Node10" }, +}); + const { buildFindingAgentContextMessage, canAskFindingAgent, findingAgentUnavailableReason, -} = require("../components/finding-agent-chat.ts"); +} = requireFromTest("../components/finding-agent-chat.ts"); const finding = (overrides = {}) => ({ id: "42",