{deviceData?.model ?? deviceId.slice(0, 8)}

{#if deviceData?.manufacturer}

{deviceData.manufacturer}

{/if}
{deviceData?.status === 'online' ? 'Online' : 'Offline'}
{#each tabs as tab} {/each}
{#if activeTab === 'overview'}

Device Info

{#if deviceData?.model}
Model
{deviceData.model}
{/if} {#if deviceData?.manufacturer}
Manufacturer
{deviceData.manufacturer}
{/if} {#if deviceData?.androidVersion}
Android
{deviceData.androidVersion}
{/if} {#if deviceData?.screenWidth && deviceData?.screenHeight}
Resolution
{deviceData.screenWidth} x {deviceData.screenHeight}
{/if} {#if battery !== null && battery >= 0}
Battery
50 ? 'ph:battery-high-duotone' : 'ph:battery-low-duotone'} class="h-4 w-4" /> {battery}%{charging ? ' Charging' : ''}
{/if}
Last seen
{deviceData ? relativeTime(deviceData.lastSeen) : '\u2014'}

Stats

{stats?.totalSessions ?? 0}

Sessions

{stats?.successRate ?? 0}%

Success

{stats?.avgSteps ?? 0}

Avg Steps

{#if deviceData && deviceData.installedApps.length > 0}

Installed Apps ({deviceData.installedApps.length})

{#each filteredApps as app (app.packageName)}
{app.label} {app.packageName}
{:else}

No apps match "{appSearch}"

{/each}
{/if} {:else if activeTab === 'sessions'} {#if sessions.length === 0}

No sessions yet. Go to the Run tab to send a goal.

{:else}
{#each sessions as sess (sess.id)}
{#if expandedSession === sess.id}
{#if sessionSteps.has(sess.id)}
{#each sessionSteps.get(sess.id) ?? [] as s (s.id)}
{s.stepNumber}
{JSON.stringify(s.action)} {#if s.reasoning}

{s.reasoning}

{/if}
{/each}
{:else}

Loading steps...

{/if}
{/if}
{/each}
{/if} {:else if activeTab === 'run'}

Send a Goal

e.key === 'Enter' && submitGoal()} /> {#if runStatus === 'running'} {:else} {/if}
{#if steps.length > 0 || runStatus !== 'idle'}

{currentGoal ? `Goal: ${currentGoal}` : 'Current Run'}

{#if runStatus === 'running'} Running {:else if runStatus === 'completed'} Completed {:else if runStatus === 'failed'} Failed {/if}
{#if runError}
{runError}
{/if} {#if steps.length > 0}
{#each steps as s (s.step)}
{s.step} {s.action}
{#if s.reasoning}

{s.reasoning}

{/if}
{/each}
{:else}
Waiting for first step...
{/if}
{/if} {/if}