import type { LayoutNode } from 'officerdev'; // A nav down the left, whatever it selects beside it, a chat across the bottom. // // ── The chat panel is ours; the chat inside it is the platform's ── // // Naming `officerdev/chat` here does NOT work, and the way it fails is quiet: `PluginScreen` renders the // workspace with `appTypes={{ allowed, fallback: allowed[0] }}` where `allowed` is this plugin's own panel // keys, so an unrecognised appType becomes the FIRST panel — which is how this layout briefly rendered two // Hosts panels. The shared registry and the layout allow-list are different things. // // So `proxy-manager-chat` is our panel and `EmbeddableChat` inside it is the platform's component. No // second chat to maintain, and nothing for the allow-list to reject. // // The chat gets a third of the HEIGHT rather than a column, because a conversation reads badly narrow and // a list does not. The nav is the narrow one: it holds seven rows of two short lines and nothing grows. // // ── What makes the chat useful HERE ── // // Nothing in this layout. The agent gets the `Proxy Manager` skill the same way it gets every other one — // from this plugin's `skills/` directory, offered in every conversation on the machine, costing two lines // until something actually needs it. A chat in this panel is an ordinary chat that happens to be sitting // underneath the thing it is being asked about. export const defaultLayout: LayoutNode = { type: 'group', id: 'proxy-manager-root', direction: 'vertical', children: [ { node: { type: 'group', id: 'proxy-manager-top', direction: 'horizontal', children: [ { node: { type: 'panel', id: 'proxy-manager-nav', appType: 'proxy-manager-nav' }, size: 30 }, { node: { type: 'panel', id: 'proxy-manager-detail', appType: 'proxy-manager-detail' }, size: 70 }, ], }, size: 66, }, { node: { type: 'panel', id: 'proxy-manager-chat', appType: 'proxy-manager-chat' }, size: 34 }, ], };