import { useState } from 'react' import { createRoot } from 'react-dom/client' import { ChatHistoryPane } from '../../src/renderer/src/ChatHistoryPane' import type { Conversation } from '../../src/renderer/src/chat-conversation' import { PageShell } from '../../src/renderer/src/WorkspacePrimitives' import { UiLocaleProvider } from '../../src/renderer/src/i18n/UiLocaleProvider' import { changeUiLocale } from '../../src/renderer/src/i18n' import { SupervisorWorkspace } from '../../src/renderer/src/SupervisorWorkspace' import '../../src/renderer/src/supervisor-workspace.css' import '../../src/renderer/src/styles.css' const count = Number(new URLSearchParams(location.search).get('count') ?? 2000) const conversation: Conversation = { id: 'synthetic', title: 'Synthetic history', updatedAt: 1, messages: Array.from({ length: count }, (_, index) => ({ id: `m${index}`, role: 'assistant', state: 'complete', createdAt: index + 1, content: `Synthetic message ${index}. ${'A paragraph of rendered history. '.repeat(8)}`, reasoning: `Reasoning ${index}. ${'A reasoning paragraph. '.repeat(8)}`, tools: [{ callId: `tool${index}`, name: 'read', summary: `Read synthetic file ${index}`, state: 'completed', input: '{"path":"synthetic.txt"}', output: 'Synthetic output\n'.repeat(8) }] })) } const noop = (): void => {} const complete = async (): Promise => {} const artifacts = new Map() // Fixture-only retention probe. Restore Map.set as soon as the expansion map // first writes; no production diagnostic API or persistent instrumentation. const expansionMaps = new Set>() const originalSet = Map.prototype.set Map.prototype.set = function (key, value) { if (value && typeof value.open === 'boolean' && typeof value.automaticOpen === 'boolean') { expansionMaps.add(this) Map.prototype.set = originalSet } return originalSet.call(this, key, value) } Object.assign(window, { expansionEntryCount: () => [...expansionMaps].reduce((total, map) => total + map.size, 0) }) function Fixture() { const [current, setCurrent] = useState(conversation) const [navigation, setNavigation] = useState({ conversationId: conversation.id, messageId: 'm0', requestId: 1 }) Object.assign(window, { expansionNavigate: (index: number) => setNavigation(current => ({ ...current, messageId: `m${index}`, requestId: current.requestId + 1 })), expansionDeleteMessages: () => setCurrent({ ...conversation, messages: [] }) }) return
Synthetic expansion validation
true} onDownloadImage={noop} onOpenCitationContext={complete} onOpenCitationSource={complete} onOpenImage={noop} onRespondQuestion={complete} onRetry={noop} onScrollSnapshotChange={noop} onSetInput={noop} quickActions={[]} visibleMessageCount={count} onVisibleMessageCountChange={noop} />