fix(rebase): remove duplicate definitions and update stale module paths

Rebase left duplicate function blocks in worker.py (triple human_message
write causing 3x user messages in /history), deps.py, and prompt.py.
Also update checkpointer imports from the old deerflow.agents.checkpointer
path to deerflow.runtime.checkpointer, and clean up orphaned feedback
props in the frontend message components.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
rayhpeng
2026-04-12 09:30:39 +08:00
parent 3580897c56
commit 500cdfc8e4
8 changed files with 9 additions and 147 deletions
@@ -39,19 +39,11 @@ export function MessageListItem({
threadId,
message,
isLoading,
threadId,
}: {
className?: string;
threadId?: string;
threadId: string;
message: Message;
isLoading?: boolean;
threadId: string;
// ``feedback`` is ``undefined`` for messages that are not feedback-eligible
// (non-final AI messages, humans, tool results). It is ``null`` for the
// final ai_message of a run that has no rating yet, and a FeedbackData
// object once rated. The button renders whenever the field is present.
feedback?: FeedbackData | null;
runId?: string;
}) {
const isHuman = message.type === "human";
return (
@@ -80,13 +72,6 @@ export function MessageListItem({
""
}
/>
{feedback !== undefined && runId && threadId && (
<FeedbackButtons
threadId={threadId}
runId={runId}
initialFeedback={feedback}
/>
)}
</div>
</MessageToolbar>
)}
@@ -18,7 +18,6 @@ import { useRehypeSplitWordsIntoSpans } from "@/core/rehype";
import type { Subtask } from "@/core/tasks";
import { useUpdateSubtask } from "@/core/tasks/context";
import type { AgentThreadState } from "@/core/threads";
import { useThreadMessageEnrichment } from "@/core/threads/hooks";
import { cn } from "@/lib/utils";
import { ArtifactFileList } from "../artifacts/artifact-file-list";
@@ -48,7 +47,6 @@ export function MessageList({
const rehypePlugins = useRehypeSplitWordsIntoSpans(thread.isLoading);
const updateSubtask = useUpdateSubtask();
const messages = thread.messages;
const { data: enrichment } = useThreadMessageEnrichment(threadId);
if (thread.isThreadLoading && messages.length === 0) {
return <MessageListSkeleton />;
@@ -61,21 +59,12 @@ export function MessageList({
{groupMessages(messages, (group) => {
if (group.type === "human" || group.type === "assistant") {
return group.messages.map((msg) => {
// Run id and feedback are sourced from the ``/history``
// enrichment query (see ``useThreadMessageEnrichment``). The
// map is keyed by ``message.id`` so tool_call interleavings
// and multi-run threads map cleanly without positional math.
// ``feedback`` is ``undefined`` for non-eligible messages,
// ``null`` for eligible-but-unrated, and an object once rated.
const entry = msg.id ? enrichment?.get(msg.id) : undefined;
return (
<MessageListItem
key={`${group.id}/${msg.id}`}
threadId={threadId}
message={msg}
isLoading={thread.isLoading}
runId={entry?.run_id}
feedback={entry?.feedback}
/>
);
});