@@ -1039,6 +1039,14 @@ function Onboarding({
10391039 onCopyTokenFileCommand : ( agent : AgentIdentity ) => void ;
10401040 onMintToken : ( agent : AgentIdentity ) => void ;
10411041} ) {
1042+ const agents = [ ...state . agents ] . sort ( ( left , right ) => {
1043+ const rightTime = new Date ( right . requestedAt || right . approvedAt || 0 ) . getTime ( ) ;
1044+ const leftTime = new Date ( left . requestedAt || left . approvedAt || 0 ) . getTime ( ) ;
1045+ return rightTime - leftTime || left . handle . localeCompare ( right . handle ) ;
1046+ } ) ;
1047+ const pendingCount = agents . filter ( ( agent ) => agent . status === "pending" ) . length ;
1048+ const approvedCount = agents . filter ( ( agent ) => agent . status === "approved" ) . length ;
1049+ const suspendedCount = agents . filter ( ( agent ) => agent . status === "suspended" ) . length ;
10421050 return (
10431051 < div className = "view-stack" >
10441052 < div className = "section-title" >
@@ -1062,16 +1070,40 @@ function Onboarding({
10621070 </ header >
10631071 < textarea value = { introPrompt } onChange = { ( event ) => onIntroPromptChange ( event . target . value ) } rows = { 18 } />
10641072 </ section >
1073+ < section className = "onboarding-ledger" aria-label = "Onboarding status summary" >
1074+ < div >
1075+ < span > { pendingCount } </ span >
1076+ < p > pending approval</ p >
1077+ </ div >
1078+ < div >
1079+ < span > { approvedCount } </ span >
1080+ < p > approved agents</ p >
1081+ </ div >
1082+ < div >
1083+ < span > { suspendedCount } </ span >
1084+ < p > suspended agents</ p >
1085+ </ div >
1086+ < div >
1087+ < span > { agents . length } </ span >
1088+ < p > total identities in storage</ p >
1089+ </ div >
1090+ </ section >
1091+ { pendingCount === 0 ? (
1092+ < p className = "empty-state" > No pending onboarding approvals. Approved and suspended identities remain listed below.</ p >
1093+ ) : null }
10651094 < div className = "agent-table" >
1066- { state . agents . map ( ( agent ) => (
1095+ { agents . map ( ( agent ) => (
10671096 < article className = { agent . status === "pending" ? "agent-card needs-action" : "agent-card" } key = { agent . id } >
10681097 < button className = "agent-summary" type = "button" onClick = { ( ) => onToggle ( agent . id ) } >
10691098 < div >
10701099 < b > { agent . handle } </ b >
10711100 < span > { agent . displayName } </ span >
10721101 </ div >
10731102 < span > { agent . machineScope } </ span >
1074- < span className = { `status ${ agent . status } ` } > { agent . status } </ span >
1103+ < span className = { `status ${ agent . status } ` } >
1104+ { agent . status }
1105+ { agent . approvedAt ? ` ${ new Date ( agent . approvedAt ) . toLocaleDateString ( ) } ` : "" }
1106+ </ span >
10751107 </ button >
10761108 { expandedIds . has ( agent . id ) ? (
10771109 < div className = "expanded-panel" >
0 commit comments