Aman Nindra
Enhance backend terminal session management and frontend command comparison features. Added new API endpoints for terminal session creation, input handling, resizing, and stopping. Updated frontend to support real-time command broadcasting and display runtime comparisons between jobs. Improved styling and layout for terminal panes and comparison statistics.
4dcc016
import { useEffect, useRef, useState } from 'react'
import TerminalPane from './components/TerminalPane'
const panes = [
{ jobId: 'qwen', title: 'Qwen Baseline', tone: 'cyan' },
{ jobId: 'rl-agent', title: 'RL Agent', tone: 'green' },
]
function formatMs(value) {
if (value == null) {
return '--'
}
if (value < 1000) {
return `${Math.round(value)} ms`
}
return `${(value / 1000).toFixed(2)} s`
}
function buildRunStats(telemetry, issuedAt) {
if (!telemetry || !issuedAt) {
return {
responseMs: null,
completionMs: null,
waiting: true,
}
}
const responseMs = telemetry.lastOutputAt && telemetry.lastOutputAt >= issuedAt ? telemetry.lastOutputAt - issuedAt : null
const finishedAt = telemetry.session?.finished_at ? telemetry.session.finished_at * 1000 : null
const completionMs = finishedAt && finishedAt >= issuedAt ? finishedAt - issuedAt : null
return {
responseMs,
completionMs,
waiting: responseMs == null && completionMs == null,
}
}
function App() {
const [split, setSplit] = useState(50)
const [dragging, setDragging] = useState(false)
const [command, setCommand] = useState('')
const [comparisonRun, setComparisonRun] = useState(null)
const [telemetry, setTelemetry] = useState({
qwen: null,
'rl-agent': null,
})
const workspaceRef = useRef(null)
const leftPaneRef = useRef(null)
const rightPaneRef = useRef(null)
useEffect(() => {
if (!dragging) {
return undefined
}
const handlePointerMove = (event) => {
const bounds = workspaceRef.current?.getBoundingClientRect()
if (!bounds) {
return
}
const next = ((event.clientX - bounds.left) / bounds.width) * 100
const clamped = Math.min(75, Math.max(25, next))
setSplit(clamped)
}
const handlePointerUp = () => {
setDragging(false)
}
window.addEventListener('pointermove', handlePointerMove)
window.addEventListener('pointerup', handlePointerUp)
return () => {
window.removeEventListener('pointermove', handlePointerMove)
window.removeEventListener('pointerup', handlePointerUp)
}
}, [dragging])
const handleBroadcast = async (event) => {
event.preventDefault()
const value = command.trim()
if (!value) {
return
}
const issuedAt = Date.now()
setComparisonRun({
command: value,
issuedAt,
})
await Promise.allSettled([
leftPaneRef.current?.submit(value),
rightPaneRef.current?.submit(value),
])
setCommand('')
}
const handleTelemetryChange = (payload) => {
setTelemetry((previous) => ({
...previous,
[payload.jobId]: payload,
}))
}
const qwenStats = buildRunStats(telemetry.qwen, comparisonRun?.issuedAt)
const agentStats = buildRunStats(telemetry['rl-agent'], comparisonRun?.issuedAt)
let comparisonHeadline = 'Send a shared command to compare runtime.'
if (comparisonRun) {
if (qwenStats.completionMs != null && agentStats.completionMs != null) {
const fasterJob = qwenStats.completionMs <= agentStats.completionMs ? panes[0].title : panes[1].title
const delta = Math.abs(qwenStats.completionMs - agentStats.completionMs)
comparisonHeadline = `${fasterJob} finished ${formatMs(delta)} faster.`
} else if (qwenStats.responseMs != null && agentStats.responseMs != null) {
const fasterJob = qwenStats.responseMs <= agentStats.responseMs ? panes[0].title : panes[1].title
const delta = Math.abs(qwenStats.responseMs - agentStats.responseMs)
comparisonHeadline = `${fasterJob} responded ${formatMs(delta)} faster.`
} else {
comparisonHeadline = `Running shared command: ${comparisonRun.command}`
}
}
return (
<main className="desktop">
<div className="desktop__glow" />
<section className="comparison-bar">
<div className="comparison-bar__copy">
<span className="comparison-bar__eyebrow">Runtime compare</span>
<strong>{comparisonHeadline}</strong>
<small>{comparisonRun ? `Command: ${comparisonRun.command}` : 'Broadcast one command to both panes.'}</small>
</div>
<div className="comparison-bar__stats">
<article className="comparison-card comparison-card--cyan">
<span>{panes[0].title}</span>
<strong>{formatMs(qwenStats.completionMs ?? qwenStats.responseMs)}</strong>
<small>{qwenStats.completionMs != null ? 'completion time' : 'first output latency'}</small>
</article>
<article className="comparison-card comparison-card--green">
<span>{panes[1].title}</span>
<strong>{formatMs(agentStats.completionMs ?? agentStats.responseMs)}</strong>
<small>{agentStats.completionMs != null ? 'completion time' : 'first output latency'}</small>
</article>
</div>
</section>
<section ref={workspaceRef} className="workspace">
<div className="workspace__pane" style={{ width: `${split}%` }}>
<TerminalPane ref={leftPaneRef} {...panes[0]} onTelemetryChange={handleTelemetryChange} />
</div>
<button
type="button"
className={dragging ? 'workspace__divider is-dragging' : 'workspace__divider'}
onPointerDown={() => setDragging(true)}
aria-label="Resize terminal panes"
aria-valuemin={25}
aria-valuemax={75}
aria-valuenow={Math.round(split)}
aria-orientation="vertical"
>
<span />
</button>
<div className="workspace__pane" style={{ width: `${100 - split}%` }}>
<TerminalPane ref={rightPaneRef} {...panes[1]} onTelemetryChange={handleTelemetryChange} />
</div>
</section>
<form className="broadcast-bar" onSubmit={handleBroadcast}>
<label className="broadcast-bar__label" htmlFor="broadcast-input">
Shared input
</label>
<div className="broadcast-bar__field">
<span className="broadcast-bar__prompt">$</span>
<input
id="broadcast-input"
value={command}
onChange={(event) => setCommand(event.target.value)}
placeholder="Send the same command to both terminals"
spellCheck="false"
/>
<button type="submit">Send to both</button>
</div>
</form>
</main>
)
}
export default App