diff --git a/packages/session-ui/component-tests/session-notice-projection.spec.ts b/packages/session-ui/component-tests/session-notice-projection.spec.ts
index ad7d2b003f3..0604ee252a1 100644
--- a/packages/session-ui/component-tests/session-notice-projection.spec.ts
+++ b/packages/session-ui/component-tests/session-notice-projection.spec.ts
@@ -5,9 +5,9 @@ story("shows a delegating row while subagent input streams", async ({ mount }) =
const timeline = await mount("current-session-research-agents--agent-research", { args: { scenario: "delegation" } })
const delegating = timeline.locator('[data-component="task-tool-delegating"]')
await expect(delegating).toBeVisible()
- const shimmer = delegating.locator('[data-component="text-shimmer"]')
- await expect(shimmer).toHaveAttribute("aria-label", "Delegating agent…")
- await expect(shimmer).toHaveCSS("line-height", "16px")
+ await expect(delegating).toHaveText("Delegating agent…")
+ await expect(delegating).toHaveCSS("line-height", "16px")
+ await expect(delegating.locator('[data-component="session-progress-indicator-v2"]')).toBeVisible()
await expect(timeline.locator('[data-component="task-tool-card"]')).toHaveCount(0)
await expect(timeline.locator('[data-timeline-row="Thinking"]')).toHaveCount(0)
})
diff --git a/packages/session-ui/src/components/basic-tool.css b/packages/session-ui/src/components/basic-tool.css
index 428627985b6..bd409fe2137 100644
--- a/packages/session-ui/src/components/basic-tool.css
+++ b/packages/session-ui/src/components/basic-tool.css
@@ -283,18 +283,6 @@
gap: 8px;
}
- [data-component="task-tool-spinner"] {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- flex-shrink: 0;
-
- [data-component="spinner"] {
- width: 16px;
- height: 16px;
- }
- }
-
[data-component="task-tool-action"] {
display: inline-flex;
align-items: center;
@@ -338,7 +326,7 @@
line-height: var(--line-height-compact);
letter-spacing: var(--letter-spacing-normal);
text-transform: capitalize;
- color: var(--task-agent-color-fallback, var(--text-strong));
+ color: var(--text-strong);
}
[data-slot="basic-tool-tool-subtitle"] {
@@ -382,18 +370,6 @@
background: var(--v2-background-bg-layer-02);
}
- [data-component="task-tool-spinner"],
- [data-component="task-tool-icon"] {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- flex-shrink: 0;
-
- [data-slot="icon-svg"] {
- color: var(--task-agent-color, var(--v2-icon-icon-base));
- }
- }
-
[data-component="task-tool-title"] {
height: 20px;
font-family: var(--v2-font-family-sans, "Inter", sans-serif);
@@ -420,10 +396,6 @@
flex-grow: 0;
}
- [data-component="session-progress-indicator-v2"] {
- color: var(--task-agent-color, light-dark(var(--v2-text-text-base), #ffffff));
- }
-
&:hover,
&:focus-visible {
border-color: transparent;
diff --git a/packages/session-ui/src/tools/subagent-row-variants.stories.tsx b/packages/session-ui/src/tools/subagent-row-variants.stories.tsx
new file mode 100644
index 00000000000..9584a40eedc
--- /dev/null
+++ b/packages/session-ui/src/tools/subagent-row-variants.stories.tsx
@@ -0,0 +1,127 @@
+import { TextShimmer } from "@opencode/ui/text-shimmer"
+import { For, type JSX } from "solid-js"
+import { CurrentSessionProviders } from "../storybook/current-session-story"
+import { storyDocument, storyTool } from "../storybook/current-session-scenarios"
+import { timelinePresets } from "../timeline/detail"
+import { SessionTimeline } from "../timeline/session-timeline"
+
+export default {
+ title: "OpenCode/Work/Subagent row variants",
+ id: "current-subagent-row-variants",
+ parameters: {
+ layout: "fullscreen",
+ docs: {
+ description: {
+ component:
+ "Design alternatives for child-Session rows without the old agent square. Production is the first variant; the others are static story-only sketches.",
+ },
+ },
+ },
+}
+
+const productionDocument = storyDocument(
+ [
+ storyTool("variant_glob", "glob", "completed", { pattern: "src/timeline/**/*.ts" }),
+ storyTool("variant_grep", "grep", "completed", { pattern: "timelineDetail" }),
+ storyTool("variant_read", "read", "completed", { path: "src/timeline/projection.ts" }),
+ storyTool(
+ "variant_explore",
+ "subagent",
+ "completed",
+ { agent: "explore", description: "Map the timeline grouping rules", prompt: "Find where tool rows are grouped." },
+ { output: "Grouping lives in the timeline projection.", metadata: { sessionID: "session_child_explore" } },
+ ),
+ storyTool(
+ "variant_test",
+ "subagent",
+ "running",
+ { agent: "test", description: "Run the focused timeline tests", prompt: "Run the timeline tests." },
+ { metadata: { sessionID: "session_child_test" } },
+ ),
+ storyTool("variant_delegating", "subagent", "streaming", {}, { raw: "" }),
+ ],
+ true,
+)
+
+const sketchRows = [
+ { title: "Explore", subtitle: "Map the timeline grouping rules", running: false },
+ { title: "Test", subtitle: "Run the focused timeline tests", running: true },
+]
+
+function Frame(props: { title: string; children: JSX.Element }) {
+ return (
+ {props.title}
+ {props.children}
+