Session Info: page model and native action bridge (ask-560d04c05d)

Merged
TE
3d ago
+357-0

Session Info needs a page-owned model before AppKit can draw the current sections. Add that typed model, native host capability events, and action routing into the existing pane width, folds, and saved section order. This is the first part of the native port; it draws no UI and changes no default.

Reuses the transport contract from closed #27513. Section builders are being rebuilt against today's session-info/ helpers rather than restoring the old builders. Design: design/session-info.md, design/glass.md, design/pane-placement.md, design/motion-and-polish.md in the workspace spec.

Leo-ask: ask-560d04c05d

Leo's request:

2026-10-26: "the session rail session info thing, like, you literally didn't do. I mean, why is the button not toggled? ... you still haven't done the full-length thing. It's still just this constrained height for, like, no reason at all."
2026-10-29: "plus we're gonna be doing that part natively in swift anyways?"
2026-10-29: "But I literally fing said to do that. I literally fing said to do that."
2026-10-29: "You can just edit the fing web UI" / "it's so fing lame to be delaying the entire f***ing thing based off of ... the Swift thing".

Validation: 6 focused bridge/action tests pass (31 assertions), covering capability withdrawal, retired handlers, malformed events, long Unicode IDs, width bounds, folds, and reorder across groups. Web lint passes. No capture: dormant transport only. Existing localized strings will be supplied by the page model; no user-facing copy is added.

Changelog

none

Agent session: agent session


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Adds the page-owned Session Info model the App will draw, plus the host bridge that announces the native capability and routes clicks back — the first part of the native port, drawing no UI and changing no defaults.

The model carries rows, sections, buttons, and stable action IDs, reducing long IDs to bounded hashes the App can return. Native clicks for width, folds, and section order route into the existing pane state, so the web and native panels share one state; capability withdrawal, replaced models, and malformed events are ignored.