TerminalSessionAdapter UI helper
Purpose
TerminalSessionAdapter is a terminal helper function. Use it before rendering
terminal event streams.
Inputs
| Field | Required | Type | Behavior |
|---|---|---|---|
events |
yes | []TerminalEvent |
Raw or normalized terminal events ordered by source time. Supported types are session.started, stream.stdout, stream.stderr, stream.stdin, approval.requested, session.exited, and session.error. |
approvals |
no | []TerminalApprovalDecision |
Pending approvals keyed by RequestID. Approvals match events by the same stable RequestID; approvals with no matching event are still rendered as pending host requests. |
metadata |
no | TerminalSessionMetadata |
Optional session metadata: SessionID, Command, CWD, ProcessID, and StartedAt as time.Time. Omitted fields render as unknown/blank display values and do not fail validation. |
Boundary
Renderer receives normalized terminal props, not raw event parsing rules.
TerminalSessionAdapter returns TerminalSessionProps with SessionID, State,
Command, CWD, Output, Approvals, and Exit. Output uses the same chunk
schema as TerminalOutputView, Approvals use
TerminalApprovalPrompt decisions, and
Exit is present when exit state is known.
Output state is idle before a start event, running after
session.started, waiting while approvals are pending, exited after
session.exited, and error after session.error. Stream events append output
chunks; approval events append or update pending approvals; exit/error events
set exit and stop accepting stdin in downstream panels.
Example
var terminal = func() gx.Node {
props := TerminalSessionAdapter(terminalEvents, terminalApprovals, TerminalSessionMetadata{
SessionID: "test-17",
Command: "make test",
})
return (
<TerminalSessionPanel
state={props.State}
sessionID={props.SessionID}
command={props.Command}
output={props.Output}
onSubmit={sendInput}
onExit={stopSession}>
</TerminalSessionPanel>
)
}
type TerminalEvent struct {
Type string
Time time.Time
Payload TerminalEventPayload
}
type TerminalEventPayload struct {
Text string
Command string
CWD string
ProcessID string
RequestID string
Title string
Summary string
Code int
}
type TerminalSessionMetadata struct {
SessionID string
Command string
CWD string
ProcessID string
StartedAt time.Time
}
var terminalEvents = []TerminalEvent{
{
Type: "stream.stdout",
Payload: TerminalEventPayload{Text: "ok\n"},
},
}
Stream events require Payload.Text. session.started may set Command,
CWD, and ProcessID. approval.requested requires RequestID and Title
and may set Summary. session.exited may set Code and Summary.
Runtime Terms
Expression children document ordinary Go expressions inside markup bodies.