(hot = null)} role="presentation">
{#if transcript.loading}
{:else if transcript.error}
(。•︿•。) couldn't read the transcript: {transcript.error}
{:else if transcript.groups.length === 0}
(˶ᵔ ᵕ ᵔ˶) nothing here yet. say hi below
{:else if transcript.more}
earlier messages load as you scroll up
{/if}
{#each transcript.groups as group (group.key)}
{#if group.kind === 'user'}
{@const unseen = group.state === 'sending' || group.state === 'sent'}
{#if group.from || group.gap}
{group.from ?? 'you'}{#if group.gap}{' · '}{group.gap}{/if}
{/if}
{#if group.images.length}
{#each group.images as picture, index (index)}
{/each}
{/if}
{#if group.text.trim()}
{group.text}
{/if}
{#if group.at || (transcript.receipt === group.key && group.state !== 'failed')}
{/if}
{#if group.state === 'failed'}
not sent: {group.error}
{/if}
{:else if group.kind === 'assistant'}
{#if group.plate}albedo{/if}
{:else if group.kind === 'work'}
step.kind === 'progress' || step.key.startsWith('live:') || (step.kind === 'tool' && !step.done)))} {transcript} session={view} onreview={(turnId, from, path) => review(group.key, turnId, from, path)} onartifact={openArtifact} />
{:else if group.kind === 'end'}
{@const metaText = [group.elapsedMs >= 1000 ? formatElapsed(group.elapsedMs) : '', group.tools ? `${group.tools} ${group.tools === 1 ? 'tool' : 'tools'}` : ''].filter(Boolean).join(' · ')}
{@const hasReview = !!(group.changed.files && group.turnId)}
{face(group.mood, group.seed)}
{#if metaText}
{metaText}
{/if}
{#if hasReview}
{/if}
{#if group.seed}
{/if}
{#if group.turnId && group.tools && !inline}
{/if}
{#if group.text}
{/if}
{:else if group.kind === 'note'}
{group.text}
{:else if group.kind === 'compaction'}
{'(>_<)'} earlier context was compacted here
{/if}
{#if shown?.at === group.key}
changes
`${windowId}#${path}#${change}`} onfiles={() => pinned && toBottom()} />
{/if}
{/each}
{#if running}
{#if !transcript.streaming && activity}{activity}{/if}
{/if}