Task 007 add agent job admin runner follow-up

This commit is contained in:
2026-05-21 19:33:24 +03:00
parent 4fd837349f
commit 8aa92ea728
16 changed files with 826 additions and 29 deletions
@@ -0,0 +1,51 @@
import type { AgentJobRow } from "./model";
type AgentJobsTableProps = {
rows: readonly AgentJobRow[];
};
export function AgentJobsTable({ rows }: AgentJobsTableProps) {
if (rows.length === 0) {
return <p className="emptyState">No agent jobs yet.</p>;
}
return (
<table className="table">
<thead>
<tr>
<th>Job</th>
<th>Status</th>
<th>Attempt</th>
<th>Runtime</th>
<th>Workspace</th>
<th>Logs</th>
<th>Outputs</th>
</tr>
</thead>
<tbody>
{rows.map((row) => (
<tr key={row.id}>
<td>
<div>{row.type}</div>
<small>{row.id}</small>
{row.parentJobId ? <div>retry of {row.parentJobId}</div> : null}
</td>
<td>{row.status}</td>
<td>{row.attempt}</td>
<td>
<div>exit: {row.exitCode ?? "pending"}</div>
<div>{row.durationMs ?? 0} ms</div>
{row.error ? <div>{row.error}</div> : null}
</td>
<td>{row.workspacePath ?? "pending"}</td>
<td>
<pre className="logBlock">{row.stdout || "stdout pending"}</pre>
{row.stderr ? <pre className="logBlock">{row.stderr}</pre> : null}
</td>
<td>{row.outputFiles || "none"}</td>
</tr>
))}
</tbody>
</table>
);
}