Roll back aggressive chat reuse paths that froze message parts, tool state, and completed assistant bodies when sessions were inactive or backgrounded.
45 lines
1.6 KiB
TypeScript
45 lines
1.6 KiB
TypeScript
import React from 'react';
|
|
|
|
import { useAssistantStatus } from '@/hooks/useAssistantStatus';
|
|
import { useConfigStore } from '@/stores/useConfigStore';
|
|
import { useSessionUIStore } from '@/sync/session-ui-store';
|
|
import { StatusRow } from './StatusRow';
|
|
|
|
/**
|
|
* Status row wrapper.
|
|
* Uses the dedicated assistant status hook so the row keeps accurate live activity
|
|
* labels while still limiting subscriptions to the active assistant message.
|
|
*/
|
|
export const StatusRowContainer: React.FC = React.memo(() => {
|
|
const currentSessionId = useSessionUIStore((state) => state.currentSessionId);
|
|
const abortRecord = useSessionUIStore(
|
|
React.useCallback((state) => {
|
|
if (!currentSessionId) {
|
|
return null;
|
|
}
|
|
return state.sessionAbortFlags?.get(currentSessionId) ?? null;
|
|
}, [currentSessionId]),
|
|
);
|
|
const { working } = useAssistantStatus();
|
|
const currentAgentName = useConfigStore((state) => state.currentAgentName);
|
|
|
|
const wasAborted = Boolean(abortRecord && !abortRecord.acknowledged);
|
|
|
|
return (
|
|
<StatusRow
|
|
isWorking={working.isWorking}
|
|
statusText={working.statusText}
|
|
isGenericStatus={working.isGenericStatus}
|
|
isWaitingForPermission={working.isWaitingForPermission}
|
|
wasAborted={wasAborted || working.wasAborted}
|
|
abortActive={wasAborted || working.abortActive}
|
|
retryInfo={working.retryInfo}
|
|
showAssistantStatus
|
|
showTodos={false}
|
|
agentName={currentAgentName}
|
|
/>
|
|
);
|
|
});
|
|
|
|
StatusRowContainer.displayName = 'StatusRowContainer';
|