@@ -237,20 +237,18 @@ function RunCard({ run }) {
237237 const isActive = activeRunId . value === run . run_id ;
238238 const total = run . completed + run . failed ;
239239 const passRate = total > 0 ? ( run . completed / total ) * 100 : 0 ;
240- const shortId = run . run_id . length > 12 ? run . run_id . slice ( 0 , 12 ) : run . run_id ;
240+ const shortId = run . run_id . length > 8 ? run . run_id . slice ( 0 , 8 ) : run . run_id ;
241+ const displayTitle = run . prompt_name || shortId ;
241242
242243 return html `
243244 < div class ="run-card ${ isActive ? 'active' : '' } " onClick =${ ( ) => activeRunId . value = run . run_id } >
244245 < div class ="run-badge ${ run . status } "> </ div >
245246 < div class ="run-card-info ">
246- < div class ="run-card-title "> ${ shortId } </ div >
247+ < div class ="run-card-title "> ${ displayTitle } </ div >
247248 < div class ="run-card-meta ">
248- iter ${ run . iteration || 0 } ${ total > 0 ? ` · ${ Math . round ( passRate ) } % pass ` : ` · ${ run . status } ` }
249+ ${ run . prompt_name ? shortId + ' · ' : '' } iter ${ run . iteration || 0 } ${ total > 0 ? ` · ${ Math . round ( passRate ) } %` : '' }
249250 </ div >
250251 </ div >
251- ${ run . prompt_name && html `
252- < span class ="run-card-tag "> ${ run . prompt_name } </ span >
253- ` }
254252 ${ total > 0 && html `
255253 < div class ="run-card-bar ">
256254 < div class ="run-card-bar-fill ${ passRate >= 50 ? 'pass' : 'fail' } " style ="width: ${ passRate } % "> </ div >
@@ -500,29 +498,71 @@ function IterationPanel({ iteration: it }) {
500498 it . status === 'failure' ? 'failure' :
501499 it . status === 'timeout' ? 'timeout' : '' ;
502500
501+ const statusLabel = it . status === 'success' ? 'Passed' :
502+ it . status === 'failure' ? 'Failed' :
503+ it . status === 'timeout' ? 'Timed out' :
504+ it . status === 'running' ? 'Running' : it . status ;
505+
506+ const statusIcon = it . status === 'success' ? '\u2713' :
507+ it . status === 'failure' ? '\u2717' :
508+ it . status === 'timeout' ? '\u23f1' : '\u2022' ;
509+
510+ const passedCount = it . checks ? it . checks . filter ( c => c . passed ) . length : 0 ;
511+ const totalChecks = it . checks ? it . checks . length : 0 ;
512+
503513 return html `
504514 < div class ="iteration-panel ">
505515 < div class ="iteration-header ">
506- < span class ="iteration-title "> Iteration ${ it . iteration } </ span >
516+ < div class ="iteration-header-left ">
517+ < span class ="iteration-title "> Iteration ${ it . iteration } </ span >
518+ < div class ="iteration-meta ">
519+ ${ it . duration && html `
520+ < span class ="iteration-meta-tag ">
521+ < svg width ="12 " height ="12 " viewBox ="0 0 24 24 " fill ="none " stroke ="currentColor " stroke-width ="2 " stroke-linecap ="round ">
522+ < circle cx ="12 " cy ="12 " r ="10 "/> < path d ="M12 6v6l4 2 "/>
523+ </ svg >
524+ ${ it . duration }
525+ </ span >
526+ ` }
527+ ${ it . returncode !== undefined && it . returncode !== null && html `
528+ < span class ="iteration-meta-tag "> exit ${ it . returncode } </ span >
529+ ` }
530+ ${ totalChecks > 0 && html `
531+ < span class ="iteration-meta-tag "> ${ passedCount } /${ totalChecks } checks</ span >
532+ ` }
533+ </ div >
534+ </ div >
507535 < span class ="iteration-status ${ statusClass } ">
508- ${ it . detail || it . status }
536+ ${ statusIcon } ${ statusLabel }
509537 </ span >
510538 </ div >
511539 < div class ="iteration-body ">
540+ ${ it . detail && it . detail !== it . status && html `
541+ < div class ="iteration-detail "> ${ it . detail } </ div >
542+ ` }
512543 ${ it . checks && it . checks . length > 0 && html `
513544 < div class ="check-results ">
514- < div style ="font-weight: 600; font-size: 13px; margin-bottom: 8px "> Checks</ div >
515- ${ it . checks . map ( c => html `
516- < div class ="check-result " key =${ c . name } >
517- < span class ="check-icon ${ c . passed ? 'pass' : c . timed_out ? 'timeout' : 'fail' } ">
518- ${ c . passed ? '\u2713' : c . timed_out ? '\u23f1' : '\u2717' }
519- </ span >
520- < span class ="check-name "> ${ c . name } </ span >
521- ${ ! c . passed && html `
522- < span class ="check-detail "> exit ${ c . exit_code } </ span >
523- ` }
524- </ div >
525- ` ) }
545+ < div class ="checks-section-title "> Check Results</ div >
546+ ${ it . checks . map ( c => {
547+ const checkStatus = c . passed ? 'pass' : c . timed_out ? 'timeout' : 'fail' ;
548+ return html `
549+ < div class ="check-result ${ checkStatus } " key =${ c . name } >
550+ < span class ="check-icon ${ checkStatus } ">
551+ ${ c . passed ? '\u2713' : c . timed_out ? '\u23f1' : '\u2717' }
552+ </ span >
553+ < span class ="check-name "> ${ c . name } </ span >
554+ ${ ! c . passed && html `
555+ < span class ="check-detail "> exit ${ c . exit_code } </ span >
556+ ` }
557+ </ div >
558+ ` ;
559+ } ) }
560+ </ div >
561+ ` }
562+ ${ it . status === 'running' && html `
563+ < div style ="color: var(--text-secondary); font-size: 13px; display: flex; align-items: center; gap: 8px ">
564+ < div style ="width: 8px; height: 8px; border-radius: 50%; background: var(--primary); animation: pulse 1.5s infinite "> </ div >
565+ Running...
526566 </ div >
527567 ` }
528568 </ div >
@@ -720,7 +760,7 @@ function NewRunModal() {
720760 < div class ="modal-title "> New Run</ div >
721761 < div class ="form-group ">
722762 < label class ="form-label "> Command</ label >
723- < input class ="form-input " value =${ config . command } onInput =${ updateField ( 'command' ) } />
763+ < input class ="form-input mono " value =${ config . command } onInput =${ updateField ( 'command' ) } />
724764 </ div >
725765 < div class ="form-group ">
726766 < label class ="form-label "> Prompt</ label >
@@ -738,7 +778,7 @@ function NewRunModal() {
738778 </ div >
739779 ` }
740780 ${ ! config . prompt_name && html `
741- < input class ="form-input " value =${ config . prompt_file }
781+ < input class ="form-input mono " value =${ config . prompt_file }
742782 onInput =${ updateField ( 'prompt_file' ) }
743783 placeholder="PROMPT.md" />
744784 ` }
@@ -750,7 +790,7 @@ function NewRunModal() {
750790 </ div >
751791 < div class ="form-group ">
752792 < label class ="form-label "> Project Directory</ label >
753- < input class ="form-input " value =${ config . project_dir } onInput =${ updateField ( 'project_dir' ) } />
793+ < input class ="form-input mono " value =${ config . project_dir } onInput =${ updateField ( 'project_dir' ) } />
754794 </ div >
755795 < div class ="form-row ">
756796 < div class ="form-group ">
0 commit comments