{#if inline && !full}
{#if onback} {/if}

{session?.name || 'untitled session'}

{#if session}{/if} (artifact = { id: found.id, version: found.version, title: found.title })} /> (terminal = { job, command: '' })} />
{/if}
{#if !settled && !transcript.error}
{#each [92, 100, 84, 96, 70, 88, 100, 60] as width, index (index)}{/each}
{/if}
(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)} Image #{index + 1} {/each}
{/if} {#if group.text.trim()}
{#each pieces(group.text) as piece, index (index)}{#if piece.kind === 'quote'}
{piece.text}
{:else if piece.kind === 'code'}
{piece.text}
{:else}

{piece.text}

{/if}{/each}
{/if} {#if group.at || group.skill || (transcript.receipt === group.key && group.state !== 'failed')} {#if group.skill}skill · {group.skill}{/if} {#if group.at} {/if} {#if transcript.receipt === group.key && group.state !== 'failed'} {/if} {/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 === 'failure'} {@const open = unfolded === group.key} {: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}
{#if settled && !pinned} {/if} {@render handle?.()} {#if answer}
{answer.name}
{answer.text}
{/if} {#if inline} {#if artifact}
{artifact.title}
{#key artifact.id} {/key}
{/if} {#if terminal}
{terminal.command ? headline(terminal.command) : 'terminal'}
{#key terminal.job} terminal && (terminal.command = found.command)} /> {/key}
{/if} {/if}
{#snippet tools()} {#if session}{/if} openArtifact({ id: found.id, version: found.version, title: found.title })} /> onopen?.({ kind: 'job', job })} /> {/snippet}