e.key === "Escape" && onClose()} >
e.stopPropagation()} onkeydown={(e) => e.stopPropagation()} role="dialog" aria-labelledby="task-loop-panel-title" tabindex="-1" >

Task Loop

{#if $loopStatus === "running"} {runningCount} running · {completedCount}/{totalCount} done {:else if $loopStatus === "paused"} Paused {:else if $loopStatus === "stopped" && totalCount > 0} {completedCount}/{totalCount} completed{failedCount > 0 ? `, ${failedCount} failed` : ""}{blockedCount > 0 ? `, ${blockedCount} blocked` : ""} {/if}
{#if onBackToWorkflow} {/if}
{#if showSettings}

Auto-commit Settings

{#if $config.task_loop_auto_commit}
updateCommitPrefix((e.target as HTMLInputElement).value)} placeholder="feat" class="flex-1 px-2 py-1 text-sm bg-[var(--bg-primary)] border border-[var(--border-color)] rounded text-[var(--text-primary)] focus:outline-none focus:border-[var(--accent-primary)]" /> : task title
{/if}
{/if}
{#if isLoading}
⚙️
Loading tasks...
{:else if errorMessage}

{errorMessage}

{:else if totalCount === 0}
📋

No Tasks Loaded

Import a hikari-tasks.json file created by the PRD Creator to run tasks automatically.

{:else}
{$sourceFile}
{#each waves as waveIndices, waveIdx (waveIdx)}
{#if multiWave}
Wave {waveIdx + 1} {#if waveIndices.length > 1} ({waveIndices.length} parallel) {/if}
{/if}
{#each waveIndices as taskIdx (taskIdx)} {@const task = $tasks[taskIdx]} {#if task}
{statusIcon(task.status)}
{task.title} {task.priority} {#if task.status === "running"} {#if activePhases[taskIdx] === "waiting_for_auto_commit"} ● committing {:else} ● running {/if} {:else if task.status === "blocked"} blocked {/if}

{task.prompt}

#{taskIdx + 1}
{/if} {/each}
{/each}
{/if}
{#if totalCount > 0 && $loopStatus === "idle"} {:else if $loopStatus === "stopped"} {/if} {#if totalCount > 0}
Parallel: {$concurrencyLimit}
{/if}
{#if totalCount === 0} {:else if $loopStatus === "idle" || $loopStatus === "stopped"} {#if hasPendingTasks} {:else} All tasks complete {/if} {:else if $loopStatus === "running"} {:else if $loopStatus === "paused"} {/if}