diff --git a/tests/test_static_vendor.py b/tests/test_static_vendor.py index 939e8d7..3d8ab6e 100644 --- a/tests/test_static_vendor.py +++ b/tests/test_static_vendor.py @@ -45,7 +45,15 @@ class StaticVendorTests(unittest.TestCase): self.assertIn("/cancel`", source) self.assertIn("分析结果", source) self.assertIn("refreshCurrentTaskFiles(job.task_id)", source) + self.assertIn( + 'document.addEventListener("software-job-submitted", refreshSoftwareJobs)', + source, + ) self.assertIn("export function refreshCurrentTaskFiles(taskId)", chat_source) + self.assertIn( + 'document.dispatchEvent(new Event("software-job-submitted"))', + chat_source, + ) def test_admin_can_create_windows_node_enrollment_code(self) -> None: html = ADMIN_HTML.read_text(encoding="utf-8") diff --git a/web/static/js/chat.js b/web/static/js/chat.js index 5fd3f85..2a66fa7 100644 --- a/web/static/js/chat.js +++ b/web/static/js/chat.js @@ -3085,6 +3085,9 @@ function handleSseEvent(ev, asstCard, ctx) { closeTextSeg(ctx); // 结果卡追加到当前文字段之下,之后新文字另起底部段 const banner = extractMediaBanner(toolName, txtStr); const failed = isToolResultFailure(txtStr); + if (toolName === "software_job_submit" && !failed) { + document.dispatchEvent(new Event("software-job-submitted")); + } const det = runningDet || document.createElement("details"); det.classList.add("tool-call", "activity"); det.classList.toggle("failed", failed); diff --git a/web/static/js/software_jobs.js b/web/static/js/software_jobs.js index f060683..4d6f85f 100644 --- a/web/static/js/software_jobs.js +++ b/web/static/js/software_jobs.js @@ -58,6 +58,7 @@ export function initSoftwareJobs() { $("software-job-close").onclick = closeDrawer; $("software-job-backdrop").onclick = closeDrawer; $("software-job-list").addEventListener("scroll", onListScroll); + document.addEventListener("software-job-submitted", refreshSoftwareJobs); document.addEventListener("keydown", (event) => { if (event.key === "Escape" && expanded) closeDrawer(); });