Skip to content

Commit fb5d616

Browse files
authored
Make onboarding identity ledger explicit (#61)
1 parent 77672fa commit fb5d616

2 files changed

Lines changed: 62 additions & 2 deletions

File tree

src/App.tsx

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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">

src/styles.css

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,32 @@ meter {
943943
gap: 12px;
944944
}
945945

946+
.onboarding-ledger {
947+
display: grid;
948+
grid-template-columns: repeat(4, minmax(0, 1fr));
949+
gap: 10px;
950+
}
951+
952+
.onboarding-ledger div {
953+
border: 1px solid var(--color-line);
954+
border-radius: 8px;
955+
background: var(--color-surface);
956+
padding: 12px 14px;
957+
}
958+
959+
.onboarding-ledger span {
960+
display: block;
961+
color: var(--color-text);
962+
font-size: 1.4rem;
963+
font-weight: 900;
964+
}
965+
966+
.onboarding-ledger p {
967+
margin: 2px 0 0;
968+
color: var(--color-text-secondary);
969+
font-weight: 750;
970+
}
971+
946972
.agent-row,
947973
.agent-summary {
948974
display: grid;
@@ -1174,6 +1200,7 @@ meter {
11741200
}
11751201

11761202
.stats-grid,
1203+
.onboarding-ledger,
11771204
.forum-grid,
11781205
.forum-form-grid,
11791206
.direct-create-panel,
@@ -1208,6 +1235,7 @@ meter {
12081235
}
12091236

12101237
.stats-grid,
1238+
.onboarding-ledger,
12111239
.forum-grid,
12121240
.forum-form-grid,
12131241
.direct-create-panel,

0 commit comments

Comments
 (0)