- Shipped
- September 5, 2026 at 4:33 PM UTC
- Author
- Kamo
- Commit
- 25f877b
The icon already opened a remote desktop and a remote terminal. The third thing people actually go to that machine for was reachable only by opening the Interaction Center, switching to Sessions and finding the New row -- three moves to do the thing the icon is for. before it is a destination, so the parent row launches nothing and its children are the answers. Model and Effort carry their current value in the label -- a member should not have to expand a row to learn what their session will run as -- and expand into radio groups read from AI_MODELS and AI_EFFORTS, so a model added to the vocabulary appears here without anybody remembering this file exists. The rule under Effort separates what the session will run as from the row that runs it, the same device the sizes list uses. The two settings are NOT local to this menu. They are the member's standing choice, read and written through useAiRunSettings -- the same hook the Send To AI model picked in any of the three is on screen in the other two before the menu has finished closing, and is still there on the next browser. It rides the member UI preference map, which is already read once per page load, so this costs no round trip. Three things had to change underneath: * NavToolItem gains `keepOpen`. Every row used to close the menu, which is right for a row that goes somewhere and wrong for one that adjusts a setting: model and effort are two halves of one decision with the launch under them, so closing on the first pick made choosing both a three-visit errand -- and collapsed the group, hiding the mark that had just moved. * opencoderSession joins openTerminal in app/lib/terminal. The Interaction Center starts sessions itself and has to, because it owns a starting row, an error line and a terminal list to refresh; every other surface has a menu row and nothing else. It never rejects -- a menu row has nowhere to put a rejected promise -- and hands the machine's own refusal to the toast, verbatim, the way the pane prints it. * The home launchpad card renders children. It drew only the top level of each section, which silently dropped every `children` array in toolSections: Remote Desktop, each Settings topic and now this one were rows a member could click forever with nothing happening. They were never broken rows -- they are questions whose answers were never on screen. It now expands them with the nav's own rule (a row with a destination goes there, a row that is only a parent expands, a row that is both goes there and toggles on its chevron), so the two surfaces reading one section list can no longer disagree about what a click means. The tooltip said "Remote Desktop or Terminal" and now names all three. Deleted from all 21 locale files in the dictionary in the same push, because editing English under a translated key changes nothing but English.