New Chat scene at the Chat top-bar tab. Threads and messages are stored as flow docs (kind=definition, source_context=EA2_CHAT_THREAD / _MSG) linked by defines edges with role=next — same proven contract as wizard steps. Persona directory lets the signed-in operator open a thread with the CEO / HR / IT personas. - src/lib/chatApi.ts: listThreads / createThread / listMessages / sendMessage - src/scenes/Chat.tsx: sidebar (threads + new-thread picker) + main pane (header, bubbles, composer with Enter-to-send / Shift-Enter newline) - src/index.css: chat-scene grid + bubble + composer styles - src/App.tsx: Chat tab + scene route
14 lines
755 B
JavaScript
14 lines
755 B
JavaScript
import { chromium } from "playwright";
|
|
const b = await chromium.launch({ headless: true, args: ["--host-resolver-rules=MAP canvas.flow-master.ai 65.21.71.186", "--ignore-certificate-errors"] });
|
|
const p = await (await b.newContext()).newPage();
|
|
await p.goto("https://canvas.flow-master.ai/", { waitUntil: "networkidle" });
|
|
await p.waitForTimeout(1000);
|
|
const chips = await p.locator(".persona-chip").allTextContents();
|
|
console.log("persona chips:", chips);
|
|
// Click CEO chip → email field should fill
|
|
await p.locator(".persona-chip", { hasText: /Mariana/ }).click().catch(() => {});
|
|
await p.waitForTimeout(300);
|
|
const email = await p.locator("input[type='email']").inputValue();
|
|
console.log("after Mariana click, email field:", email);
|
|
await b.close();
|