the layout gains a third node across the bottom, a third of the height. a conversation reads badly in a narrow column and the two lists do not, so the chat gets width rather than a column of its own. it is officerdev/chat, the platform's own panel, not a simplified one of ours. seedAppRegistry merges the platform's panels and every plugin's into one registry, so naming it is all it takes — and a second chat maintained here would be the one that falls behind. the skill is deliberately NOT scoped to these routes. that was considered and dropped once it was clear what a skill costs: compileSkills emits a name, a description and a path, and the body is only read if the agent decides it is relevant. two lines in every conversation. scoping would have meant a platform change to buy back nothing. (affordances are the opposite — loaded in full, every conversation — so this plugin ships none. by docs/affordances.md's own test the 404 quirk does not qualify: it CAN be fixed instead, and the platform route already fixes it.) what the skill carries: the routes, that meta.nginx_online is the field for "is it down", that renewal is at 30 days so under 14 is a real failure worth raising unprompted and nothing else will raise it, that the 404 has already been interpreted before it reaches you, and that disabling a host takes a domain off the internet so it is confirmed and never inferred. plus what is not built, so it does not get offered. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043
40 lines
1.7 KiB
TypeScript
40 lines
1.7 KiB
TypeScript
import type { LayoutNode } from 'officerdev';
|
|
|
|
// Hosts wide, certificates beside it, a chat across the bottom.
|
|
//
|
|
// ── Why the chat panel is the platform's and not one of ours ──
|
|
//
|
|
// `officerdev/chat` is a panel app in the shared registry — `seedAppRegistry` merges the platform's panels
|
|
// and every plugin's into ONE registry, so naming it here is all it takes. Shipping a second, simpler chat
|
|
// from this plugin would mean maintaining a second chat, and the first one to fall behind would be ours.
|
|
//
|
|
// It gets a third of the height rather than a column, because a conversation reads badly in a narrow
|
|
// column and the two lists do not: they are scannable at any width, and a chat is not.
|
|
//
|
|
// ── 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-lists',
|
|
direction: 'horizontal',
|
|
children: [
|
|
{ node: { type: 'panel', id: 'proxy-manager-hosts', appType: 'proxy-manager-hosts' }, size: 62 },
|
|
{ node: { type: 'panel', id: 'proxy-manager-certificates', appType: 'proxy-manager-certificates' }, size: 38 },
|
|
],
|
|
},
|
|
size: 66,
|
|
},
|
|
{ node: { type: 'panel', id: 'proxy-manager-chat', appType: 'officerdev/chat' }, size: 34 },
|
|
],
|
|
};
|