Skip to content

Commit e0e8bfd

Browse files
committed
ui-3
1 parent d5dcd5e commit e0e8bfd

File tree

4 files changed

+43
-33
lines changed

4 files changed

+43
-33
lines changed

site/src/modules/resources/AgentDevcontainerCard.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const meta: Meta<typeof AgentDevcontainerCard> = {
3030
devcontainer: MockWorkspaceAgentDevcontainer,
3131
workspace: MockWorkspace,
3232
wildcardHostname: "*.wildcard.hostname",
33-
agent: MockWorkspaceAgent,
33+
parentAgent: MockWorkspaceAgent,
3434
},
3535
};
3636

site/src/modules/resources/AgentDevcontainerCard.tsx

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -32,26 +32,29 @@ import { TerminalLink } from "./TerminalLink/TerminalLink";
3232
import { VSCodeDevContainerButton } from "./VSCodeDevContainerButton/VSCodeDevContainerButton";
3333

3434
type AgentDevcontainerCardProps = {
35-
agent: WorkspaceAgent;
35+
parentAgent: WorkspaceAgent;
36+
subAgents: WorkspaceAgent[];
3637
devcontainer: WorkspaceAgentDevcontainer;
3738
workspace: Workspace;
3839
wildcardHostname: string;
3940
};
4041

4142
export const AgentDevcontainerCard: FC<AgentDevcontainerCardProps> = ({
42-
agent,
43+
parentAgent,
44+
subAgents,
4345
devcontainer,
4446
workspace,
4547
wildcardHostname,
4648
}) => {
4749
const [isRecreating, setIsRecreating] = useState(false);
50+
const [subAgent, setSubAgent] = useState<WorkspaceAgent | null>(null);
4851

4952
const handleRecreateDevcontainer = async () => {
5053
setIsRecreating(true);
5154
let recreateSucceeded = false;
5255
try {
5356
const response = await fetch(
54-
`/api/v2/workspaceagents/${agent.id}/containers/devcontainers/container/${devcontainer.container?.id}/recreate`,
57+
`/api/v2/workspaceagents/${parentAgent.id}/containers/devcontainers/container/${devcontainer.container?.id}/recreate`,
5558
{
5659
method: "POST",
5760
},
@@ -87,7 +90,17 @@ export const AgentDevcontainerCard: FC<AgentDevcontainerCardProps> = ({
8790
} else {
8891
setIsRecreating(false);
8992
}
90-
}, [devcontainer.status]);
93+
}, [devcontainer.id, devcontainer.status]);
94+
95+
const shouldDisplayAgentApps =
96+
subAgent?.status === "connected" || subAgent?.status === "connecting";
97+
98+
// Woot! We have a sub agent, so we can display the forwarded ports.
99+
useEffect(() => {
100+
setSubAgent(
101+
subAgents.find((sub) => sub.id === devcontainer.agent?.id) || null,
102+
);
103+
}, [subAgents, devcontainer.agent?.id]);
91104

92105
return (
93106
<section
@@ -135,46 +148,37 @@ export const AgentDevcontainerCard: FC<AgentDevcontainerCardProps> = ({
135148
Recreate
136149
</Button>
137150

138-
{/* <AgentDevcontainerSSHButton
139-
workspace={workspace.name}
140-
container={devcontainer.container?.name || devcontainer.name}
141-
/> */}
142-
{/* TODO(mafredri): Sub agent display apps. */}
143-
{devcontainer.agent && agent.display_apps.includes("ssh_helper") && (
151+
{subAgent && subAgent.display_apps.includes("ssh_helper") && (
144152
<AgentSSHButton
145153
workspaceName={workspace.name}
146-
agentName={devcontainer.agent.name || devcontainer.name}
154+
agentName={subAgent.name}
147155
workspaceOwnerUsername={workspace.owner_name}
148156
/>
149157
)}
150158
</div>
151159
</header>
152160

153-
{devcontainer.agent && (
161+
{subAgent && devcontainer.container && (
154162
<>
155163
<h4 className="m-0 text-xl font-semibold mb-2">Forwarded ports</h4>
156164
<div className="flex gap-4 flex-wrap mt-4">
157-
{devcontainer.container && (
158-
<VSCodeDevContainerButton
159-
userName={workspace.owner_name}
160-
workspaceName={workspace.name}
161-
devContainerName={devcontainer.container.name}
162-
devContainerFolder={devcontainer.agent.directory}
163-
displayApps={agent.display_apps} // TODO(mafredri): Sub agent display apps.
164-
agentName={agent.name} // This must be set to the parent agent.
165-
/>
166-
)}
165+
<VSCodeDevContainerButton
166+
userName={workspace.owner_name}
167+
workspaceName={workspace.name}
168+
devContainerName={devcontainer.container.name}
169+
devContainerFolder={subAgent.directory ?? ""} // This will always be set.
170+
displayApps={subAgent.display_apps}
171+
agentName={parentAgent.name}
172+
/>
167173

168-
{devcontainer.agent && (
169-
<TerminalLink
170-
workspaceName={workspace.name}
171-
agentName={devcontainer.agent.name}
172-
userName={workspace.owner_name}
173-
/>
174-
)}
174+
<TerminalLink
175+
workspaceName={workspace.name}
176+
agentName={subAgent.name}
177+
userName={workspace.owner_name}
178+
/>
175179

176180
{wildcardHostname !== "" &&
177-
devcontainer.container?.ports.map((port) => {
181+
devcontainer.container.ports.map((port) => {
178182
const portLabel = `${port.port}/${port.network.toUpperCase()}`;
179183
const hasHostBind =
180184
port.host_port !== undefined && port.host_ip !== undefined;
@@ -185,7 +189,7 @@ export const AgentDevcontainerCard: FC<AgentDevcontainerCardProps> = ({
185189
? portForwardURL(
186190
wildcardHostname,
187191
port.host_port,
188-
devcontainer.agent?.name || agent.name,
192+
subAgent.name,
189193
workspace.name,
190194
workspace.owner_name,
191195
location.protocol === "https" ? "https" : "http",

site/src/modules/resources/AgentRow.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import { useAgentLogs } from "./useAgentLogs";
5454

5555
interface AgentRowProps {
5656
agent: WorkspaceAgent;
57+
subAgents?: WorkspaceAgent[];
5758
workspace: Workspace;
5859
template: Template;
5960
initialMetadata?: WorkspaceAgentMetadata[];
@@ -62,6 +63,7 @@ interface AgentRowProps {
6263

6364
export const AgentRow: FC<AgentRowProps> = ({
6465
agent,
66+
subAgents,
6567
workspace,
6668
template,
6769
onUpdateAgent,
@@ -293,7 +295,8 @@ export const AgentRow: FC<AgentRowProps> = ({
293295
devcontainer={devcontainer}
294296
workspace={workspace}
295297
wildcardHostname={proxy.preferredWildcardHostname}
296-
agent={agent}
298+
parentAgent={agent}
299+
subAgents={subAgents ?? []}
297300
/>
298301
);
299302
})}

site/src/pages/WorkspacePage/Workspace.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,9 @@ export const Workspace: FC<WorkspaceProps> = ({
242242
<AgentRow
243243
key={agent.id}
244244
agent={agent}
245+
subAgents={selectedResource.agents?.filter(
246+
(a) => a.parent_id === agent.id,
247+
)}
245248
workspace={workspace}
246249
template={template}
247250
onUpdateAgent={handleUpdate} // On updating the workspace the agent version is also updated

0 commit comments

Comments
 (0)