diff --git a/web/src/app/home/agents/components/ProcessorTypeDiagram.tsx b/web/src/app/home/agents/components/ProcessorTypeDiagram.tsx
index e28ddc6fa..a95f172af 100644
--- a/web/src/app/home/agents/components/ProcessorTypeDiagram.tsx
+++ b/web/src/app/home/agents/components/ProcessorTypeDiagram.tsx
@@ -5,6 +5,36 @@ import type { AgentKind } from '@/app/infra/entities/api';
const LANGBOT_BLUE = '#2288ee';
const LANGBOT_CYAN = '#19b8c9';
+function DiagramMotionStyles() {
+ return (
+
+ );
+}
+
function ArrowMarker({ id }: { id: string }) {
return (
@@ -80,6 +110,7 @@ function AgentDiagram() {
>
{t('agents.agentDiagramDescription')}
+
@@ -100,8 +131,12 @@ function AgentDiagram() {
fill="none"
stroke={LANGBOT_BLUE}
strokeWidth="2"
+ strokeDasharray="4 11"
opacity="0.32"
markerEnd={`url(#${arrowId})`}
+ className="processor-line-flow"
+ data-motion="flow"
+ style={{ animationDelay: `${index * -0.35}s` }}
/>
- {outputs.map((item) => (
+ {outputs.map((item, index) => (
{t('agents.pipelineDiagramDescription')}
+
+
{steps.map((step, index) => {
const x = 40 + index * 142;
diff --git a/web/tests/e2e/crud-smoke.spec.ts b/web/tests/e2e/crud-smoke.spec.ts
index 201ecec72..c5c0c04c7 100644
--- a/web/tests/e2e/crud-smoke.spec.ts
+++ b/web/tests/e2e/crud-smoke.spec.ts
@@ -183,11 +183,20 @@ test.describe('frontend CRUD smoke flows', () => {
);
await expect(agentTypeCard).toHaveAttribute('aria-checked', 'true');
await expect(page.getByTestId('agent-diagram')).toBeVisible();
+ await expect(
+ page.getByTestId('agent-diagram').locator('[data-motion="flow"]'),
+ ).toHaveCount(3);
+ await expect(
+ page.getByTestId('agent-diagram').locator('[data-motion="relation"]'),
+ ).toHaveCount(3);
await expect(page.getByTestId('pipeline-diagram')).toHaveCount(0);
await page.getByRole('radio', { name: /^Pipeline/ }).click();
await expect(pipelineTypeCard).toHaveAttribute('aria-checked', 'true');
await expect(page.getByTestId('pipeline-diagram')).toBeVisible();
+ await expect(
+ page.getByTestId('pipeline-diagram').locator('[data-motion="flow"]'),
+ ).toHaveCount(1);
await expect(page.getByTestId('agent-diagram')).toHaveCount(0);
await expect(page.locator('input[name="name"]')).toBeVisible();