feat: add handling for task timeout and enhance Streamdown plugin for word animation

This commit is contained in:
Henry Li
2026-02-07 18:06:22 +08:00
parent dce82c1db4
commit 99e8f22d1d
3 changed files with 26 additions and 2 deletions

View File

@@ -124,6 +124,12 @@ export function MessageList({
status: "failed",
error: result.split("Task failed.")[1]?.trim(),
});
} else if (result.startsWith("Task timed out")) {
updateSubtask({
id: taskId,
status: "failed",
error: result,
});
} else {
updateSubtask({
id: taskId,

View File

@@ -17,7 +17,10 @@ import { Shimmer } from "@/components/ai-elements/shimmer";
import { Button } from "@/components/ui/button";
import { ShineBorder } from "@/components/ui/shine-border";
import { useI18n } from "@/core/i18n/hooks";
import { streamdownPlugins } from "@/core/streamdown";
import {
streamdownPlugins,
streamdownPluginsWithWordAnimation,
} from "@/core/streamdown";
import { useSubtask } from "@/core/tasks/context";
import { cn } from "@/lib/utils";
@@ -98,7 +101,9 @@ export function SubtaskCard({
{task.prompt && (
<ChainOfThoughtStep
label={
<Streamdown {...streamdownPlugins}>{task.prompt}</Streamdown>
<Streamdown {...streamdownPluginsWithWordAnimation}>
{task.prompt}
</Streamdown>
}
></ChainOfThoughtStep>
)}

View File

@@ -3,6 +3,8 @@ import remarkGfm from "remark-gfm";
import remarkMath from "remark-math";
import type { StreamdownProps } from "streamdown";
import { rehypeSplitWordsIntoSpans } from "../rehype";
export const streamdownPlugins = {
remarkPlugins: [
remarkGfm,
@@ -13,6 +15,17 @@ export const streamdownPlugins = {
] as StreamdownProps["rehypePlugins"],
};
export const streamdownPluginsWithWordAnimation = {
remarkPlugins: [
remarkGfm,
[remarkMath, { singleDollarTextMath: true }],
] as StreamdownProps["remarkPlugins"],
rehypePlugins: [
[rehypeKatex, { output: "html" }],
rehypeSplitWordsIntoSpans,
] as StreamdownProps["rehypePlugins"],
};
// Plugins for human messages - no autolink to prevent URL bleeding into adjacent text
export const humanMessagePlugins = {
remarkPlugins: [