import { SettingsLayoutClient } from "@/components/settings/settings-layout-client";
import { StateHydrator } from "@/components/state-hydrator";
import {
listAgentDiscovery,
listAgents,
listAvailableAgents,
listExecutors,
listWorkspaces,
} from "@/lib/api";
import { toAgentProfileOption } from "@/lib/state/slices/settings/types";
export default function SettingsLayout({ children }: { children: React.ReactNode }) {
return {children};
}
async function SettingsLayoutServer({ children }: { children: React.ReactNode }) {
let initialState = {};
try {
// Fetch discovery + available agents alongside the DB-backed list so a
// hard refresh of /settings/agents/[name] (where no profile exists yet)
// can still render the agent from the discovered set.
const [workspaces, executors, agents, discovery, available] = await Promise.all([
listWorkspaces({ cache: "no-store" }),
listExecutors({ cache: "no-store" }),
listAgents({ cache: "no-store" }),
listAgentDiscovery({ cache: "no-store" }),
listAvailableAgents({ cache: "no-store" }),
]);
initialState = {
workspaces: {
items: workspaces.workspaces.map((workspace) => ({
id: workspace.id,
name: workspace.name,
default_executor_id: workspace.default_executor_id ?? null,
default_environment_id: workspace.default_environment_id ?? null,
default_agent_profile_id: workspace.default_agent_profile_id ?? null,
default_config_agent_profile_id: workspace.default_config_agent_profile_id ?? null,
})),
activeId: workspaces.workspaces[0]?.id ?? null,
},
executors: {
items: executors.executors,
},
agentProfiles: {
items: agents.agents.flatMap((agent) =>
agent.profiles.map((profile) => toAgentProfileOption(agent, profile)),
),
},
settingsAgents: {
items: agents.agents,
},
agentDiscovery: {
items: discovery.agents,
loading: false,
loaded: true,
},
availableAgents: {
items: available.agents,
tools: available.tools ?? [],
loading: false,
loaded: true,
},
settingsData: {
executorsLoaded: true,
agentsLoaded: true,
},
};
} catch {
initialState = {};
}
return (
<>
{children}
>
);
}