/** * Party/raid frames renderer — the host-neutral core of the subagent widget * (agent-frames-widget capability; design D1-D6 of the borderless redesign, * layered on the earlier D2, D3, D5, D9, D10 and subagent-ui-theming-and-style * decisions: approach-A style injection and running-record parent scoping). * * Takes tracker records + presentation options and returns styled lines. * Pure formatting/layout: no pi imports, no timers, no IO — unit-testable * without a host (ADR 0001; enforced by test/host-import-boundary.test.ts). * The pi adapter (`src/host/pi/agent-widget.ts`) owns observer wiring, * spinner ticks, `setWidget` calls, theme binding, and the visibility toggle. * * Layout model (hybrid, borderless): * - PARTY FRAMES: side-by-side BORDERLESS blocks (4 rows) for the K most * interesting agents; K and the per-frame width are width-responsive * between `partyFrameMinWidth`/`partyFrameMaxWidth` (cap 5, may be 0). No * outer border, no title border, no spinner — line 0 is a plain * left-aligned name; zones are delimited by background color and gaps * alone. A 3-wide left column (top cell = role/sigil portrait tile, cells * below = harness-color status panel) abuts three labeled bar lanes * (health/mana/cast), each `