From 300504d58944bc5f28a13e8d3ce45c06220c9ba2 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Tue, 3 Jun 2025 17:42:47 +0000 Subject: [PATCH 1/3] feat: embed chat ui in the task sidebar --- site/src/pages/TaskPage/TaskAppIframe.tsx | 40 +++ site/src/pages/TaskPage/TaskApps.tsx | 172 ++++++++++ site/src/pages/TaskPage/TaskPage.tsx | 396 +--------------------- site/src/pages/TaskPage/TaskSidebar.tsx | 230 +++++++++++++ site/src/pages/TaskPage/constants.ts | 1 + 5 files changed, 448 insertions(+), 391 deletions(-) create mode 100644 site/src/pages/TaskPage/TaskAppIframe.tsx create mode 100644 site/src/pages/TaskPage/TaskApps.tsx create mode 100644 site/src/pages/TaskPage/TaskSidebar.tsx create mode 100644 site/src/pages/TaskPage/constants.ts diff --git a/site/src/pages/TaskPage/TaskAppIframe.tsx b/site/src/pages/TaskPage/TaskAppIframe.tsx new file mode 100644 index 0000000000000..1f247bfeaab71 --- /dev/null +++ b/site/src/pages/TaskPage/TaskAppIframe.tsx @@ -0,0 +1,40 @@ +import type { WorkspaceApp } from "api/typesGenerated"; +import { useAppLink } from "modules/apps/useAppLink"; +import type { Task } from "modules/tasks/tasks"; +import type { FC } from "react"; +import { cn } from "utils/cn"; + +type TaskAppIFrameProps = { + task: Task; + app: WorkspaceApp; + active: boolean; +}; + +export const TaskAppIFrame: FC = ({ + task, + app, + active, +}) => { + const agent = task.workspace.latest_build.resources + .flatMap((r) => r.agents) + .filter((a) => !!a) + .find((a) => a.apps.some((a) => a.id === app.id)); + + if (!agent) { + throw new Error(`Agent for app ${app.id} not found in task workspace`); + } + + const link = useAppLink(app, { + agent, + workspace: task.workspace, + }); + + return ( +