mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Fix task agent routing and scroll restore
This commit is contained in:
@@ -13,6 +13,7 @@ import {
|
||||
type AgentConversation,
|
||||
publishAgentConversationMarker,
|
||||
} from "@/features/agents/agentConversations";
|
||||
import { mergeAutoRouteMentionPubkeys } from "@/features/channels/ui/ChannelPane.helpers";
|
||||
import {
|
||||
useManagedAgentsQuery,
|
||||
useRelayAgentsQuery,
|
||||
@@ -499,6 +500,10 @@ export function AgentConversationScreen({
|
||||
.map((participant) => participant.pubkey),
|
||||
[agentParticipants],
|
||||
);
|
||||
const autoRouteAgentPubkeys = React.useMemo(
|
||||
() => (routeableAgentPubkeys.length === 1 ? routeableAgentPubkeys : []),
|
||||
[routeableAgentPubkeys],
|
||||
);
|
||||
const canMessageAnyAgent = routeableAgentPubkeys.length > 0;
|
||||
const restrictedAgentNames = React.useMemo(
|
||||
() =>
|
||||
@@ -564,17 +569,23 @@ export function AgentConversationScreen({
|
||||
mentionPubkeys: string[],
|
||||
mediaTags?: string[][],
|
||||
) => {
|
||||
const routedMentionPubkeys = mergeAutoRouteMentionPubkeys({
|
||||
autoRouteAgentPubkeys,
|
||||
mentionPubkeys,
|
||||
});
|
||||
|
||||
await sendMessageMutation.mutateAsync({
|
||||
clientTags: [
|
||||
["client", "agent-conversation", conversation.agentReply.id],
|
||||
],
|
||||
content,
|
||||
mediaTags,
|
||||
mentionPubkeys,
|
||||
mentionPubkeys: routedMentionPubkeys,
|
||||
parentEventId: replyParentEventId,
|
||||
});
|
||||
},
|
||||
[
|
||||
autoRouteAgentPubkeys,
|
||||
conversation.agentReply.id,
|
||||
replyParentEventId,
|
||||
sendMessageMutation,
|
||||
|
||||
@@ -4,10 +4,6 @@ import { cacheSearchHitEvent } from "@/app/navigation/searchHitEventCache";
|
||||
import { useAppNavigation } from "@/app/navigation/useAppNavigation";
|
||||
import { useActiveChannelHeader } from "@/features/channels/useActiveChannelHeader";
|
||||
import { useChannelPaneHandlers } from "@/features/channels/useChannelPaneHandlers";
|
||||
import {
|
||||
buildAgentConversationMarkers,
|
||||
getHiddenAgentConversationMessageIds,
|
||||
} from "@/features/agents/agentConversations";
|
||||
import {
|
||||
useChannelMembersQuery,
|
||||
useJoinChannelMutation,
|
||||
@@ -84,6 +80,7 @@ import { useChannelPanelHistoryState } from "./useChannelPanelHistoryState";
|
||||
import { useChannelProfilePanel } from "./useChannelProfilePanel";
|
||||
import { useChannelRouteTarget } from "./useChannelRouteTarget";
|
||||
import { useChannelUnreadState } from "./useChannelUnreadState";
|
||||
import { useAgentConversationTimelineState } from "./filterAgentConversationMessages";
|
||||
import { useResetChannelSurfaceTabOnRouteOpen } from "./useResetChannelSurfaceTabOnRouteOpen";
|
||||
import type { ChannelScreenProps } from "./ChannelScreen.types";
|
||||
const HEADER_ACTIONS_COMPACT_BREAKPOINT_PX = 760;
|
||||
@@ -490,23 +487,8 @@ export function ChannelScreen({
|
||||
: [...currentEvents, event],
|
||||
);
|
||||
}, []);
|
||||
const agentConversationMarkers = React.useMemo(
|
||||
() => buildAgentConversationMarkers(resolvedMessages),
|
||||
[resolvedMessages],
|
||||
);
|
||||
const unreadTimelineMessages = React.useMemo(() => {
|
||||
const hiddenMessageIds = getHiddenAgentConversationMessageIds(
|
||||
timelineMessages,
|
||||
agentConversationMarkers,
|
||||
);
|
||||
if (hiddenMessageIds.size === 0) {
|
||||
return timelineMessages;
|
||||
}
|
||||
|
||||
return timelineMessages.filter(
|
||||
(message) => !hiddenMessageIds.has(message.id),
|
||||
);
|
||||
}, [agentConversationMarkers, timelineMessages]);
|
||||
const { agentConversationMarkers, unreadTimelineMessages } =
|
||||
useAgentConversationTimelineState(resolvedMessages, timelineMessages);
|
||||
const channelFind = useChannelFind({
|
||||
channelId: activeChannelId,
|
||||
messages: timelineMessages,
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
import * as React from "react";
|
||||
import {
|
||||
buildAgentConversationMarkers,
|
||||
getHiddenAgentConversationMessageIds,
|
||||
type AgentConversationMarker,
|
||||
} from "@/features/agents/agentConversations";
|
||||
import type { TimelineMessage } from "@/features/messages/types";
|
||||
import type { RelayEvent } from "@/shared/api/types";
|
||||
|
||||
function filterHiddenAgentConversationMessages(
|
||||
messages: TimelineMessage[],
|
||||
markers: readonly AgentConversationMarker[] | undefined,
|
||||
): TimelineMessage[] {
|
||||
const hiddenMessageIds = getHiddenAgentConversationMessageIds(
|
||||
messages,
|
||||
markers,
|
||||
);
|
||||
if (hiddenMessageIds.size === 0) {
|
||||
return messages;
|
||||
}
|
||||
|
||||
return messages.filter((message) => !hiddenMessageIds.has(message.id));
|
||||
}
|
||||
|
||||
export function useUnreadTimelineMessages(
|
||||
messages: TimelineMessage[],
|
||||
markers: readonly AgentConversationMarker[] | undefined,
|
||||
): TimelineMessage[] {
|
||||
return React.useMemo(
|
||||
() => filterHiddenAgentConversationMessages(messages, markers),
|
||||
[markers, messages],
|
||||
);
|
||||
}
|
||||
|
||||
export function useAgentConversationMarkers(
|
||||
messages: RelayEvent[],
|
||||
): AgentConversationMarker[] {
|
||||
return React.useMemo(
|
||||
() => buildAgentConversationMarkers(messages),
|
||||
[messages],
|
||||
);
|
||||
}
|
||||
|
||||
export function useAgentConversationTimelineState(
|
||||
events: RelayEvent[],
|
||||
messages: TimelineMessage[],
|
||||
) {
|
||||
const agentConversationMarkers = useAgentConversationMarkers(events);
|
||||
const unreadTimelineMessages = useUnreadTimelineMessages(
|
||||
messages,
|
||||
agentConversationMarkers,
|
||||
);
|
||||
return { agentConversationMarkers, unreadTimelineMessages };
|
||||
}
|
||||
Reference in New Issue
Block a user