Add workspaces, conversation sessions, app-managed computers and pictures
- 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]>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import { useContext } from "react";
|
||||
import Span from "@moduletrace/twui/layout/Span";
|
||||
import type { WorkspaceWithActivity } from "@/src/types";
|
||||
import { AddFlowContext } from "../(data)/add-flow-context";
|
||||
import RailSectionAddButton from "./rail-section-add-button";
|
||||
import RailSectionLabel from "./rail-section-label";
|
||||
import WorkspaceRow from "./workspace-row";
|
||||
|
||||
type Props = {
|
||||
workspaces: WorkspaceWithActivity[];
|
||||
selected_id?: number;
|
||||
};
|
||||
|
||||
/**
|
||||
* The user's workspaces, with a "+" to create one.
|
||||
*/
|
||||
export default function RailWorkspacesSection({ workspaces, selected_id }: Props) {
|
||||
const { openForm } = useContext(AddFlowContext);
|
||||
|
||||
return (
|
||||
<>
|
||||
<RailSectionLabel
|
||||
title="Workspaces"
|
||||
action={
|
||||
<RailSectionAddButton
|
||||
title="Create a workspace"
|
||||
onClick={() => openForm({ kind: "workspace" })}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
{workspaces.map((workspace) => (
|
||||
<WorkspaceRow key={workspace.id} workspace={workspace} selected={workspace.id == selected_id} />
|
||||
))}
|
||||
{workspaces.length ? null : (
|
||||
<Span className="hidden lg:block px-3 py-2 text-[13px] leading-[18px] text-ink-secondary">
|
||||
No workspaces yet. A workspace keeps a project's context, bots and computers together.
|
||||
</Span>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user