- Rail: Add icon with stacked form modals (bot, workspace, computer), coordinator, recent bots with "See all bots", Workspaces section, and a workspace mode listing only its crew - Workspaces: page for context, bots (per-workspace instructions and memory), computers (default, link, unlink), models and delete; conversations scoped per bot per workspace - Sessions: conversations split into searchable, reopenable sessions with carry-over summaries; sessions and new-session header icons - Computers: created and provisioned over the docker socket, home dir kept at DATA_DIR/computers/<id> after delete; super admins only - Models: workspace settings win over a bot's own, then the defaults - Pictures for bots and workspaces; bots editable from the header - Coordinator tools: update_workspace, set_bot_workspace_instructions Co-Authored-By: Claude Opus 5.5 <[email protected]>
34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
import React from "react";
|
|
import Row from "@moduletrace/twui/layout/Row";
|
|
import useWebSocket from "@moduletrace/twui/hooks/useWebSocket";
|
|
import BotsRail from "./(sections)/bots-rail";
|
|
import AddFlow from "./(partials)/add-flow";
|
|
|
|
/**
|
|
* Full-bleed shell for every `/admin/*` page: the rail of bot conversations
|
|
* and workspaces, then the page (a conversation, a workspace, or
|
|
* settings), inside the Add flow both can open. No cards, no shadows;
|
|
* regions are separated by 1px hairlines.
|
|
*/
|
|
export default function BotsLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
/**
|
|
* One socket for live bot updates (see `useServerEvent`).
|
|
*/
|
|
useWebSocket({ url: "/ws" });
|
|
|
|
return (
|
|
<AddFlow>
|
|
<Row className="w-full h-screen gap-0! flex-nowrap items-stretch overflow-hidden bg-paper text-ink">
|
|
<BotsRail />
|
|
<Row className="grow min-w-[480px] h-full gap-0! flex-nowrap items-stretch">
|
|
{children}
|
|
</Row>
|
|
</Row>
|
|
</AddFlow>
|
|
);
|
|
}
|