agent-relay-server 0.57.1 → 0.57.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/openapi.json +1 -1
- package/package.json +1 -1
- package/public/assets/MessageBubble-CHKzD4RY.js +2 -0
- package/public/assets/MessageBubble-CHKzD4RY.js.map +1 -0
- package/public/assets/{PlanGraphPanel-CJROpj66.js → PlanGraphPanel-BFVTJa0q.js} +2 -2
- package/public/assets/{PlanGraphPanel-CJROpj66.js.map → PlanGraphPanel-BFVTJa0q.js.map} +1 -1
- package/public/assets/activity-M-dFLU_O.js +2 -0
- package/public/assets/{activity-D2m3VCXV.js.map → activity-M-dFLU_O.js.map} +1 -1
- package/public/assets/{agent-profiles-CIf4b1V7.js → agent-profiles-CvHSoyCX.js} +2 -2
- package/public/assets/{agent-profiles-CIf4b1V7.js.map → agent-profiles-CvHSoyCX.js.map} +1 -1
- package/public/assets/agents-DZBM5dp_.js +2 -0
- package/public/assets/{agents-lDwoWazM.js.map → agents-DZBM5dp_.js.map} +1 -1
- package/public/assets/{analytics-OsZ2HJxy.js → analytics-bvjb3Urs.js} +3 -3
- package/public/assets/{analytics-OsZ2HJxy.js.map → analytics-bvjb3Urs.js.map} +1 -1
- package/public/assets/{automation-4eeiOl19.js → automation-CDSn9Uq-.js} +2 -2
- package/public/assets/{automation-4eeiOl19.js.map → automation-CDSn9Uq-.js.map} +1 -1
- package/public/assets/{badge-DBZY8x3C.js → badge-Dj6PREuI.js} +2 -2
- package/public/assets/{badge-DBZY8x3C.js.map → badge-Dj6PREuI.js.map} +1 -1
- package/public/assets/branch-state-badge-CdYg2HYc.js +2 -0
- package/public/assets/{branch-state-badge-B9WqTxZJ.js.map → branch-state-badge-CdYg2HYc.js.map} +1 -1
- package/public/assets/{button-ClDtrv2m.js → button-Cqpufqam.js} +2 -2
- package/public/assets/{button-ClDtrv2m.js.map → button-Cqpufqam.js.map} +1 -1
- package/public/assets/card-OmDF73CE.js +2 -0
- package/public/assets/{card-Du4YivOo.js.map → card-OmDF73CE.js.map} +1 -1
- package/public/assets/{channels-HK6sLYpZ.js → channels-BkxrdOFZ.js} +2 -2
- package/public/assets/{channels-HK6sLYpZ.js.map → channels-BkxrdOFZ.js.map} +1 -1
- package/public/assets/chat-YzX1z76l.js +2 -0
- package/public/assets/chat-YzX1z76l.js.map +1 -0
- package/public/assets/{connectors-3mMNW4Qk.js → connectors-Bg3rHgl_.js} +2 -2
- package/public/assets/{connectors-3mMNW4Qk.js.map → connectors-Bg3rHgl_.js.map} +1 -1
- package/public/assets/copy-button-DI7b8A7_.js +2 -0
- package/public/assets/{copy-button-DXWhNsIl.js.map → copy-button-DI7b8A7_.js.map} +1 -1
- package/public/assets/{dist-B7p3TbNs.js → dist-1x-LE9Uk.js} +2 -2
- package/public/assets/{dist-B7p3TbNs.js.map → dist-1x-LE9Uk.js.map} +1 -1
- package/public/assets/{dist-DhkQna4j.js → dist-C5t_OxI0.js} +2 -2
- package/public/assets/{dist-DhkQna4j.js.map → dist-C5t_OxI0.js.map} +1 -1
- package/public/assets/{dist-edv2cbLj.js → dist-CNjnTZEI.js} +2 -2
- package/public/assets/{dist-edv2cbLj.js.map → dist-CNjnTZEI.js.map} +1 -1
- package/public/assets/{dist-GEKfMylz.js → dist-CV3sgFiv.js} +2 -2
- package/public/assets/{dist-GEKfMylz.js.map → dist-CV3sgFiv.js.map} +1 -1
- package/public/assets/{dist-C0PA00sq.js → dist-Ca3ujqG_.js} +2 -2
- package/public/assets/{dist-C0PA00sq.js.map → dist-Ca3ujqG_.js.map} +1 -1
- package/public/assets/{dist-AopAI8S8.js → dist-CoUvwLTy.js} +2 -2
- package/public/assets/{dist-AopAI8S8.js.map → dist-CoUvwLTy.js.map} +1 -1
- package/public/assets/{dist-BafqksRv.js → dist-DV2tZ2fq.js} +2 -2
- package/public/assets/{dist-BafqksRv.js.map → dist-DV2tZ2fq.js.map} +1 -1
- package/public/assets/{dist-C6ROz7Mo.js → dist-DkeTrbTA.js} +2 -2
- package/public/assets/{dist-C6ROz7Mo.js.map → dist-DkeTrbTA.js.map} +1 -1
- package/public/assets/dist-DmhyU0Na.js +2 -0
- package/public/assets/{dist-BX1qUU9z.js.map → dist-DmhyU0Na.js.map} +1 -1
- package/public/assets/dist-DxkMwkrr.js +2 -0
- package/public/assets/{dist-T7h6jNA1.js.map → dist-DxkMwkrr.js.map} +1 -1
- package/public/assets/dist-yYauqYKR.js +2 -0
- package/public/assets/{dist-DEYe1tib.js.map → dist-yYauqYKR.js.map} +1 -1
- package/public/assets/{es2015-DwZxGtk9.js → es2015-DcavLcQ0.js} +2 -2
- package/public/assets/{es2015-DwZxGtk9.js.map → es2015-DcavLcQ0.js.map} +1 -1
- package/public/assets/{formatted-body-impl-BOLz9dDs.js → formatted-body-impl-D8i9qqL1.js} +2 -2
- package/public/assets/{formatted-body-impl-BOLz9dDs.js.map → formatted-body-impl-D8i9qqL1.js.map} +1 -1
- package/public/assets/index-Ba2RDJaA.js +21 -0
- package/public/assets/{index-0rOVZ5nm.js.map → index-Ba2RDJaA.js.map} +1 -1
- package/public/assets/index-CtFXWxBJ.css +2 -0
- package/public/assets/{input-DFZRjj8b.js → input-C_dl_9fG.js} +2 -2
- package/public/assets/{input-DFZRjj8b.js.map → input-C_dl_9fG.js.map} +1 -1
- package/public/assets/{insights-DwtSIqYc.js → insights-D1aANwZ2.js} +2 -2
- package/public/assets/{insights-DwtSIqYc.js.map → insights-D1aANwZ2.js.map} +1 -1
- package/public/assets/{integrations-Dd6haLpy.js → integrations-BrAr9bap.js} +2 -2
- package/public/assets/{integrations-Dd6haLpy.js.map → integrations-BrAr9bap.js.map} +1 -1
- package/public/assets/{lib-Kn4-gfGD.js → lib-B3iMVsf-.js} +2 -2
- package/public/assets/{lib-Kn4-gfGD.js.map → lib-B3iMVsf-.js.map} +1 -1
- package/public/assets/lucide-react-CMhBract.js +9 -0
- package/public/assets/{lucide-react-C3j5Huiw.js.map → lucide-react-CMhBract.js.map} +1 -1
- package/public/assets/{maintenance-DVzbjn4x.js → maintenance-C-xspsMG.js} +2 -2
- package/public/assets/{maintenance-DVzbjn4x.js.map → maintenance-C-xspsMG.js.map} +1 -1
- package/public/assets/{managed-agents-CJXaWFgZ.js → managed-agents-Bf3ni0vo.js} +2 -2
- package/public/assets/{managed-agents-CJXaWFgZ.js.map → managed-agents-Bf3ni0vo.js.map} +1 -1
- package/public/assets/{markdown-preview-impl-CCoHxXmF.js → markdown-preview-impl-DKbUBTf_.js} +2 -2
- package/public/assets/{markdown-preview-impl-CCoHxXmF.js.map → markdown-preview-impl-DKbUBTf_.js.map} +1 -1
- package/public/assets/memory-DeLwJFwH.js +2 -0
- package/public/assets/{memory-f9IAAOSG.js.map → memory-DeLwJFwH.js.map} +1 -1
- package/public/assets/{messages-DuSBSnsM.js → messages-Cww6dZnM.js} +2 -2
- package/public/assets/{messages-DuSBSnsM.js.map → messages-Cww6dZnM.js.map} +1 -1
- package/public/assets/{orchestrators-BUCE7jk3.js → orchestrators-DRjwROXw.js} +2 -2
- package/public/assets/{orchestrators-BUCE7jk3.js.map → orchestrators-DRjwROXw.js.map} +1 -1
- package/public/assets/{overview-B0_IOXOo.js → overview-DjcRomU_.js} +2 -2
- package/public/assets/{overview-B0_IOXOo.js.map → overview-DjcRomU_.js.map} +1 -1
- package/public/assets/{pairs-DdA8n3dX.js → pairs-DT0u2fnW.js} +2 -2
- package/public/assets/{pairs-DdA8n3dX.js.map → pairs-DT0u2fnW.js.map} +1 -1
- package/public/assets/{react-dom-2FP7-B7N.js → react-dom-Dtl9-x_1.js} +2 -2
- package/public/assets/{react-dom-2FP7-B7N.js.map → react-dom-Dtl9-x_1.js.map} +1 -1
- package/public/assets/{security-07gu7r1C.js → security-Bwg3oFI8.js} +2 -2
- package/public/assets/{security-07gu7r1C.js.map → security-Bwg3oFI8.js.map} +1 -1
- package/public/assets/{select-CLQutzAh.js → select-Cariwv69.js} +2 -2
- package/public/assets/{select-CLQutzAh.js.map → select-Cariwv69.js.map} +1 -1
- package/public/assets/{settings-E4QJiNjt.js → settings-Bd6Ug3DO.js} +4 -4
- package/public/assets/{settings-E4QJiNjt.js.map → settings-Bd6Ug3DO.js.map} +1 -1
- package/public/assets/store-BgJq_lN9.js +9 -0
- package/public/assets/{store-DmxnYVm1.js.map → store-BgJq_lN9.js.map} +1 -1
- package/public/assets/{tasks-BB1nTWjm.js → tasks-DVz1zhOU.js} +2 -2
- package/public/assets/{tasks-BB1nTWjm.js.map → tasks-DVz1zhOU.js.map} +1 -1
- package/public/assets/teams-TqFntFB_.js +2 -0
- package/public/assets/{teams-BtY2fi5X.js.map → teams-TqFntFB_.js.map} +1 -1
- package/public/assets/{terminal-viewer-impl-CHCUDXgj.js → terminal-viewer-impl-OsJ5crlx.js} +3 -3
- package/public/assets/{terminal-viewer-impl-CHCUDXgj.js.map → terminal-viewer-impl-OsJ5crlx.js.map} +1 -1
- package/public/assets/{use-keyboard-viewport-BUkrw3Gx.js → use-keyboard-viewport-BYHcL7sP.js} +2 -2
- package/public/assets/{use-keyboard-viewport-BUkrw3Gx.js.map → use-keyboard-viewport-BYHcL7sP.js.map} +1 -1
- package/public/assets/work-queue-B4b2jPLR.js +2 -0
- package/public/assets/{work-queue-CPXo2IdX.js.map → work-queue-B4b2jPLR.js.map} +1 -1
- package/public/assets/workspaces-m97LP4Eu.js +3 -0
- package/public/assets/{workspaces-D_vNXWDf.js.map → workspaces-m97LP4Eu.js.map} +1 -1
- package/public/index.html +21 -21
- package/src/maintenance.ts +9 -2
- package/public/assets/MessageBubble-BqFAi9gS.js +0 -2
- package/public/assets/MessageBubble-BqFAi9gS.js.map +0 -1
- package/public/assets/activity-D2m3VCXV.js +0 -2
- package/public/assets/agents-lDwoWazM.js +0 -2
- package/public/assets/branch-state-badge-B9WqTxZJ.js +0 -2
- package/public/assets/card-Du4YivOo.js +0 -2
- package/public/assets/chat-B9FJi94P.js +0 -2
- package/public/assets/chat-B9FJi94P.js.map +0 -1
- package/public/assets/copy-button-DXWhNsIl.js +0 -2
- package/public/assets/dist-BX1qUU9z.js +0 -2
- package/public/assets/dist-DEYe1tib.js +0 -2
- package/public/assets/dist-T7h6jNA1.js +0 -2
- package/public/assets/index-0rOVZ5nm.js +0 -21
- package/public/assets/index-wugqmbGk.css +0 -2
- package/public/assets/lucide-react-C3j5Huiw.js +0 -9
- package/public/assets/memory-f9IAAOSG.js +0 -2
- package/public/assets/store-DmxnYVm1.js +0 -9
- package/public/assets/teams-BtY2fi5X.js +0 -2
- package/public/assets/work-queue-CPXo2IdX.js +0 -2
- package/public/assets/workspaces-D_vNXWDf.js +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MessageBubble-BqFAi9gS.js","names":[],"sources":["../../dashboard/src/components/chat/sessionTrace.ts","../../dashboard/src/components/chat/helpers.ts","../../dashboard/src/components/chat/TraceView.tsx","../../dashboard/src/components/chat/hooks/useTtsPlayingKey.ts","../../dashboard/src/components/chat/MessageBubble.tsx"],"sourcesContent":["\nimport { toTimestamp, responseBodyContainsBlock } from '@/lib/display'\nimport type { ChatStatusEvent as StatusEvent } from '@/store'\nimport type { ChatHistoryImport, ChatHistoryImportEntry, Message } from '@/types'\n\nexport interface ActivityStep { id: number; kind: 'narration' | 'reasoning' | 'tool'; label?: string; text: string; ts: number; turnId?: string }\n\nexport type TimelineEntry =\n | { type: 'message'; msg: Message }\n | { type: 'notice'; msg: Message }\n | { type: 'activity'; steps: ActivityStep[]; timestamp: number }\n | { type: 'import-boundary'; history: ChatHistoryImport; timestamp: number }\n | { type: 'imported-message'; history: ChatHistoryImport; entry: ChatHistoryImportEntry }\n | { type: 'status'; event: StatusEvent }\n | { type: 'date'; date: string; timestamp: number }\n | { type: 'created'; timestamp: number }\n\nexport const TIMELINE_STATUS_LABELS: Record<string, string> = {\n online: 'came online',\n offline: 'went offline',\n shutdown: 'shut down',\n restarted: 'restarted',\n 'compaction-requested': 'compaction requested',\n compacting: 'compaction started',\n compacted: 'context compacted',\n 'compaction-stalled': 'compaction stalled — may need manual intervention',\n 'clear-requested': 'clear requested',\n 'clearing-context': 'clear started',\n 'context-cleared': 'context cleared',\n 'clear-stalled': 'context clear stalled — may need manual intervention',\n 'shutting-down': 'shutting down',\n}\n\nconst TIMELINE_STATUSES = new Set(Object.keys(TIMELINE_STATUS_LABELS))\nconst STATUS_DEDUPE_WINDOW_MS = 3000\n\n// True event time of a message: occurredAt (set when a Runner backfilled a message it had\n// queued during an outage, #196) falling back to the server receive time. Used for chat\n// timeline ordering + display so a backfilled turn lands where it actually happened in the\n// conversation, not at the bottom. Display-only — DB poll cursors still use created_at.\nexport function messageEventTime(msg: Message): number {\n return new Date(msg.occurredAt ?? msg.createdAt).getTime()\n}\n\n// Narration/reasoning/tool session events are mirrored as `kind:\"session\"` messages\n// but must not become chat bubbles — they render inline in the turn's activity trace.\n// (`narration` = the agent's intermediate spoken text; `reasoning` = its thinking.)\nexport function sessionActivityStep(msg: Message): ActivityStep | null {\n if (msg.kind !== 'session') return null\n const s = msg.payload?.session as { type?: string; label?: string; turnId?: string } | undefined\n if (!s || (s.type !== 'narration' && s.type !== 'reasoning' && s.type !== 'tool')) return null\n return {\n id: msg.id,\n kind: s.type,\n label: typeof s.label === 'string' ? s.label : undefined,\n text: msg.body,\n ts: messageEventTime(msg),\n turnId: typeof s.turnId === 'string' ? s.turnId : undefined,\n }\n}\n\n// A `notice` session event (e.g. the runner's durable \"context compacted\" marker) renders\n// as a discreet timeline marker, reusing the StatusMarker path. Its `label` carries a\n// timeline-status key (e.g. \"compacted\"); we surface it as a StatusEvent so it dedupes with\n// the ephemeral live timeline-status decoration and survives a reload (the ephemeral one does\n// not). Returns null for non-notice messages or labels we don't render.\nexport function sessionNoticeStatusEvent(msg: Message): StatusEvent | null {\n if (msg.kind !== 'session') return null\n const s = msg.payload?.session as { type?: string; label?: string } | undefined\n if (s?.type !== 'notice') return null\n const status = typeof s.label === 'string' && s.label ? s.label : 'compacted'\n return { id: `notice-${msg.id}`, status, timestamp: messageEventTime(msg) }\n}\n\n// Bus-level system signals (kind:\"system\", from:\"system\") — e.g. branch.landed,\n// context.warning. Rendered as notice pills, NOT chat bubbles or session status markers.\nexport function isBusSignalMessage(msg: Message): boolean {\n return msg.kind === 'system' && msg.from === 'system'\n}\n\nexport function dateKey(ts: number): string {\n const d = new Date(ts)\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n}\n\nexport function dedupeStatusEvents(statusEvents: StatusEvent[]): StatusEvent[] {\n const events = statusEvents\n .filter((event) => TIMELINE_STATUSES.has(event.status))\n .slice()\n .sort((a, b) => a.timestamp - b.timestamp)\n const result: StatusEvent[] = []\n for (const event of events) {\n if (result.some((existing) => existing.id === event.id)) continue\n if (result.some((existing) => existing.status === event.status && Math.abs(existing.timestamp - event.timestamp) <= STATUS_DEDUPE_WINDOW_MS)) continue\n result.push(event)\n }\n return result\n}\n\nexport function buildTimeline(messages: Message[], statusEvents: StatusEvent[], createdAt?: string | number | null, importedHistory: ChatHistoryImport[] = []): TimelineEntry[] {\n const raw: Array<{ ts: number; entry: TimelineEntry }> = []\n\n for (const history of importedHistory) {\n const firstImportedAt = history.entries.reduce((min, entry) => Math.min(min, toTimestamp(entry.originalCreatedAt)), Number.POSITIVE_INFINITY)\n const boundaryAt = Number.isFinite(firstImportedAt) ? firstImportedAt - 1 : history.importedAt\n raw.push({ ts: boundaryAt, entry: { type: 'import-boundary', history, timestamp: boundaryAt } })\n for (const entry of history.entries) {\n raw.push({ ts: toTimestamp(entry.originalCreatedAt), entry: { type: 'imported-message', history, entry } })\n }\n }\n\n if (createdAt) {\n const ts = new Date(createdAt as string).getTime()\n if (Number.isFinite(ts)) raw.push({ ts, entry: { type: 'created', timestamp: ts } })\n }\n\n // The closing response bubble (session type \"response\") repeats the turn's\n // narration. In `final` capture mode the body is just the final line; in `full`\n // mode it is every narration block joined with blank-line separators\n // (matching extractLastAssistantTurn).\n // Collect the response bodies per turn so a narration step is suppressed from the\n // trace whenever it appears as a blank-line-delimited block of the body — so no line\n // shows twice in either mode (final: only the matching final line; full: all of them).\n const responseBodiesByTurn = new Map<string, string[]>()\n for (const msg of messages) {\n if (msg.kind !== 'session') continue\n const s = msg.payload?.session as { type?: string; turnId?: string } | undefined\n if (s?.type === 'response' && typeof s.turnId === 'string') {\n const list = responseBodiesByTurn.get(s.turnId) ?? []\n list.push(msg.body.trim())\n responseBodiesByTurn.set(s.turnId, list)\n }\n }\n\n const noticeStatusEvents: StatusEvent[] = []\n for (const msg of messages) {\n if (isBusSignalMessage(msg)) {\n raw.push({ ts: messageEventTime(msg), entry: { type: 'notice', msg } })\n continue\n }\n const notice = sessionNoticeStatusEvent(msg)\n if (notice) {\n noticeStatusEvents.push(notice)\n continue\n }\n const step = sessionActivityStep(msg)\n if (step) {\n if (step.kind === 'narration' && step.turnId) {\n const bodies = responseBodiesByTurn.get(step.turnId)\n if (bodies?.some((body) => responseBodyContainsBlock(body, step.text))) continue\n }\n raw.push({ ts: step.ts, entry: { type: 'activity', steps: [step], timestamp: step.ts } })\n continue\n }\n raw.push({ ts: messageEventTime(msg), entry: { type: 'message', msg } })\n }\n for (const event of dedupeStatusEvents([...statusEvents, ...noticeStatusEvents])) {\n raw.push({ ts: event.timestamp, entry: { type: 'status', event } })\n }\n\n const typeOrder = { created: 0, date: 1, 'import-boundary': 2, 'imported-message': 3, message: 4, activity: 4, notice: 4, status: 5 } as const\n raw.sort((a, b) => {\n const dt = a.ts - b.ts\n if (Math.abs(dt) < 3000) return typeOrder[a.entry.type] - typeOrder[b.entry.type] || dt\n return dt\n })\n\n const entries: TimelineEntry[] = []\n let lastDate = ''\n for (const { ts, entry } of raw) {\n if (entry.type === 'created') {\n entries.push(entry)\n continue\n }\n const dk = dateKey(ts)\n if (dk !== lastDate) {\n entries.push({ type: 'date', date: dk, timestamp: ts })\n lastDate = dk\n }\n // Coalesce consecutive activity steps from the same turn into one trace.\n if (entry.type === 'activity') {\n const prev = entries[entries.length - 1]\n if (prev && prev.type === 'activity' && sameActivityTurn(prev, entry)) {\n prev.steps.push(...entry.steps)\n continue\n }\n }\n entries.push(entry)\n }\n\n return entries\n}\n\nexport function sameActivityTurn(a: Extract<TimelineEntry, { type: 'activity' }>, b: Extract<TimelineEntry, { type: 'activity' }>): boolean {\n const at = a.steps[a.steps.length - 1]?.turnId\n const bt = b.steps[0]?.turnId\n if (at && bt) return at === bt\n // No turn id on either side: group adjacent steps regardless.\n return !at && !bt\n}\n","\nimport { AlertCircle, Check, CheckCheck, Clock } from 'lucide-react'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport {\n isReactionEventMessage,\n normalizePathForCompare,\n normalizeReactionEmoji,\n pathWithinBase,\n toTimestamp,\n} from '@/lib/display'\nimport { planLookupKey } from '@/store/slices/plans'\nimport type { Agent, AttachmentRef, InboxThread, Message, Orchestrator, Plan } from '@/types'\nimport type { PendingAttachment } from './types'\n\nexport function formatBytes(size: number): string {\n if (size < 1024) return `${size} B`\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`\n return `${(size / 1024 / 1024).toFixed(1)} MB`\n}\n\nexport function resolveRelativePath(cwd: string, path: string): string {\n if (path.startsWith('/')) return path\n const parts = `${cwd.replace(/\\/+$/, '')}/${path}`.split('/')\n const stack: string[] = []\n for (const part of parts) {\n if (!part || part === '.') continue\n if (part === '..') stack.pop()\n else stack.push(part)\n }\n return '/' + stack.join('/')\n}\n\nexport function parentPath(path: string): string {\n const trimmed = path.replace(/\\/+$/, '')\n const index = trimmed.lastIndexOf('/')\n return index > 0 ? trimmed.slice(0, index) : '/'\n}\n\nexport function orchestratorForFilePreview(orchestrators: Orchestrator[], path: string): Orchestrator | undefined {\n return orchestrators\n .filter((orch) => orch.status === 'online' && pathWithinBase(path, orch.baseDir))\n .sort((a, b) => normalizePathForCompare(b.baseDir).length - normalizePathForCompare(a.baseDir).length)[0] ||\n orchestrators.find((orch) => orch.status === 'online')\n}\n\nexport function supportsSideFilePreview(): boolean {\n return typeof window !== 'undefined' && window.matchMedia('(min-width: 1280px)').matches\n}\n\nexport function hasActiveTextSelection(): boolean {\n return typeof window !== 'undefined' && Boolean(window.getSelection()?.toString())\n}\n\nexport function messageAttachments(msg: Message): AttachmentRef[] {\n const attachments = msg.payload?.attachments\n if (!Array.isArray(attachments)) return []\n return attachments.filter((item): item is AttachmentRef => Boolean(item && typeof item === 'object' && typeof (item as AttachmentRef).artifactId === 'string'))\n}\n\nexport const QUICK_REACTIONS = ['👍', '❤️', '✅', '👀'] as const\n\nexport function groupedReactions(msg: Message): Array<{ emoji: string; count: number; mine: boolean; actors: string[] }> {\n const groups = new Map<string, { emoji: string; count: number; mine: boolean; actors: string[] }>()\n for (const reaction of msg.reactions || []) {\n const emoji = normalizeReactionEmoji(reaction.emoji)\n const current = groups.get(emoji) ?? { emoji, count: 0, mine: false, actors: [] }\n current.count += 1\n current.mine = current.mine || reaction.actorId === HUMAN_AGENT_ID\n current.actors.push(reaction.actorId)\n groups.set(emoji, current)\n }\n return [...groups.values()].sort((a, b) => b.count - a.count || a.emoji.localeCompare(b.emoji))\n}\n\nexport function isReactionEvent(msg: Message): boolean {\n return isReactionEventMessage(msg)\n}\n\nexport function outboundReceipt(msg: Message, peer: string): { label: string; title: string; tone: 'muted' | 'ok' | 'warn' | 'danger'; icon: typeof Check } {\n const readBy = msg.readBy || []\n const expectedReader = msg.resolvedToAgent || peer || msg.to\n const readByExpected = expectedReader ? readBy.includes(expectedReader) : false\n const readBySomeone = readBy.some((id) => id !== HUMAN_AGENT_ID)\n if (readByExpected || readBySomeone) {\n const reader = readByExpected ? expectedReader : readBy.find((id) => id !== HUMAN_AGENT_ID)\n return { label: 'read', title: reader ? `Read by ${reader}` : 'Read by agent', tone: 'ok', icon: CheckCheck }\n }\n if (msg.deliveryStatus === 'delivered') {\n return { label: 'delivered', title: 'Delivered to agent inbox', tone: 'ok', icon: CheckCheck }\n }\n if (msg.deliveryStatus === 'queued') {\n return { label: 'queued', title: 'Queued until the target agent is available', tone: 'warn', icon: Clock }\n }\n if (msg.deliveryStatus === 'failed' || msg.deliveryStatus === 'dead') {\n const detail = msg.deliveryPoisonReason || msg.deliveryLastError || msg.deliveryStatus\n return { label: msg.deliveryStatus, title: detail, tone: 'danger', icon: AlertCircle }\n }\n return { label: 'sent', title: 'Accepted by Relay', tone: 'muted', icon: Check }\n}\n\nexport function messageActivityTimestamp(msg: Message): number {\n const messageAt = toTimestamp(msg.createdAt)\n return (msg.reactions || []).reduce((latest, reaction) => {\n return Math.max(latest, toTimestamp(reaction.updatedAt || reaction.createdAt))\n }, messageAt)\n}\n\nexport function threadActivityTimestamp(thread: InboxThread | undefined): number {\n if (!thread) return 0\n return thread.messages.reduce((latest, msg) => Math.max(latest, messageActivityTimestamp(msg)), 0)\n}\n\nexport function chatTimestamp(iso: string | number): string {\n const d = new Date(iso as string)\n return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n}\n\nexport function revokePendingAttachmentUrls(items: PendingAttachment[]): void {\n for (const item of items) if (item.previewUrl) URL.revokeObjectURL(item.previewUrl)\n}\n\ntype ChatPlanContext = { threadId: string | number; channel?: string } | { teamId: string; channel?: string }\n\nexport function resolveChatPlanContext(\n agent: Agent | null,\n messages: Message[],\n lastMessage: Message | null | undefined,\n plansByThread: Record<string, Plan | null>,\n): ChatPlanContext | null {\n if (agent?.teamId) return { teamId: agent.teamId }\n const ordered = [...messages]\n if (lastMessage && !ordered.some((message) => message.id === lastMessage.id)) ordered.push(lastMessage)\n const threaded = ordered.filter((message) => message.threadId).reverse()\n const knownPlanMessage = threaded.find((message) => Boolean(plansByThread[planLookupKey(message.threadId!, message.channel)]))\n const selected = knownPlanMessage ?? threaded[0]\n if (!selected?.threadId) return null\n return {\n threadId: selected.threadId,\n ...(selected.channel ? { channel: selected.channel } : {}),\n }\n}\n","\nimport { useEffect, useMemo, useState, useSyncExternalStore } from 'react'\nimport type React from 'react'\nimport { AlertCircle, AlertTriangle, Brain, ChevronDown, ChevronRight, ChevronUp, Circle, CircleStop, GitFork, GitMerge, Radio, Terminal } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport { messageBody } from '@/lib/display'\nimport type { ChatHistoryImport, ChatHistoryImportEntry } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { chatTimestamp } from './helpers'\nimport { dateKey, TIMELINE_STATUS_LABELS, type ActivityStep, type TimelineEntry } from './sessionTrace'\nimport type { Message } from '@/types'\nimport type { ChatStatusEvent as StatusEvent } from '@/store'\n\nconst TIMELINE_STATUS_COLORS: Record<string, string> = {\n online: 'text-emerald-400',\n offline: 'text-zinc-400',\n shutdown: 'text-zinc-400',\n restarted: 'text-blue-400',\n 'compaction-requested': 'text-zinc-400',\n compacting: 'text-amber-400',\n compacted: 'text-amber-400',\n 'compaction-stalled': 'text-red-400',\n 'clear-requested': 'text-zinc-400',\n 'clearing-context': 'text-amber-400',\n 'context-cleared': 'text-amber-400',\n 'clear-stalled': 'text-red-400',\n 'shutting-down': 'text-zinc-400',\n}\n\nfunction dateSeparatorLabel(dateStr: string): string {\n const today = new Date()\n const [y, m, d] = dateStr.split('-').map(Number)\n const target = new Date(y!, m! - 1, d)\n const todayKey = dateKey(today.getTime())\n if (dateStr === todayKey) return 'Today'\n const yesterday = new Date(today)\n yesterday.setDate(yesterday.getDate() - 1)\n if (dateStr === dateKey(yesterday.getTime())) return 'Yesterday'\n return target.toLocaleDateString(undefined, { weekday: 'short', month: 'short', day: 'numeric', year: target.getFullYear() !== today.getFullYear() ? 'numeric' : undefined })\n}\n\nexport function StatusMarker({ event }: { event: StatusEvent }) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-2 my-1\">\n <div className=\"h-px flex-1 bg-border\" />\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Circle className={cn('w-2 h-2 fill-current', TIMELINE_STATUS_COLORS[event.status] || 'text-zinc-400')} />\n <span>{TIMELINE_STATUS_LABELS[event.status] || event.status}</span>\n <span className=\"text-muted-foreground/60\">{chatTimestamp(event.timestamp)}</span>\n </div>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n}\n\nconst BUS_SIGNAL_ICON: Record<string, LucideIcon> = {\n 'branch.landed': GitMerge,\n 'context.warning': AlertTriangle,\n}\n\nconst BUS_SIGNAL_LABEL: Record<string, string> = {\n 'branch.landed': 'branch landed',\n 'context.warning': 'context warning',\n}\n\nexport function NoticePill({ msg }: { msg: Message }) {\n const signalKind = typeof msg.payload?.kind === 'string' ? msg.payload.kind : ''\n const Icon: LucideIcon = BUS_SIGNAL_ICON[signalKind] ?? Radio\n const label = BUS_SIGNAL_LABEL[signalKind] ?? (signalKind || 'system signal')\n return (\n <div className=\"flex items-center justify-center gap-2 py-2 my-1\">\n <div className=\"h-px flex-1 bg-border\" />\n <div className=\"flex items-center gap-1.5 rounded-full border border-border bg-muted/30 px-2.5 py-1 text-xs text-muted-foreground\">\n <Icon className=\"h-3 w-3\" />\n <span>{label}</span>\n <span className=\"text-muted-foreground/60\">{chatTimestamp(msg.occurredAt ?? (msg.createdAt as string))}</span>\n </div>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n}\n\nexport function BusyIndicator({ blockedLabel, onInterrupt }: { blockedLabel?: string; onInterrupt?: () => void }) {\n if (blockedLabel) {\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"flex items-center gap-2 rounded-2xl rounded-bl-sm bg-card ring-1 ring-red-500/30 px-4 py-2.5\">\n <AlertCircle className=\"w-3.5 h-3.5 text-red-400\" />\n <span className=\"text-xs text-red-300\">blocked: {blockedLabel}</span>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"flex items-center gap-2 rounded-2xl rounded-bl-sm bg-card ring-1 ring-foreground/10 px-4 py-2.5\">\n <div className=\"flex items-center gap-1\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-yellow-400 animate-[pulse_1.4s_ease-in-out_infinite]\" />\n <span className=\"w-1.5 h-1.5 rounded-full bg-yellow-400 animate-[pulse_1.4s_ease-in-out_0.2s_infinite]\" />\n <span className=\"w-1.5 h-1.5 rounded-full bg-yellow-400 animate-[pulse_1.4s_ease-in-out_0.4s_infinite]\" />\n </div>\n <span className=\"text-xs text-muted-foreground\">working</span>\n {onInterrupt && (\n <button\n onClick={onInterrupt}\n title=\"Interrupt\"\n className=\"ml-1 flex items-center gap-1 rounded-full px-1.5 py-0.5 text-xs text-muted-foreground hover:text-red-300 hover:bg-red-500/10 transition-colors\"\n >\n <CircleStop className=\"w-3.5 h-3.5\" />\n Stop\n </button>\n )}\n </div>\n </div>\n )\n}\n\nconst HIDE_TOOLS_KEY = 'agent-relay:chat-hide-tools'\nconst hideToolsStore = (() => {\n const listeners = new Set<() => void>()\n let value = (() => {\n try {\n return window.localStorage.getItem(HIDE_TOOLS_KEY) === 'on'\n } catch {\n return false\n }\n })()\n const emit = () => listeners.forEach((l) => l())\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', (e) => {\n if (e.key !== HIDE_TOOLS_KEY) return\n value = e.newValue === 'on'\n emit()\n })\n }\n return {\n subscribe(cb: () => void) {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n get: () => value,\n toggle() {\n value = !value\n try {\n window.localStorage.setItem(HIDE_TOOLS_KEY, value ? 'on' : 'off')\n } catch {}\n emit()\n },\n }\n})()\n\nfunction useHideTools(): [boolean, () => void] {\n const hideTools = useSyncExternalStore(hideToolsStore.subscribe, hideToolsStore.get, () => false)\n return [hideTools, hideToolsStore.toggle]\n}\n\nexport function ActivityTrace({ steps, showReasoning }: { steps: ActivityStep[]; showReasoning: boolean }) {\n const [hideTools, toggleHideTools] = useHideTools()\n const visible = showReasoning ? steps : steps.filter((s) => s.kind !== 'reasoning')\n if (!visible.length) return null\n const toolCount = visible.filter((s) => s.kind === 'tool').length\n return (\n <div className=\"flex justify-start mb-2\">\n <div className=\"max-w-[85%] md:max-w-[75%] min-w-0 space-y-1.5\">\n {visible.map((step) => {\n if (step.kind === 'narration') {\n return (\n <FormattedBody\n key={step.id}\n text={step.text}\n className=\"text-sm leading-relaxed break-words text-foreground/90 min-w-0\"\n />\n )\n }\n if (step.kind === 'reasoning') {\n return (\n <div key={step.id} className=\"flex items-start gap-1.5 text-xs leading-relaxed text-muted-foreground/80\">\n <Brain className=\"w-3.5 h-3.5 mt-0.5 shrink-0 opacity-70\" />\n <FormattedBody text={step.text} className=\"italic break-words min-w-0\" />\n </div>\n )\n }\n if (hideTools) return null\n return (\n <div key={step.id} className=\"flex items-start gap-1.5 text-xs leading-relaxed text-muted-foreground\">\n <Terminal className=\"w-3 h-3 mt-0.5 shrink-0 opacity-70\" />\n <span className=\"min-w-0 break-words\">\n <span className=\"font-medium\">{step.label || 'tool'}</span>\n {step.text ? <span className=\"opacity-70\"> — {step.text}</span> : null}\n </span>\n </div>\n )\n })}\n {toolCount > 0 && (\n <button\n onClick={toggleHideTools}\n className=\"flex items-center gap-1 text-[11px] text-muted-foreground/50 hover:text-muted-foreground transition-colors text-left\"\n >\n <ChevronRight className={cn('w-3 h-3 shrink-0 transition-transform', !hideTools && 'rotate-90')} />\n <span>{hideTools ? `show ${toolCount} tool step${toolCount === 1 ? '' : 's'}` : 'hide tool steps'}</span>\n </button>\n )}\n </div>\n </div>\n )\n}\n\nexport function DateSeparator({ date }: { date: string }) {\n return (\n <div className=\"flex items-center justify-center gap-3 py-3 my-1\">\n <div className=\"h-px flex-1 bg-border\" />\n <span className=\"text-xs font-medium text-muted-foreground\">{dateSeparatorLabel(date)}</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n}\n\nexport function CreatedMarker({ timestamp }: { timestamp: number }) {\n const d = new Date(timestamp)\n const label = d.toLocaleString(undefined, { month: 'short', day: 'numeric', year: 'numeric', hour: '2-digit', minute: '2-digit' })\n return (\n <div className=\"flex items-center justify-center gap-2 py-2 my-1\">\n <div className=\"h-px flex-1 bg-border\" />\n <span className=\"text-xs text-muted-foreground/60\">created {label}</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n}\n\nexport function ImportedHistoryMarker({ history }: { history: ChatHistoryImport }) {\n const source = history.sourceAgentLabel || history.sourcePeerId\n const count = history.entries.length\n return (\n <div className=\"flex items-center justify-center gap-2 py-2 my-1\">\n <div className=\"h-px flex-1 bg-border\" />\n <div className=\"flex items-center gap-1.5 rounded-full border border-dashed border-border bg-muted/30 px-2 py-1 text-[11px] text-muted-foreground\">\n <GitFork className=\"h-3 w-3\" />\n <span>forked history from {source}</span>\n <span className=\"text-muted-foreground/60\">{count} {count === 1 ? 'entry' : 'entries'}</span>\n </div>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n}\n\nexport function ImportedMessageBubble({ entry, sourceLabel }: { entry: ChatHistoryImportEntry; sourceLabel?: string }) {\n const msg = entry.message\n const body = messageBody(msg)\n const isOriginalHuman = entry.originalFrom === HUMAN_AGENT_ID\n return (\n <div className={cn('flex mb-3 opacity-80', isOriginalHuman ? 'justify-end' : 'justify-start')}>\n <div className=\"max-w-[85%] md:max-w-[75%]\">\n <div\n className={cn(\n 'rounded-2xl border border-dashed px-3.5 py-2 text-sm select-text',\n isOriginalHuman\n ? 'border-primary/25 bg-primary/10 text-foreground rounded-br-sm'\n : 'border-border bg-card/70 rounded-bl-sm'\n )}\n >\n <div className={cn('mb-1 text-[10px] uppercase tracking-normal', isOriginalHuman ? 'text-primary/70' : 'text-muted-foreground')}>\n forked history · {isOriginalHuman ? 'you' : (sourceLabel || entry.originalFrom)}\n </div>\n <FormattedBody text={body} rawBody={msg.body} className=\"leading-relaxed\" />\n <p className={cn('mt-1 flex items-center justify-end gap-1.5 text-xs', isOriginalHuman ? 'text-primary/60' : 'text-muted-foreground')}>\n <span className=\"opacity-40\">#{entry.originalMessageId}</span>\n <span>{chatTimestamp(entry.originalCreatedAt)}</span>\n </p>\n </div>\n </div>\n </div>\n )\n}\n\nexport function StickyPromptBanner({ scrollRef, timeline }: { scrollRef: React.RefObject<HTMLElement | null>; timeline: TimelineEntry[] }) {\n const [hidden, setHidden] = useState(true)\n const [expandedByPrompt, setExpandedByPrompt] = useState<{ id: number; value: boolean } | null>(null)\n const [collapsedByPrompt, setCollapsedByPrompt] = useState<{ id: number; value: boolean } | null>(null)\n const [promptAbove, setPromptAbove] = useState(true)\n\n const lastOutbound = useMemo(() => {\n for (let i = timeline.length - 1; i >= 0; i--) {\n const entry = timeline[i]\n if (!entry || entry.type !== 'message') continue\n if (entry.msg.from === HUMAN_AGENT_ID) {\n return { id: entry.msg.id, body: messageBody(entry.msg) }\n }\n }\n return null\n }, [timeline])\n\n useEffect(() => {\n const scrollEl = scrollRef.current\n if (!lastOutbound || !scrollEl) { setHidden(true); return }\n const target = scrollEl.querySelector(`[data-msg-id=\"${lastOutbound.id}\"]`)\n if (!target) { setHidden(true); return }\n const observer = new IntersectionObserver(\n ([e]) => {\n if (!e) return\n setHidden(e.isIntersecting)\n if (!e.isIntersecting) {\n const rootTop = e.rootBounds?.top ?? scrollEl.getBoundingClientRect().top\n setPromptAbove(e.boundingClientRect.top < rootTop)\n }\n },\n { root: scrollEl, threshold: 0 }\n )\n observer.observe(target)\n const onScroll = () => {\n const r = target.getBoundingClientRect()\n const sr = scrollEl.getBoundingClientRect()\n setPromptAbove(r.top < sr.top)\n }\n scrollEl.addEventListener('scroll', onScroll, { passive: true })\n return () => { observer.disconnect(); scrollEl.removeEventListener('scroll', onScroll) }\n }, [lastOutbound?.id, scrollRef])\n\n if (hidden || !lastOutbound || !lastOutbound.body.trim()) return null\n\n const expanded = expandedByPrompt?.id === lastOutbound.id ? expandedByPrompt.value : false\n const collapsed = collapsedByPrompt?.id === lastOutbound.id ? collapsedByPrompt.value : false\n\n function scrollToPrompt() {\n const scrollEl = scrollRef.current\n if (!scrollEl || !lastOutbound) return\n const target = scrollEl.querySelector(`[data-msg-id=\"${lastOutbound.id}\"]`)\n target?.scrollIntoView({ behavior: 'smooth', block: 'center' })\n }\n\n const arrow = promptAbove ? '↑' : '↓'\n\n if (collapsed) {\n return (\n <div className=\"sticky top-0 z-10 -mx-3 md:-mx-4 -mt-3 md:-mt-4 bg-background\">\n <button\n type=\"button\"\n className=\"w-full flex items-center justify-center gap-1.5 py-1 text-[11px] text-primary/60 hover:text-primary border-b border-primary/10 transition-colors\"\n onClick={() => setCollapsedByPrompt({ id: lastOutbound.id, value: false })}\n >\n <span>Your prompt</span>\n <ChevronDown className=\"w-3 h-3\" />\n </button>\n </div>\n )\n }\n\n return (\n <div className=\"sticky top-0 z-10 -mx-3 md:-mx-4 -mt-3 md:-mt-4 px-2 md:px-3 pt-2 pb-1.5 bg-background border-b border-primary/10\">\n <div className=\"flex items-center gap-2 text-[11px] text-muted-foreground mb-0.5\">\n <span className=\"font-medium text-primary/70\">Your prompt</span>\n <button\n type=\"button\"\n className=\"ml-auto hover:text-foreground transition-colors\"\n onClick={scrollToPrompt}\n >\n {arrow} scroll to original\n </button>\n <button\n type=\"button\"\n className=\"hover:text-foreground transition-colors\"\n onClick={() => setCollapsedByPrompt({ id: lastOutbound.id, value: true })}\n title=\"Minimize\"\n >\n <ChevronUp className=\"w-3 h-3\" />\n </button>\n </div>\n <p\n className={cn('text-sm text-foreground leading-snug cursor-pointer', !expanded && 'line-clamp-2')}\n onClick={() => setExpandedByPrompt({ id: lastOutbound.id, value: !expanded })}\n >\n {lastOutbound.body}\n </p>\n </div>\n )\n}\n","\nimport { useSyncExternalStore } from 'react'\nimport { voiceTts } from '@/lib/voice'\n\nexport function useTtsPlayingKey(): string | null {\n return useSyncExternalStore(\n (cb) => voiceTts.subscribe(cb),\n () => voiceTts.getPlayingKey(),\n () => null,\n )\n}\n","\nimport { memo, useEffect, useRef, useState } from 'react'\nimport { AlertCircle, CircleStop, Download, FileText, Loader2, SmilePlus, Volume2, X, ZoomIn } from 'lucide-react'\nimport { voiceTts } from '@/lib/voice'\nimport { useRelayStore } from '@/store'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport { Button } from '@/components/ui/button'\nimport { Dialog, DialogContent, DialogTitle } from '@/components/ui/dialog'\nimport { apiBlob } from '@/lib/api'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport { messageBody } from '@/lib/display'\nimport type { AttachmentRef, Message } from '@/types'\nimport { cn } from '@/lib/utils'\nimport type { ReferencedPathInfo } from './types'\nimport {\n chatTimestamp,\n groupedReactions,\n hasActiveTextSelection,\n isReactionEvent,\n messageAttachments,\n outboundReceipt,\n QUICK_REACTIONS,\n resolveRelativePath,\n} from './helpers'\nimport { useTtsPlayingKey } from './hooks/useTtsPlayingKey'\n\nfunction AttachmentPreview({ attachment, outbound }: { attachment: AttachmentRef; outbound: boolean }) {\n const isImage = attachment.kind === 'image'\n const title = attachment.title || attachment.artifactId\n const [objectUrl, setObjectUrl] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [loading, setLoading] = useState(false)\n const [lightboxOpen, setLightboxOpen] = useState(false)\n\n useEffect(() => {\n let cancelled = false\n let url: string | null = null\n\n async function load() {\n setLoading(true)\n setError(null)\n setObjectUrl(null)\n try {\n const blob = await apiBlob(`/artifacts/${encodeURIComponent(attachment.artifactId)}/content`)\n if (cancelled) return\n url = URL.createObjectURL(blob)\n setObjectUrl(url)\n } catch (e) {\n if (!cancelled) setError((e as Error).message)\n } finally {\n if (!cancelled) setLoading(false)\n }\n }\n\n void load()\n return () => {\n cancelled = true\n if (url) URL.revokeObjectURL(url)\n }\n }, [attachment.artifactId])\n\n function download() {\n if (!objectUrl) return\n const a = document.createElement('a')\n a.href = objectUrl\n a.download = title\n document.body.appendChild(a)\n a.click()\n a.remove()\n }\n\n if (isImage) {\n return (\n <>\n <button\n type=\"button\"\n onClick={() => objectUrl && setLightboxOpen(true)}\n disabled={!objectUrl}\n className=\"group/img mt-2 block overflow-hidden rounded-md border border-foreground/10 bg-black/10 text-left disabled:cursor-default relative\"\n >\n {objectUrl ? (\n <>\n <img src={objectUrl} alt={title} loading=\"lazy\" className=\"block max-h-72 max-w-full object-contain\" />\n <span className=\"absolute inset-0 flex items-center justify-center bg-black/0 group-hover/img:bg-black/30 transition-colors\">\n <ZoomIn className=\"w-6 h-6 text-white opacity-0 group-hover/img:opacity-100 transition-opacity drop-shadow-md\" />\n </span>\n </>\n ) : (\n <span className={cn('flex min-h-20 items-center gap-2 px-3 py-2 text-xs', error ? 'text-red-400' : 'text-muted-foreground')}>\n {loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <AlertCircle className=\"h-4 w-4\" />}\n {error || 'Loading image'}\n </span>\n )}\n </button>\n {objectUrl && (\n <Dialog open={lightboxOpen} onOpenChange={setLightboxOpen}>\n <DialogContent className=\"max-w-[95vw] max-h-[95vh] w-auto p-0 bg-black/95 border-zinc-800 gap-0 overflow-hidden\" showCloseButton={false}>\n <DialogTitle className=\"sr-only\">{title}</DialogTitle>\n <div className=\"relative flex items-center justify-center min-h-[200px]\">\n <img src={objectUrl} alt={title} className=\"max-w-[93vw] max-h-[90vh] object-contain\" />\n <div className=\"absolute top-2 right-2 flex gap-1\">\n <button type=\"button\" onClick={download} className=\"rounded-md bg-black/60 hover:bg-black/80 p-2 text-white transition-colors\" title=\"Download\">\n <Download className=\"w-4 h-4\" />\n </button>\n <button type=\"button\" onClick={() => setLightboxOpen(false)} className=\"rounded-md bg-black/60 hover:bg-black/80 p-2 text-white transition-colors\" title=\"Close\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n )}\n </>\n )\n }\n\n return (\n <button\n type=\"button\"\n onClick={download}\n disabled={!objectUrl}\n className={cn(\n 'mt-2 flex w-full items-center gap-2 rounded-md border px-2.5 py-2 text-left text-xs transition-colors disabled:cursor-default disabled:opacity-70',\n outbound ? 'border-primary-foreground/20 bg-primary-foreground/10 hover:bg-primary-foreground/15' : 'border-border bg-background hover:bg-muted'\n )}\n >\n {loading ? <Loader2 className=\"h-4 w-4 shrink-0 animate-spin\" /> : error ? <AlertCircle className=\"h-4 w-4 shrink-0 text-red-400\" /> : <FileText className=\"h-4 w-4 shrink-0\" />}\n <span className={cn('min-w-0 flex-1 truncate', error && 'text-red-400')}>{error || title}</span>\n <Download className=\"h-3.5 w-3.5 shrink-0\" />\n </button>\n )\n}\n\nfunction AddReaction({ open, onToggle, onReact }: { open: boolean; onToggle: () => void; onReact: (emoji: string) => void }) {\n return (\n <div className=\"relative shrink-0\">\n <button\n type=\"button\"\n title=\"Add reaction\"\n onClick={onToggle}\n className={cn(\n 'inline-flex h-5 w-6 items-center justify-center rounded-full border border-border bg-popover text-muted-foreground shadow-sm transition hover:bg-muted hover:text-foreground',\n open ? 'opacity-100' : 'opacity-0 pointer-events-none md:group-hover/msg:opacity-100 md:group-hover/msg:pointer-events-auto'\n )}\n >\n <SmilePlus className=\"h-3 w-3\" />\n </button>\n {open && (\n <div className=\"absolute bottom-full left-0 z-30 mb-1 flex gap-0.5 rounded-full border border-border bg-popover p-0.5 shadow-md\">\n {QUICK_REACTIONS.map((emoji) => (\n <button\n key={emoji}\n type=\"button\"\n title={`React ${emoji}`}\n onClick={() => onReact(emoji)}\n className=\"inline-flex h-6 w-7 items-center justify-center rounded-full text-xs transition-colors hover:bg-muted\"\n >\n {emoji}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport const MessageBubble = memo(function MessageBubble({\n msg,\n peer,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: {\n msg: Message\n peer: string\n onOpenReferencedPath?: (path: string, line?: number, type?: ReferencedPathInfo['type']) => void\n onPreviewReferencedPath?: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd?: () => void\n}) {\n const isPeerMessage = msg.from !== HUMAN_AGENT_ID && msg.to !== HUMAN_AGENT_ID\n // For agent↔agent messages, treat the selected agent (peer) as the local side:\n // messages it sent are outbound (right), messages it received are inbound (left).\n const isOutbound = isPeerMessage ? msg.from === peer : msg.from === HUMAN_AGENT_ID\n const peerLabel = isPeerMessage\n ? (isOutbound ? `→ ${msg.to}` : `from ${msg.from}`)\n : null\n const reactToMessage = useRelayStore((s) => s.reactToMessage)\n const voiceTtsEnabled = useRelayStore((s) => s.voiceTtsEnabled)\n const ttsPlayingKey = useTtsPlayingKey()\n const peerCwd = useRelayStore((s) => {\n const cwd = s.agentsById[peer]?.meta?.cwd\n return typeof cwd === 'string' ? cwd : ''\n })\n const [showQuickReact, setShowQuickReact] = useState(false)\n const bubbleRef = useRef<HTMLDivElement>(null)\n const pointerStartRef = useRef<{ x: number; y: number } | null>(null)\n const suppressBubbleClickRef = useRef(false)\n const body = messageBody(msg)\n const time = chatTimestamp(msg.occurredAt ?? (msg.createdAt as string))\n const attachments = messageAttachments(msg)\n const reactions = groupedReactions(msg)\n const receipt = isOutbound ? outboundReceipt(msg, peer) : null\n const ReceiptIcon = receipt?.icon\n // On-demand TTS: replay any agent response through the same Kokoro/browser\n // pipeline. Only when the speaker is on, and only for inbound non-reaction text.\n const isTtsPlaying = ttsPlayingKey === String(msg.id)\n const showPlayButton = voiceTtsEnabled && !isOutbound && !isPeerMessage && !isReactionEvent(msg) && body.trim().length > 0\n function togglePlay(e: React.MouseEvent) {\n e.stopPropagation()\n if (isTtsPlaying) voiceTts.bargeIn()\n else voiceTts.speak(msg.body, String(msg.id))\n }\n useEffect(() => {\n if (!showQuickReact) return\n function dismiss(e: MouseEvent | TouchEvent) {\n if (hasActiveTextSelection()) return\n if (bubbleRef.current && !bubbleRef.current.contains(e.target as Node)) setShowQuickReact(false)\n }\n document.addEventListener('mousedown', dismiss)\n document.addEventListener('touchstart', dismiss)\n return () => { document.removeEventListener('mousedown', dismiss); document.removeEventListener('touchstart', dismiss) }\n }, [showQuickReact])\n\n function resolvedReferencedPath(path: string): string {\n return resolveRelativePath(peerCwd || '/', path)\n }\n\n function openReferencedPath(path: string, line?: number) {\n const absolute = resolvedReferencedPath(path)\n onOpenReferencedPath?.(absolute, line)\n }\n\n function previewReferencedPath(path: string, line?: number, anchor?: DOMRect) {\n const absolute = resolvedReferencedPath(path)\n onPreviewReferencedPath?.(absolute, line, anchor)\n }\n\n function handleReact(emoji: string) {\n reactToMessage(msg, emoji)\n setShowQuickReact(false)\n }\n\n function handleBubblePointerDown(e: React.PointerEvent<HTMLDivElement>) {\n if (e.button !== 0) return\n pointerStartRef.current = { x: e.clientX, y: e.clientY }\n suppressBubbleClickRef.current = false\n }\n\n function handleBubblePointerMove(e: React.PointerEvent<HTMLDivElement>) {\n const start = pointerStartRef.current\n if (!start) return\n if (Math.abs(e.clientX - start.x) > 3 || Math.abs(e.clientY - start.y) > 3) {\n suppressBubbleClickRef.current = true\n }\n }\n\n function handleBubbleClick(e: React.MouseEvent<HTMLDivElement>) {\n if (isReactionEvent(msg) || isOutbound || isPeerMessage) return\n const target = e.target as HTMLElement\n if (target.closest('a,button,input,textarea,select,[role=\"button\"]')) return\n if (suppressBubbleClickRef.current || hasActiveTextSelection()) {\n suppressBubbleClickRef.current = false\n return\n }\n setShowQuickReact((v) => !v)\n }\n\n return (\n <div data-msg-id={msg.id} className={cn('group/msg flex mb-3', isOutbound ? 'justify-end' : 'justify-start')}>\n <div ref={bubbleRef} className=\"relative max-w-[85%] md:max-w-[75%]\">\n {showPlayButton && (\n <button\n type=\"button\"\n title={isTtsPlaying ? 'Stop playback' : 'Play aloud'}\n onClick={togglePlay}\n className={cn(\n 'absolute -top-2 -right-2 z-20 inline-flex h-6 w-6 items-center justify-center rounded-full border bg-popover shadow-sm transition',\n isTtsPlaying\n ? 'border-primary/50 text-primary opacity-100'\n // Hide-until-hover only on hover-capable devices; touch screens (iPad)\n // have no hover, so keep the button visible there instead of opacity-0.\n : 'border-border text-muted-foreground opacity-70 hover:bg-muted hover:text-foreground hover:opacity-100 [@media(hover:hover)]:md:opacity-0 [@media(hover:hover)]:md:group-hover/msg:opacity-100'\n )}\n >\n {isTtsPlaying ? <CircleStop className=\"h-3.5 w-3.5 animate-pulse\" /> : <Volume2 className=\"h-3.5 w-3.5\" />}\n </button>\n )}\n <div\n className={cn(\n 'rounded-2xl px-3.5 py-2 text-sm select-text',\n !isOutbound && !isReactionEvent(msg) && !isPeerMessage && 'cursor-pointer',\n isOutbound\n ? 'bg-primary text-primary-foreground rounded-br-sm'\n : 'bg-card ring-1 ring-foreground/10 rounded-bl-sm'\n )}\n onPointerDown={handleBubblePointerDown}\n onPointerMove={handleBubblePointerMove}\n onClick={handleBubbleClick}\n >\n {peerLabel && (\n <p className={cn('text-xs font-medium mb-1 opacity-60', isOutbound ? 'text-primary-foreground' : 'text-muted-foreground')}>\n {peerLabel}\n </p>\n )}\n {msg.subject && (\n <p className={cn('text-xs font-semibold mb-1', isOutbound ? 'text-primary-foreground/70' : 'text-muted-foreground')}>\n {msg.subject}\n </p>\n )}\n <FormattedBody\n text={body}\n rawBody={msg.body}\n className=\"leading-relaxed\"\n onOpenPath={openReferencedPath}\n onPreviewPath={previewReferencedPath}\n onPreviewPathEnd={onPreviewReferencedPathEnd}\n resolvePathTitle={(path, line) => `${resolvedReferencedPath(path)}${line ? `:${line}` : ''}`}\n />\n {attachments.map((attachment) => (\n <AttachmentPreview key={`${msg.id}-${attachment.artifactId}-${attachment.role || ''}`} attachment={attachment} outbound={isOutbound} />\n ))}\n <p className={cn('text-xs mt-1 flex items-center gap-1.5', isOutbound ? 'justify-end text-primary-foreground/60' : 'justify-end text-muted-foreground')}>\n <span className=\"opacity-40\">#{msg.id}</span>\n <span>{time}</span>\n {receipt && ReceiptIcon && (\n <span\n className={cn(\n 'inline-flex items-center gap-1',\n receipt.tone === 'ok' && 'text-emerald-300',\n receipt.tone === 'warn' && 'text-amber-200',\n receipt.tone === 'danger' && 'text-red-200'\n )}\n title={receipt.title}\n >\n <ReceiptIcon className=\"h-3 w-3\" />\n {receipt.label}\n </span>\n )}\n </p>\n </div>\n {!isReactionEvent(msg) && reactions.length > 0 && (\n <div className={cn('flex flex-wrap items-center gap-0.5 -mt-1 relative z-10', isOutbound ? 'justify-end pr-2' : 'justify-start pl-2')}>\n {!isOutbound && <AddReaction open={showQuickReact} onToggle={() => setShowQuickReact((v) => !v)} onReact={handleReact} />}\n {reactions.map((reaction) => (\n <button\n key={reaction.emoji}\n type=\"button\"\n title={reaction.actors.join(', ')}\n onClick={() => handleReact(reaction.emoji)}\n className={cn(\n 'inline-flex h-5 items-center gap-0.5 rounded-full border px-1.5 text-[11px] shadow-sm transition-colors',\n reaction.mine\n ? 'border-primary/40 bg-primary/10 text-primary'\n : 'border-border bg-background hover:bg-muted text-foreground'\n )}\n >\n <span>{reaction.emoji}</span>\n {reaction.count > 1 && <span>{reaction.count}</span>}\n </button>\n ))}\n </div>\n )}\n {!isReactionEvent(msg) && !isOutbound && reactions.length === 0 && (\n <div className=\"absolute -bottom-2.5 left-1 z-20\">\n <AddReaction open={showQuickReact} onToggle={() => setShowQuickReact((v) => !v)} onReact={handleReact} />\n </div>\n )}\n </div>\n </div>\n )\n})\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{An as t,Gn as n,N as r,Nn as i,Nt as a,Ot as o,Qt as s,X as c,Y as l,Yt as u,gn as d,jn as f,ot as p,u as m}from"./lucide-react-C3j5Huiw.js";import{o as h,t as g}from"./store-DmxnYVm1.js";import{U as _,f as v,h as y,it as b}from"./display-CketawEF.js";import{t as x}from"./badge-DBZY8x3C.js";import{t as S}from"./button-ClDtrv2m.js";import{s as C}from"./index-0rOVZ5nm.js";import{n as w,t as T}from"./card-Du4YivOo.js";import{a as E,c as D,l as O,n as k,t as A,v as j}from"./MessageBubble-BqFAi9gS.js";var M=e(n(),1),N=i(),P={question:s,reply:l,message:c,operator:m,pair:p,task:u,state:r},F={question:`bg-blue-500/10 text-blue-400 border-blue-500/20`,reply:`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`,message:`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`,operator:`bg-purple-500/10 text-purple-400 border-purple-500/20`,pair:`bg-yellow-500/10 text-yellow-400 border-yellow-500/20`,task:`bg-orange-500/10 text-orange-400 border-orange-500/20`,state:`bg-cyan-500/10 text-cyan-400 border-cyan-500/20`},I=[`question`,`reply`,`message`,`operator`,`pair`,`task`,`state`],L=[`chat`,`session`,`system`,`task`];function R(e){let t=e?.surface;if(!t||typeof t!=`object`)return null;let n=t,r=[];return typeof n.component==`string`&&r.push(n.component),typeof n.view==`string`&&n.view!==n.component&&r.push(n.view),typeof n.session==`string`&&r.push(`tab ${n.session.slice(0,6)}`),typeof n.client==`string`&&r.push(`client ${n.client.slice(0,6)}`),r.length?r.join(` · `):null}function z({entry:e,agentsById:t}){if(e.type===`notice`)return(0,N.jsx)(`div`,{className:`px-1`,children:(0,N.jsx)(D,{msg:e.msg})});if(e.type===`activity`)return(0,N.jsx)(`div`,{className:`px-1 opacity-60`,children:(0,N.jsx)(k,{steps:e.steps,showReasoning:!1})});if(e.type===`status`)return(0,N.jsx)(`div`,{className:`px-1`,children:(0,N.jsx)(O,{event:e.event})});if(e.type===`date`)return(0,N.jsx)(`div`,{className:`px-1`,children:(0,N.jsx)(E,{date:e.date})});if(e.type===`created`||e.type===`import-boundary`||e.type===`imported-message`||e.type!==`message`)return null;let{msg:n}=e,r=v(n.from,t),i=v(n.to,t);return(0,N.jsxs)(`div`,{children:[(0,N.jsxs)(`div`,{className:`flex items-center gap-1.5 px-3 mb-0.5`,children:[(0,N.jsx)(`span`,{className:`text-xs font-mono text-muted-foreground truncate max-w-[140px]`,title:n.from,children:r}),(0,N.jsx)(`span`,{className:`text-xs text-muted-foreground shrink-0`,children:`→`}),(0,N.jsx)(`span`,{className:`text-xs font-mono text-muted-foreground truncate max-w-[140px]`,title:n.to,children:i}),(0,N.jsx)(x,{variant:`outline`,className:`text-[10px] px-1 py-0 shrink-0 ml-1`,children:n.kind})]}),(0,N.jsx)(A,{msg:n,peer:b})]})}function B(){let e=g(e=>e.messages),t=g(e=>e.agentsById),[n,r]=(0,M.useState)(``),[i,a]=(0,M.useState)(``),o=(0,M.useMemo)(()=>{let t=e;if(n){let e=n.toLowerCase();t=t.filter(t=>t.from.toLowerCase().includes(e)||t.to.toLowerCase().includes(e))}return i&&(t=t.filter(e=>e.kind===i)),t},[e,n,i]),s=(0,M.useMemo)(()=>j(o,[]),[o]);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,N.jsx)(`input`,{type:`text`,className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm w-44`,placeholder:`Filter by agent…`,value:n,onChange:e=>r(e.target.value)}),(0,N.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:i,onChange:e=>a(e.target.value),children:[(0,N.jsx)(`option`,{value:``,children:`All kinds`}),L.map(e=>(0,N.jsx)(`option`,{value:e,children:e},e))]}),(0,N.jsx)(x,{variant:`secondary`,className:`ml-auto`,children:o.length})]}),(0,N.jsx)(C,{className:`h-[calc(100dvh-13rem)]`,children:(0,N.jsxs)(`div`,{className:`space-y-1 pr-2`,children:[s.length===0&&(0,N.jsx)(`div`,{className:`text-center text-muted-foreground py-16 text-sm`,children:`No messages yet`}),s.map((e,n)=>(0,N.jsx)(z,{entry:e,agentsById:t},n))]})})]})}function V(){let e=h(),n=g(e=>e.activityFilter),r=g(e=>e.activityEvents),i=g(e=>e.operatorActivity),o=g(e=>e.set),s=g(e=>e.openActivityItem),c=g(e=>e.exportActivity),l=(0,M.useMemo)(()=>{let e=[...r,...i],t=new Set,n=[];for(let r of e){let e=r.clientId||String(r.id);t.has(e)||(t.add(e),n.push(r))}return n.map(e=>({...e,ts:e.ts??new Date(e.createdAt).getTime()})).sort((e,t)=>(t.ts??0)-(e.ts??0))},[r,i]),u=(0,M.useMemo)(()=>n?l.filter(e=>e.kind===n):l,[l,n]);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,N.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:n,onChange:e=>o({activityFilter:e.target.value}),children:[(0,N.jsx)(`option`,{value:``,children:`All types`}),I.map(e=>(0,N.jsx)(`option`,{value:e,children:e},e))]}),(0,N.jsxs)(S,{size:`sm`,variant:`outline`,onClick:()=>c(`markdown`),children:[(0,N.jsx)(a,{className:`w-4 h-4 mr-1`}),` Markdown`]}),(0,N.jsxs)(S,{size:`sm`,variant:`outline`,onClick:()=>c(`json`),children:[(0,N.jsx)(d,{className:`w-4 h-4 mr-1`}),` JSON`]}),(0,N.jsx)(x,{variant:`secondary`,className:`ml-auto`,children:u.length})]}),(0,N.jsx)(C,{className:`h-[calc(100dvh-13rem)]`,children:(0,N.jsxs)(`div`,{className:`space-y-2 pr-2`,children:[u.length===0&&(0,N.jsx)(`div`,{className:`text-center text-muted-foreground py-16 text-sm`,children:`No activity yet`}),u.map(n=>{let r=P[n.kind]||t,i=F[n.kind]||F.message,a=R(n.metadata);return(0,N.jsx)(T,{className:`cursor-pointer hover:bg-accent/40 transition-colors`,onClick:()=>s(n),children:(0,N.jsxs)(w,{className:`p-3 flex gap-3`,children:[(0,N.jsx)(`span`,{className:`inline-flex items-center justify-center w-7 h-7 rounded-md border shrink-0 mt-0.5 ${i}`,children:(0,N.jsx)(r,{className:`w-3.5 h-3.5`})}),(0,N.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,N.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,N.jsx)(`span`,{className:`font-medium text-sm truncate`,children:n.title}),(0,N.jsx)(x,{variant:`outline`,className:`text-xs px-1.5 py-0 border ${i}`,children:n.kind}),(0,N.jsx)(`span`,{className:`text-xs text-muted-foreground ml-auto shrink-0`,title:y(n.ts??n.createdAt),children:_(e,n.ts??n.createdAt)})]}),n.body&&(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground mt-0.5 line-clamp-2`,children:n.body}),n.meta&&(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground/60 mt-0.5 font-mono truncate`,children:n.meta}),a&&(0,N.jsxs)(`p`,{className:`text-xs text-muted-foreground/60 mt-0.5 truncate`,title:a,children:[(0,N.jsx)(`span`,{className:`opacity-70`,children:`via`}),` `,a]})]})]})},n.clientId||n.id)})]})})]})}function H(){let[e,n]=(0,M.useState)(`firehose`);return(0,N.jsxs)(`div`,{className:`space-y-4`,children:[(0,N.jsxs)(`div`,{className:`flex items-center justify-between flex-wrap gap-2`,children:[(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e===`firehose`?(0,N.jsx)(o,{className:`w-5 h-5 text-muted-foreground`}):(0,N.jsx)(t,{className:`w-5 h-5 text-muted-foreground`}),(0,N.jsx)(`h2`,{className:`text-lg font-semibold`,children:e===`firehose`?`Firehose`:`Events`})]}),(0,N.jsxs)(`div`,{className:`flex items-center gap-1 rounded-md border border-input overflow-hidden`,children:[(0,N.jsx)(`button`,{className:f(`px-3 py-1.5 text-sm transition-colors`,e===`firehose`?`bg-primary text-primary-foreground`:`hover:bg-accent`),onClick:()=>n(`firehose`),children:`Firehose`}),(0,N.jsx)(`button`,{className:f(`px-3 py-1.5 text-sm transition-colors`,e===`events`?`bg-primary text-primary-foreground`:`hover:bg-accent`),onClick:()=>n(`events`),children:`Events`})]})]}),e===`firehose`?(0,N.jsx)(B,{}):(0,N.jsx)(V,{})]})}export{H as ActivityView};
|
|
2
|
-
//# sourceMappingURL=activity-D2m3VCXV.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{B as t,Dn as n,G as r,Gn as i,I as a,J as o,Lt as s,Nn as c,P as l,Sn as u,g as d,i as f,jn as p,kt as m,l as h,m as g,ot as _}from"./lucide-react-C3j5Huiw.js";import{o as v,t as y}from"./store-DmxnYVm1.js";import{G as b,K as x,U as ee,V as te,a as S,d as C,i as ne,n as re}from"./display-CketawEF.js";import{o as w,r as T}from"./dist-BafqksRv.js";import{t as E}from"./dist-AopAI8S8.js";import{i as D,n as O}from"./dist-GEKfMylz.js";import{t as k}from"./dist-DhkQna4j.js";import{t as A}from"./dist-B7p3TbNs.js";import{a as j,i as M,n as N,o as P,r as ie,s as ae,t as F}from"./es2015-DwZxGtk9.js";import{a as I,i as oe,n as se,r as L,t as R}from"./dist-C0PA00sq.js";import{t as z}from"./badge-DBZY8x3C.js";import{t as B}from"./button-ClDtrv2m.js";import{t as ce}from"./copy-button-DXWhNsIl.js";import{B as le,H as V,P as ue,S as H,U,V as W,d as de,g as fe,h as pe,l as me,m as he,p as ge,u as _e,x as G}from"./index-0rOVZ5nm.js";import{n as ve,t as ye}from"./card-Du4YivOo.js";import{n as be,t as xe}from"./branch-state-badge-B9WqTxZJ.js";var K=e(i(),1),q=c(),J=`Popover`,[Se,Ce]=D(J,[I]),Y=I(),[we,X]=Se(J),Te=e=>{let{__scopePopover:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!1}=e,s=Y(t),c=K.useRef(null),[l,u]=K.useState(!1),[d,f]=k({prop:r,defaultProp:i??!1,onChange:a,caller:J});return(0,q.jsx)(oe,{...s,children:(0,q.jsx)(we,{scope:t,contentId:ae(),triggerRef:c,open:d,onOpenChange:f,onOpenToggle:K.useCallback(()=>f(e=>!e),[f]),hasCustomAnchor:l,onCustomAnchorAdd:K.useCallback(()=>u(!0),[]),onCustomAnchorRemove:K.useCallback(()=>u(!1),[]),modal:o,children:n})})};Te.displayName=J;var Ee=`PopoverAnchor`,De=K.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=X(Ee,n),a=Y(n),{onCustomAnchorAdd:o,onCustomAnchorRemove:s}=i;return K.useEffect(()=>(o(),()=>s()),[o,s]),(0,q.jsx)(R,{...a,...r,ref:t})});De.displayName=Ee;var Oe=`PopoverTrigger`,ke=K.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=X(Oe,n),a=Y(n),o=w(t,i.triggerRef),s=(0,q.jsx)(E.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.contentId,"data-state":Ve(i.open),...r,ref:o,onClick:O(e.onClick,i.onOpenToggle)});return i.hasCustomAnchor?s:(0,q.jsx)(R,{asChild:!0,...a,children:s})});ke.displayName=Oe;var Z=`PopoverPortal`,[Ae,je]=Se(Z,{forceMount:void 0}),Me=e=>{let{__scopePopover:t,forceMount:n,children:r,container:i}=e,a=X(Z,t);return(0,q.jsx)(Ae,{scope:t,forceMount:n,children:(0,q.jsx)(A,{present:n||a.open,children:(0,q.jsx)(M,{asChild:!0,container:i,children:r})})})};Me.displayName=Z;var Q=`PopoverContent`,Ne=K.forwardRef((e,t)=>{let n=je(Q,e.__scopePopover),{forceMount:r=n.forceMount,...i}=e,a=X(Q,e.__scopePopover);return(0,q.jsx)(A,{present:r||a.open,children:a.modal?(0,q.jsx)(Fe,{...i,ref:t}):(0,q.jsx)(Ie,{...i,ref:t})})});Ne.displayName=Q;var Pe=T(`PopoverContent.RemoveScroll`),Fe=K.forwardRef((e,t)=>{let n=X(Q,e.__scopePopover),r=K.useRef(null),i=w(t,r),a=K.useRef(!1);return K.useEffect(()=>{let e=r.current;if(e)return F(e)},[]),(0,q.jsx)(N,{as:Pe,allowPinchZoom:!0,children:(0,q.jsx)(Le,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:O(e.onCloseAutoFocus,e=>{e.preventDefault(),a.current||n.triggerRef.current?.focus()}),onPointerDownOutside:O(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;a.current=t.button===2||n},{checkForDefaultPrevented:!1}),onFocusOutside:O(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1})})})}),Ie=K.forwardRef((e,t)=>{let n=X(Q,e.__scopePopover),r=K.useRef(!1),i=K.useRef(!1);return(0,q.jsx)(Le,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),Le=K.forwardRef((e,t)=>{let{__scopePopover:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,disableOutsidePointerEvents:o,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:l,onInteractOutside:u,...d}=e,f=X(Q,n),p=Y(n);return ie(),(0,q.jsx)(j,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,q.jsx)(P,{asChild:!0,disableOutsidePointerEvents:o,onInteractOutside:u,onEscapeKeyDown:s,onPointerDownOutside:c,onFocusOutside:l,onDismiss:()=>f.onOpenChange(!1),children:(0,q.jsx)(L,{"data-state":Ve(f.open),role:`dialog`,id:f.contentId,...p,...d,ref:t,style:{...d.style,"--radix-popover-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-popover-content-available-width":`var(--radix-popper-available-width)`,"--radix-popover-content-available-height":`var(--radix-popper-available-height)`,"--radix-popover-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-popover-trigger-height":`var(--radix-popper-anchor-height)`}})})})}),$=`PopoverClose`,Re=K.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=X($,n);return(0,q.jsx)(E.button,{type:`button`,...r,ref:t,onClick:O(e.onClick,()=>i.onOpenChange(!1))})});Re.displayName=$;var ze=`PopoverArrow`,Be=K.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=Y(n);return(0,q.jsx)(se,{...i,...r,ref:t})});Be.displayName=ze;function Ve(e){return e?`open`:`closed`}var He=Te,Ue=ke,We=Me,Ge=Ne;function Ke({...e}){return(0,q.jsx)(He,{"data-slot":`popover`,...e})}function qe({...e}){return(0,q.jsx)(Ue,{"data-slot":`popover-trigger`,...e})}function Je({className:e,align:t=`center`,sideOffset:n=4,...r}){return(0,q.jsx)(We,{children:(0,q.jsx)(Ge,{"data-slot":`popover-content`,align:t,sideOffset:n,className:p(`z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...r})})}function Ye({className:e,...t}){return(0,q.jsx)(`div`,{"data-slot":`popover-header`,className:p(`flex flex-col gap-0.5 text-sm`,e),...t})}function Xe({className:e,...t}){return(0,q.jsx)(`div`,{"data-slot":`popover-title`,className:p(`font-medium`,e),...t})}function Ze({agent:e,childAgents:n=[],parentAgent:i}){let a=v();y(e=>e.set);let c=y(e=>e.switchView),u=y(e=>e.openInboxThread),f=y(e=>e.openAgentDetail),p=y(e=>e.openPairInvite),w=y(e=>e.openRename),T=y(e=>e.openConfirm),E=y(e=>e.doAgentAction),D=y(e=>e.doDeleteAgent),O=y(e=>e.openFilesForAgent),k=y(e=>e.workspaceAction),A=y(e=>e.openWorkspaceFocus),{terminalOpen:j,terminalTarget:M,terminalOpening:N,openTerminal:P,closeTerminal:ie}=be(e.id),ae=le(),F=ne(a,e,ue(e),ae[e.id]||null),I=S(e,`shutdown`),oe=S(e,`compact`),se=S(e,`clearContext`),L=!!(e.providerCapabilities?.terminal?.live?.read||e.providerCapabilities?.terminal?.attach?.create),R=!!(e.providerCapabilities?.terminal?.live?.write||e.providerCapabilities?.model?.provider===`claude`),V=re(e),U=i?C(i):e.spawnedBy,W=n.length>0;return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(ye,{className:`group hover:border-zinc-600 transition-colors cursor-pointer`,onClick:()=>f(e),children:(0,q.jsxs)(ve,{className:`p-4`,children:[(0,q.jsxs)(`div`,{className:`flex items-start gap-2.5 mb-2.5`,children:[(0,q.jsx)(H,{agent:e,now:a,className:`mt-0.5`}),(0,q.jsx)(G,{agent:e}),(0,q.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,q.jsx)(`div`,{className:`text-sm font-medium truncate`,children:C(e)}),(0,q.jsx)(`div`,{className:`text-xs mt-0.5 ${b(F.tone)}`,children:F.label}),typeof e.meta?.cwd==`string`&&e.meta.cwd&&(0,q.jsx)(`button`,{type:`button`,className:`mt-0.5 block max-w-full truncate font-mono text-[10px] text-muted-foreground hover:text-foreground`,title:`Open ${e.meta.cwd} in Files`,onClick:t=>{t.stopPropagation(),O(e)},children:te(e.meta.cwd)})]}),e.branchState&&e.branchWorkspaceId&&(0,q.jsx)(xe,{state:e.branchState,className:`mt-0.5 shrink-0`,onClick:t=>{t.stopPropagation(),A(e.branchWorkspaceId)}})]}),F.badges.length>0&&(0,q.jsx)(`div`,{className:`flex flex-wrap gap-1 mb-2`,children:F.badges.map(e=>(0,q.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded-full font-medium ${e.className}`,children:e.label},e.label))}),(W||e.spawnedBy&&U)&&(0,q.jsxs)(`div`,{className:`mb-2 flex flex-wrap gap-1.5`,onClick:e=>e.stopPropagation(),children:[W&&(0,q.jsxs)(Ke,{children:[(0,q.jsx)(qe,{asChild:!0,children:(0,q.jsxs)(`button`,{type:`button`,className:`inline-flex h-6 max-w-full items-center gap-1.5 rounded-full border border-sky-500/30 bg-sky-500/10 px-2 text-[10px] font-medium text-sky-300 transition-colors hover:bg-sky-500/15`,title:`${n.length} live child ${n.length===1?`agent`:`agents`}`,children:[(0,q.jsx)(h,{className:`h-3 w-3`}),(0,q.jsx)(`span`,{children:n.length}),(0,q.jsx)(`span`,{className:`flex -space-x-1`,children:n.slice(0,4).map(e=>(0,q.jsx)(H,{agent:e,now:a,className:`h-2 w-2 ring-1 ring-background`},e.id))})]})}),(0,q.jsxs)(Je,{align:`start`,className:`w-80`,onClick:e=>e.stopPropagation(),children:[(0,q.jsx)(Ye,{children:(0,q.jsx)(Xe,{children:`Team`})}),(0,q.jsx)(`div`,{className:`space-y-1.5`,children:n.map(e=>(0,q.jsxs)(`div`,{className:`rounded-md border border-border bg-card/60 p-2`,children:[(0,q.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,q.jsx)(H,{agent:e,now:a,className:`mt-1`}),(0,q.jsx)(G,{agent:e}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`div`,{className:`truncate text-xs font-medium`,children:C(e)}),(0,q.jsx)(`div`,{className:`truncate text-[10px] text-muted-foreground`,children:e.providerCapabilities?.model?.alias||e.providerCapabilities?.model?.id||e.providerCapabilities?.model?.provider||e.status})]}),(0,q.jsx)(z,{variant:`outline`,className:`h-4 px-1.5 text-[9px]`,children:e.status})]}),(0,q.jsxs)(`div`,{className:`mt-2 flex gap-1`,children:[(0,q.jsx)(B,{size:`xs`,variant:`outline`,onClick:()=>f(e),children:`Open`}),(0,q.jsxs)(B,{size:`xs`,variant:`ghost`,onClick:()=>{u(e.id),c(`chat`)},children:[(0,q.jsx)(o,{className:`h-3 w-3`}),`Chat`]})]})]},e.id))})]})]}),e.spawnedBy&&U&&(0,q.jsx)(z,{variant:`outline`,className:`max-w-full text-[10px] text-muted-foreground`,children:(0,q.jsxs)(`span`,{className:`truncate`,children:[`spawned by `,U]})})]}),(e.tags.length>0||x(e.capabilities).length>0)&&(0,q.jsxs)(`div`,{className:`flex flex-wrap gap-1 mb-2`,children:[e.tags.slice(0,3).map(e=>(0,q.jsx)(z,{variant:`outline`,className:`text-[9px] px-1 py-0 h-4`,children:e},e)),x(e.capabilities).slice(0,2).map(e=>(0,q.jsx)(z,{variant:`secondary`,className:`text-[9px] px-1 py-0 h-4`,children:e},e))]}),(0,q.jsxs)(`div`,{className:`space-y-2 mb-2`,children:[(0,q.jsx)(pe,{agent:e}),(0,q.jsx)(he,{agent:e,compact:!0}),(0,q.jsx)(fe,{agent:e})]}),(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e.id!==`user`&&e.id!==`system`&&ee(a,e.lastSeen)}),(0,q.jsxs)(`div`,{className:`flex gap-1 mt-2.5 opacity-100 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity`,onClick:e=>e.stopPropagation(),children:[(0,q.jsx)(ce,{value:e.id,label:`Copy agent ID`,size:`icon`,className:`h-7 w-7`,iconClassName:`w-3 h-3`}),(0,q.jsx)(B,{size:`icon`,variant:`ghost`,className:`h-7 w-7`,title:`Chat`,onClick:()=>{u(e.id),c(`chat`)},children:(0,q.jsx)(o,{className:`w-3 h-3`})}),(0,q.jsx)(B,{size:`icon`,variant:`ghost`,className:`h-7 w-7`,title:`Pair`,onClick:()=>p(e.id),children:(0,q.jsx)(_,{className:`w-3 h-3`})}),(0,q.jsx)(B,{size:`icon`,variant:`ghost`,className:`h-7 w-7`,title:`Rename`,onClick:()=>w(e),children:(0,q.jsx)(t,{className:`w-3 h-3`})}),L&&(0,q.jsx)(B,{size:`icon`,variant:`ghost`,className:`h-7 w-7`,title:`Terminal`,disabled:N,onClick:()=>void P(),children:(0,q.jsx)(d,{className:`w-3 h-3`})}),(e.branchState===`changes`||e.branchState===`idle`)&&e.branchWorkspaceId&&(0,q.jsx)(B,{size:`icon`,variant:`ghost`,className:`h-7 w-7 text-amber-400 hover:text-amber-300`,title:`Mark workspace ready — hand off to the auto-merge`,onClick:()=>T(`Mark Workspace Ready`,`Mark ${C(e)}'s branch ready to land? The relay auto-merge will rebase and land it.`,()=>k(e.branchWorkspaceId,`ready`)),children:(0,q.jsx)(m,{className:`w-3 h-3`})}),oe&&(0,q.jsx)(B,{size:`icon`,variant:`ghost`,className:`h-7 w-7`,title:`Compact`,onClick:()=>T(`Compact Agent`,`Compact context for ${C(e)}?`,()=>E(e,`compact`,`agents-grid`)),children:(0,q.jsx)(r,{className:`w-3 h-3`})}),se&&(0,q.jsx)(B,{size:`icon`,variant:`ghost`,className:`h-7 w-7`,title:`Clear Context`,onClick:()=>T(`Clear Context`,`Clear context for ${C(e)}?`,()=>E(e,`clearContext`,`agents-grid`)),children:(0,q.jsx)(s,{className:`w-3 h-3`})}),I&&(0,q.jsx)(B,{size:`icon`,variant:`ghost`,className:`h-7 w-7 text-red-400 hover:text-red-300`,title:`Shutdown`,onClick:()=>T(`Shutdown Agent`,`Shutdown ${C(e)}?`,()=>E(e,`shutdown`,`agents-grid`)),children:(0,q.jsx)(l,{className:`w-3 h-3`})}),V&&(0,q.jsx)(B,{size:`icon`,variant:`ghost`,className:`h-7 w-7 text-red-400 hover:text-red-300`,title:`Forget stale agent`,onClick:()=>T(`Forget Agent`,`Forget ${C(e)}?`,()=>D(e.id)),children:(0,q.jsx)(g,{className:`w-3 h-3`})})]})]})}),M&&(0,q.jsx)(ge,{open:j,onOpenChange:ie,orchestratorId:M.orchestratorId,session:M.session,interactive:M.interactive||R})]})}function Qe(){let e=y(e=>e.agentPresetFilter),t=y(e=>e.agentStatusFilter),r=y(e=>e.agentTagFilter),i=y(e=>e.agentHostFilter),o=y(e=>e.agentSort),s=y(e=>e.agentSortDir),c=y(e=>e.showOffline),l=y(e=>e.set),d=y(e=>e.openAgentSpawn),p=y(e=>e.agentsById),m=v(),h=W(),g=U(),_=V(),b=me(h,m),x=de(h,m),ee=e||t||r||i;function te(){l({agentPresetFilter:``,agentStatusFilter:``,agentTagFilter:``,agentHostFilter:``})}function S(){l({agentSortDir:s===`asc`?`desc`:`asc`})}return(0,q.jsxs)(`div`,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsxs)(`select`,{value:e,onChange:e=>l({agentPresetFilter:e.target.value}),className:`h-8 rounded-md border border-border bg-card text-sm px-2 text-foreground`,children:[(0,q.jsx)(`option`,{value:``,children:`All agents`}),(0,q.jsx)(`option`,{value:`active`,children:`Active`}),(0,q.jsx)(`option`,{value:`claude`,children:`Claude`}),(0,q.jsx)(`option`,{value:`codex`,children:`Codex`}),(0,q.jsx)(`option`,{value:`paired`,children:`Paired`}),(0,q.jsx)(`option`,{value:`unpaired`,children:`Unpaired`}),(0,q.jsx)(`option`,{value:`offline_stale`,children:`Offline / Stale`})]}),(0,q.jsxs)(`select`,{value:t,onChange:e=>l({agentStatusFilter:e.target.value}),className:`h-8 rounded-md border border-border bg-card text-sm px-2 text-foreground`,children:[(0,q.jsx)(`option`,{value:``,children:`Any status`}),(0,q.jsx)(`option`,{value:`online`,children:`Online`}),(0,q.jsx)(`option`,{value:`idle`,children:`Idle`}),(0,q.jsx)(`option`,{value:`busy`,children:`Busy`}),(0,q.jsx)(`option`,{value:`offline`,children:`Offline`}),(0,q.jsx)(`option`,{value:`starting`,children:`Starting`})]}),g.length>0&&(0,q.jsxs)(`select`,{value:r,onChange:e=>l({agentTagFilter:e.target.value}),className:`h-8 rounded-md border border-border bg-card text-sm px-2 text-foreground`,children:[(0,q.jsx)(`option`,{value:``,children:`Any tag`}),g.map(e=>(0,q.jsx)(`option`,{value:e,children:e},e))]}),_.length>1&&(0,q.jsxs)(`select`,{value:i,onChange:e=>l({agentHostFilter:e.target.value}),className:`h-8 rounded-md border border-border bg-card text-sm px-2 text-foreground`,children:[(0,q.jsx)(`option`,{value:``,children:`Any host`}),_.map(e=>(0,q.jsx)(`option`,{value:e,children:e},e))]}),(0,q.jsxs)(`select`,{value:o,onChange:e=>l({agentSort:e.target.value}),className:`h-8 rounded-md border border-border bg-card text-sm px-2 text-foreground`,children:[(0,q.jsx)(`option`,{value:`status`,children:`Sort: Status`}),(0,q.jsx)(`option`,{value:`name`,children:`Sort: Name`}),(0,q.jsx)(`option`,{value:`lastSeen`,children:`Sort: Last seen`}),(0,q.jsx)(`option`,{value:`created`,children:`Sort: Created`})]}),(0,q.jsx)(B,{size:`icon`,variant:`outline`,className:`h-8 w-8`,title:`Toggle sort direction`,onClick:S,children:s===`asc`?(0,q.jsx)(u,{className:`w-3.5 h-3.5`}):(0,q.jsx)(n,{className:`w-3.5 h-3.5`})}),(0,q.jsxs)(`label`,{className:`flex items-center gap-1.5 text-sm text-muted-foreground cursor-pointer select-none`,children:[(0,q.jsx)(`input`,{type:`checkbox`,checked:c,onChange:e=>l({showOffline:e.target.checked}),className:`rounded`}),`Show offline`]}),ee&&(0,q.jsxs)(B,{size:`sm`,variant:`ghost`,className:`h-8 text-muted-foreground hover:text-foreground gap-1`,onClick:te,children:[(0,q.jsx)(f,{className:`w-3 h-3`}),`Clear filters`]}),(0,q.jsx)(`div`,{className:`ml-auto`,children:(0,q.jsxs)(B,{size:`sm`,onClick:d,className:`gap-1`,children:[(0,q.jsx)(a,{className:`w-3.5 h-3.5`}),`Spawn`]})})]}),x.length===0?(0,q.jsx)(`div`,{className:`text-center py-16 text-muted-foreground text-sm`,children:`No agents match the current filters.`}):(0,q.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 gap-3`,children:x.map(e=>(0,q.jsx)(Ze,{agent:e,parentAgent:e.spawnedBy?p[e.spawnedBy]??null:null,childAgents:_e(b.get(e.id)??[])},e.id))})]})}export{Qe as AgentsView};
|
|
2
|
-
//# sourceMappingURL=agents-lDwoWazM.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{Gn as t,Nn as n,Pn as r,Xt as i,a,jn as o,p as s,tn as c,xt as l}from"./lucide-react-C3j5Huiw.js";import{t as u}from"./store-DmxnYVm1.js";var d=e(t(),1);function f(e){let t=u(e=>e.showError),[n,i]=(0,d.useState)(!1),[a,o]=(0,d.useState)(null),[s,c]=(0,d.useState)(!1);async function l(){if(!(!e||s)){c(!0);try{o(await r(`POST`,`/agents/`+encodeURIComponent(e)+`/terminal-session`)),i(!0)}catch(e){t(`Terminal Failed`,e.message)}finally{c(!1)}}}function f(t){if(t){i(!0);return}i(!1);let n=a;o(null),e&&n?.mode===`guest`&&r(`DELETE`,`/agents/`+encodeURIComponent(e)+`/terminal-session/`+encodeURIComponent(n.session)).catch(()=>{})}return{terminalOpen:n,terminalTarget:a,terminalOpening:s,openTerminal:l,closeTerminal:f}}var p=n(),m={idle:{label:`idle`,tip:`Branch worktree — nothing to land yet.`,className:`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`,Icon:i},changes:{label:`changes`,tip:`Unlanded work in this branch — use "Mark workspace ready" to land it.`,className:`bg-amber-500/10 text-amber-400 border-amber-500/20`,Icon:l},ready:{label:`ready`,tip:`Handed off — the relay auto-merge will land it (~2 min sweep).`,className:`bg-blue-500/10 text-blue-400 border-blue-500/20`,Icon:c},steward:{label:`steward`,tip:`Under reconciliation — a steward is landing it. No action needed.`,className:`bg-orange-500/10 text-orange-400 border-orange-500/20`,Icon:a},blocked:{label:`blocked`,tip:`Escalated — the auto-merge/steward path is stuck. Needs human attention.`,className:`bg-red-500/10 text-red-400 border-red-500/20`,Icon:s}};function h({state:e,onClick:t,iconOnly:n=!1,className:r}){let i=m[e],{Icon:a}=i,s=!!t,c=s?`${i.tip} Click to open this workspace.`:i.tip;return(0,p.jsxs)(`span`,{role:s?`button`:void 0,tabIndex:s?0:void 0,title:c,onClick:t,onKeyDown:s?e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),t?.(e))}:void 0,className:o(`inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-[10px] font-medium leading-none`,i.className,s&&`cursor-pointer hover:brightness-125 focus:outline-none focus:ring-1 focus:ring-current`,r),children:[(0,p.jsx)(a,{className:`h-2.5 w-2.5 shrink-0`}),!n&&(0,p.jsx)(`span`,{children:i.label})]})}export{f as n,h as t};
|
|
2
|
-
//# sourceMappingURL=branch-state-badge-B9WqTxZJ.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import"./chunk-CilyBKbf.js";import{Gn as e,Nn as t,jn as n}from"./lucide-react-C3j5Huiw.js";e();var r=t();function i({className:e,size:t=`default`,...i}){return(0,r.jsx)(`div`,{"data-slot":`card`,"data-size":t,className:n(`group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl`,e),...i})}function a({className:e,...t}){return(0,r.jsx)(`div`,{"data-slot":`card-header`,className:n(`group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3`,e),...t})}function o({className:e,...t}){return(0,r.jsx)(`div`,{"data-slot":`card-title`,className:n(`font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm`,e),...t})}function s({className:e,...t}){return(0,r.jsx)(`div`,{"data-slot":`card-content`,className:n(`px-4 group-data-[size=sm]/card:px-3`,e),...t})}export{o as i,s as n,a as r,i as t};
|
|
2
|
-
//# sourceMappingURL=card-Du4YivOo.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{D as t,Dn as n,Dt as r,E as i,G as a,Gn as o,H as s,I as c,J as l,K as u,Lt as d,Nn as f,On as p,P as m,Pn as h,Rn as g,Rt as _,Sn as v,Ut as y,Z as b,Zt as x,_n as S,an as C,at as w,bt as T,c as E,et as D,g as ee,i as te,in as ne,it as O,jn as re,jt as ie,kt as ae,nn as oe,on as se,r as ce,rn as le,s as ue,sn as de,tt as fe,wn as pe,x as me,zt as he}from"./lucide-react-C3j5Huiw.js";import{t as ge}from"./react-dom-2FP7-B7N.js";import{d as _e,f as ve,l as ye,o as be,p as xe,t as k}from"./store-DmxnYVm1.js";import{A as Se,K as Ce,L as we,O as Te,Q as Ee,U as De,V as Oe,W as ke,a as Ae,d as A,h as je,o as Me,q as Ne,r as Pe,w as Fe}from"./display-CketawEF.js";import{t as j}from"./badge-DBZY8x3C.js";import{t as M}from"./button-ClDtrv2m.js";import{t as Ie}from"./input-DFZRjj8b.js";import{t as Le}from"./copy-button-DXWhNsIl.js";import{A as Re,C as ze,D as Be,F as Ve,H as He,O as Ue,S as We,_ as Ge,a as Ke,b as qe,c as Je,h as Ye,i as Xe,j as Ze,k as Qe,o as $e,p as et,r as tt,t as nt,v as rt,w as it,x as at,y as ot}from"./index-0rOVZ5nm.js";import{t as st}from"./use-keyboard-viewport-BUkrw3Gx.js";import{_ as ct,a as lt,c as ut,d as dt,f as ft,g as pt,h as mt,i as ht,l as gt,m as _t,n as vt,o as yt,p as bt,r as xt,s as St,t as Ct,u as wt,v as Tt}from"./MessageBubble-BqFAi9gS.js";import{n as Et,t as Dt}from"./branch-state-badge-B9WqTxZJ.js";import{t as Ot}from"./PlanGraphPanel-CJROpj66.js";var N=e(o(),1);function kt(){let e=k(e=>e.agents),t=k(e=>e.showBuiltIns),n=k(e=>e.showOffline),r=k(e=>e.chatAgentSearch),i=k(e=>e.chatAgentProviderFilter),a=k(e=>e.chatAgentStatusFilter),o=k(e=>e.chatAgentTagFilter),s=k(e=>e.chatAgentCapFilter),c=k(e=>e.chatAgentHostFilter),l=k(e=>e.chatAgentSort),u=k(e=>e.chatAgentSortDir),d=k(e=>e.managedPolicies);return(0,N.useMemo)(()=>{let f=Ne(e,t,d);if(n||(f=f.filter(e=>e.status!==`offline`)),r){let e=r.toLowerCase();f=f.filter(t=>t.id.toLowerCase().includes(e)||(t.name||``).toLowerCase().includes(e)||(t.label||``).toLowerCase().includes(e)||(t.tags||[]).some(t=>t.toLowerCase().includes(e))||(t.capabilities||[]).some(t=>t.toLowerCase().includes(e)))}i&&(f=f.filter(e=>Me(e)===i)),a&&(f=f.filter(e=>e.status===a)),o&&(f=f.filter(e=>(e.tags||[]).includes(o))),s&&(f=f.filter(e=>(e.capabilities||[]).includes(s))),c&&(f=f.filter(e=>(e.machine||``)===c));let p=u===`desc`?-1:1;return[...f].sort((e,t)=>l===`name`?A(e).localeCompare(A(t))*p:l===`lastSeen`?(ke(t.lastSeen)-ke(e.lastSeen))*p||A(e).localeCompare(A(t)):((Ee[e.status]??9)-(Ee[t.status]??9))*p||A(e).localeCompare(A(t)))},[e,t,n,d,r,i,a,o,s,c,l,u])}var P=f();function At({threads:e,onSelectAgent:r}){let i=k(e=>e.set),a=k(e=>e.openInboxThread),o=k(e=>e.openAgentSpawn),s=k(e=>e.selectedInboxThread),l=k(e=>e.chatAgentSearch),u=k(e=>e.chatAgentSort),d=k(e=>e.chatAgentSortDir),f=k(e=>e.chatAgentProviderFilter),p=k(e=>e.chatAgentStatusFilter),m=k(e=>e.chatAgentTagFilter),h=k(e=>e.chatAgentCapFilter),g=k(e=>e.chatAgentHostFilter),_=k(e=>e.chatAgentGroupBy),b=k(e=>e.chatAgentFiltersCollapsed),x=k(e=>e.agentsById),C=be(),w=kt(),T=(0,N.useMemo)(()=>{let t=new Map;for(let n of e)t.set(n.peer,n);return t},[e]),E=(0,N.useMemo)(()=>{if(u!==`lastMessage`)return w;let e=d===`desc`?-1:1;return[...w].sort((t,n)=>{let r=ct(T.get(t.id));return(ct(T.get(n.id))-r)*e||A(t).localeCompare(A(n))})},[w,u,d,T]),D=(0,N.useMemo)(()=>[...new Set(w.flatMap(e=>e.tags||[]))],[w]),ee=(0,N.useMemo)(()=>[...new Set(w.flatMap(e=>Ce(e.capabilities||[])))],[w]),te=He(),ne=(0,N.useMemo)(()=>{if(_!==`project`)return null;let e=new Map;for(let t of E){let n=ot(t)||`No project`,r=e.get(n);r?r.push(t):e.set(n,[t])}return[...e.entries()].sort((e,t)=>e[0].localeCompare(t[0]))},[E,_]),O=[f,p,m,h,g].filter(Boolean).length,ie=(0,N.useMemo)(()=>Je(E,x,C),[E,x,C]);function ae(e){a(e,T.get(e)?.messages),r?.(e)}function ce(e){let{agent:t}=e,n=T.get(t.id),r=n?.attention.unread||0,i=Pe(t),a=n?.previewMessage,o=ct(n),c=s===t.id,l=qe(t),u=ot(t),d=l.Icon,f=e.parent?A(e.parent):t.spawnedBy,p=e.children.length;return(0,P.jsxs)(`li`,{className:re(e.depth===1&&`relative pl-4`),children:[e.depth===1&&(0,P.jsx)(`div`,{className:`absolute left-2 top-3.5 text-muted-foreground/55`,children:(0,P.jsx)(y,{className:`h-3.5 w-3.5`})}),(0,P.jsxs)(`button`,{className:re(`w-full text-left px-3 py-2.5 flex items-start gap-2.5 hover:bg-muted/50 transition-colors border-b border-border/50`,e.depth===1&&`bg-muted/15`,c&&`bg-muted/60`),onClick:()=>ae(t.id),children:[(0,P.jsxs)(`div`,{className:`relative shrink-0 mt-0.5`,children:[(0,P.jsx)(at,{agent:t}),(0,P.jsx)(We,{agent:t,now:C,className:`absolute -bottom-0.5 -right-0.5 w-2 h-2`})]}),(0,P.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between gap-1 mb-0.5`,children:[(0,P.jsx)(`span`,{className:`text-xs font-medium truncate`,children:A(t)}),(0,P.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[o>0&&(0,P.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,title:je(o),children:De(C,o)}),r>0&&(0,P.jsx)(j,{className:`bg-red-500 text-white text-xs min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1`,children:r}),p>0&&(0,P.jsx)(j,{variant:`secondary`,className:`text-[10px] h-[18px] px-1.5`,title:`${p} live child ${p===1?`agent`:`agents`}`,children:p}),!r&&i&&(0,P.jsx)(j,{className:`bg-amber-500 text-black text-xs min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1`,title:`Needs response`,children:(0,P.jsx)(oe,{className:`h-3 w-3`})})]})]}),(0,P.jsxs)(`div`,{className:`flex items-center gap-1.5 mb-0.5 text-[10px] text-muted-foreground`,children:[(0,P.jsx)(`span`,{title:l.title,className:`inline-flex shrink-0`,children:(0,P.jsx)(d,{className:re(`h-3 w-3`,l.iconColor)})}),(0,P.jsx)(`span`,{className:`truncate`,children:u||l.label}),rt(t)&&(0,P.jsx)(`span`,{className:`ml-auto shrink-0`,children:(0,P.jsx)(Ge,{context:t.context,expected:!0,size:18})})]}),e.depth===0&&t.spawnedBy&&f&&(0,P.jsx)(`div`,{className:`mb-0.5`,children:(0,P.jsx)(j,{variant:`outline`,className:`max-w-full text-[9px] h-4 px-1.5 text-muted-foreground`,children:(0,P.jsxs)(`span`,{className:`truncate`,children:[`spawned by `,f]})})}),a&&(0,P.jsxs)(`p`,{className:`text-xs text-muted-foreground truncate leading-tight`,children:[a.from===`user`?`You: `:``,Se(a)]}),t.status!==`offline`&&(0,P.jsx)(`div`,{className:`mt-1`,children:(0,P.jsx)(`span`,{className:re(`text-xs`,t.status===`busy`?`text-yellow-400`:`text-emerald-400`),children:t.status})})]})]})]},t.id)}return(0,P.jsxs)(`div`,{className:`flex flex-col h-full border-r border-border min-w-0`,children:[(0,P.jsxs)(`div`,{className:`p-3 border-b border-border space-y-2`,children:[(0,P.jsxs)(`div`,{className:`relative`,children:[(0,P.jsx)(t,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground pointer-events-none`}),(0,P.jsx)(Ie,{placeholder:`Search agents...`,value:l,onChange:e=>i({chatAgentSearch:e.target.value}),className:`pl-8 h-7 text-xs`})]}),(0,P.jsxs)(`button`,{type:`button`,onClick:()=>i({chatAgentFiltersCollapsed:!b}),className:`sm:hidden flex w-full items-center justify-between h-6 px-1.5 text-xs rounded-md border border-border bg-background text-muted-foreground`,children:[(0,P.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,P.jsx)(me,{className:`w-3.5 h-3.5`}),`Filters & sort`,O>0&&(0,P.jsx)(j,{className:`bg-primary/20 text-primary text-[10px] h-4 min-w-4 px-1 flex items-center justify-center`,children:O})]}),b?(0,P.jsx)(se,{className:`w-3.5 h-3.5`}):(0,P.jsx)(le,{className:`w-3.5 h-3.5`})]}),(0,P.jsxs)(`div`,{className:re(`space-y-2`,b?`hidden`:`block`,`sm:block`),children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,P.jsxs)(`select`,{value:u,onChange:e=>i({chatAgentSort:e.target.value}),className:`flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground`,children:[(0,P.jsx)(`option`,{value:`status`,children:`By status`}),(0,P.jsx)(`option`,{value:`name`,children:`By name`}),(0,P.jsx)(`option`,{value:`lastSeen`,children:`By last seen`}),(0,P.jsx)(`option`,{value:`lastMessage`,children:`By last activity`})]}),(0,P.jsx)(M,{variant:`ghost`,size:`icon-xs`,onClick:()=>i({chatAgentSortDir:d===`asc`?`desc`:`asc`}),children:d===`asc`?(0,P.jsx)(v,{className:`w-3.5 h-3.5`}):(0,P.jsx)(n,{className:`w-3.5 h-3.5`})})]}),(0,P.jsxs)(`select`,{value:_,onChange:e=>i({chatAgentGroupBy:e.target.value}),className:`w-full h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground`,children:[(0,P.jsx)(`option`,{value:``,children:`No grouping`}),(0,P.jsx)(`option`,{value:`project`,children:`Group by project`})]}),(0,P.jsxs)(`div`,{className:`flex gap-1`,children:[(0,P.jsxs)(`select`,{value:f,onChange:e=>i({chatAgentProviderFilter:e.target.value}),className:`flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground`,children:[(0,P.jsx)(`option`,{value:``,children:`All types`}),(0,P.jsx)(`option`,{value:`claude`,children:`Claude`}),(0,P.jsx)(`option`,{value:`codex`,children:`Codex`}),(0,P.jsx)(`option`,{value:`agent`,children:`Agent`}),(0,P.jsx)(`option`,{value:`user`,children:`User`})]}),(0,P.jsxs)(`select`,{value:p,onChange:e=>i({chatAgentStatusFilter:e.target.value}),className:`flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground`,children:[(0,P.jsx)(`option`,{value:``,children:`All status`}),(0,P.jsx)(`option`,{value:`online`,children:`Online`}),(0,P.jsx)(`option`,{value:`idle`,children:`Idle`}),(0,P.jsx)(`option`,{value:`busy`,children:`Busy`}),(0,P.jsx)(`option`,{value:`offline`,children:`Offline`})]}),te.length>1&&(0,P.jsxs)(`select`,{value:g,onChange:e=>i({chatAgentHostFilter:e.target.value}),className:`flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground`,children:[(0,P.jsx)(`option`,{value:``,children:`All hosts`}),te.map(e=>(0,P.jsx)(`option`,{value:e,children:e},e))]})]}),(D.length>0||ee.length>0)&&(0,P.jsxs)(`div`,{className:`flex gap-1`,children:[D.length>0&&(0,P.jsxs)(`select`,{value:m,onChange:e=>i({chatAgentTagFilter:e.target.value}),className:`flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground`,children:[(0,P.jsx)(`option`,{value:``,children:`All tags`}),D.map(e=>(0,P.jsxs)(`option`,{value:e,children:[`#`,e]},e))]}),ee.length>0&&(0,P.jsxs)(`select`,{value:h,onChange:e=>i({chatAgentCapFilter:e.target.value}),className:`flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground`,children:[(0,P.jsx)(`option`,{value:``,children:`All caps`}),ee.map(e=>(0,P.jsx)(`option`,{value:e,children:e},e))]})]})]})]}),(0,P.jsxs)(`button`,{type:`button`,className:`flex w-full shrink-0 items-center gap-2.5 border-b border-border px-3 py-2 text-left transition-colors hover:bg-muted/50`,onClick:o,children:[(0,P.jsx)(`div`,{className:`flex h-7 w-7 shrink-0 items-center justify-center rounded-full border border-dashed border-primary/50 bg-primary/10 text-primary`,children:(0,P.jsx)(c,{className:`h-3.5 w-3.5`})}),(0,P.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,P.jsx)(`div`,{className:`text-xs font-medium`,children:`New Agent`}),(0,P.jsx)(`div`,{className:`truncate text-[10px] text-muted-foreground`,children:`Spawn a fresh chat agent`})]})]}),(0,P.jsx)(`div`,{className:`flex-1 overflow-y-auto`,children:E.length===0?(0,P.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-10 text-center px-4`,children:[(0,P.jsx)(S,{className:`w-8 h-8 text-zinc-600 mb-2`}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No agents match filters`})]}):ne?ne.map(([e,t])=>(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-1.5 border-b border-border/50 bg-background/95 px-3 py-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground backdrop-blur`,children:[(0,P.jsx)(`span`,{className:`truncate`,children:e}),(0,P.jsx)(`span`,{className:`text-muted-foreground/50`,children:t.length})]}),(0,P.jsx)(`ul`,{children:Je(t,x,C).map(ce)})]},e)):(0,P.jsx)(`ul`,{children:ie.map(ce)})})]})}var jt=[{name:`/reply`,source:`skill`,description:`Reply to a relay message by id`,argumentHint:`<messageId> <body>`},{name:`/message`,source:`skill`,description:`Send a relay message to an agent, label, tag, or broadcast`,argumentHint:`<target> <body>`},{name:`/pair`,source:`skill`,description:`Start or manage a two-agent pair session`},{name:`/react`,source:`skill`,description:`Add a reaction to a relay message`,argumentHint:`<messageId> <emoji>`},{name:`/read-message`,source:`skill`,description:`Fetch a full relay message by id`,argumentHint:`<messageId>`},{name:`/send-claimable`,source:`skill`,description:`Enqueue a claimable work item for one agent to claim`},{name:`/status`,source:`skill`,description:`Show this agent's relay status`},{name:`/tags`,source:`skill`,description:`List or update this agent's relay tags`},{name:`/label`,source:`skill`,description:`Read, set, or clear this agent's relay label`},{name:`/disconnect`,source:`skill`,description:`End the current relay pair session`}],Mt=[{name:`/clear`,source:`builtin`,description:`Clear conversation history and free up context`},{name:`/compact`,source:`builtin`,description:`Compact the conversation to reclaim context`,argumentHint:`[instructions]`},{name:`/model`,source:`builtin`,description:`Switch the active model`,argumentHint:`[model]`},{name:`/help`,source:`builtin`,description:`Show help`}],Nt=[{name:`/compact`,source:`builtin`,description:`Compact the conversation to reclaim context`},{name:`/new`,source:`builtin`,description:`Start a new thread`}];function Pt(e){return[...e===`claude`?Mt:e===`codex`?Nt:[],...jt]}function Ft({selectedInboxThread:e,agent:t,now:n,blockedState:i,thread:o,exportableThread:s,importedHistory:c,showBackButton:l,onBack:u,openAgentDetail:f,openWorkspaceFocus:p,voiceTtsEnabled:h,setVoiceTtsEnabled:g,canOpenTerminal:v,terminalOpening:y,handleOpenTerminal:b,canInterrupt:S,interruptAgent:C,canCompact:w,canClearContext:te,canShutdown:ne,openConfirm:O,workspaceAction:re,doAgentAction:ie,openFilesForAgent:oe,forkFromAgent:se,markInboxThreadUnread:ce,markInboxThreadRead:le,exportThread:de}){return(0,P.jsxs)(`div`,{className:`flex items-center justify-between px-3 md:px-4 py-2.5 md:py-3 border-b border-border shrink-0`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2 md:gap-2.5 min-w-0`,children:[l&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,onClick:u,className:`shrink-0 -ml-1`,children:(0,P.jsx)(pe,{className:`w-4 h-4`})}),(0,P.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 md:gap-2.5 min-w-0 hover:opacity-80 transition-opacity`,onClick:()=>t&&f(t),disabled:!t,children:[(0,P.jsxs)(`div`,{className:`relative shrink-0`,children:[(0,P.jsx)(at,{agent:t}),(0,P.jsx)(We,{agent:t,now:n,className:`absolute -bottom-0.5 -right-0.5 w-2 h-2`})]}),(0,P.jsxs)(`div`,{className:`min-w-0 text-left`,children:[(0,P.jsx)(`p`,{className:`text-sm font-medium truncate`,children:t?A(t):e}),t&&(0,P.jsxs)(`p`,{className:`text-xs text-muted-foreground truncate`,children:[i?`blocked: ${i.label}`:t.status,t.machine&&` · ${t.machine}`,typeof t.meta?.cwd==`string`&&t.meta.cwd&&` · ${Oe(t.meta.cwd,1)}`]})]})]}),t&&(0,P.jsx)(Ye,{agent:t,compact:!0,className:`hidden @4xl/chat:flex shrink-0`}),t&&rt(t)&&(0,P.jsx)(Ge,{context:t.context,expected:!0}),t?.branchState&&t.branchWorkspaceId&&(0,P.jsx)(Dt,{state:t.branchState,className:`shrink-0`,onClick:()=>void p(t.branchWorkspaceId)}),o?.attention.unread?(0,P.jsxs)(j,{className:`bg-red-500/20 text-red-400 text-xs shrink-0 hidden @2xl/chat:flex`,children:[o.attention.unread,` unread`]}):null]}),(0,P.jsx)(`div`,{className:`flex items-center gap-0.5 md:gap-1 shrink-0`,children:t&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(Le,{value:t.id,label:`Copy agent ID`,size:`icon-sm`}),xe.available&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,title:h?`Speaking agent responses aloud — click to mute (engine & voice in Settings)`:`Speak agent responses aloud (active chat) — engine & voice in Settings`,className:h?`text-primary`:``,onClick:()=>g(!h),children:h?(0,P.jsx)(E,{className:`w-3.5 h-3.5`}):(0,P.jsx)(ue,{className:`w-3.5 h-3.5`})}),v&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex`,disabled:y,title:`Terminal`,onClick:()=>void b(),children:(0,P.jsx)(ee,{className:`w-3.5 h-3.5`})}),S&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`text-red-400 hover:text-red-300`,title:`Interrupt`,onClick:C,children:(0,P.jsx)(x,{className:`w-3.5 h-3.5`})}),(t.branchState===`changes`||t.branchState===`idle`)&&t.branchWorkspaceId&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex text-amber-400 hover:text-amber-300`,title:`Mark workspace ready — hand off to the auto-merge`,onClick:()=>O(`Mark Workspace Ready`,`Mark ${A(t)}'s branch ready to land? The relay auto-merge will rebase and land it.`,()=>re(t.branchWorkspaceId,`ready`)),children:(0,P.jsx)(ae,{className:`w-3.5 h-3.5`})}),w&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex`,title:`Compact`,onClick:()=>O(`Compact Agent`,`Compact context for ${A(t)}?`,()=>ie(t,`compact`)),children:(0,P.jsx)(a,{className:`w-3.5 h-3.5`})}),te&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex`,title:`Clear context`,onClick:()=>O(`Clear Context`,`Clear context for ${A(t)}?`,()=>ie(t,`clearContext`)),children:(0,P.jsx)(d,{className:`w-3.5 h-3.5`})}),ne&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex`,title:`Shutdown`,onClick:()=>O(`Shutdown Agent`,`Shutdown ${A(t)}?`,()=>ie(t,`shutdown`)),children:(0,P.jsx)(m,{className:`w-3.5 h-3.5`})}),t&&typeof t.meta?.cwd==`string`&&t.meta.cwd&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex`,title:`Open ${t.meta.cwd} in Files`,onClick:()=>void oe(t),children:(0,P.jsx)(r,{className:`w-3.5 h-3.5`})}),t&&o&&o.messages.length>0&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex`,title:`Fork — spawn new agent with this chat history`,onClick:()=>se(t.id,o.messages),children:(0,P.jsx)(T,{className:`w-3.5 h-3.5`})}),o&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex`,title:`Mark unread`,onClick:()=>ce(e),children:(0,P.jsx)(D,{className:`w-3.5 h-3.5`})}),o&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex`,title:`Mark read`,onClick:()=>le(o.peer,o.messages),children:(0,P.jsx)(fe,{className:`w-3.5 h-3.5`})}),s&&(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`hidden @4xl/chat:inline-flex`,title:`Export thread`,onClick:()=>de({...s,importedHistory:c},`json`),children:(0,P.jsx)(he,{className:`w-3.5 h-3.5`})}),(0,P.jsxs)(Be,{children:[(0,P.jsx)(Ze,{asChild:!0,children:(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,className:`@4xl/chat:hidden`,children:(0,P.jsx)(_,{className:`w-3.5 h-3.5`})})}),(0,P.jsxs)(Ue,{align:`end`,children:[v&&(0,P.jsxs)(Qe,{disabled:y,onClick:()=>void b(),children:[(0,P.jsx)(ee,{className:`w-3.5 h-3.5`}),`Terminal`]}),S&&(0,P.jsxs)(Qe,{onClick:C,children:[(0,P.jsx)(x,{className:`w-3.5 h-3.5`}),`Interrupt`]}),(t.branchState===`changes`||t.branchState===`idle`)&&t.branchWorkspaceId&&(0,P.jsxs)(Qe,{onClick:()=>O(`Mark Workspace Ready`,`Mark ${A(t)}'s branch ready to land? The relay auto-merge will rebase and land it.`,()=>re(t.branchWorkspaceId,`ready`)),children:[(0,P.jsx)(ae,{className:`w-3.5 h-3.5`}),`Mark Ready`]}),w&&(0,P.jsxs)(Qe,{onClick:()=>O(`Compact Agent`,`Compact context for ${A(t)}?`,()=>ie(t,`compact`)),children:[(0,P.jsx)(a,{className:`w-3.5 h-3.5`}),`Compact`]}),te&&(0,P.jsxs)(Qe,{onClick:()=>O(`Clear Context`,`Clear context for ${A(t)}?`,()=>ie(t,`clearContext`)),children:[(0,P.jsx)(d,{className:`w-3.5 h-3.5`}),`Clear Context`]}),ne&&(0,P.jsxs)(Qe,{onClick:()=>O(`Shutdown Agent`,`Shutdown ${A(t)}?`,()=>ie(t,`shutdown`)),children:[(0,P.jsx)(m,{className:`w-3.5 h-3.5`}),`Shutdown`]}),t&&typeof t.meta?.cwd==`string`&&t.meta.cwd&&(0,P.jsxs)(Qe,{onClick:()=>void oe(t),children:[(0,P.jsx)(r,{className:`w-3.5 h-3.5`}),`Open Files`]}),t&&o&&o.messages.length>0&&(0,P.jsxs)(Qe,{onClick:()=>se(t.id,o.messages),children:[(0,P.jsx)(T,{className:`w-3.5 h-3.5`}),`Fork`]}),(v||w||te||ne)&&(0,P.jsx)(Re,{}),o&&(0,P.jsxs)(Qe,{onClick:()=>ce(e),children:[(0,P.jsx)(D,{className:`w-3.5 h-3.5`}),`Mark Unread`]}),o&&(0,P.jsxs)(Qe,{onClick:()=>le(o.peer,o.messages),children:[(0,P.jsx)(fe,{className:`w-3.5 h-3.5`}),`Mark Read`]}),s&&(0,P.jsxs)(Qe,{onClick:()=>de({...s,importedHistory:c},`json`),children:[(0,P.jsx)(he,{className:`w-3.5 h-3.5`}),`Download`]})]})]})]})})]})}function It({matches:e,activeIndex:t,onAccept:n,onHover:r}){return e.length===0?null:(0,P.jsx)(`div`,{className:`absolute bottom-full left-3 right-3 md:left-4 md:right-4 mb-2 z-20 max-h-64 overflow-auto rounded-xl border border-border bg-popover shadow-lg`,children:e.map((e,i)=>(0,P.jsxs)(`button`,{onMouseDown:t=>{t.preventDefault(),n(e)},onMouseEnter:()=>r(i),className:re(`flex w-full items-baseline gap-2 px-3 py-1.5 text-left text-sm`,i===t?`bg-accent`:`hover:bg-accent/50`),children:[(0,P.jsx)(`span`,{className:`font-medium shrink-0`,children:e.name}),e.argumentHint&&(0,P.jsx)(`span`,{className:`text-xs text-muted-foreground shrink-0`,children:e.argumentHint}),e.description&&(0,P.jsx)(`span`,{className:`ml-auto truncate text-xs text-muted-foreground/70`,children:e.description})]},e.name))})}function Lt({value:e,onChange:t,onKeyDown:n,onPaste:r,placeholder:i,className:a}){let o=(0,N.useRef)(null);return(0,N.useEffect)(()=>{let e=o.current;e&&(e.style.height=`auto`,e.style.height=Math.min(e.scrollHeight,200)+`px`)},[e]),(0,N.useEffect)(()=>{let e=window.visualViewport;if(!e)return;function t(){let e=o.current;!e||document.activeElement!==e||requestAnimationFrame(()=>{e.scrollIntoView({block:`nearest`,behavior:`smooth`})})}return e.addEventListener(`resize`,t),()=>e.removeEventListener(`resize`,t)},[]),(0,P.jsx)(`textarea`,{ref:o,value:e,onChange:t,onKeyDown:n,onPaste:r,placeholder:i,rows:1,className:re(`w-full resize-none rounded-xl border border-border bg-background px-3.5 py-2.5 text-sm`,`placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`min-h-[42px] max-h-[200px] overflow-y-auto`,a)})}function Rt({item:e,onRemove:t}){let[n,r]=(0,N.useState)(!1),i=!!(e.previewUrl&&!e.error);return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 rounded-md border border-border bg-card px-2.5 py-2 text-xs`,children:[(0,P.jsx)(`button`,{type:`button`,disabled:!i,onClick:()=>r(!0),className:`group/pending relative flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded bg-muted disabled:cursor-default`,title:i?`Preview image`:e.fileName,children:e.previewUrl?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`img`,{src:e.previewUrl,alt:e.fileName,className:`h-full w-full object-cover`}),(0,P.jsx)(`span`,{className:`absolute inset-0 flex items-center justify-center bg-black/0 group-hover/pending:bg-black/30 transition-colors`,children:(0,P.jsx)(ce,{className:`h-3.5 w-3.5 text-white opacity-0 group-hover/pending:opacity-100 transition-opacity drop-shadow-md`})})]}):e.error?(0,P.jsx)(oe,{className:`h-4 w-4 text-red-400`}):e.uploading?(0,P.jsx)(O,{className:`h-4 w-4 animate-spin text-muted-foreground`}):(0,P.jsx)(ie,{className:`h-4 w-4 text-muted-foreground`})}),(0,P.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,P.jsx)(`p`,{className:`truncate font-medium`,children:e.fileName}),(0,P.jsx)(`p`,{className:re(`truncate text-muted-foreground`,e.error&&`text-red-400`),children:e.error||(e.uploading?`Uploading`:dt(e.size))})]}),(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,title:`Remove attachment`,onClick:t,children:(0,P.jsx)(te,{className:`h-3.5 w-3.5`})})]}),e.previewUrl&&(0,P.jsx)(Xe,{open:n,onOpenChange:r,children:(0,P.jsxs)(Ke,{className:`max-w-[95vw] max-h-[95vh] w-auto p-0 bg-black/95 border-zinc-800 gap-0 overflow-hidden`,showCloseButton:!1,children:[(0,P.jsx)($e,{className:`sr-only`,children:e.fileName}),(0,P.jsxs)(`div`,{className:`relative flex items-center justify-center min-h-[200px]`,children:[(0,P.jsx)(`img`,{src:e.previewUrl,alt:e.fileName,className:`max-w-[93vw] max-h-[90vh] object-contain`}),(0,P.jsx)(`button`,{type:`button`,onClick:()=>r(!1),className:`absolute top-2 right-2 rounded-md bg-black/60 hover:bg-black/80 p-2 text-white transition-colors`,title:`Close`,children:(0,P.jsx)(te,{className:`w-4 h-4`})})]})]})})]})}function zt({draft:e,placeholder:t,chatSending:n,disabled:r,hasPendingUploads:a,readyAttachmentCount:o,pendingAttachments:c,micAvailable:l,micState:d,slashMatches:f,slashActiveIndex:p,onDraftChange:m,onKeyDown:h,onPaste:g,onUploadFiles:_,onRemovePendingAttachment:v,onSend:y,onAcceptSlash:b,onSlashHover:x,onStartPtt:S,onStopPtt:C,footerText:w}){let T=(0,N.useRef)(null),[E,D]=(0,N.useState)(!1),ee=!e.trim()&&o===0||a||n||r;return(0,P.jsxs)(`div`,{className:re(`relative shrink-0 border-t border-border px-3 md:px-4 py-2.5 md:py-3 safe-area-bottom`,E&&`bg-primary/5 ring-1 ring-primary/40`),onDragOver:e=>{e.preventDefault(),D(!0)},onDragLeave:()=>D(!1),onDrop:e=>{e.preventDefault(),D(!1),_(e.dataTransfer.files)},children:[c.length>0&&(0,P.jsx)(`div`,{className:`mb-2 grid gap-2 sm:grid-cols-2`,children:c.map(e=>(0,P.jsx)(Rt,{item:e,onRemove:()=>v(e.id)},e.id))}),(0,P.jsx)(`input`,{ref:T,type:`file`,multiple:!0,className:`hidden`,onChange:e=>{e.target.files&&_(e.target.files),e.currentTarget.value=``}}),(0,P.jsx)(It,{matches:f,activeIndex:p,onAccept:b,onHover:x}),(0,P.jsxs)(`div`,{className:`hidden md:flex items-end gap-2`,children:[(0,P.jsx)(M,{variant:`ghost`,size:`icon`,title:`Attach files`,disabled:n,onClick:()=>T.current?.click(),className:`shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]`,children:(0,P.jsx)(s,{className:`w-4 h-4`})}),(0,P.jsx)(Lt,{value:e,onChange:e=>m(e.target.value),onKeyDown:h,onPaste:g,placeholder:t,className:`flex-1`}),l&&(0,P.jsx)(M,{variant:`ghost`,size:`icon`,title:d===`recording`?`Release to transcribe`:`Hold to talk`,disabled:n||d===`transcribing`,onPointerDown:e=>{e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),S()},onPointerUp:e=>{e.preventDefault();try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}C()},className:`shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px] ${d===`recording`?`text-red-400 animate-pulse`:``}`,children:d===`transcribing`?(0,P.jsx)(O,{className:`w-4 h-4 animate-spin`}):(0,P.jsx)(u,{className:`w-4 h-4`})}),(0,P.jsx)(M,{size:`icon`,disabled:ee,onClick:y,className:`shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]`,children:(0,P.jsx)(i,{className:`w-4 h-4`})})]}),(0,P.jsxs)(`div`,{className:`md:hidden space-y-2`,children:[(0,P.jsx)(Lt,{value:e,onChange:e=>m(e.target.value),onKeyDown:h,onPaste:g,placeholder:t,className:`w-full`}),(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(M,{variant:`ghost`,size:`icon`,title:`Attach files`,disabled:n,onClick:()=>T.current?.click(),className:`rounded-xl h-9 w-9`,children:(0,P.jsx)(s,{className:`w-4 h-4`})}),l&&(0,P.jsx)(M,{variant:`ghost`,size:`icon`,title:d===`recording`?`Release to transcribe`:`Hold to talk`,disabled:n||d===`transcribing`,onPointerDown:e=>{e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),S()},onPointerUp:e=>{e.preventDefault();try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}C()},className:`rounded-xl h-9 w-9 ${d===`recording`?`text-red-400 animate-pulse`:``}`,children:d===`transcribing`?(0,P.jsx)(O,{className:`w-4 h-4 animate-spin`}):(0,P.jsx)(u,{className:`w-4 h-4`})})]}),(0,P.jsx)(M,{size:`icon`,disabled:ee,onClick:y,className:`rounded-xl h-9 w-9`,children:(0,P.jsx)(i,{className:`w-4 h-4`})})]})]}),w&&(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1.5 hidden md:block`,children:w})]})}var Bt=e(ge(),1);function Vt({preview:e,error:t,onReadError:n,onMouseEnter:r,onMouseLeave:i}){let{anchor:a}=e,o=Math.min(560,window.innerWidth-24),s=Math.min(380,window.innerHeight-24),c=Math.max(12,Math.min(a.left,window.innerWidth-o-12));return(0,Bt.createPortal)((0,P.jsxs)(`div`,{className:`fixed z-50 flex flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl`,style:{top:window.innerHeight-a.bottom>=s+8?a.bottom+8:a.top-8-s>=12?a.top-8-s:Math.max(12,window.innerHeight-s-12),left:c,width:o,height:s},onMouseEnter:r,onMouseLeave:i,children:[(0,P.jsxs)(`div`,{className:`flex h-8 shrink-0 items-center gap-2 border-b border-border px-2.5`,children:[(0,P.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[11px] font-medium text-muted-foreground`,children:e.path}),t&&(0,P.jsx)(`span`,{className:`max-w-[12rem] truncate text-[11px] text-red-400`,children:t}),(0,P.jsx)(`span`,{className:`shrink-0 text-[10px] text-muted-foreground/70`,children:`click to pin`})]}),(0,P.jsx)(`div`,{className:`min-h-0 flex-1`,children:e.type===`directory`?(0,P.jsx)(ze,{orchestratorId:e.orchestratorId,selectedPath:e.path,onReadError:n}):(0,P.jsx)(it,{orchestratorId:e.orchestratorId,selectedPath:e.path,line:e.line,onReadError:n})})]}),document.body)}var Ht=[];function Ut(e){return k(t=>t.chatStatusEvents[e]??Ht)}function Wt(e,t){let n=(0,N.useRef)(!1);(0,N.useEffect)(()=>{if(!e)return;n.current||=(window.history.pushState({chatGuard:!0},``),!0);function r(e){(e.state?.chatGuard!==void 0||!n.current)&&(window.history.pushState({chatGuard:!0},``),t())}function i(e){e.preventDefault()}return window.addEventListener(`popstate`,r),window.addEventListener(`beforeunload`,i),()=>{window.removeEventListener(`popstate`,r),window.removeEventListener(`beforeunload`,i)}},[e,t]),(0,N.useEffect)(()=>{!e&&n.current&&(n.current=!1)},[e])}var Gt=0,Kt=1,qt=2,Jt=4;function Yt(e){return()=>e}function Xt(e){e()}function Zt(e,t){return n=>e(t(n))}function Qt(e,t){return()=>e(t)}function $t(e,t){return n=>e(t,n)}function en(e){return e!==void 0}function tn(...e){return()=>{e.map(Xt)}}function nn(){}function rn(e,t){return t(e),e}function an(e,t){return t(e)}function F(...e){return e}function I(e,t){return e(Kt,t)}function L(e,t){e(Gt,t)}function on(e){e(qt)}function R(e){return e(Jt)}function z(e,t){return I(e,$t(t,Gt))}function sn(e,t){let n=e(Kt,e=>{n(),t(e)});return n}function cn(e){let t,n;return r=>i=>{t=i,n&&clearTimeout(n),n=setTimeout(()=>{r(t)},e)}}function ln(e,t){return e===t}function B(e=ln){let t;return n=>r=>{e(t,r)||(t=r,n(r))}}function V(e){return t=>n=>{e(n)&&t(n)}}function H(e){return t=>Zt(t,e)}function un(e){return t=>()=>{t(e)}}function U(e,...t){let n=mn(...t);return((t,r)=>{switch(t){case qt:on(e);return;case Kt:return I(e,n(r))}})}function dn(e,t){return n=>r=>{n(t=e(t,r))}}function fn(e){return t=>n=>{e>0?e--:t(n)}}function pn(e){let t=null,n;return r=>i=>{t=i,!n&&(n=setTimeout(()=>{n=void 0,r(t)},e))}}function W(...e){let t=Array(e.length),n=0,r=null,i=2**e.length-1;return e.forEach((e,a)=>{let o=2**a;I(e,e=>{let s=n;n|=o,t[a]=e,s!==i&&n===i&&r&&(r(),r=null)})}),e=>a=>{let o=()=>{e([a].concat(t))};n===i?o():r=o}}function mn(...e){return t=>e.reduceRight(an,t)}function hn(e){let t,n,r=()=>t?.();return function(i,a){switch(i){case Kt:return a?n===a?void 0:(r(),n=a,t=I(e,a),t):(r(),nn);case qt:r(),n=null;return}}}function G(e){let t=e,n=K();return((e,r)=>{switch(e){case Gt:t=r;break;case Kt:r(t);break;case Jt:return t}return n(e,r)})}function gn(e,t){return rn(G(t),t=>z(e,t))}function K(){let e=[];return((t,n)=>{switch(t){case Gt:e.slice().forEach(e=>{e(n)});return;case qt:e.splice(0,e.length);return;case Kt:return e.push(n),()=>{let t=e.indexOf(n);t>-1&&e.splice(t,1)}}})}function _n(e){return rn(K(),t=>z(e,t))}function q(e,t=[],{singleton:n}={singleton:!0}){return{constructor:e,dependencies:t,id:vn(),singleton:n}}var vn=()=>Symbol();function yn(e){let t=new Map,n=({constructor:e,dependencies:r,id:i,singleton:a})=>{if(a&&t.has(i))return t.get(i);let o=e(r.map(e=>n(e)));return a&&t.set(i,o),o};return n(e)}function bn(...e){let t=K(),n=Array(e.length),r=0,i=2**e.length-1;return e.forEach((e,a)=>{let o=2**a;I(e,e=>{n[a]=e,r|=o,r===i&&L(t,n)})}),function(e,a){switch(e){case qt:on(t);return;case Kt:return r===i&&a(n),I(t,a)}}}function J(e,t=ln){return U(e,B(t))}function xn(...e){return function(t,n){switch(t){case qt:return;case Kt:return tn(...e.map(e=>I(e,n)))}}}var Sn={DEBUG:0,INFO:1,WARN:2,ERROR:3},Cn={[Sn.DEBUG]:`debug`,[Sn.ERROR]:`error`,[Sn.INFO]:`log`,[Sn.WARN]:`warn`},wn=()=>typeof globalThis>`u`?window:globalThis,Tn=q(()=>{let e=G(Sn.ERROR);return{log:G((t,n,r=Sn.INFO)=>{r>=(wn().VIRTUOSO_LOG_LEVEL??R(e))&&console[Cn[r]](`%creact-virtuoso: %c%s %o`,`color: #0253b3; font-weight: bold`,`color: initial`,t,n)}),logLevel:e}},[],{singleton:!0}),En=new WeakMap;function Dn(e){return`self`in e?e.document.documentElement:e}function On(e){let t=Dn(e),n=En.get(t);if(n!==void 0)return n;let r=t.ownerDocument.defaultView.getComputedStyle(t).direction===`rtl`;return En.set(t,r),r}function kn(e){En.delete(Dn(e))}function An(e,t){return On(e)?-t:t}var jn=An;function Mn(e,t){return An(e,t)}function Nn(e,t,n){return Pn(e,t,n).callbackRef}function Pn(e,t,n){let r=N.useRef(null),i=e=>{},a=N.useMemo(()=>typeof ResizeObserver<`u`?new ResizeObserver(t=>{let r=()=>{let n=t[0].target;n.offsetParent!==null&&e(n)};n?r():requestAnimationFrame(r)}):null,[e,n]);return i=e=>{e&&t?(a?.observe(e),r.current=e):(r.current&&a?.unobserve(r.current),r.current=null)},{callbackRef:i,ref:r}}function Fn(e,t,n,r,i,a,o,s,c){return Pn(N.useCallback(n=>{let c=In(n.children,t,s?`offsetWidth`:`offsetHeight`,i),l=n.parentElement;for(;l.dataset.virtuosoScroller===void 0;)l=l.parentElement;let u=l.lastElementChild.dataset.viewportType===`window`,d;u&&(d=l.ownerDocument.defaultView);let f=o?s?o.scrollWidth:o.scrollHeight:u?s?d.document.documentElement.scrollWidth:d.document.documentElement.scrollHeight:s?l.scrollWidth:l.scrollHeight,p=o?s?o.offsetWidth:o.offsetHeight:u?s?d.innerWidth:d.innerHeight:s?l.offsetWidth:l.offsetHeight,m=o?s?jn(o,o.scrollLeft):o.scrollTop:u?s?jn(d,d.scrollX||d.document.documentElement.scrollLeft):d.scrollY||d.document.documentElement.scrollTop:s?jn(l,l.scrollLeft):l.scrollTop;r({scrollHeight:f,scrollTop:Math.max(m,0),viewportHeight:p}),a?.(s?Ln(`column-gap`,getComputedStyle(n).columnGap,i):Ln(`row-gap`,getComputedStyle(n).rowGap,i)),c!==null&&e(c)},[e,t,i,a,o,r,s]),n,c)}function In(e,t,n,r){let i=e.length;if(i===0)return null;let a=[];for(let o=0;o<i;o++){let i=e.item(o);if(i.dataset.index===void 0)continue;let s=parseInt(i.dataset.index),c=parseFloat(i.dataset.knownSize),l=t(i,n);if(l===0&&r(`Zero-sized element, this should not happen`,{child:i},Sn.ERROR),l===c)continue;let u=a[a.length-1];a.length===0||u.size!==l||u.endIndex!==s-1?a.push({endIndex:s,size:l,startIndex:s}):a[a.length-1].endIndex++}return a}function Ln(e,t,n){return t!==`normal`&&t?.endsWith(`px`)!==!0&&n(`${e} was not resolved to pixel value correctly`,t,Sn.WARN),t===`normal`?0:parseInt(t??`0`,10)}function Rn(e,t,n){let r=N.useRef(null),i=N.useCallback(n=>{if(!n?.offsetParent)return;let i=n.getBoundingClientRect(),a=i.width,s,c;if(t){let e=t.getBoundingClientRect(),n=i.top-e.top;c=e.height-Math.max(0,n),s=n+t.scrollTop}else{let e=o.current.ownerDocument.defaultView;c=e.innerHeight-Math.max(0,i.top),s=i.top+e.scrollY}r.current={listHeight:i.height,offsetTop:s,visibleHeight:c,visibleWidth:a},e(r.current)},[e,t]),{callbackRef:a,ref:o}=Pn(i,!0,n),s=N.useCallback(()=>{i(o.current)},[i,o]);return N.useEffect(()=>{if(t){t.addEventListener(`scroll`,s);let e=new ResizeObserver(()=>{requestAnimationFrame(s)});return e.observe(t),()=>{t.removeEventListener(`scroll`,s),e.unobserve(t)}}let e=o.current?.ownerDocument.defaultView;return e?.addEventListener(`scroll`,s),e?.addEventListener(`resize`,s),()=>{e?.removeEventListener(`scroll`,s),e?.removeEventListener(`resize`,s)}},[s,t,o]),a}var zn=q(()=>{let e=K(),t=K(),n=G(0),r=K(),i=G(0),a=K(),o=K(),s=G(0),c=G(0),l=G(0),u=G(0),d=K(),f=K(),p=G(!1),m=G(!1),h=G(!1);return z(U(e,H(({scrollTop:e})=>e)),t),z(U(e,H(({scrollHeight:e})=>e)),o),z(t,i),{deviation:n,fixedFooterHeight:l,fixedHeaderHeight:c,footerHeight:u,headerHeight:s,horizontalDirection:m,scrollBy:f,scrollContainerState:e,scrollHeight:o,scrollingInProgress:p,scrollTo:d,scrollTop:t,skipAnimationFrameInResizeObserver:h,smoothScrollTargetReached:r,statefulScrollTop:i,viewportHeight:a}},[],{singleton:!0}),Bn={lvl:0};function Vn(e,t){let n=e.length;if(n===0)return[];let{index:r,value:i}=t(e[0]),a=[];for(let o=1;o<n;o++){let{index:n,value:s}=t(e[o]);a.push({end:n-1,start:r,value:i}),r=n,i=s}return a.push({end:1/0,start:r,value:i}),a}function Y(e){return e===Bn}function Hn(e,t){if(!Y(e))return t===e.k?e.v:t<e.k?Hn(e.l,t):Hn(e.r,t)}function Un(e,t,n=`k`){if(Y(e))return[-1/0,void 0];if(Number(e[n])===t)return[e.k,e.v];if(Number(e[n])<t){let r=Un(e.r,t,n);return r[0]===-1/0?[e.k,e.v]:r}return Un(e.l,t,n)}function Wn(e,t,n){return Y(e)?tr(t,n,1):t===e.k?Zn(e,{k:t,v:n}):t<e.k?nr(Zn(e,{l:Wn(e.l,t,n)})):nr(Zn(e,{r:Wn(e.r,t,n)}))}function Gn(){return Bn}function Kn(e,t,n){if(Y(e))return[];let r=Un(e,t)[0];return ar(Yn(e,r,n))}function qn(e,t){if(Y(e))return Bn;let{k:n,l:r,r:i}=e;if(t===n){if(Y(r))return i;if(Y(i))return r;let[t,n]=er(r);return Xn(Zn(e,{k:t,l:Qn(r),v:n}))}return Xn(t<n?Zn(e,{l:qn(r,t)}):Zn(e,{r:qn(i,t)}))}function Jn(e){return Y(e)?[]:[...Jn(e.l),{k:e.k,v:e.v},...Jn(e.r)]}function Yn(e,t,n){if(Y(e))return[];let{k:r,l:i,r:a,v:o}=e,s=[];return r>t&&(s=s.concat(Yn(i,t,n))),r>=t&&r<=n&&s.push({k:r,v:o}),r<=n&&(s=s.concat(Yn(a,t,n))),s}function Xn(e){let{l:t,lvl:n,r}=e;if(r.lvl>=n-1&&t.lvl>=n-1)return e;if(n>r.lvl+1){if($n(t))return rr(Zn(e,{lvl:n-1}));if(!Y(t)&&!Y(t.r))return Zn(t.r,{l:Zn(t,{r:t.r.l}),lvl:n,r:Zn(e,{l:t.r.r,lvl:n-1})});throw Error(`Unexpected empty nodes`)}if($n(e))return ir(Zn(e,{lvl:n-1}));if(!Y(r)&&!Y(r.l)){let t=r.l,i=$n(t)?r.lvl-1:r.lvl;return Zn(t,{l:Zn(e,{lvl:n-1,r:t.l}),lvl:t.lvl+1,r:ir(Zn(r,{l:t.r,lvl:i}))})}throw Error(`Unexpected empty nodes`)}function Zn(e,t){return tr(t.k===void 0?e.k:t.k,t.v===void 0?e.v:t.v,t.lvl===void 0?e.lvl:t.lvl,t.l===void 0?e.l:t.l,t.r===void 0?e.r:t.r)}function Qn(e){return Y(e.r)?e.l:Xn(Zn(e,{r:Qn(e.r)}))}function $n(e){return Y(e)||e.lvl>e.r.lvl}function er(e){return Y(e.r)?[e.k,e.v]:er(e.r)}function tr(e,t,n,r=Bn,i=Bn){return{k:e,l:r,lvl:n,r:i,v:t}}function nr(e){return ir(rr(e))}function rr(e){let{l:t}=e;return!Y(t)&&t.lvl===e.lvl?Zn(t,{r:Zn(e,{l:t.r})}):e}function ir(e){let{lvl:t,r:n}=e;return!Y(n)&&!Y(n.r)&&n.lvl===t&&n.r.lvl===t?Zn(n,{l:Zn(e,{r:n.l}),lvl:t+1}):e}function ar(e){return Vn(e,({k:e,v:t})=>({index:e,value:t}))}function or(e,t){return!!(e&&e.startIndex===t.startIndex&&e.endIndex===t.endIndex)}function sr(e,t){return!!(e&&e[0]===t[0]&&e[1]===t[1])}var cr=q(()=>({recalcInProgress:G(!1)}),[],{singleton:!0});function lr(e,t,n){return e[ur(e,t,n)]}function ur(e,t,n,r=0){let i=e.length-1;for(;r<=i;){let a=Math.floor((r+i)/2),o=e[a],s=n(o,t);if(s===0)return a;if(s===-1){if(i-r<2)return a-1;i=a-1}else{if(i===r)return a;r=a+1}}throw Error(`Failed binary finding record in array - ${e.join(`,`)}, searched for ${t}`)}function dr(e,t,n,r){let i=ur(e,t,r),a=ur(e,n,r,i);return e.slice(i,a+1)}function fr(e,t){return Math.round(e.getBoundingClientRect()[t])}function pr(e){return!Y(e.groupOffsetTree)}function mr({index:e},t){return t===e?0:t<e?-1:1}function hr(){return{groupIndices:[],groupOffsetTree:Gn(),lastIndex:0,lastOffset:0,lastSize:0,offsetTree:[],sizeTree:Gn()}}function gr(e,t){let n=Y(e)?0:1/0;for(let r of t){let{endIndex:t,size:i,startIndex:a}=r;if(n=Math.min(n,a),Y(e)){e=Wn(e,0,i);continue}let o=Kn(e,a-1,t+1);if(o.some(Or(r)))continue;let s=!1,c=!1;for(let{end:n,start:r,value:a}of o)s?(t>=r||i===a)&&(e=qn(e,r)):(c=a!==i,s=!0),n>t&&t>=r&&a!==i&&(e=Wn(e,t+1,a));c&&(e=Wn(e,a,i))}return[e,n]}function _r(e){return typeof e.groupIndex<`u`}function vr({offset:e},t){return t===e?0:t<e?-1:1}function yr(e,t,n){if(t.length===0)return 0;let{index:r,offset:i,size:a}=lr(t,e,mr),o=e-r,s=a*o+(o-1)*n+i;return s>0?s+n:s}function br(e,t){if(!pr(t))return e;let n=0;for(;t.groupIndices[n]<=e+n;)n++;return e+n}function xr(e,t,n){if(_r(e))return t.groupIndices[e.groupIndex]+1;let r=br(e.index===`LAST`?n:e.index,t);return r=Math.max(0,r,Math.min(n,r)),r}function Sr(e,t,n,r=0){return r>0&&(t=Math.max(t,lr(e,r,mr).offset)),Vn(dr(e,t,n,vr),Dr)}function Cr(e,[t,n,r,i]){t.length>0&&r(`received item sizes`,t,Sn.DEBUG);let a=e.sizeTree,o=a,s=0;if(n.length>0&&Y(a)&&t.length===2){let e=t[0].size,r=t[1].size;o=n.reduce((t,n)=>Wn(Wn(t,n,e),n+1,r),o)}else [o,s]=gr(o,t);if(o===a)return e;let{lastIndex:c,lastOffset:l,lastSize:u,offsetTree:d}=Er(e.offsetTree,s,o,i);return{groupIndices:n,groupOffsetTree:n.reduce((e,t)=>Wn(e,t,yr(t,d,i)),Gn()),lastIndex:c,lastOffset:l,lastSize:u,offsetTree:d,sizeTree:o}}function wr(e){return Jn(e).map(({k:e,v:t},n,r)=>{let i=r[n+1];return{endIndex:i===void 0?1/0:i.k-1,size:t,startIndex:e}})}function Tr(e,t){let n=0,r=0;for(;n<e;)n+=t[r+1]-t[r]-1,r++;return r-(n===e?0:1)}function Er(e,t,n,r){let i=e,a=0,o=0,s=0,c=0;if(t!==0){c=ur(i,t-1,mr),s=i[c].offset;let e=Un(n,t-1);a=e[0],o=e[1],i.length&&i[c].size===Un(n,t)[1]&&--c,i=i.slice(0,c+1)}else i=[];for(let{start:e,value:c}of Kn(n,t,1/0)){let t=e-a,n=t*o+s+t*r;i.push({index:e,offset:n,size:c}),a=e,s=n,o=c}return{lastIndex:a,lastOffset:s,lastSize:o,offsetTree:i}}function Dr(e){return{index:e.index,value:e}}function Or(e){let{endIndex:t,size:n,startIndex:r}=e;return e=>e.start===r&&(e.end===t||e.end===1/0)&&e.value===n}var kr={offsetHeight:`height`,offsetWidth:`width`},Ar=q(([{log:e},{recalcInProgress:t}])=>{let n=K(),r=K(),i=gn(r,0),a=K(),o=K(),s=G(0),c=G([]),l=G(void 0),u=G(void 0),d=G(void 0),f=G(void 0),p=G((e,t)=>fr(e,kr[t])),m=G(void 0),h=G(0),g=hr(),_=gn(U(n,W(c,e,h),dn(Cr,g),B()),g),v=gn(U(c,B(),dn((e,t)=>({current:t,prev:e.current}),{current:[],prev:[]}),H(({prev:e})=>e)),[]);z(U(c,V(e=>e.length>0),W(_,h),H(([e,t,n])=>{let r=e.reduce((e,r,i)=>Wn(e,r,yr(r,t.offsetTree,n)||i),Gn());return{...t,groupIndices:e,groupOffsetTree:r}})),_),z(U(r,W(_),V(([e,{lastIndex:t}])=>e<t),H(([e,{lastIndex:t,lastSize:n}])=>[{endIndex:t,size:n,startIndex:e}])),n),z(l,u);let y=gn(U(l,H(e=>e===void 0)),!0);z(U(u,V(e=>e!==void 0&&Y(R(_).sizeTree)),H(e=>{let t=R(d),n=R(c).length>0;return t!==void 0&&t!==0?n?[{endIndex:0,size:t,startIndex:0},{endIndex:1,size:e,startIndex:1}]:[]:[{endIndex:0,size:e,startIndex:0}]})),n),z(U(f,V(e=>e!==void 0&&e.length>0&&Y(R(_).sizeTree)),H(e=>{let t=[],n=e[0],r=0;for(let i=1;i<e.length;i++){let a=e[i];a!==n&&(t.push({endIndex:i-1,size:n,startIndex:r}),n=a,r=i)}return t.push({endIndex:e.length-1,size:n,startIndex:r}),t})),n),z(U(c,W(d,u),V(([,e,t])=>e!==void 0&&t!==void 0),H(([e,t,n])=>{let r=[];for(let i=0;i<e.length;i++){let a=e[i],o=e[i+1];r.push({startIndex:a,endIndex:a,size:t}),o!==void 0&&r.push({startIndex:a+1,endIndex:o-1,size:n})}return r})),n);let b=_n(U(n,W(_),dn(({sizes:e},[t,n])=>({changed:n!==e,sizes:n}),{changed:!1,sizes:g}),H(e=>e.changed)));I(U(s,dn((e,t)=>({diff:e.prev-t,prev:t}),{diff:0,prev:0}),H(e=>e.diff)),e=>{let{groupIndices:n}=R(_);if(e>0)L(t,!0),L(a,e+Tr(e,n));else if(e<0){let t=R(v);t.length>0&&(e-=Tr(-e,t)),L(o,e)}}),I(U(s,W(e)),([e,t])=>{e<0&&t("`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value",{firstItemIndex:s},Sn.ERROR)});let x=_n(a);z(U(a,W(_),H(([e,t])=>{let n=t.groupIndices.length>0,r=[],i=t.lastSize;if(n){let n=Hn(t.sizeTree,0),a=0,o=0;for(;a<e;){let e=t.groupIndices[o],s=t.groupIndices.length===o+1?1/0:t.groupIndices[o+1]-e-1;r.push({endIndex:e,size:n,startIndex:e}),r.push({endIndex:e+1+s-1,size:i,startIndex:e+1}),o++,a+=s+1}let s=Jn(t.sizeTree);return a!==e&&s.shift(),s.reduce((t,{k:n,v:r})=>{let i=t.ranges;return t.prevSize!==0&&(i=[...t.ranges,{endIndex:n+e-1,size:t.prevSize,startIndex:t.prevIndex}]),{prevIndex:n+e,prevSize:r,ranges:i}},{prevIndex:e,prevSize:0,ranges:r}).ranges}return Jn(t.sizeTree).reduce((t,{k:n,v:r})=>({prevIndex:n+e,prevSize:r,ranges:[...t.ranges,{endIndex:n+e-1,size:t.prevSize,startIndex:t.prevIndex}]}),{prevIndex:0,prevSize:i,ranges:[]}).ranges})),n);let S=_n(U(o,W(_,h),H(([e,{offsetTree:t},n])=>yr(-e,t,n))));return z(U(o,W(_,h),H(([e,t,n])=>{if(t.groupIndices.length>0){if(Y(t.sizeTree))return t;let r=Gn(),i=R(v),a=0,o=0,s=0;for(;a<-e;){s=i[o];let e=i[o+1]-s-1;o++,a+=e+1}if(r=Jn(t.sizeTree).reduce((t,{k:n,v:r})=>Wn(t,Math.max(0,n+e),r),r),a!==-e){let n=Hn(t.sizeTree,s);r=Wn(r,0,n);let i=Un(t.sizeTree,-e+1)[1];r=Wn(r,1,i)}return{...t,sizeTree:r,...Er(t.offsetTree,0,r,n)}}let r=Jn(t.sizeTree).reduce((t,{k:n,v:r})=>Wn(t,Math.max(0,n+e),r),Gn());return{...t,sizeTree:r,...Er(t.offsetTree,0,r,n)}})),_),{beforeUnshiftWith:x,data:m,defaultItemSize:u,firstItemIndex:s,fixedItemSize:l,fixedGroupSize:d,gap:h,groupIndices:c,heightEstimates:f,itemSize:p,listRefresh:b,shiftWith:o,shiftWithOffset:S,sizeRanges:n,sizes:_,statefulTotalCount:i,totalCount:r,trackItemSizes:y,unshiftWith:a}},F(Tn,cr),{singleton:!0});function jr(e){return e.reduce((e,t)=>(e.groupIndices.push(e.totalCount),e.totalCount+=t+1,e),{groupIndices:[],totalCount:0})}var Mr=q(([{groupIndices:e,sizes:t,totalCount:n},{headerHeight:r,scrollTop:i}])=>{let a=K(),o=K(),s=_n(U(a,H(jr)));return z(U(s,H(e=>e.totalCount)),n),z(U(s,H(e=>e.groupIndices)),e),z(U(bn(i,t,r),V(([e,t])=>pr(t)),H(([e,t,n])=>Un(t.groupOffsetTree,Math.max(e-n,0),`v`)[0]),B(),H(e=>[e])),o),{groupCounts:a,topItemsIndexes:o}},F(Ar,zn)),Nr=q(([{log:e}])=>{let t=G(!1),n=_n(U(t,V(e=>e),B()));return I(t,t=>{t&&R(e)(`props updated`,{},Sn.DEBUG)}),{didMount:n,propsReady:t}},F(Tn),{singleton:!0}),Pr=typeof document<`u`&&`scrollBehavior`in document.documentElement.style;function Fr(e){let t=typeof e==`number`?{index:e}:e;return t.align||=`start`,(!t.behavior||!Pr)&&(t.behavior=`auto`),t.offset===void 0&&(t.offset=0),t}var Ir=q(([{gap:e,listRefresh:t,sizes:n,totalCount:r},{fixedFooterHeight:i,fixedHeaderHeight:a,footerHeight:o,headerHeight:s,scrollingInProgress:c,scrollTo:l,smoothScrollTargetReached:u,viewportHeight:d},{log:f}])=>{let p=K(),m=K(),h=G(0),g=null,_=null,v=null;function y(){g!==null&&(g(),g=null),v!==null&&(v(),v=null),_&&=(clearTimeout(_),null),L(c,!1)}return z(U(p,W(n,d,r,h,s,o,f),W(e,a,i),H(([[e,n,r,i,a,o,s,l],d,f,h])=>{let b=Fr(e),{align:x,behavior:S,offset:C}=b,w=i-1,T=xr(b,n,w),E=yr(T,n.offsetTree,d)+o;x===`end`?(E+=f+Un(n.sizeTree,T)[1]-r+h,T===w&&(E+=s)):x===`center`?E+=(f+Un(n.sizeTree,T)[1]-r+h)/2:E-=a,C!==void 0&&C!==0&&(E+=C);let D=t=>{y(),t?(l(`retrying to scroll to`,{location:e},Sn.DEBUG),L(p,e)):(L(m,!0),l(`list did not change, scroll successful`,{},Sn.DEBUG))};if(y(),S===`smooth`){let e=!1;v=I(t,t=>{e||=t}),g=sn(u,()=>{D(e)})}else g=sn(U(t,Lr(150)),D);return _=setTimeout(()=>{y()},1200),L(c,!0),l(`scrolling from index to`,{behavior:S,index:T,top:E},Sn.DEBUG),{behavior:S,top:E}})),l),{scrollTargetReached:m,scrollToIndex:p,topListHeight:h}},F(Ar,zn,Tn),{singleton:!0});function Lr(e){return t=>{let n=setTimeout(()=>{t(!1)},e);return e=>{e&&(t(!0),clearTimeout(n))}}}function Rr(e,t){e===0?t():requestAnimationFrame(()=>{Rr(e-1,t)})}function zr(e,t){let n=t-1;return typeof e==`number`?e:e.index===`LAST`?n:e.index}var Br=q(([{defaultItemSize:e,listRefresh:t,sizes:n},{scrollTop:r},{scrollTargetReached:i,scrollToIndex:a},{didMount:o}])=>{let s=G(!0),c=G(0),l=G(!0);return z(U(o,W(c),V(([e,t])=>t!==0),un(!1)),s),z(U(o,W(c),V(([e,t])=>t!==0),un(!1)),l),I(U(bn(t,o),W(s,n,e,l),V(([[,e],t,{sizeTree:n},r,i])=>e&&(!Y(n)||en(r))&&!t&&!i),W(c)),([,e])=>{sn(i,()=>{L(l,!0)}),Rr(4,()=>{sn(r,()=>{L(s,!0)}),L(a,e)})}),{initialItemFinalLocationReached:l,initialTopMostItemIndex:c,scrolledToInitialItem:s}},F(Ar,zn,Ir,Nr),{singleton:!0});function Vr(e,t){return Math.abs(e-t)<1.01}var Hr=`up`,Ur=`down`,Wr=`none`,Gr={atBottom:!1,notAtBottomBecause:`NOT_SHOWING_LAST_ITEM`,state:{offsetBottom:0,scrollHeight:0,scrollTop:0,viewportHeight:0}},Kr=0,qr=q(([{footerHeight:e,headerHeight:t,scrollBy:n,scrollContainerState:r,scrollTop:i,viewportHeight:a}])=>{let o=G(!1),s=G(!0),c=K(),l=K(),u=G(4),d=G(Kr),f=gn(U(xn(U(J(i),fn(1),un(!0)),U(J(i),fn(1),un(!1),cn(100))),B()),!1),p=gn(U(xn(U(n,un(!0)),U(n,un(!1),cn(200))),B()),!1);z(U(bn(J(i),J(d)),H(([e,t])=>e<=t),B()),s),z(U(s,pn(50)),l);let m=_n(U(bn(r,J(a),J(t),J(e),J(u)),dn((e,[{scrollHeight:t,scrollTop:n},r,i,a,o])=>{let s=n+r-t>-o,c={scrollHeight:t,scrollTop:n,viewportHeight:r};if(s){let t,r;return n>e.state.scrollTop?(t=`SCROLLED_DOWN`,r=e.state.scrollTop-n):(t=`SIZE_DECREASED`,r=e.state.scrollTop-n||e.scrollTopDelta),{atBottom:!0,atBottomBecause:t,scrollTopDelta:r,state:c}}let l;return l=c.scrollHeight>e.state.scrollHeight?`SIZE_INCREASED`:r<e.state.viewportHeight?`VIEWPORT_HEIGHT_DECREASING`:n<e.state.scrollTop?`SCROLLING_UPWARDS`:`NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM`,{atBottom:!1,notAtBottomBecause:l,state:c}},Gr),B((e,t)=>e!==void 0&&e.atBottom===t.atBottom))),h=gn(U(r,dn((e,{scrollHeight:t,scrollTop:n,viewportHeight:r})=>{if(!Vr(e.scrollHeight,t)){let i=t-(n+r)<1;return e.scrollTop!==n&&i?{changed:!0,jump:e.scrollTop-n,scrollHeight:t,scrollTop:n}:{changed:!0,jump:0,scrollHeight:t,scrollTop:n}}return{changed:!1,jump:0,scrollHeight:t,scrollTop:n}},{changed:!1,jump:0,scrollHeight:0,scrollTop:0}),V(e=>e.changed),H(e=>e.jump)),0);z(U(m,H(e=>e.atBottom)),o),z(U(o,pn(50)),c);let g=G(Ur);z(U(r,H(({scrollTop:e})=>e),B(),dn((e,t)=>R(p)?{direction:e.direction,prevScrollTop:t}:{direction:t<e.prevScrollTop?Hr:Ur,prevScrollTop:t},{direction:Ur,prevScrollTop:0}),H(e=>e.direction)),g),z(U(r,pn(50),un(Wr)),g);let _=G(0);return z(U(f,V(e=>!e),un(0)),_),z(U(i,pn(100),W(f),V(([e,t])=>t),dn(([e,t],[n])=>[t,n],[0,0]),H(([e,t])=>t-e)),_),{atBottomState:m,atBottomStateChange:c,atBottomThreshold:u,atTopStateChange:l,atTopThreshold:d,isAtBottom:o,isAtTop:s,isScrolling:f,lastJumpDueToItemResize:h,scrollDirection:g,scrollVelocity:_}},F(zn)),Jr=`top`,Yr=`bottom`,Xr=`none`;function Zr(e,t,n){return typeof e==`number`?n===Hr&&t===Jr||n===Ur&&t===Yr?e:0:n===Hr?t===Jr?e.main:e.reverse:t===Yr?e.main:e.reverse}function Qr(e,t){return typeof e==`number`?e:e[t]??0}var $r=q(([{deviation:e,fixedHeaderHeight:t,headerHeight:n,scrollTop:r,viewportHeight:i}])=>{let a=K(),o=G(0),s=G(0),c=G(0);return{increaseViewportBy:s,listBoundary:a,overscan:c,topListHeight:o,visibleRange:gn(U(bn(J(r),J(i),J(n),J(a,sr),J(c),J(o),J(t),J(e),J(s)),H(([e,t,n,[r,i],a,o,s,c,l])=>{let u=e-c,d=o+s,f=Math.max(n-u,0),p=Xr,m=Qr(l,Jr),h=Qr(l,Yr);return r-=c,r+=n+s,i+=n+s,i-=c,r>e+d-m&&(p=Hr),i<e-f+t+h&&(p=Ur),p===Xr?null:[Math.max(u-n-Zr(a,Jr,p)-m,0),u-f-s+t+Zr(a,Yr,p)+h]}),V(e=>e!==null),B(sr)),[0,0])}},F(zn),{singleton:!0});function ei(e,t,n){if(pr(t)){let r=br(e,t);return[{index:Un(t.groupOffsetTree,r)[0],offset:0,size:0},{data:n?.[0],index:r,offset:0,size:0}]}return[{data:n?.[0],index:e,offset:0,size:0}]}var ti={bottom:0,firstItemIndex:0,items:[],offsetBottom:0,offsetTop:0,top:0,topItems:[],topListHeight:0,totalCount:0};function ni(e,t,n,r,i,a){let{lastIndex:o,lastOffset:s,lastSize:c}=i,l=0,u=0;if(e.length>0){l=e[0].offset;let t=e[e.length-1];u=t.offset+t.size}let d=n-o,f=s+d*c+(d-1)*r,p=l,m=f-u;return{bottom:u,firstItemIndex:a,items:ii(e,i,a),offsetBottom:m,offsetTop:l,top:p,topItems:ii(t,i,a),topListHeight:t.reduce((e,t)=>t.size+e,0),totalCount:n}}function ri(e,t,n,r,i,a){let o=0;if(n.groupIndices.length>0)for(let t of n.groupIndices){if(t-o>=e)break;o++}let s=e+o,c=zr(t,s);return ni(Array.from({length:s}).map((e,t)=>({data:a[t+c],index:t+c,offset:0,size:0})),[],s,i,n,r)}function ii(e,t,n){if(e.length===0)return[];if(!pr(t))return e.map(e=>({...e,index:e.index+n,originalIndex:e.index}));let r=e[0].index,i=e[e.length-1].index,a=[],o=Kn(t.groupOffsetTree,r,i),s,c=0;for(let r of e){(!s||s.end<r.index)&&(s=o.shift(),c=t.groupIndices.indexOf(s.start));let e;e=r.index===s.start?{index:c,type:`group`}:{groupIndex:c,index:r.index-(c+1)+n},a.push({...e,data:r.data,offset:r.offset,originalIndex:r.index,size:r.size})}return a}function ai(e,t){return e===void 0?0:typeof e==`number`?e:e[t]??0}var oi=q(([{data:e,firstItemIndex:t,gap:n,sizes:r,totalCount:i},a,{listBoundary:o,topListHeight:s,visibleRange:c},{initialTopMostItemIndex:l,scrolledToInitialItem:u},{topListHeight:d},f,{didMount:p},{recalcInProgress:m}])=>{let h=G([]),g=G(0),_=K(),v=G(0);z(a.topItemsIndexes,h);let y=gn(U(bn(p,m,J(c,sr),J(i),J(r),J(l),u,J(h),J(t),J(n),J(v),e),V(([e,t,,n,,,,,,,,r])=>{let i=r!==void 0&&r.length!==n;return e&&!t&&!i}),H(([,,[e,t],n,r,i,a,o,s,c,l,u])=>{let d=r,{offsetTree:f,sizeTree:p}=d,m=R(g);if(n===0)return{...ti,totalCount:n};if(e===0&&t===0)return m===0?{...ti,totalCount:n}:ri(m,i,r,s,c,u||[]);if(Y(p))return m>0?null:ni(ei(zr(i,n),d,u),[],n,c,d,s);let h=[];if(o.length>0){let e=o[0],t=o[o.length-1],n=0;for(let r of Kn(p,e,t)){let i=r.value,a=Math.max(r.start,e),o=Math.min(r.end,t);for(let e=a;e<=o;e++)h.push({data:u?.[e],index:e,offset:n,size:i}),n+=i}}if(!a)return ni([],h,n,c,d,s);let _=o.length>0?o[o.length-1]+1:0,v=Sr(f,e,t,_);if(v.length===0)return null;let y=n-1,b=rn([],n=>{for(let r of v){let i=r.value,a=i.offset,o=r.start,s=i.size;if(i.offset<e){o+=Math.floor((e-i.offset+c)/(s+c));let t=o-r.start;a+=t*s+t*c}o<_&&(a+=(_-o)*s,o=_);let l=Math.min(r.end,y);for(let e=o;e<=l&&!(a>=t);e++)n.push({data:u?.[e],index:e,offset:a,size:s}),a+=s+c}}),x=ai(l,Jr),S=ai(l,Yr);if(b.length>0&&(x>0||S>0)){let e=b[0],t=b[b.length-1];if(x>0&&e.index>_){let t=Math.min(x,e.index-_),n=[],r=e.offset;for(let i=e.index-1;i>=e.index-t;i--){let t=Kn(p,i,i)[0]?.value??e.size;r-=t+c,n.unshift({data:u?.[i],index:i,offset:r,size:t})}b.unshift(...n)}if(S>0&&t.index<y){let e=Math.min(S,y-t.index),n=t.offset+t.size+c;for(let r=t.index+1;r<=t.index+e;r++){let e=Kn(p,r,r)[0]?.value??t.size;b.push({data:u?.[r],index:r,offset:n,size:e}),n+=e+c}}}return ni(b,h,n,c,d,s)}),V(e=>e!==null),B()),ti);z(U(e,V(en),H(e=>e?.length)),i),z(U(y,H(e=>e.topListHeight)),d),z(d,s),z(U(y,H(e=>[e.top,e.bottom])),o),z(U(y,H(e=>e.items)),_);let b=_n(U(y,V(({items:e})=>e.length>0),W(i,e),V(([{items:e},t])=>e[e.length-1].originalIndex===t-1),H(([,e,t])=>[e-1,t]),B(sr),H(([e])=>e))),x=_n(U(y,pn(200),V(({items:e,topItems:t})=>e.length>0&&e[0].originalIndex===t.length),H(({items:e})=>e[0].index),B()));return{endReached:b,initialItemCount:g,itemsRendered:_,listState:y,minOverscanItemCount:v,rangeChanged:_n(U(y,V(({items:e})=>e.length>0),H(({items:e})=>{let t=0,n=e.length-1;for(;e[t].type===`group`&&t<n;)t++;for(;e[n].type===`group`&&n>t;)n--;return{endIndex:e[n].index,startIndex:e[t].index}}),B(or))),startReached:x,topItemsIndexes:h,...f}},F(Ar,Mr,$r,Br,Ir,qr,Nr,cr),{singleton:!0}),si=q(([{fixedFooterHeight:e,fixedHeaderHeight:t,footerHeight:n,headerHeight:r},{listState:i}])=>{let a=K(),o=gn(U(bn(n,e,r,t,i),H(([e,t,n,r,i])=>e+t+n+r+i.offsetBottom+i.bottom)),0);return z(J(o),a),{totalListHeight:o,totalListHeightChanged:a}},F(zn,oi),{singleton:!0}),ci=q(([{viewportHeight:e},{totalListHeight:t}])=>{let n=G(!1);return{alignToBottom:n,paddingTopAddition:gn(U(bn(n,e,t),V(([e])=>e),H(([,e,t])=>Math.max(0,e-t)),pn(0),B()),0)}},F(zn,si),{singleton:!0}),li=q(()=>({context:G(null)})),ui=({itemBottom:e,itemTop:t,locationParams:{align:n,behavior:r,...i},viewportBottom:a,viewportTop:o})=>t<o?{...i,align:n??`start`,...r===void 0?{}:{behavior:r}}:e>a?{...i,align:n??`end`,...r===void 0?{}:{behavior:r}}:null,di=q(([{gap:e,sizes:t,totalCount:n},{fixedFooterHeight:r,fixedHeaderHeight:i,headerHeight:a,scrollingInProgress:o,scrollTop:s,viewportHeight:c},{scrollToIndex:l}])=>{let u=K();return z(U(u,W(t,c,n,a,i,r,s),W(e),H(([[e,t,n,r,i,a,s,c],l])=>{let{calculateViewLocation:u=ui,done:d,...f}=e,p=xr(e,t,r-1),m=yr(p,t.offsetTree,l)+i+a,h=m+Un(t.sizeTree,p)[1],g=c+a,_=u({itemBottom:h,itemTop:m,locationParams:f,viewportBottom:c+n-s,viewportTop:g});return _===null?d?.():d&&sn(U(o,V(e=>!e),fn(R(o)?1:2)),d),_}),V(e=>e!==null)),l),{scrollIntoView:u}},F(Ar,zn,Ir,oi,Tn),{singleton:!0});function fi(e){return e===!1?!1:e===`smooth`?`smooth`:`auto`}var pi=(e,t)=>typeof e==`function`?fi(e(t)):t&&fi(e),mi=q(([{listRefresh:e,totalCount:t,fixedItemSize:n,data:r},{atBottomState:i,isAtBottom:a},{scrollToIndex:o},{scrolledToInitialItem:s},{didMount:c,propsReady:l},{log:u},{scrollingInProgress:d},{context:f},{scrollIntoView:p}])=>{let m=G(!1),h=K(),g=null;function _(e){L(o,{align:`end`,behavior:e,index:`LAST`})}I(U(bn(U(J(t),fn(1)),c),W(J(m),a,s,d),H(([[e,t],n,r,i,a])=>{let o=t&&i,s=`auto`;return o&&(s=pi(n,r||a),o&&=s!==!1),{followOutputBehavior:s,shouldFollow:o,totalCount:e}}),V(({shouldFollow:e})=>e)),({followOutputBehavior:t,totalCount:r})=>{g!==null&&(g(),g=null),R(n)===void 0?g=sn(e,()=>{R(u)(`following output to `,{totalCount:r},Sn.DEBUG),_(t),g=null}):requestAnimationFrame(()=>{R(u)(`following output to `,{totalCount:r},Sn.DEBUG),_(t)})});function v(e){let t=sn(i,t=>{e&&!t.atBottom&&t.notAtBottomBecause===`SIZE_INCREASED`&&g===null&&(R(u)(`scrolling to bottom due to increased size`,{},Sn.DEBUG),_(`auto`))});setTimeout(t,100)}I(U(bn(J(m),t,l),V(([e,,t])=>e!==!1&&t),dn(({value:e},[,t])=>({refreshed:e===t,value:t}),{refreshed:!1,value:0}),V(({refreshed:e})=>e),W(m,t)),([,e])=>{R(s)&&v(e!==!1)}),I(h,()=>{v(R(m)!==!1)}),I(bn(J(m),i),([e,t])=>{e!==!1&&!t.atBottom&&t.notAtBottomBecause===`VIEWPORT_HEIGHT_DECREASING`&&_(`auto`)});let y=G(null),b=K();return z(xn(U(J(r),H(e=>e?.length??0)),U(J(t))),b),I(U(bn(U(b,fn(1)),c),W(J(y),s,d,f),H(([[e,t],n,r,i,a])=>t&&r&&n?.({context:a,totalCount:e,scrollingInProgress:i})),V(e=>!!e),pn(0)),t=>{g!==null&&(g(),g=null),R(n)===void 0?g=sn(e,()=>{R(u)(`scrolling into view`,{}),L(p,t),g=null}):requestAnimationFrame(()=>{R(u)(`scrolling into view`,{}),L(p,t)})}),{autoscrollToBottom:h,followOutput:m,scrollIntoViewOnChange:y}},F(Ar,qr,Ir,Br,Nr,Tn,zn,li,di)),hi=q(([{data:e,firstItemIndex:t,gap:n,sizes:r},{initialTopMostItemIndex:i},{initialItemCount:a,listState:o},{didMount:s}])=>(z(U(s,W(a),V(([,e])=>e!==0),W(i,r,t,n,e),H(([[,e],t,n,r,i,a=[]])=>ri(e,t,n,r,i,a))),o),{}),F(Ar,Br,oi,Nr),{singleton:!0}),gi=q(([{didMount:e},{scrollTo:t},{listState:n}])=>{let r=G(0);return I(U(e,W(r),V(([,e])=>e!==0),H(([,e])=>({top:e}))),e=>{sn(U(n,fn(1),V(e=>e.items.length>1)),()=>{requestAnimationFrame(()=>{L(t,e)})})}),{initialScrollTop:r}},F(Nr,zn,oi),{singleton:!0}),_i=q(([{scrollVelocity:e}])=>{let t=G(!1),n=K(),r=G(!1);return z(U(e,W(r,t,n),V(([e,t])=>t!==!1&&t!==void 0),H(([e,t,n,r])=>{let{enter:i,exit:a}=t;if(n){if(a(e,r))return!1}else if(i(e,r))return!0;return n}),B()),t),I(U(bn(t,e,n),W(r)),([[e,t,n],r])=>{e&&r!==!1&&r!==void 0&&r.change&&r.change(t,n)}),{isSeeking:t,scrollSeekConfiguration:r,scrollSeekRangeChanged:n,scrollVelocity:e}},F(qr),{singleton:!0}),vi=q(([{scrollContainerState:e,scrollTo:t}])=>{let n=K(),r=K(),i=K(),a=G(!1),o=G(void 0);return z(U(bn(n,r),H(([{scrollTop:e,viewportHeight:t},{offsetTop:n,listHeight:r}])=>({scrollHeight:r,scrollTop:Math.max(0,e-n),viewportHeight:t}))),e),z(U(t,W(r),H(([e,{offsetTop:t}])=>({...e,top:e.top+t}))),i),{customScrollParent:o,useWindowScroll:a,windowScrollContainerState:n,windowScrollTo:i,windowViewportRect:r}},F(zn)),yi=q(([{sizeRanges:e,sizes:t},{headerHeight:n,scrollTop:r},{initialTopMostItemIndex:i},{didMount:a},{useWindowScroll:o,windowScrollContainerState:s,windowViewportRect:c}])=>{let l=K(),u=G(void 0),d=G(null),f=G(null);return z(s,d),z(c,f),I(U(l,W(t,r,o,d,f,n)),([e,t,n,r,i,a,o])=>{let s=wr(t.sizeTree);r&&i!==null&&a!==null&&(n=i.scrollTop-a.offsetTop),n-=o,e({ranges:s,scrollTop:n})}),z(U(u,V(en),H(bi)),i),z(U(a,W(u),V(([,e])=>e!==void 0),B(),H(([,e])=>e.ranges)),e),{getState:l,restoreStateFrom:u}},F(Ar,zn,Br,Nr,vi));function bi(e){return{align:`start`,index:0,offset:e.scrollTop}}var xi=q(([{topItemsIndexes:e}])=>{let t=G(0);return z(U(t,V(e=>e>=0),H(e=>Array.from({length:e}).map((e,t)=>t))),e),{topItemCount:t}},F(oi));function Si(e){let t=!1,n;return(()=>(t||(t=!0,n=e()),n))}var Ci=Si(()=>/iP(ad|od|hone)/i.test(navigator.userAgent)&&/WebKit/i.test(navigator.userAgent)),wi=q(([{data:e,defaultItemSize:t,firstItemIndex:n,fixedItemSize:r,fixedGroupSize:i,gap:a,groupIndices:o,heightEstimates:s,itemSize:c,sizeRanges:l,sizes:u,statefulTotalCount:d,totalCount:f,trackItemSizes:p},{initialItemFinalLocationReached:m,initialTopMostItemIndex:h,scrolledToInitialItem:g},_,v,y,b,{scrollToIndex:x},S,{topItemCount:C},{groupCounts:w},T])=>{let{listState:E,minOverscanItemCount:D,topItemsIndexes:ee,rangeChanged:te,...ne}=b;return z(te,T.scrollSeekRangeChanged),z(U(T.windowViewportRect,H(e=>e.visibleHeight)),_.viewportHeight),{data:e,defaultItemHeight:t,firstItemIndex:n,fixedItemHeight:r,fixedGroupHeight:i,gap:a,groupCounts:w,heightEstimates:s,initialItemFinalLocationReached:m,initialTopMostItemIndex:h,scrolledToInitialItem:g,sizeRanges:l,topItemCount:C,topItemsIndexes:ee,totalCount:f,...y,groupIndices:o,itemSize:c,listState:E,minOverscanItemCount:D,scrollToIndex:x,statefulTotalCount:d,trackItemSizes:p,rangeChanged:te,...ne,...T,..._,sizes:u,...v}},F(Ar,Br,zn,yi,mi,oi,Ir,q(([{deviation:e,scrollBy:t,scrollingInProgress:n,scrollTop:r},{isAtBottom:i,isScrolling:a,lastJumpDueToItemResize:o,scrollDirection:s},{listState:c},{beforeUnshiftWith:l,gap:u,shiftWithOffset:d,sizes:f},{log:p},{recalcInProgress:m}])=>{let h=_n(U(c,W(o),dn(([,e,t,n],[{bottom:r,items:i,offsetBottom:a,totalCount:o},s])=>{let c=r+a,l=0;return t===o&&e.length>0&&i.length>0&&(i[0].originalIndex===0&&e[0].originalIndex===0||(l=c-n,l!==0&&(l+=s))),[l,i,o,c]},[0,[],0,0]),V(([e])=>e!==0),W(r,s,n,i,p,m),V(([,e,t,n,,,r])=>!r&&!n&&e!==0&&t===Hr),H(([[e],,,,,t])=>(t(`Upward scrolling compensation`,{amount:e},Sn.DEBUG),e))));function g(n){n>0?(L(t,{behavior:`auto`,top:-n}),L(e,0)):(L(e,0),L(t,{behavior:`auto`,top:-n}))}return I(U(h,W(e,a)),([t,n,r])=>{r&&Ci()?L(e,n-t):g(-t)}),I(U(bn(gn(a,!1),e,m),V(([e,t,n])=>!e&&!n&&t!==0),H(([e,t])=>t),pn(1)),g),z(U(d,H(e=>({top:-e}))),t),I(U(l,W(f,u),H(([e,{groupIndices:t,lastSize:n,sizeTree:r},i])=>{function a(e){return e*(n+i)}if(t.length===0)return a(e);let o=0,s=Hn(r,0),c=0,l=0;for(;c<e;){c++,o+=s;let n=t.length===l+1?1/0:t[l+1]-t[l]-1;c+n>e&&(o-=s,n=e-c+1),c+=n,o+=a(n),l++}return o})),n=>{L(e,n),requestAnimationFrame(()=>{L(t,{top:n}),requestAnimationFrame(()=>{L(e,0),L(m,!1)})})}),{deviation:e}},F(zn,qr,oi,Ar,Tn,cr)),xi,Mr,q(([e,t,n,r,i,a,o,s,c,l,u])=>({...e,...t,...n,...r,...i,...a,...o,...s,...c,...l,...u}),F($r,hi,Nr,_i,si,gi,ci,vi,di,Tn,li))));function Ti(e,t){let n={},r={},i=0,a=e.length;for(;i<a;)r[e[i]]=1,i+=1;for(let e in t)Object.hasOwn(r,e)||(n[e]=t[e]);return n}var Ei=typeof document<`u`?N.useLayoutEffect:N.useEffect;function Di(e,t,n){let r=Object.keys(t.required||{}),i=Object.keys(t.optional||{}),a=Object.keys(t.methods||{}),o=Object.keys(t.events||{}),s=N.createContext({});function c(e,n){e.propsReady!==void 0&&L(e.propsReady,!1);for(let i of r){let r=e[t.required[i]];L(r,n[i])}for(let r of i)if(r in n){let i=e[t.optional[r]];L(i,n[r])}e.propsReady!==void 0&&L(e.propsReady,!0)}function l(e){return a.reduce((n,r)=>(n[r]=n=>{let i=e[t.methods[r]];L(i,n)},n),{})}function u(e){return o.reduce((n,r)=>(n[r]=hn(e[t.events[r]]),n),{})}return{Component:N.forwardRef(function(t,a){let{children:d,...f}=t,[p]=N.useState(()=>rn(yn(e),e=>{c(e,f)})),[m]=N.useState(Qt(u,p));Ei(()=>{for(let e of o)e in f&&I(m[e],f[e]);return()=>{Object.values(m).map(on)}},[f,m,p]),Ei(()=>{c(p,f)}),N.useImperativeHandle(a,Yt(l(p)));let h=n;return(0,P.jsx)(s.Provider,{value:p,children:n===void 0?d:(0,P.jsx)(h,{...Ti([...r,...i,...o],f),children:d})})}),useEmitter:(e,t)=>{let n=N.useContext(s)[e];Ei(()=>I(n,t),[t,n])},useEmitterValue:e=>{let t=N.useContext(s)[e],n=N.useCallback(e=>I(t,e),[t]);return N.useSyncExternalStore(n,()=>R(t),()=>R(t))},usePublisher:e=>{let t=N.useContext(s);return N.useCallback(n=>{L(t[e],n)},[t,e])}}}var Oi=N.createContext(void 0),ki=N.createContext(void 0),Ai=`-webkit-sticky`,ji=`sticky`,Mi=Si(()=>{if(typeof document>`u`)return ji;let e=document.createElement(`div`);return e.style.position=Ai,e.style.position===Ai?Ai:ji}),Ni=typeof document<`u`?N.useLayoutEffect:N.useEffect;function Pi(e){return`self`in e}function Fi(e){return`body`in e}function Ii(e,t,n,r=nn,i,a){let o=N.useRef(null),s=N.useRef(null),c=N.useRef(null),l=N.useCallback(n=>{let r,i,o,l=n.target;if(Fi(l)||Pi(l)){let e=Pi(l)?l:l.defaultView;o=a===!0?jn(e,e.scrollX):e.scrollY,r=a===!0?e.document.documentElement.scrollWidth:e.document.documentElement.scrollHeight,i=a===!0?e.innerWidth:e.innerHeight}else o=a===!0?jn(l,l.scrollLeft):l.scrollTop,r=a===!0?l.scrollWidth:l.scrollHeight,i=a===!0?l.offsetWidth:l.offsetHeight;let u=()=>{e({scrollHeight:r,scrollTop:Math.max(o,0),viewportHeight:i})};n.suppressFlushSync===!0?u():Bt.flushSync(u),s.current!==null&&(o===s.current||o<=0||o===r-i)&&(s.current=null,t(!0),c.current&&=(clearTimeout(c.current),null))},[e,t,a]);N.useEffect(()=>{let e=i||o.current;return kn(e),r(i||o.current),l({suppressFlushSync:!0,target:e}),e.addEventListener(`scroll`,l,{passive:!0}),()=>{kn(e),r(null),e.removeEventListener(`scroll`,l)}},[o,l,n,r,i]);function u(n){let r=o.current;if(!r||(a===!0?`offsetWidth`in r&&r.offsetWidth===0:`offsetHeight`in r&&r.offsetHeight===0))return;let i=n.behavior===`smooth`,l,u,d;Pi(r)?(u=Math.max(fr(r.document.documentElement,a===!0?`width`:`height`),a===!0?r.document.documentElement.scrollWidth:r.document.documentElement.scrollHeight),l=a===!0?r.innerWidth:r.innerHeight,d=a===!0?jn(r,r.scrollX):r.scrollY):(u=r[a===!0?`scrollWidth`:`scrollHeight`],l=fr(r,a===!0?`width`:`height`),d=a===!0?jn(r,r.scrollLeft):r.scrollTop);let f=u-l;if(n.top===void 0){r.scrollTo(n);return}let p=Math.ceil(Math.max(Math.min(f,n.top),0));if(n.top=p,Vr(l,u)||p===d){e({scrollHeight:u,scrollTop:d,viewportHeight:l}),i&&t(!0);return}i?(s.current=p,c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{c.current=null,s.current=null,t(!0)},1e3)):s.current=null,a===!0&&(n={...n.behavior===void 0?{}:{behavior:n.behavior},left:Mn(r,p)}),r.scrollTo(n)}function d(e){a===!0&&(e={...e.behavior===void 0?{}:{behavior:e.behavior},...e.top===void 0?{}:{left:Mn(o.current,e.top)}}),o.current.scrollBy(e)}return{scrollByCallback:d,scrollerRef:o,scrollToCallback:u}}function Li(e){return e}var Ri=q(([e,t])=>({...e,...t}),F(wi,q(()=>{let e=G(e=>`Item ${e}`),t=G(e=>`Group ${e}`),n=G({}),r=G(Li),i=G(`div`),a=G(nn),o=(e,t=null)=>gn(U(n,H(t=>t[e]),B()),t);return{components:n,computeItemKey:r,EmptyPlaceholder:o(`EmptyPlaceholder`),FooterComponent:o(`Footer`),GroupComponent:o(`Group`,`div`),groupContent:t,HeaderComponent:o(`Header`),HeaderFooterTag:i,ItemComponent:o(`Item`,`div`),itemContent:e,ListComponent:o(`List`,`div`),ScrollerComponent:o(`Scroller`,`div`),scrollerRef:a,ScrollSeekPlaceholder:o(`ScrollSeekPlaceholder`),TopItemListComponent:o(`TopItemList`)}}))),zi=({height:e})=>(0,P.jsx)(`div`,{style:{height:e}}),Bi={overflowAnchor:`none`,position:Mi(),zIndex:1},Vi={overflowAnchor:`none`},Hi={...Vi,display:`inline-block`,height:`100%`},Ui=N.memo(function({showTopList:e=!1}){let t=Z(`listState`),n=aa(`sizeRanges`),r=Z(`useWindowScroll`),i=Z(`customScrollParent`),a=aa(`windowScrollContainerState`),o=aa(`scrollContainerState`),s=i||r?a:o,c=Z(`itemContent`),l=Z(`context`),u=Z(`groupContent`),d=Z(`trackItemSizes`),f=Z(`itemSize`),p=Z(`log`),m=aa(`gap`),h=Z(`horizontalDirection`),{callbackRef:g}=Fn(n,f,d,e?nn:s,p,m,i,h,Z(`skipAnimationFrameInResizeObserver`)),[_,v]=N.useState(0);ia(`deviation`,e=>{_!==e&&v(e)});let y=Z(`EmptyPlaceholder`),b=Z(`ScrollSeekPlaceholder`)??zi,x=Z(`ListComponent`),S=Z(`ItemComponent`),C=Z(`GroupComponent`),w=Z(`computeItemKey`),T=Z(`isSeeking`),E=Z(`groupIndices`).length>0,D=Z(`alignToBottom`),ee=Z(`initialItemFinalLocationReached`),te=e?{}:{boxSizing:`border-box`,...h?{display:`inline-block`,height:`100%`,marginInlineStart:_===0?D?`auto`:0:_,paddingInlineEnd:t.offsetBottom,paddingInlineStart:t.offsetTop,whiteSpace:`nowrap`}:{marginTop:_===0?D?`auto`:0:_,paddingBottom:t.offsetBottom,paddingTop:t.offsetTop},...ee?{}:{visibility:`hidden`}};return!e&&t.totalCount===0&&y!=null?(0,P.jsx)(y,{...X(y,l)}):(0,P.jsx)(x,{...X(x,l),"data-testid":e?`virtuoso-top-item-list`:`virtuoso-item-list`,ref:g,style:te,children:(e?t.topItems:t.items).map(e=>{let n=e.originalIndex,r=w(n+t.firstItemIndex,e.data,l);return T?(0,N.createElement)(b,{...X(b,l),height:e.size,index:e.index,key:r,type:e.type||`item`,...e.type===`group`?{}:{groupIndex:e.groupIndex}}):e.type===`group`?(0,N.createElement)(C,{...X(C,l),"data-index":n,"data-item-index":e.index,"data-known-size":e.size,key:r,style:Bi},u(e.index,l)):(0,N.createElement)(S,{...X(S,l),...Yi(S,e.data),"data-index":n,"data-item-group-index":e.groupIndex,"data-item-index":e.index,"data-known-size":e.size,key:r,style:h?Hi:Vi},E?c(e.index,e.groupIndex,e.data,l):c(e.index,e.data,l))})})}),Wi={height:`100%`,outline:`none`,overflowY:`auto`,position:`relative`,WebkitOverflowScrolling:`touch`},Gi={outline:`none`,overflowX:`auto`,position:`relative`},Ki=e=>({height:`100%`,position:`absolute`,top:0,width:`100%`,...e?{display:`flex`,flexDirection:`column`}:void 0}),qi=(e,t,n=0)=>({...Ki(e),position:t?`relative`:`absolute`,top:t?-n:0}),Ji={position:Mi(),top:0,width:`100%`,zIndex:1};function X(e,t){if(typeof e!=`string`)return{context:t}}function Yi(e,t){return{item:typeof e==`string`?void 0:t}}var Xi=N.memo(function(){let e=Z(`HeaderComponent`),t=aa(`headerHeight`),n=Z(`HeaderFooterTag`),r=Nn(N.useMemo(()=>e=>{t(fr(e,`height`))},[t]),!0,Z(`skipAnimationFrameInResizeObserver`)),i=Z(`context`);return e==null?null:(0,P.jsx)(n,{ref:r,children:(0,P.jsx)(e,{...X(e,i)})})}),Zi=N.memo(function(){let e=Z(`FooterComponent`),t=aa(`footerHeight`),n=Z(`HeaderFooterTag`),r=Nn(N.useMemo(()=>e=>{t(fr(e,`height`))},[t]),!0,Z(`skipAnimationFrameInResizeObserver`)),i=Z(`context`);return e==null?null:(0,P.jsx)(n,{ref:r,children:(0,P.jsx)(e,{...X(e,i)})})});function Qi({useEmitter:e,useEmitterValue:t,usePublisher:n}){return N.memo(function({children:r,style:i,context:a,...o}){let s=n(`scrollContainerState`),c=t(`ScrollerComponent`),l=n(`smoothScrollTargetReached`),u=t(`scrollerRef`),d=t(`horizontalDirection`)||!1,{scrollByCallback:f,scrollerRef:p,scrollToCallback:m}=Ii(s,l,c,u,void 0,d);return e(`scrollTo`,m),e(`scrollBy`,f),(0,P.jsx)(c,{"data-testid":`virtuoso-scroller`,"data-virtuoso-scroller":!0,ref:p,style:{...d?Gi:Wi,...i},tabIndex:0,...o,...X(c,a),children:r})})}function $i({useEmitter:e,useEmitterValue:t,usePublisher:n}){return N.memo(function({children:r,style:i,context:a,...o}){let s=n(`windowScrollContainerState`),c=t(`ScrollerComponent`),l=n(`smoothScrollTargetReached`),u=t(`totalListHeight`),d=t(`deviation`),f=t(`customScrollParent`),p=N.useRef(null),{scrollByCallback:m,scrollerRef:h,scrollToCallback:g}=Ii(s,l,c,t(`scrollerRef`),f);return Ni(()=>(h.current=f||p.current?.ownerDocument.defaultView,()=>{h.current=null}),[h,f]),e(`windowScrollTo`,g),e(`scrollBy`,m),(0,P.jsx)(c,{ref:p,"data-virtuoso-scroller":!0,style:{position:`relative`,...i,...u===0?void 0:{height:u+d}},...o,...X(c,a),children:r})})}var ea=({children:e})=>{let t=N.useContext(Oi),n=aa(`viewportHeight`),r=aa(`fixedItemHeight`),i=Z(`alignToBottom`),a=Z(`horizontalDirection`),o=Nn(N.useMemo(()=>Zt(n,e=>fr(e,a?`width`:`height`)),[n,a]),!0,Z(`skipAnimationFrameInResizeObserver`));return N.useEffect(()=>{t&&(n(t.viewportHeight),r(t.itemHeight))},[t,n,r]),(0,P.jsx)(`div`,{"data-viewport-type":`element`,ref:o,style:Ki(i),children:e})},ta=({children:e})=>{let t=N.useContext(Oi),n=aa(`windowViewportRect`),r=aa(`fixedItemHeight`),i=Z(`customScrollParent`),a=Z(`useWindowScroll`),o=Z(`topListHeight`),s=Rn(n,i,Z(`skipAnimationFrameInResizeObserver`)),c=Z(`alignToBottom`);return N.useEffect(()=>{t&&(r(t.itemHeight),n({listHeight:0,offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:100}))},[t,n,r]),(0,P.jsx)(`div`,{"data-viewport-type":`window`,ref:s,style:qi(c,a,o),children:e})},na=({children:e})=>{let t=Z(`TopItemListComponent`)??`div`,n=Z(`headerHeight`);return(0,P.jsx)(t,{style:{...Ji,marginTop:`${n}px`},...X(t,Z(`context`)),children:e})},{Component:ra,useEmitter:ia,useEmitterValue:Z,usePublisher:aa}=Di(Ri,{optional:{restoreStateFrom:`restoreStateFrom`,context:`context`,followOutput:`followOutput`,scrollIntoViewOnChange:`scrollIntoViewOnChange`,itemContent:`itemContent`,groupContent:`groupContent`,overscan:`overscan`,increaseViewportBy:`increaseViewportBy`,minOverscanItemCount:`minOverscanItemCount`,totalCount:`totalCount`,groupCounts:`groupCounts`,topItemCount:`topItemCount`,firstItemIndex:`firstItemIndex`,initialTopMostItemIndex:`initialTopMostItemIndex`,components:`components`,atBottomThreshold:`atBottomThreshold`,atTopThreshold:`atTopThreshold`,computeItemKey:`computeItemKey`,defaultItemHeight:`defaultItemHeight`,fixedGroupHeight:`fixedGroupHeight`,fixedItemHeight:`fixedItemHeight`,heightEstimates:`heightEstimates`,itemSize:`itemSize`,scrollSeekConfiguration:`scrollSeekConfiguration`,headerFooterTag:`HeaderFooterTag`,data:`data`,initialItemCount:`initialItemCount`,initialScrollTop:`initialScrollTop`,alignToBottom:`alignToBottom`,useWindowScroll:`useWindowScroll`,customScrollParent:`customScrollParent`,scrollerRef:`scrollerRef`,logLevel:`logLevel`,horizontalDirection:`horizontalDirection`,skipAnimationFrameInResizeObserver:`skipAnimationFrameInResizeObserver`},methods:{scrollToIndex:`scrollToIndex`,scrollIntoView:`scrollIntoView`,scrollTo:`scrollTo`,scrollBy:`scrollBy`,autoscrollToBottom:`autoscrollToBottom`,getState:`getState`},events:{isScrolling:`isScrolling`,endReached:`endReached`,startReached:`startReached`,rangeChanged:`rangeChanged`,atBottomStateChange:`atBottomStateChange`,atTopStateChange:`atTopStateChange`,totalListHeightChanged:`totalListHeightChanged`,itemsRendered:`itemsRendered`,groupIndices:`groupIndices`}},N.memo(function(e){let t=Z(`useWindowScroll`),n=Z(`topItemsIndexes`).length>0,r=Z(`customScrollParent`),i=Z(`context`);return(0,P.jsxs)(r||t?sa:oa,{...e,context:i,children:[n&&(0,P.jsx)(na,{children:(0,P.jsx)(Ui,{showTopList:!0})}),(0,P.jsxs)(r||t?ta:ea,{children:[(0,P.jsx)(Xi,{}),(0,P.jsx)(Ui,{}),(0,P.jsx)(Zi,{})]})]})})),oa=Qi({useEmitter:ia,useEmitterValue:Z,usePublisher:aa}),sa=$i({useEmitter:ia,useEmitterValue:Z,usePublisher:aa}),ca=ra,la=q(([e,t])=>({...e,...t}),F(wi,q(()=>{let e=G(e=>(0,P.jsxs)(`td`,{children:[`Item $`,e]})),t=G(null),n=G(e=>(0,P.jsxs)(`td`,{colSpan:1e3,children:[`Group `,e]})),r=G(null),i=G(null),a=G({}),o=G(Li),s=G(nn),c=(e,t=null)=>gn(U(a,H(t=>t[e]),B()),t);return{components:a,computeItemKey:o,context:t,EmptyPlaceholder:c(`EmptyPlaceholder`),FillerRow:c(`FillerRow`),fixedFooterContent:i,fixedHeaderContent:r,itemContent:e,groupContent:n,ScrollerComponent:c(`Scroller`,`div`),scrollerRef:s,ScrollSeekPlaceholder:c(`ScrollSeekPlaceholder`),TableBodyComponent:c(`TableBody`,`tbody`),TableComponent:c(`Table`,`table`),TableFooterComponent:c(`TableFoot`,`tfoot`),TableHeadComponent:c(`TableHead`,`thead`),TableRowComponent:c(`TableRow`,`tr`),GroupComponent:c(`Group`,`tr`)}}))),ua=({height:e})=>(0,P.jsx)(`tr`,{children:(0,P.jsx)(`td`,{style:{height:e}})}),da=({height:e})=>(0,P.jsx)(`tr`,{children:(0,P.jsx)(`td`,{style:{border:0,height:e,padding:0}})}),fa={overflowAnchor:`none`},pa={position:Mi(),zIndex:2,overflowAnchor:`none`},ma=N.memo(function({showTopList:e=!1}){let t=Q(`listState`),n=Q(`computeItemKey`),r=Q(`firstItemIndex`),i=Q(`context`),a=Q(`isSeeking`),o=Q(`fixedHeaderHeight`),s=Q(`groupIndices`).length>0,c=Q(`itemContent`),l=Q(`groupContent`),u=Q(`ScrollSeekPlaceholder`)??ua,d=Q(`GroupComponent`),f=Q(`TableRowComponent`),p=(e?t.topItems:[]).reduce((e,t,n)=>(n===0?e.push(t.size):e.push(e[n-1]+t.size),e),[]);return(e?t.topItems:t.items).map(t=>{let m=t.originalIndex,h=n(m+r,t.data,i),g=e?m===0?0:p[m-1]:0;return a?(0,N.createElement)(u,{...X(u,i),height:t.size,index:t.index,key:h,type:t.type||`item`}):t.type===`group`?(0,N.createElement)(d,{...X(d,i),"data-index":m,"data-item-index":t.index,"data-known-size":t.size,key:h,style:{...pa,top:o}},l(t.index,i)):(0,N.createElement)(f,{...X(f,i),...Yi(f,t.data),"data-index":m,"data-item-index":t.index,"data-known-size":t.size,"data-item-group-index":t.groupIndex,key:h,style:e?{...pa,top:o+g}:fa},s?c(t.index,t.groupIndex,t.data,i):c(t.index,t.data,i))})}),ha=N.memo(function(){let e=Q(`listState`),t=Q(`topItemsIndexes`).length>0,n=ba(`sizeRanges`),r=Q(`useWindowScroll`),i=Q(`customScrollParent`),a=ba(`windowScrollContainerState`),o=ba(`scrollContainerState`),s=i||r?a:o,c=Q(`trackItemSizes`),{callbackRef:l,ref:u}=Fn(n,Q(`itemSize`),c,s,Q(`log`),void 0,i,!1,Q(`skipAnimationFrameInResizeObserver`)),[d,f]=N.useState(0);ya(`deviation`,e=>{d!==e&&(u.current.style.marginTop=`${e}px`,f(e))});let p=Q(`EmptyPlaceholder`),m=Q(`FillerRow`)??da,h=Q(`TableBodyComponent`),g=Q(`paddingTopAddition`),_=Q(`statefulTotalCount`),v=Q(`context`);if(_===0&&p!=null)return(0,P.jsx)(p,{...X(p,v)});let y=(t?e.topItems:[]).reduce((e,t)=>e+t.size,0),b=e.offsetTop+g+d-y,x=e.offsetBottom,S=b>0?(0,P.jsx)(m,{context:v,height:b},`padding-top`):null,C=x>0?(0,P.jsx)(m,{context:v,height:x},`padding-bottom`):null;return(0,P.jsxs)(h,{"data-testid":`virtuoso-item-list`,ref:l,...X(h,v),children:[S,t&&(0,P.jsx)(ma,{showTopList:!0}),(0,P.jsx)(ma,{}),C]})}),ga=({children:e})=>{let t=N.useContext(Oi),n=ba(`viewportHeight`),r=ba(`fixedItemHeight`),i=Nn(N.useMemo(()=>Zt(n,e=>fr(e,`height`)),[n]),!0,Q(`skipAnimationFrameInResizeObserver`));return N.useEffect(()=>{t&&(n(t.viewportHeight),r(t.itemHeight))},[t,n,r]),(0,P.jsx)(`div`,{"data-viewport-type":`element`,ref:i,style:Ki(!1),children:e})},_a=({children:e})=>{let t=N.useContext(Oi),n=ba(`windowViewportRect`),r=ba(`fixedItemHeight`),i=Q(`customScrollParent`),a=Q(`useWindowScroll`),o=Rn(n,i,Q(`skipAnimationFrameInResizeObserver`));return N.useEffect(()=>{t&&(r(t.itemHeight),n({listHeight:0,offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:100}))},[t,n,r]),(0,P.jsx)(`div`,{"data-viewport-type":`window`,ref:o,style:qi(!1,a),children:e})},{Component:va,useEmitter:ya,useEmitterValue:Q,usePublisher:ba}=Di(la,{optional:{restoreStateFrom:`restoreStateFrom`,context:`context`,followOutput:`followOutput`,firstItemIndex:`firstItemIndex`,itemContent:`itemContent`,groupContent:`groupContent`,fixedHeaderContent:`fixedHeaderContent`,fixedFooterContent:`fixedFooterContent`,overscan:`overscan`,increaseViewportBy:`increaseViewportBy`,minOverscanItemCount:`minOverscanItemCount`,totalCount:`totalCount`,topItemCount:`topItemCount`,initialTopMostItemIndex:`initialTopMostItemIndex`,components:`components`,groupCounts:`groupCounts`,atBottomThreshold:`atBottomThreshold`,atTopThreshold:`atTopThreshold`,computeItemKey:`computeItemKey`,defaultItemHeight:`defaultItemHeight`,fixedGroupHeight:`fixedGroupHeight`,fixedItemHeight:`fixedItemHeight`,itemSize:`itemSize`,scrollSeekConfiguration:`scrollSeekConfiguration`,data:`data`,initialItemCount:`initialItemCount`,initialScrollTop:`initialScrollTop`,alignToBottom:`alignToBottom`,useWindowScroll:`useWindowScroll`,customScrollParent:`customScrollParent`,scrollerRef:`scrollerRef`,logLevel:`logLevel`},methods:{scrollToIndex:`scrollToIndex`,scrollIntoView:`scrollIntoView`,scrollTo:`scrollTo`,scrollBy:`scrollBy`,getState:`getState`},events:{isScrolling:`isScrolling`,endReached:`endReached`,startReached:`startReached`,rangeChanged:`rangeChanged`,atBottomStateChange:`atBottomStateChange`,atTopStateChange:`atTopStateChange`,totalListHeightChanged:`totalListHeightChanged`,itemsRendered:`itemsRendered`,groupIndices:`groupIndices`}},N.memo(function(e){let t=Q(`useWindowScroll`),n=Q(`customScrollParent`),r=ba(`fixedHeaderHeight`),i=ba(`fixedFooterHeight`),a=Q(`fixedHeaderContent`),o=Q(`fixedFooterContent`),s=Q(`context`),c=Nn(N.useMemo(()=>Zt(r,e=>fr(e,`height`)),[r]),!0,Q(`skipAnimationFrameInResizeObserver`)),l=Nn(N.useMemo(()=>Zt(i,e=>fr(e,`height`)),[i]),!0,Q(`skipAnimationFrameInResizeObserver`)),u=n||t?Sa:xa,d=n||t?_a:ga,f=Q(`TableComponent`),p=Q(`TableHeadComponent`),m=Q(`TableFooterComponent`),h=a?(0,P.jsx)(p,{ref:c,style:{position:`sticky`,top:0,zIndex:2},...X(p,s),children:a()},`TableHead`):null,g=o?(0,P.jsx)(m,{ref:l,style:{bottom:0,position:`sticky`,zIndex:1},...X(m,s),children:o()},`TableFoot`):null;return(0,P.jsx)(u,{...e,...X(u,s),children:(0,P.jsx)(d,{children:(0,P.jsxs)(f,{style:{borderSpacing:0,overflowAnchor:`none`},...X(f,s),children:[h,(0,P.jsx)(ha,{},`TableBody`),g]})})})})),xa=Qi({useEmitter:ya,useEmitterValue:Q,usePublisher:ba}),Sa=$i({useEmitter:ya,useEmitterValue:Q,usePublisher:ba}),Ca={bottom:0,itemHeight:0,items:[],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},wa={bottom:0,itemHeight:0,items:[{index:0}],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},{ceil:Ta,floor:Ea,max:Da,min:Oa,round:ka}=Math;function Aa(e,t,n){return Array.from({length:t-e+1}).map((t,r)=>({data:n===null?null:n[r+e],index:r+e}))}function ja(e){return{...wa,items:e}}function Ma(e,t){return e!==void 0&&e.width===t.width&&e.height===t.height}function Na(e,t){return e!==void 0&&e.column===t.column&&e.row===t.row}var Pa=q(([{increaseViewportBy:e,listBoundary:t,overscan:n,visibleRange:r},{footerHeight:i,headerHeight:a,scrollBy:o,scrollContainerState:s,scrollTo:c,scrollTop:l,smoothScrollTargetReached:u,viewportHeight:d},f,p,{didMount:m,propsReady:h},{customScrollParent:g,useWindowScroll:_,windowScrollContainerState:v,windowScrollTo:y,windowViewportRect:b},x])=>{let S=G(0),C=G(0),w=G(Ca),T=G({height:0,width:0}),E=G({height:0,width:0}),D=K(),ee=K(),te=G(0),ne=G(null),O=G({column:0,row:0}),re=K(),ie=K(),ae=G(!1),oe=G(0),se=G(!0),ce=G(!1),le=G(!1);I(U(m,W(oe),V(([e,t])=>t!==0)),()=>{L(se,!1)}),I(U(bn(m,se,E,T,oe,ce),V(([e,t,n,r,,i])=>e&&!t&&n.height!==0&&r.height!==0&&!i)),([,,,,e])=>{L(ce,!0),Rr(1,()=>{L(D,e)}),sn(U(l),()=>{L(t,[0,0]),L(se,!0)})}),z(U(ie,V(e=>e!=null&&e.scrollTop>0),un(0)),C),I(U(m,W(ie),V(([,e])=>e!=null)),([,e])=>{e&&(L(T,e.viewport),L(E,e.item),L(O,e.gap),e.scrollTop>0&&(L(ae,!0),sn(U(l,fn(1)),e=>{L(ae,!1)}),L(c,{top:e.scrollTop})))}),z(U(T,H(({height:e})=>e)),d),z(U(bn(J(T,Ma),J(E,Ma),J(O,(e,t)=>e!==void 0&&e.column===t.column&&e.row===t.row),J(l)),H(([e,t,n,r])=>({gap:n,item:t,scrollTop:r,viewport:e}))),re),z(U(bn(J(S),r,J(O,Na),J(E,Ma),J(T,Ma),J(ne),J(C),J(ae),J(se),J(oe)),V(([,,,,,,,e])=>!e),H(([e,[t,n],r,i,a,o,s,,c,l])=>{let{column:u,row:d}=r,{height:f,width:p}=i,{width:m}=a;if(s===0&&(e===0||m===0))return Ca;if(p===0){let t=zr(l,e);return ja(Aa(t,t+Math.max(s-1,0),o))}let h=Fa(m,p,u),g,_;c?t===0&&n===0&&s>0?(g=0,_=s-1):(g=h*Ea((t+d)/(f+d)),_=h*Ta((n+d)/(f+d))-1,_=Oa(e-1,Da(_,h-1)),g=Oa(_,Da(0,g))):(g=0,_=-1);let v=Aa(g,_,o),{bottom:y,top:b}=Ia(a,r,i,v),x=Ta(e/h);return{bottom:y,itemHeight:f,items:v,itemWidth:p,offsetBottom:x*f+(x-1)*d-y,offsetTop:b,top:b}})),w),z(U(ne,V(e=>e!==null),H(e=>e.length)),S),z(U(bn(T,E,w,O),V(([e,t,{items:n}])=>n.length>0&&t.height!==0&&e.height!==0),H(([e,t,{items:n},r])=>{let{bottom:i,top:a}=Ia(e,r,t,n);return[a,i]}),B(sr)),t);let ue=G(!1);z(U(l,W(ue),H(([e,t])=>t||e!==0)),ue);let de=_n(U(bn(w,S),V(([{items:e}])=>e.length>0),W(ue),V(([[e,t],n])=>{let r=e.items[e.items.length-1].index===t-1;return(n||e.bottom>0&&e.itemHeight>0&&e.offsetBottom===0&&e.items.length===t)&&r}),H(([[,e]])=>e-1),B())),fe=_n(U(J(w),V(({items:e})=>e.length>0&&e[0].index===0),un(0),B())),pe=_n(U(J(w),W(ae),V(([{items:e},t])=>e.length>0&&!t),H(([{items:e}])=>({endIndex:e[e.length-1].index,startIndex:e[0].index})),B(or),pn(0)));z(pe,p.scrollSeekRangeChanged),z(U(D,W(T,E,S,O),H(([e,t,n,r,i])=>{let a=Fr(e),{align:o,behavior:s,offset:c}=a,l=a.index;l===`LAST`&&(l=r-1),l=Da(0,l,Oa(r-1,l));let u=La(t,i,n,l);return o===`end`?u=ka(u-t.height+n.height):o===`center`&&(u=ka(u-t.height/2+n.height/2)),c!==void 0&&c!==0&&(u+=c),{behavior:s,top:u}})),c);let me=gn(U(w,H(e=>e.offsetBottom+e.bottom)),0);return z(U(b,H(e=>({height:e.visibleHeight,width:e.visibleWidth}))),T),{customScrollParent:g,data:ne,deviation:te,footerHeight:i,gap:O,headerHeight:a,increaseViewportBy:e,initialItemCount:C,itemDimensions:E,overscan:n,restoreStateFrom:ie,scrollBy:o,scrollContainerState:s,scrollHeight:ee,scrollTo:c,scrollToIndex:D,scrollTop:l,smoothScrollTargetReached:u,totalCount:S,useWindowScroll:_,viewportDimensions:T,windowScrollContainerState:v,windowScrollTo:y,windowViewportRect:b,...p,gridState:w,horizontalDirection:le,initialTopMostItemIndex:oe,totalListHeight:me,...f,endReached:de,propsReady:h,rangeChanged:pe,startReached:fe,stateChanged:re,stateRestoreInProgress:ae,...x}},F($r,zn,qr,_i,Nr,vi,Tn));function Fa(e,t,n){return Da(1,Ea((e+n)/(Ea(t)+n)))}function Ia(e,t,n,r){let{height:i}=n;if(i===void 0||r.length===0)return{bottom:0,top:0};let a=La(e,t,n,r[0].index);return{bottom:La(e,t,n,r[r.length-1].index)+i,top:a}}function La(e,t,n,r){let i=Ea(r/Fa(e.width,n.width,t.column)),a=i*n.height+Da(0,i-1)*t.row;return a>0?a+t.row:a}var Ra=q(([e,t])=>({...e,...t}),F(Pa,q(()=>{let e=G(e=>`Item ${e}`),t=G({}),n=G(null),r=G(`virtuoso-grid-item`),i=G(`virtuoso-grid-list`),a=G(Li),o=G(`div`),s=G(nn),c=(e,n=null)=>gn(U(t,H(t=>t[e]),B()),n),l=G(!1),u=G(!1);return z(J(u),l),{components:t,computeItemKey:a,context:n,FooterComponent:c(`Footer`),HeaderComponent:c(`Header`),headerFooterTag:o,itemClassName:r,ItemComponent:c(`Item`,`div`),itemContent:e,listClassName:i,ListComponent:c(`List`,`div`),readyStateChanged:l,reportReadyState:u,ScrollerComponent:c(`Scroller`,`div`),scrollerRef:s,ScrollSeekPlaceholder:c(`ScrollSeekPlaceholder`,`div`)}}))),za=N.memo(function(){let e=$(`gridState`),t=$(`listClassName`),n=$(`itemClassName`),r=$(`itemContent`),i=$(`computeItemKey`),a=$(`isSeeking`),o=Ka(`scrollHeight`),s=$(`ItemComponent`),c=$(`ListComponent`),l=$(`ScrollSeekPlaceholder`),u=$(`context`),d=Ka(`itemDimensions`),f=Ka(`gap`),p=$(`log`),m=$(`stateRestoreInProgress`),h=Ka(`reportReadyState`),g=Nn(N.useMemo(()=>e=>{let t=e.parentElement.parentElement.scrollHeight;o(t);let n=e.firstChild;if(n!==null){let{height:e,width:t}=n.getBoundingClientRect();d({height:e,width:t})}f({column:Ya(`column-gap`,getComputedStyle(e).columnGap,p),row:Ya(`row-gap`,getComputedStyle(e).rowGap,p)})},[o,d,f,p]),!0,!1);return Ni(()=>{e.itemHeight>0&&e.itemWidth>0&&h(!0)},[e]),m?null:(0,P.jsx)(c,{className:t,ref:g,...X(c,u),"data-testid":`virtuoso-item-list`,style:{paddingBottom:e.offsetBottom,paddingTop:e.offsetTop},children:e.items.map(t=>{let o=i(t.index,t.data,u);return a?(0,P.jsx)(l,{...X(l,u),height:e.itemHeight,index:t.index,width:e.itemWidth},o):(0,N.createElement)(s,{...X(s,u),className:n,"data-index":t.index,key:o},r(t.index,t.data,u))})})}),Ba=N.memo(function(){let e=$(`HeaderComponent`),t=Ka(`headerHeight`),n=$(`headerFooterTag`),r=Nn(N.useMemo(()=>e=>{t(fr(e,`height`))},[t]),!0,!1),i=$(`context`);return e==null?null:(0,P.jsx)(n,{ref:r,children:(0,P.jsx)(e,{...X(e,i)})})}),Va=N.memo(function(){let e=$(`FooterComponent`),t=Ka(`footerHeight`),n=$(`headerFooterTag`),r=Nn(N.useMemo(()=>e=>{t(fr(e,`height`))},[t]),!0,!1),i=$(`context`);return e==null?null:(0,P.jsx)(n,{ref:r,children:(0,P.jsx)(e,{...X(e,i)})})}),Ha=({children:e})=>{let t=N.useContext(ki),n=Ka(`itemDimensions`),r=Ka(`viewportDimensions`),i=Nn(N.useMemo(()=>e=>{r(e.getBoundingClientRect())},[r]),!0,!1);return N.useEffect(()=>{t&&(r({height:t.viewportHeight,width:t.viewportWidth}),n({height:t.itemHeight,width:t.itemWidth}))},[t,r,n]),(0,P.jsx)(`div`,{ref:i,style:Ki(!1),children:e})},Ua=({children:e})=>{let t=N.useContext(ki),n=Ka(`windowViewportRect`),r=Ka(`itemDimensions`),i=$(`customScrollParent`),a=$(`useWindowScroll`),o=Rn(n,i,!1);return N.useEffect(()=>{t&&(r({height:t.itemHeight,width:t.itemWidth}),n({listHeight:0,offsetTop:0,visibleHeight:t.viewportHeight,visibleWidth:t.viewportWidth}))},[t,n,r]),(0,P.jsx)(`div`,{ref:o,style:qi(!1,a),children:e})},{Component:Wa,useEmitter:Ga,useEmitterValue:$,usePublisher:Ka}=Di(Ra,{optional:{context:`context`,totalCount:`totalCount`,overscan:`overscan`,itemContent:`itemContent`,components:`components`,computeItemKey:`computeItemKey`,data:`data`,initialItemCount:`initialItemCount`,scrollSeekConfiguration:`scrollSeekConfiguration`,headerFooterTag:`headerFooterTag`,listClassName:`listClassName`,itemClassName:`itemClassName`,useWindowScroll:`useWindowScroll`,customScrollParent:`customScrollParent`,scrollerRef:`scrollerRef`,logLevel:`logLevel`,restoreStateFrom:`restoreStateFrom`,initialTopMostItemIndex:`initialTopMostItemIndex`,increaseViewportBy:`increaseViewportBy`},methods:{scrollTo:`scrollTo`,scrollBy:`scrollBy`,scrollToIndex:`scrollToIndex`},events:{isScrolling:`isScrolling`,endReached:`endReached`,startReached:`startReached`,rangeChanged:`rangeChanged`,atBottomStateChange:`atBottomStateChange`,atTopStateChange:`atTopStateChange`,stateChanged:`stateChanged`,readyStateChanged:`readyStateChanged`}},N.memo(function({...e}){let t=$(`useWindowScroll`),n=$(`customScrollParent`),r=n||t?Ja:qa,i=n||t?Ua:Ha,a=$(`context`);return(0,P.jsx)(r,{...e,...X(r,a),children:(0,P.jsxs)(i,{children:[(0,P.jsx)(Ba,{}),(0,P.jsx)(za,{}),(0,P.jsx)(Va,{})]})})})),qa=Qi({useEmitter:Ga,useEmitterValue:$,usePublisher:Ka}),Ja=$i({useEmitter:Ga,useEmitterValue:$,usePublisher:Ka});function Ya(e,t,n){return t!==`normal`&&t?.endsWith(`px`)!==!0&&n(`${e} was not resolved to pixel value correctly`,t,Sn.WARN),t===`normal`?0:parseInt(t??`0`,10)}function Xa({agentId:e,approval:t}){let n=k(e=>e.sendPermissionDecision),[r,i]=(0,N.useState)(null);if(!t)return null;if(t.questions&&t.questions.length)return(0,P.jsx)($a,{agentId:e,approval:t,questions:t.questions});let a=t,o=t.choices.length?t.choices:[{id:`approve`,label:`Approve`},{id:`deny`,label:`Deny`}];async function s(t){if(!r){i(t.id);try{await n(e,a.id,t.id)}finally{i(null)}}}let c=t.kind===`plan`;return(0,P.jsx)(`div`,{className:`flex justify-start mb-3`,children:(0,P.jsx)(`div`,{className:`max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm`,children:(0,P.jsxs)(`div`,{className:`flex items-start gap-2`,children:[c?(0,P.jsx)(w,{className:`mt-0.5 h-4 w-4 shrink-0 text-amber-400`}):(0,P.jsx)(oe,{className:`mt-0.5 h-4 w-4 shrink-0 text-amber-400`}),(0,P.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,P.jsx)(`div`,{className:`text-sm font-medium text-amber-100`,children:t.title}),t.body&&(c?(0,P.jsx)(`div`,{className:`mt-2 max-h-72 overflow-auto rounded-md bg-background/60 p-2.5 text-xs leading-relaxed`,children:(0,P.jsx)(nt,{text:t.body,rawBody:t.body,className:`leading-relaxed`})}):(0,P.jsx)(`pre`,{className:`mt-2 max-h-44 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background/80 p-2 font-mono text-xs leading-relaxed text-muted-foreground`,children:t.body})),(0,P.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:o.map(e=>(0,P.jsxs)(M,{size:`sm`,variant:e.id===`deny`||e.id===`abort`?`outline`:`default`,disabled:!!r,onClick:()=>void s(e),className:`h-7 px-2 text-xs`,children:[r===e.id&&(0,P.jsx)(O,{className:`mr-1.5 h-3 w-3 animate-spin`}),e.label]},e.id))})]})]})})})}function Za(e){return e?e.otherActive&&e.other.trim()?!0:e.labels.length>0:!1}function Qa(e){let t=[...e.labels];return e.otherActive&&e.other.trim()&&t.push(e.other.trim()),t.join(`, `)}function $a({agentId:e,approval:t,questions:n}){let r=k(e=>e.sendPermissionDecision),[i,a]=(0,N.useState)(0),[o,s]=(0,N.useState)({}),[c,l]=(0,N.useState)(null),u=n[Math.min(i,n.length-1)],d=o[i];if(!u)return null;let f=!!u.multiSelect,p=n.length,m=i===p-1,h=Za(d),g=n.every((e,t)=>Za(o[t])),_=!!c;function v(e){s(t=>{let n=t[i]??{labels:[],other:``,otherActive:!1};return{...t,[i]:{...n,...e}}})}function y(e){if(f){let t=d?.labels.includes(e);v({labels:t?(d?.labels??[]).filter(t=>t!==e):[...d?.labels??[],e]})}else v({labels:[e],otherActive:!1})}function x(){v(f?{otherActive:!d?.otherActive}:{labels:[],otherActive:!0})}async function S(){if(!(!g||_)){l(`answer`);try{let i={};n.forEach((e,t)=>{let n=o[t];n&&(i[e.question]=Qa(n))}),await r(e,t.id,`answer`,i)}finally{l(null)}}}async function w(){if(!_){l(`dismiss`);try{await r(e,t.id,`deny`)}finally{l(null)}}}let T=!!d?.otherActive;return(0,P.jsx)(`div`,{className:`flex justify-start mb-3`,children:(0,P.jsxs)(`div`,{className:`w-full max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(b,{className:`h-4 w-4 shrink-0 text-amber-400`}),(0,P.jsx)(`div`,{className:`text-sm font-medium text-amber-100`,children:t.title}),p>1&&(0,P.jsxs)(j,{variant:`outline`,className:`ml-auto h-5 px-1.5 text-[10px] text-muted-foreground`,children:[i+1,` / `,p]})]}),(0,P.jsxs)(`div`,{className:`mt-3`,children:[u.header&&(0,P.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-amber-300/80`,children:u.header}),(0,P.jsx)(`div`,{className:`mt-0.5 text-sm text-foreground whitespace-pre-wrap break-words`,children:u.question}),f&&(0,P.jsx)(`div`,{className:`mt-0.5 text-[11px] text-muted-foreground`,children:`Select all that apply`}),(0,P.jsxs)(`div`,{className:`mt-2 flex flex-col gap-1.5`,children:[u.options.map(e=>{let t=!!d?.labels.includes(e.label);return(0,P.jsxs)(`button`,{type:`button`,disabled:_,onClick:()=>y(e.label),className:re(`flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors`,t?`border-amber-500/60 bg-amber-500/10`:`border-border bg-background/60 hover:bg-background`,_&&`opacity-60`),children:[(0,P.jsx)(`span`,{className:re(`mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300`,f?`rounded`:`rounded-full`,t?`border-amber-400 bg-amber-400/20`:`border-muted-foreground/40`),children:t&&(0,P.jsx)(de,{className:`h-3 w-3`})}),(0,P.jsxs)(`span`,{className:`min-w-0`,children:[(0,P.jsx)(`span`,{className:`text-sm text-foreground`,children:e.label}),e.description&&(0,P.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:e.description})]})]},e.label)}),(0,P.jsxs)(`button`,{type:`button`,disabled:_,onClick:x,className:re(`flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors`,T?`border-amber-500/60 bg-amber-500/10`:`border-border bg-background/60 hover:bg-background`,_&&`opacity-60`),children:[(0,P.jsx)(`span`,{className:re(`mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300`,f?`rounded`:`rounded-full`,T?`border-amber-400 bg-amber-400/20`:`border-muted-foreground/40`),children:T&&(0,P.jsx)(de,{className:`h-3 w-3`})}),(0,P.jsx)(`span`,{className:`text-sm text-foreground`,children:`Other…`})]}),T&&(0,P.jsx)(tt,{autoFocus:!0,rows:2,disabled:_,value:d?.other??``,onChange:e=>v({other:e.target.value,otherActive:!0}),placeholder:`Type your answer`,className:`mt-1 text-sm`})]})]}),(0,P.jsxs)(`div`,{className:`mt-3 flex items-center gap-1.5`,children:[i>0&&(0,P.jsxs)(M,{size:`sm`,variant:`outline`,disabled:_,onClick:()=>a(e=>e-1),className:`h-7 px-2 text-xs`,children:[(0,P.jsx)(C,{className:`mr-1 h-3 w-3`}),`Back`]}),m?(0,P.jsxs)(M,{size:`sm`,disabled:_||!g,onClick:()=>void S(),className:`h-7 px-2 text-xs`,children:[c===`answer`&&(0,P.jsx)(O,{className:`mr-1.5 h-3 w-3 animate-spin`}),`Send answer`,p>1?`s`:``]}):(0,P.jsxs)(M,{size:`sm`,disabled:_||!h,onClick:()=>a(e=>e+1),className:`h-7 px-2 text-xs`,children:[`Next`,(0,P.jsx)(ne,{className:`ml-1 h-3 w-3`})]}),(0,P.jsxs)(M,{size:`sm`,variant:`ghost`,disabled:_,onClick:()=>void w(),className:`ml-auto h-7 px-2 text-xs text-muted-foreground`,children:[c===`dismiss`&&(0,P.jsx)(O,{className:`mr-1.5 h-3 w-3 animate-spin`}),`Dismiss`]})]})]})})}var eo=1e6,to=`px-3 md:px-4`;function no({context:e}){if(!e)return null;let{agentId:t,agentStatus:n,pendingApproval:r,blockedLabel:i,canInterrupt:a,onInterrupt:o}=e,s=n===`busy`&&!r;return!r&&!s?null:(0,P.jsxs)(`div`,{className:`${to} pb-3 md:pb-4`,children:[r&&(0,P.jsx)(Xa,{agentId:t,approval:r},r.id),s&&(0,P.jsx)(xt,{blockedLabel:i,onInterrupt:a?o:void 0})]})}function ro(e){return e.type===`message`?`msg-${e.msg.id}`:e.type===`notice`?`notice-${e.msg.id}`:e.type===`activity`?`act-${e.steps[0]?.id??e.timestamp}`:e.type===`import-boundary`?`import-${e.history.id}`:e.type===`imported-message`?`import-msg-${e.history.id}-${e.entry.originalMessageId}-${e.entry.position}`:e.type===`status`?`status-${e.event.id}`:e.type===`date`?`date-${e.date}`:`created-${e.timestamp}`}function io(e){let t=e.findIndex(e=>e.type!==`date`&&e.type!==`created`),n=t>=0?t:0,r=e[n];return{key:r?ro(r):null,index:n}}function ao(e,t){let[n,r]=(0,N.useState)(()=>eo-t.length),i=(0,N.useRef)({agentId:e,anchor:io(t)});return(0,N.useLayoutEffect)(()=>{let n=io(t),a=i.current;r(n=>{if(a.agentId!==e)return eo-t.length;if(!a.anchor.key)return n;let r=t.findIndex(e=>ro(e)===a.anchor.key)-a.anchor.index;return r>0?n-r:n}),i.current={agentId:e,anchor:n}},[e,t]),n}function oo({agentId:e,agentStatus:t,timeline:n,hasMore:r,loading:i,loadedInitial:a,showReasoning:o,pendingApproval:s,blockedLabel:c,canInterrupt:u,onAtBottomChange:d,onLoadOlder:f,onInterrupt:m,onOpenReferencedPath:h,onPreviewReferencedPath:g,onPreviewReferencedPathEnd:_}){let v=(0,N.useRef)(null),y=(0,N.useRef)(null),[b,x]=(0,N.useState)(!0),S=ao(e,n),C=n.length>0?ro(n[n.length-1]):null,w=(0,N.useRef)(C),T=(0,N.useRef)(e);T.current!==e&&(T.current=e,w.current=C);let E=w.current?n.findIndex(e=>ro(e)===w.current):-1,D=!b&&E>=0?n.slice(E+1).filter(e=>e.type===`message`&&e.msg.from!==`user`).length:0;(0,N.useLayoutEffect)(()=>{b&&(w.current=C)},[b,C]);let ee=(0,N.useRef)(b);ee.current=b,(0,N.useLayoutEffect)(()=>{if(!ee.current)return;let e=y.current;if(!e)return;let t=0,n=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight,behavior:`auto`})})});return()=>{cancelAnimationFrame(n),cancelAnimationFrame(t)}},[C]);let te=s?.id;(0,N.useLayoutEffect)(()=>{if(!b||t!==`busy`&&!te)return;let e=y.current;e&&e.scrollTo({top:e.scrollHeight,behavior:`smooth`})},[t,te,b]);let ne=(0,N.useCallback)(e=>{y.current=e instanceof HTMLElement?e:null},[]),re=(0,N.useCallback)(e=>{x(e),d?.(e)},[d]),ie=(0,N.useCallback)(()=>{!r||i||f()},[r,i,f]),ae=(0,N.useCallback)(()=>{w.current=C,v.current?.scrollToIndex({index:`LAST`,align:`end`});let e=y.current;e&&requestAnimationFrame(()=>requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight,behavior:`smooth`})}))},[C]),oe=(0,N.useMemo)(()=>function(){return(0,P.jsxs)(`div`,{className:to,children:[(0,P.jsx)(wt,{scrollRef:y,timeline:n}),(0,P.jsx)(so,{hasMore:r,loading:i,loadedInitial:a,hasItems:n.length>0})]})},[r,a,i,n]),se=(0,N.useMemo)(()=>({agentId:e,agentStatus:t,pendingApproval:s,blockedLabel:c,canInterrupt:u,onInterrupt:m}),[e,t,c,u,m,s]),ce=(0,N.useMemo)(()=>function(){return(0,P.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center text-center`,children:[i?(0,P.jsx)(O,{className:`mb-2 h-5 w-5 animate-spin text-muted-foreground`}):(0,P.jsx)(l,{className:`mb-2 h-8 w-8 text-zinc-600`}),(0,P.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i?`Loading messages`:`No messages yet`})]})},[i]),le=(0,N.useMemo)(()=>({Header:oe,Footer:no,EmptyPlaceholder:ce}),[ce,oe]);return(0,P.jsxs)(`div`,{className:`relative min-h-0 flex-1`,children:[(0,P.jsx)(ca,{ref:v,scrollerRef:ne,className:`h-full py-3 md:py-4`,style:{height:`100%`,overflowX:`hidden`,overscrollBehavior:`contain`},context:se,data:n,firstItemIndex:S,initialTopMostItemIndex:Math.max(0,n.length-1),computeItemKey:(e,t)=>ro(t),itemContent:(t,n)=>(0,P.jsx)(`div`,{className:to,children:(0,P.jsx)(co,{entry:n,agentId:e,showReasoning:o,onOpenReferencedPath:h,onPreviewReferencedPath:g,onPreviewReferencedPathEnd:_})}),components:le,startReached:ie,atBottomStateChange:re,atBottomThreshold:64,followOutput:e=>e?`auto`:!1,increaseViewportBy:{top:600,bottom:600}},e),!b&&n.length>0&&(0,P.jsxs)(M,{type:`button`,size:`sm`,variant:`secondary`,className:`absolute bottom-3 right-4 z-20 h-8 gap-1.5 rounded-full border border-border/70 bg-background/95 px-3 text-xs shadow-lg backdrop-blur`,onClick:ae,children:[(0,P.jsx)(p,{className:`h-3.5 w-3.5`}),`Latest`,D>0&&(0,P.jsx)(`span`,{className:`ml-0.5 min-w-4 rounded-full bg-primary px-1.5 py-0.5 text-[10px] font-medium leading-none text-primary-foreground`,children:D>99?`99+`:D})]})]})}function so({hasMore:e,loading:t,loadedInitial:n,hasItems:r}){return t?(0,P.jsxs)(`div`,{className:`flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground`,children:[(0,P.jsx)(O,{className:`h-3.5 w-3.5 animate-spin`}),(0,P.jsx)(`span`,{children:`Loading earlier messages`})]}):!e&&n&&r?(0,P.jsxs)(`div`,{className:`flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground/70`,children:[(0,P.jsx)(`div`,{className:`h-px flex-1 bg-border`}),(0,P.jsx)(`span`,{children:`Beginning of conversation`}),(0,P.jsx)(`div`,{className:`h-px flex-1 bg-border`})]}):null}function co({entry:e,agentId:t,showReasoning:n,onOpenReferencedPath:r,onPreviewReferencedPath:i,onPreviewReferencedPathEnd:a}){return e.type===`message`?(0,P.jsx)(Ct,{msg:e.msg,peer:t,onOpenReferencedPath:r,onPreviewReferencedPath:i,onPreviewReferencedPathEnd:a}):e.type===`notice`?(0,P.jsx)(ut,{msg:e.msg}):e.type===`activity`?(0,P.jsx)(vt,{steps:e.steps,showReasoning:n}):e.type===`import-boundary`?(0,P.jsx)(yt,{history:e.history}):e.type===`imported-message`?(0,P.jsx)(St,{entry:e.entry,sourceLabel:e.history.sourceAgentLabel||e.history.sourcePeerId}):e.type===`status`?(0,P.jsx)(gt,{event:e.event}):e.type===`date`?(0,P.jsx)(lt,{date:e.date}):(0,P.jsx)(ht,{timestamp:e.timestamp})}var lo=[];function uo({threads:e,onBack:t,showBackButton:n}){let r=k(e=>e.selectedInboxThread),i=k(e=>e.agentsById),a=k(e=>e.inboxDrafts),o=be(),s=k(e=>e.sendChatMessage),c=k(e=>e.openFilesAt),u=k(e=>e.openFilesForAgent),d=k(e=>e.openAgentDetail),f=k(e=>e.chatSending),p=k(e=>e.markInboxThreadRead),m=k(e=>e.markInboxThreadUnread),_=k(e=>e.setReplyDraft),v=k(e=>e.exportThread),y=k(e=>e.doAgentAction),b=k(e=>e.workspaceAction),x=k(e=>e.openWorkspaceFocus),S=k(e=>e.forkFromAgent),C=k(e=>e.chatHistoryImports),w=k(e=>e.agentChatByAgent[e.selectedInboxThread]),T=w?.messages??lo,E=k(e=>e.loadOlder),D=k(e=>e.openConfirm),ee=k(e=>e.showError),ne=k(e=>e.orchestrators),O=k(e=>e.fetchOrchestrators),re=k(e=>e.showReasoning),ie=k(e=>e.voiceTtsEnabled),ae=k(e=>e.setVoiceTtsEnabled),oe=k(e=>e.voiceInputMode),se=k(e=>e.plansByThread);(0,N.useRef)(null);let ce=(0,N.useRef)(null),[le,ue]=(0,N.useState)(`idle`),de=(0,N.useRef)([]),[fe,pe]=(0,N.useState)([]),[me,he]=(0,N.useState)(!1),[ge,Se]=(0,N.useState)(null),[Ce,Ee]=(0,N.useState)(null),[De,Oe]=(0,N.useState)(``),ke=(0,N.useRef)(null),je=(0,N.useRef)(0),Me=Ut(r),Ne=(0,N.useMemo)(()=>e.find(e=>e.peer===r)||null,[e,r]),Pe=(0,N.useMemo)(()=>T.filter(e=>Te(r,e)&&!Fe(e)).sort((e,t)=>e.id-t.id),[T,r]),j=i[r]||null,Ie=typeof j?.meta?.lifecycleAction==`string`&&j.meta.lifecycleAction.startsWith(`finalizing-`),{terminalOpen:Le,terminalTarget:Re,terminalOpening:Be,openTerminal:Ve,closeTerminal:He}=Et(j?.id),Ue=typeof j?.meta?.spawnRequestId==`string`?j.meta.spawnRequestId:``,We=(0,N.useMemo)(()=>C.filter(e=>e.targetAgentId===r||!!(Ue&&e.targetSpawnRequestId===Ue)),[Ue,C,r]),Ge=we(j),Ke=Ge?.pendingApproval,qe=(0,N.useMemo)(()=>{if(!r||!Ne&&Pe.length===0)return null;let e=Pe[Pe.length-1]??Ne?.lastMessage??null,t=Ne?.previewMessage&&Pe.some(e=>e.id===Ne.previewMessage?.id)?Ne.previewMessage:e;return{id:Ne?.id??r,peer:r,messages:Pe,lastMessage:e,previewMessage:t,attention:Ne?.attention??{unread:0,needsHumanResponse:!1,score:0},archived:Ne?.archived??!1,draft:Ne?.draft??``}},[r,Ne,Pe]),Je=qe||(We.length>0?{peer:r,messages:[],importedHistory:We}:null),Ye=a[r]||``,Xe=typeof j?.meta?.tmuxSession==`string`&&j.meta.tmuxSession.trim()?j.meta.tmuxSession:null,Ze=Xe?ne.find(e=>e.managedAgents?.some(e=>e.agentId===j.id||e.tmuxSession===Xe))??null:null,Qe=!!(Xe&&Ze?.status===`online`&&j?.providerCapabilities?.terminal?.live?.read),$e=j?.providerCapabilities?.model?.provider??(typeof j?.meta?.provider==`string`?j.meta.provider:void 0),tt=!!(Qe&&(j?.providerCapabilities?.terminal?.live?.write||$e===`claude`)),nt=j?.providerCapabilities?.terminal?.attach?.create===!0,rt=Qe||nt,at=Ae(j,`compact`),ot=Ae(j,`clearContext`),st=Ae(j,`shutdown`),ct=Ae(j,`interrupt`),lt=()=>{j&&y(j,`interrupt`)},[ut,dt]=(0,N.useState)(0),[ht,gt]=(0,N.useState)(!1),vt=j?.providerCapabilities?.liveSession?.slashCommands===!0,yt=j?.providerCapabilities?.model?.provider??(typeof j?.meta?.provider==`string`?j.meta.provider:void 0),xt=vt&&!ht&&/^\/\S*$/.test(Ye)?Pt(yt).filter(e=>e.name.toLowerCase().startsWith(Ye.toLowerCase())):[],St=xt.length?Math.min(ut,xt.length-1):0;function Ct(e){_(r,`${e.name} `),dt(0)}function wt(e){_(r,e),ht&>(!1),dt(0)}let Dt=fe.some(e=>e.uploading),kt=fe.filter(e=>e.artifact);Wt(Ye.trim().length>0||fe.length>0,(0,N.useCallback)(()=>{},[])),de.current=fe,(0,N.useEffect)(()=>()=>{mt(de.current)},[]),(0,N.useEffect)(()=>{j?.meta?.tmuxSession&&ne.length===0&&O()},[j?.id,j?.meta?.tmuxSession,ne.length]),(0,N.useEffect)(()=>()=>{ke.current!==null&&window.clearTimeout(ke.current)},[]);let At=(0,N.useMemo)(()=>Tt(Pe,Me,j?.createdAt,We),[Pe,Me,j?.createdAt,We]),jt=(0,N.useMemo)(()=>_t(j,Pe,qe?.lastMessage,se),[j,qe?.lastMessage,se,Pe]),Mt=(0,N.useCallback)(()=>{!r||!w?.hasMore||w.loading||E(r)},[w?.hasMore,w?.loading,E,r]),Nt=(0,N.useCallback)(()=>{ke.current!==null&&(window.clearTimeout(ke.current),ke.current=null)},[]),It=(0,N.useCallback)(async e=>{let t=ft(ne,e);if(!t)return null;try{let n=await h(`GET`,`/orchestrators/${encodeURIComponent(t.id)}/files/stat?path=${encodeURIComponent(e)}`);return{orchestratorId:t.id,path:n.path,type:n.type}}catch{return null}},[ne]),Lt=(0,N.useCallback)((e,t,n)=>{if(!pt()||!n)return;let r=++je.current;It(e).then(e=>{je.current===r&&e&&(Nt(),Ee({...e,line:t||0,anchor:n}),Oe(``))})},[Nt,It]),Rt=(0,N.useCallback)(()=>{je.current+=1,Nt(),ke.current=window.setTimeout(()=>{Ee(null)},250)},[Nt]),Bt=(0,N.useCallback)((e,t)=>{It(e).then(n=>{if(!n){ee(`File Not Found`,e);return}if(pt()){je.current+=1,Nt(),Ee(null),Se({...n,line:t||0}),Oe(``);return}n.type===`directory`?c({orchestratorId:n.orchestratorId,path:n.path,overlay:!0}):c({orchestratorId:n.orchestratorId,path:bt(n.path),selectedPath:n.path,line:t,overlay:!0})})},[Nt,c,It,ee]);function Ht(){Se(null),Oe(``)}async function Gt(e){let t=Array.from(e).filter(e=>e.size>0);if(!t.length)return;let n=t.map(e=>({id:`${Date.now()}-${e.name}-${Math.random().toString(16).slice(2)}`,fileName:e.name,size:e.size,previewUrl:e.type.startsWith(`image/`)?URL.createObjectURL(e):void 0,uploading:!0}));pe(e=>[...e,...n]);for(let e=0;e<t.length;e+=1){let r=t[e],i=n[e];try{let e=await g(`/artifacts`,r,{filename:r.name,sensitivity:`normal`});pe(t=>t.map(t=>t.id===i.id?{...t,artifact:e,uploading:!1}:t))}catch(e){pe(t=>t.map(t=>t.id===i.id?{...t,error:e.message,uploading:!1}:t))}}}function Kt(e){pe(t=>{let n=t.find(t=>t.id===e);return n?.previewUrl&&URL.revokeObjectURL(n.previewUrl),t.filter(t=>t.id!==e)})}function qt(){mt(fe),pe([])}function Jt(){if(!Ye.trim()&&kt.length===0||!r||f||Dt||Ie)return;let e=kt.map(e=>({artifactId:e.artifact.id,kind:e.artifact.kind,role:`media`,title:e.artifact.filename||e.fileName}));s(Ye,{peer:r,lastMessage:qe?.lastMessage||null},e),qt()}function Yt(e){if(xt.length){if(e.key===`ArrowDown`){e.preventDefault(),dt(e=>Math.min(e+1,xt.length-1));return}if(e.key===`ArrowUp`){e.preventDefault(),dt(e=>Math.max(e-1,0));return}if(e.key===`Escape`){e.preventDefault(),gt(!0);return}if(e.key===`Enter`||e.key===`Tab`){e.preventDefault();let t=xt[St];t&&Ct(t);return}}e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),Jt())}function Xt(e){let t=Array.from(e.clipboardData.files).filter(e=>e.type.startsWith(`image/`));t.length&&(e.preventDefault(),Gt(t))}async function Zt(){if(!_e||le!==`idle`||!r)return;xe.bargeIn();let e=new ye;try{await e.start(),ce.current=e,ue(`recording`)}catch(e){ce.current=null,ue(`idle`),ee(`Microphone unavailable`,e?.message||`Could not access the microphone.`)}}async function Qt(){let e=ce.current;if(!(!e||le!==`recording`)){ce.current=null,ue(`transcribing`);try{let t=await e.stop();if(!t)return;let n=await ve(t);if(!n)return;let i=Ye?`${Ye} ${n}`:n;if(oe===`autosend`&&!f&&!Dt){let e=kt.map(e=>({artifactId:e.artifact.id,kind:e.artifact.kind,role:`media`,title:e.artifact.filename||e.fileName}));s(i,{peer:r,lastMessage:qe?.lastMessage||null},e),qt()}else _(r,i)}catch(e){ee(`Transcription failed`,e?.message||`Could not transcribe audio.`)}finally{ue(`idle`)}}}return r?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`div`,{className:`flex h-full min-w-0`,children:[(0,P.jsxs)(`div`,{className:`@container/chat flex h-full min-w-0 flex-1 flex-col`,children:[(0,P.jsx)(Ft,{selectedInboxThread:r,agent:j,now:o,blockedState:Ge,thread:qe,exportableThread:Je,importedHistory:We,showBackButton:n,onBack:t,openAgentDetail:d,openWorkspaceFocus:x,voiceTtsEnabled:ie,setVoiceTtsEnabled:ae,canOpenTerminal:rt,terminalOpening:Be,handleOpenTerminal:Ve,canInterrupt:ct,interruptAgent:lt,canCompact:at,canClearContext:ot,canShutdown:st,openConfirm:D,workspaceAction:b,doAgentAction:y,openFilesForAgent:u,forkFromAgent:S,markInboxThreadUnread:m,markInboxThreadRead:p,exportThread:v}),(0,P.jsx)(Ot,{threadId:jt&&`threadId`in jt?jt.threadId:null,teamId:jt&&`teamId`in jt?jt.teamId:void 0,channel:jt?.channel}),(0,P.jsx)(oo,{agentId:r,agentStatus:j?.status,timeline:At,hasMore:w?.hasMore??!1,loading:w?.loading??!1,loadedInitial:w?.loadedInitial??!1,showReasoning:re,pendingApproval:Ke,blockedLabel:Ge?.label,canInterrupt:ct,onLoadOlder:Mt,onInterrupt:lt,onOpenReferencedPath:Bt,onPreviewReferencedPath:Lt,onPreviewReferencedPathEnd:Rt}),(0,P.jsx)(zt,{draft:Ye,placeholder:`Message ${j?A(j):r}…`,chatSending:f,disabled:Ie,hasPendingUploads:Dt,readyAttachmentCount:kt.length,pendingAttachments:fe,micAvailable:_e,micState:le,slashMatches:xt,slashActiveIndex:St,onDraftChange:wt,onKeyDown:Yt,onPaste:Xt,onUploadFiles:e=>{Gt(e)},onRemovePendingAttachment:Kt,onSend:Jt,onAcceptSlash:Ct,onSlashHover:dt,onStartPtt:()=>{Zt()},onStopPtt:()=>{Qt()},footerText:Ie?`${j?A(j):`Agent`} is wrapping up (${(j?.meta?.lifecycleAction).slice(11)}) — messaging paused`:`Enter to send · Shift+Enter for newline`})]}),ge&&(0,P.jsxs)(`aside`,{className:`hidden h-full w-[min(44vw,720px)] min-w-[360px] shrink-0 flex-col border-l border-border bg-background xl:flex`,children:[(0,P.jsxs)(`div`,{className:`flex h-10 shrink-0 items-center gap-2 border-b border-border px-3`,children:[(0,P.jsx)(`span`,{className:`min-w-0 flex-1 text-xs font-medium text-muted-foreground`,children:`File preview`}),De&&(0,P.jsx)(`span`,{className:`max-w-[18rem] truncate text-xs text-red-400`,children:De}),(0,P.jsx)(M,{variant:`ghost`,size:`icon-sm`,title:`Close preview`,onClick:Ht,children:(0,P.jsx)(te,{className:`h-3.5 w-3.5`})})]}),(0,P.jsx)(`div`,{className:`min-h-0 flex-1`,children:ge.type===`directory`?(0,P.jsx)(ze,{orchestratorId:ge.orchestratorId,selectedPath:ge.path,onReadError:Oe}):(0,P.jsx)(it,{orchestratorId:ge.orchestratorId,selectedPath:ge.path,line:ge.line,onReadError:Oe})})]})]}),Ce&&(0,P.jsx)(Vt,{preview:Ce,error:De,onReadError:Oe,onMouseEnter:Nt,onMouseLeave:Rt}),Re&&(0,P.jsx)(et,{open:Le,onOpenChange:He,orchestratorId:Re.orchestratorId,session:Re.session,interactive:Re.interactive||tt})]}):(0,P.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full text-center px-4`,children:[(0,P.jsx)(l,{className:`w-12 h-12 text-zinc-600 mb-3`}),(0,P.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:`Select an agent to start chatting`})]})}function fo(){let e=k(e=>e.inboxDrafts),t=k(e=>e.agentsById),n=k(e=>e.set);(0,N.useEffect)(()=>{let r=Object.keys(e);if(r.length===0)return;let i=r.filter(e=>!t[e]&&e!==`user`);if(i.length===0)return;let a=setTimeout(()=>{let e=k.getState().agentsById,t={...k.getState().inboxDrafts},r=!1;for(let n of i)e[n]||(delete t[n],r=!0);r&&n({inboxDrafts:t})},3e4);return()=>clearTimeout(a)},[])}function po(e,t){(0,N.useEffect)(()=>{if(typeof window>`u`||!e||!window.matchMedia(`(max-width: 767px)`).matches)return;window.history.pushState({chatOpen:!0},``);function n(){t()}return window.addEventListener(`popstate`,n),()=>{window.removeEventListener(`popstate`,n),window.history.state?.chatOpen&&window.history.back()}},[e,t])}function mo(){let e=Ve(),t=k(e=>e.selectedInboxThread),n=k(e=>e.set),r=k(e=>e.loadAgentChat),i=kt(),a=!!t;fo(),(0,N.useEffect)(()=>{t&&r(t)},[t,r]),(0,N.useEffect)(()=>{t&&(i.some(e=>e.id===t)||n({selectedInboxThread:``}))},[t,i,n]);let o=(0,N.useCallback)(()=>{n({selectedInboxThread:``})},[n]);return po(a,o),(0,P.jsxs)(`div`,{className:`flex -m-4 md:-m-6`,style:{height:`calc(100dvh - var(--header-h) - var(--sat))`},children:[(0,P.jsxs)(`div`,{className:`hidden md:flex w-full`,children:[(0,P.jsx)(`div`,{className:`w-1/3 min-w-[240px] max-w-xs flex flex-col overflow-hidden`,children:(0,P.jsx)(At,{threads:e})}),(0,P.jsx)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:(0,P.jsx)(uo,{threads:e},t||`empty`)})]}),(0,P.jsx)(`div`,{className:`md:hidden flex w-full overflow-hidden`,children:a?(0,P.jsx)(ho,{children:(0,P.jsx)(uo,{threads:e,onBack:o,showBackButton:!0},t||`empty`)}):(0,P.jsx)(`div`,{className:`w-full flex flex-col overflow-hidden`,children:(0,P.jsx)(At,{threads:e})})})]})}function ho({children:e}){let t=st();return(0,P.jsx)(`div`,{className:`fixed inset-x-0 top-0 z-40 flex flex-col bg-background pt-[var(--sat)]`,style:{height:t?`${t}px`:`100dvh`},children:e})}export{mo as ChatView};
|
|
2
|
-
//# sourceMappingURL=chat-B9FJi94P.js.map
|