"""Workspace ▸ Cowork against its wireframe (section 5). The drawing heads the screen with the THREAD's title — "Gom số liệu doanh thu", not the word "Cowork" — with the model beside it, Skills and Cuộc trò chuyện mới on the right, and a caps TỆP ĐẦU RA (n) panel down the side. """ from __future__ import annotations import os import sys sys.stdout.reconfigure(encoding="utf-8", errors="replace") from pathlib import Path REPO = Path(__file__).resolve().parent.parent sys.path.insert(0, str(REPO.parent)) sys.path.insert(0, str(Path(__file__).resolve().parent)) os.environ.setdefault("QT_QPA_PLATFORM", "offscreen") from capture_screens import ( # noqa: E402 _apply_theme, _freeze_schedulers, _isolate_home, _load_fonts) def main() -> int: sandbox = _isolate_home() from PySide6.QtWidgets import QApplication app = QApplication([]) _load_fonts() _freeze_schedulers() _apply_theme(app) from cowork_local.config import CONFIG_DIR assert str(sandbox) in str(CONFIG_DIR), f"isolation failed: {CONFIG_DIR}" from seed_demo_data import seed seed() from cowork_local.app import MainWindow from cowork_local.config import AppConfig from cowork_local.core.history import list_conversations, load_conversation from cowork_local.i18n import set_language, tr from cowork_local.state import AppContext set_language("vi") win = MainWindow(AppContext(AppConfig.load()), user_name="local") win.resize(1920, 1000) win.show() app.processEvents() win._goto(win._ROW_WORKSPACE, win.workspace._cowork_tab_idx) app.processEvents() c = win.cowork fails = [] # a new thread has no title yet, so the screen name stands in print(f"chua mo thread: tieu de={c._title_lbl.text()!r}") if not c._title_lbl.text().strip(): fails.append("tieu de trong khi chua mo thread") convs = list_conversations() if not convs: fails.append("khong co hoi thoai de kiem") else: conv = load_conversation(Path(convs[0]["path"])) c.load_conversation(conv) app.processEvents() want = conv.get("title", "") print(f"sau khi mo thread: tieu de={c._title_lbl.text()!r} (thread={want!r})") if want and c._title_lbl.text() != want: fails.append(f"tieu de khong theo thread: {c._title_lbl.text()!r} != {want!r}") if c._title_lbl.text() == tr("cowork.title") and want: fails.append("tieu de van la ten man hinh") # the files panel is a caps section carrying its own count head = c.output_section.header.text() print(f"pane tep dau ra: {head!r}") body = head.lstrip("▾▸ ").split(" (")[0] if body != body.upper(): fails.append(f"tieu de pane chua viet hoa: {head!r}") if "(" not in head: fails.append("tieu de pane khong kem so luong") # toolbar keeps both actions the drawing shows for name, btn in (("Skills", c.skills_btn), ("chat moi", c._new_btn)): if not btn.isVisible(): fails.append(f"thieu nut {name} tren thanh cong cu") print(f"nut tren thanh cong cu: {c.skills_btn.text()!r}, {c._new_btn.text()!r}") print() for f in fails: print("FAIL " + f) print("PASS man Cowork khop ban ve" if not fails else f"{len(fails)} problem(s)") sys.stdout.flush() os._exit(1 if fails else 0) if __name__ == "__main__": raise SystemExit(main())