diff --git a/site/src/pages/AgentsPage/components/ChatElements/tools/ExecuteTool.tsx b/site/src/pages/AgentsPage/components/ChatElements/tools/ExecuteTool.tsx
index 8bc80e6e842..2e4eb130109 100644
--- a/site/src/pages/AgentsPage/components/ChatElements/tools/ExecuteTool.tsx
+++ b/site/src/pages/AgentsPage/components/ChatElements/tools/ExecuteTool.tsx
@@ -1,12 +1,6 @@
-import {
- CircleAlertIcon,
- ExternalLinkIcon,
- LayersIcon,
- OctagonXIcon,
-} from "lucide-react";
+import { LayersIcon, OctagonXIcon } from "lucide-react";
import type React from "react";
import type * as TypesGen from "#/api/typesGenerated";
-import { Button } from "#/components/Button/Button";
import { CopyButton } from "#/components/CopyButton/CopyButton";
import { ScrollArea } from "#/components/ScrollArea/ScrollArea";
import {
@@ -220,64 +214,3 @@ const ShellTranscriptBody: React.FC<{
);
};
-
-export const ExecuteAuthRequiredTool: React.FC<{
- command: string;
- output: string;
- authenticateURL: string;
- providerLabel: string;
-}> = ({ command, output, authenticateURL, providerLabel }) => {
- const hasCommand = command.trim().length > 0;
- const hasOutput = output.trim().length > 0;
-
- return (
-
-
-
-
- Authenticate with {providerLabel} to continue this command.
-
-
-
-
-
-
- Open authentication link
-
-
- {hasCommand && (
-
-
- $ {command}
-
-
- )}
- {hasOutput && (
-
-
- {output}
-
-
- )}
-
- );
-};
diff --git a/site/src/pages/AgentsPage/components/ChatElements/tools/Tool.stories.tsx b/site/src/pages/AgentsPage/components/ChatElements/tools/Tool.stories.tsx
index 712b550f527..a918bcf9fff 100644
--- a/site/src/pages/AgentsPage/components/ChatElements/tools/Tool.stories.tsx
+++ b/site/src/pages/AgentsPage/components/ChatElements/tools/Tool.stories.tsx
@@ -1,13 +1,5 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
-import {
- expect,
- fn,
- screen,
- spyOn,
- userEvent,
- waitFor,
- within,
-} from "storybook/test";
+import { expect, fn, screen, userEvent, waitFor, within } from "storybook/test";
import { reactRouterParameters } from "storybook-addon-remix-react-router";
import { chatModelConfigsKey } from "#/api/queries/chats";
import { MockChatModelConfig } from "#/testHelpers/chatModels";
@@ -565,37 +557,6 @@ export const ProcessOutputStringError: Story = {
},
};
-export const ExecuteAuthRequired: Story = {
- args: {
- result: {
- auth_required: true,
- provider_display_name: "GitHub",
- authenticate_url: "https://coder.example.com/external-auth/github",
- output:
- "fatal: could not read Username for 'https://github.com': terminal prompts disabled",
- },
- },
- play: async ({ canvasElement }) => {
- const canvas = within(canvasElement);
- const button = canvas.getByRole("button", {
- name: "Authenticate with GitHub",
- });
- expect(button).toBeInTheDocument();
- expect(
- canvas.getByRole("link", { name: "Open authentication link" }),
- ).toHaveAttribute("href", "https://coder.example.com/external-auth/github");
-
- const openSpy = spyOn(window, "open").mockImplementation(() => null);
- await userEvent.click(button);
- expect(openSpy).toHaveBeenCalledWith(
- "https://coder.example.com/external-auth/github",
- "_blank",
- "width=900,height=600",
- );
- openSpy.mockRestore();
- },
-};
-
// ---------------------------------------------------------------------------
// Subagent stories
// ---------------------------------------------------------------------------
diff --git a/site/src/pages/AgentsPage/components/ChatElements/tools/Tool.tsx b/site/src/pages/AgentsPage/components/ChatElements/tools/Tool.tsx
index 0d8bf0663a0..5934b2524f6 100644
--- a/site/src/pages/AgentsPage/components/ChatElements/tools/Tool.tsx
+++ b/site/src/pages/AgentsPage/components/ChatElements/tools/Tool.tsx
@@ -14,10 +14,7 @@ import { ComputerTool } from "./ComputerTool";
import { CreateWorkspaceTool } from "./CreateWorkspaceTool";
import { DiffFileHeader } from "./DiffFileHeader";
import { EditFilesTool } from "./EditFilesTool";
-import {
- ExecuteAuthRequiredTool,
- ExecuteTool as ExecuteToolComponent,
-} from "./ExecuteTool";
+import { ExecuteTool as ExecuteToolComponent } from "./ExecuteTool";
import { ListAgentsTool } from "./ListAgentsTool";
import { ListTemplatesTool } from "./ListTemplatesTool";
import { ProcessOutputTool } from "./ProcessOutputTool";
@@ -225,20 +222,6 @@ const ExecuteRenderer: FC = ({
shellToolDisplayMode,
}) => {
const data = getExecuteRenderData(args, result);
- const outputBlock = data.transcriptBlocks.find(
- (block) => block.kind === "output",
- );
-
- if (data.authenticateURL) {
- return (
-
- );
- }
return (
{
describe("getExecuteRenderData", () => {
- it("parses execute output and auth metadata from result payloads", () => {
+ it("parses execute output from result payloads", () => {
expect(
getExecuteRenderData(
{ command: "git fetch origin" },
@@ -14,9 +14,6 @@ describe("toolVisibility", () => {
output: " fetched ",
wall_duration_ms: "47200",
background_process_id: "process-1",
- auth_required: true,
- authenticate_url: "https://example.com/auth",
- provider_display_name: "GitHub",
},
),
).toEqual({
@@ -25,8 +22,6 @@ describe("toolVisibility", () => {
errorText: "",
durationMs: 47200,
isBackgrounded: true,
- authenticateURL: "https://example.com/auth",
- providerLabel: "GitHub",
});
});
@@ -68,7 +63,7 @@ describe("toolVisibility", () => {
});
describe("shouldRenderTool", () => {
- it("hides execute rows with neither a command nor an auth prompt", () => {
+ it("hides execute rows without a command", () => {
expect(
shouldRenderTool({
name: "execute",
@@ -79,20 +74,6 @@ describe("toolVisibility", () => {
).toBe(false);
});
- it("keeps execute rows when auth is required even without a command", () => {
- expect(
- shouldRenderTool({
- name: "execute",
- status: "completed",
- args: {},
- result: {
- auth_required: true,
- authenticate_url: "https://example.com/auth",
- },
- }),
- ).toBe(true);
- });
-
it("hides running wait_agent rows until chat_id is available", () => {
expect(
shouldRenderTool({
diff --git a/site/src/pages/AgentsPage/components/ChatElements/tools/toolVisibility.ts b/site/src/pages/AgentsPage/components/ChatElements/tools/toolVisibility.ts
index 8010a54841c..f973b506988 100644
--- a/site/src/pages/AgentsPage/components/ChatElements/tools/toolVisibility.ts
+++ b/site/src/pages/AgentsPage/components/ChatElements/tools/toolVisibility.ts
@@ -5,7 +5,6 @@ import {
asString,
parseArgs,
type ToolStatus,
- toProviderLabel,
} from "./utils";
export type ExecuteTranscriptBlock = {
@@ -19,8 +18,6 @@ type ExecuteRenderData = {
errorText: string;
durationMs?: number;
isBackgrounded: boolean;
- authenticateURL: string;
- providerLabel: string;
};
/**
@@ -52,14 +49,6 @@ export const getExecuteRenderData = (
const isBackgrounded = Boolean(
rec && asString(rec.background_process_id).trim(),
);
- const authenticateURL = rec?.auth_required
- ? asString(rec.authenticate_url).trim()
- : "";
- const providerLabel = toProviderLabel(
- rec ? asString(rec.provider_display_name).trim() : "",
- rec ? asString(rec.provider_id).trim() : "",
- rec ? asString(rec.provider_type).trim() : "",
- );
return {
command,
@@ -67,15 +56,9 @@ export const getExecuteRenderData = (
errorText,
durationMs,
isBackgrounded,
- authenticateURL,
- providerLabel,
};
};
-const shouldRenderExecuteTool = (data: ExecuteRenderData): boolean => {
- return data.command.trim().length > 0 || Boolean(data.authenticateURL);
-};
-
const shouldRenderSubagentLifecycleTool = ({
name,
status,
@@ -122,7 +105,7 @@ export const shouldRenderTool = ({
result?: unknown;
}): boolean => {
if (name === "execute") {
- return shouldRenderExecuteTool(getExecuteRenderData(args, result));
+ return getExecuteRenderData(args, result).command.trim().length > 0;
}
return shouldRenderSubagentLifecycleTool({ name, status, args, result });
diff --git a/site/src/pages/AgentsPage/components/ChatElements/tools/utils.test.ts b/site/src/pages/AgentsPage/components/ChatElements/tools/utils.test.ts
index 609773d5507..441385982c0 100644
--- a/site/src/pages/AgentsPage/components/ChatElements/tools/utils.test.ts
+++ b/site/src/pages/AgentsPage/components/ChatElements/tools/utils.test.ts
@@ -29,7 +29,6 @@ import {
sanitizeExecuteModelIntent,
stripSvnIndexHeaders,
summarizeParsedCommands,
- toProviderLabel,
} from "./utils";
describe("formatModelIntentLabel", () => {
@@ -84,24 +83,6 @@ describe("sanitizeExecuteModelIntent", () => {
});
});
-describe("toProviderLabel", () => {
- it("returns displayName when provided", () => {
- expect(toProviderLabel("GitHub", "gh-id", "oauth")).toBe("GitHub");
- });
-
- it("falls back to providerID when displayName is empty", () => {
- expect(toProviderLabel("", "gh-id", "oauth")).toBe("gh-id");
- });
-
- it("falls back to providerType when displayName and ID are empty", () => {
- expect(toProviderLabel("", "", "oauth")).toBe("oauth");
- });
-
- it("returns default label when all are empty", () => {
- expect(toProviderLabel("", "", "")).toBe("Git provider");
- });
-});
-
describe("formatShellDurationMs", () => {
it("returns empty string for invalid values", () => {
expect(formatShellDurationMs(undefined)).toBe("");
diff --git a/site/src/pages/AgentsPage/components/ChatElements/tools/utils.ts b/site/src/pages/AgentsPage/components/ChatElements/tools/utils.ts
index aa07edf3809..f2500c09675 100644
--- a/site/src/pages/AgentsPage/components/ChatElements/tools/utils.ts
+++ b/site/src/pages/AgentsPage/components/ChatElements/tools/utils.ts
@@ -101,23 +101,6 @@ const isCommandReference = (value: string, command: string): boolean => {
const normalizeCommandReference = (value: string): string =>
value.trim().toLowerCase().replace(/\s+/g, " ");
-export const toProviderLabel = (
- providerDisplayName: string,
- providerID: string,
- providerType: string,
-): string => {
- if (providerDisplayName) {
- return providerDisplayName;
- }
- if (providerID) {
- return providerID;
- }
- if (providerType) {
- return providerType;
- }
- return "Git provider";
-};
-
const roundToTenths = (value: number): number => Number(value.toFixed(1));
export const formatShellDurationMs = (