diff --git a/apps/web/e2e/new-bot-ux.spec.ts b/apps/web/e2e/new-bot-ux.spec.ts index a640a48..68bc135 100644 --- a/apps/web/e2e/new-bot-ux.spec.ts +++ b/apps/web/e2e/new-bot-ux.spec.ts @@ -43,6 +43,9 @@ test("create opens form, then empty chat; picker lists bots; sidebar collapses", await expect(page.getByRole("combobox", { name: "Message" })).toBeVisible(); await expect(page.getByTestId("side-panel")).toHaveAttribute("data-panel", "closed"); await expect(page.getByText("What do you want me on first?", { exact: true })).toHaveCount(0); + await expect( + page.getByTestId("transcript").getByText("Start the conversation — New Bot is on stage above."), + ).toBeVisible(); await captureScreenshot(page, testInfo, "create-chat-sidepanel-closed"); await page.getByTestId("toggle-bots-sidebar").click(); diff --git a/apps/web/e2e/sidebar-nav.spec.ts b/apps/web/e2e/sidebar-nav.spec.ts index 95e3724..e5e502c 100644 --- a/apps/web/e2e/sidebar-nav.spec.ts +++ b/apps/web/e2e/sidebar-nav.spec.ts @@ -23,7 +23,6 @@ test("sidebar has expected navigation items and no integrations", async ({ page // - textbox "Search" (search input) // - button "Heute" (today) // - text "Sprich mit deinen Oo's" (conversations section header) - // - status "Not configured" (trading bot URL unset) // - NO "Integration(en)" button or text // Search: it's a textbox, not a button @@ -38,13 +37,6 @@ test("sidebar has expected navigation items and no integrations", async ({ page const conversationsText = sidebar.getByText("Sprich mit deinen Oo's"); await expect(conversationsText).toBeVisible({ timeout: 5000 }); - // Trading mode comes from the bot API. With no URL configured the sidebar - // must not claim Live Trading from a local preference. - const tradingStatus = sidebar.getByTestId("trading-mode-status"); - await expect(tradingStatus).toBeVisible({ timeout: 5000 }); - await expect(tradingStatus).toContainText("Not configured"); - await expect(sidebar.getByRole("button", { name: "Live Trading" })).toHaveCount(0); - // No "Integration(en)" button const integrationBtn = sidebar.getByRole("button", { name: /Integration(en)?/i }); await expect(integrationBtn).toHaveCount(0, { timeout: 5000 }); diff --git a/apps/web/e2e/steve-jobs.spec.ts b/apps/web/e2e/steve-jobs.spec.ts deleted file mode 100644 index 1d0d337..0000000 --- a/apps/web/e2e/steve-jobs.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { test } from "@playwright/test"; - -test.describe("Steve Jobs CTO Agent", () => { - test.beforeEach(async () => { - // We assume the user has logged in and the bot is seeded - // This is a placeholder for the perfect test architecture - }); - - test("should be visible in the sidebar", async () => { - // This is a dummy test to show we started the test architecture for Steve Jobs - }); - - test("should prefer voice communications (VOICE FIRST)", async () => { - // Voice first features - }); -}); diff --git a/apps/web/src/components/DataTrustPanel.tsx b/apps/web/src/components/DataTrustPanel.tsx deleted file mode 100644 index 5400308..0000000 --- a/apps/web/src/components/DataTrustPanel.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { CheckCircle2, Database, EyeOff, Lock } from "lucide-react"; -import { memo } from "react"; - -const TRUST_ITEMS = [ - { icon: Lock, label: "Verschlüsselt", desc: "AES-256 für sensible Daten" }, - { icon: Database, label: "Lokal gespeichert", desc: "Eigene PostgreSQL-Datenbank" }, - { icon: EyeOff, label: "Kein Tracking", desc: "Keine Analytics, kein Telemetry" }, -] as const; - -export const DataTrustPanel = memo(function DataTrustPanel() { - return ( -
- {activeName - ? t`Start the conversation — ${activeName} is on stage above.` - : t`Start the conversation.`} -
-- {activeName - ? t`Frag ${activeName} nach Marktchancen, autonomen Tasks oder Architektur-Reviews.` - : t`Wähle einen autonomen Agenten aus deinem Team oder starte direkt einen Prompt.`} -
-+ {activeName + ? t`Start the conversation — ${activeName} is on stage above.` + : t`Start the conversation.`} +
) : null} {reactionView.visibleMessages.map((message) => { if (!message.blocks.some((block) => !isToolActivityBlock(block))) return null; @@ -6393,7 +6304,6 @@ const QuoteSelectionButton = memo(function QuoteSelectionButton({ }); const Composer = memo(function Composer({ - activeName, running, disabled, pendingAttachments, @@ -6421,7 +6331,6 @@ const Composer = memo(function Composer({ onSlashOpen, onSlashAction, }: { - activeName?: string; running: boolean; disabled?: boolean; pendingAttachments: PendingAttachment[]; @@ -6730,28 +6639,6 @@ const Composer = memo(function Composer({ }`} >