- 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]>
33 lines
915 B
TypeScript
33 lines
915 B
TypeScript
import userAuth from "@/src/functions/backend/auth/user-auth";
|
|
import grabConversationProps from "@/src/functions/backend/db/bot-sessions/grab-conversation-props";
|
|
import type { PagePropsType, PageQueryObject } from "@/src/types";
|
|
import type { BunextPageServerFn } from "@moduletrace/bunext/types";
|
|
|
|
export const server: BunextPageServerFn<PagePropsType> = async (params) => {
|
|
const query: PageQueryObject = params.query;
|
|
const { user } = await userAuth({ req: params.req });
|
|
|
|
if (!user?.id) {
|
|
return {
|
|
redirect: {
|
|
destination: "/auth/login",
|
|
},
|
|
};
|
|
}
|
|
|
|
const props = await grabConversationProps({
|
|
user_id: Number(user.id),
|
|
bot_id: String(query.bot_id),
|
|
});
|
|
|
|
if (!props) {
|
|
return {
|
|
redirect: {
|
|
destination: "/admin/bots",
|
|
},
|
|
};
|
|
}
|
|
|
|
return { props };
|
|
};
|