1.1.1 — Markdown trong khung chat, và ba lỗi Windows
Khung chat giờ hiển thị Markdown
Câu trả lời của Claude trước đây về nguyên văn Markdown — ##, dấu backtick, **, dấu | của bảng — nhồi trong một cột rộng 370px, tức đúng chỗ khó đọc nhất. Giờ nó được render: heading, danh sách, bảng, blockquote, link, code inline, và khối code có tô màu cú pháp kèm nút chép.
Chỉ câu trả lời của Claude mới được render. Chữ bạn gõ giữ nguyên như bạn gõ.
Markdown do marked phân tích, tô màu do Prism — cả hai nhúng sẵn trong extension và chỉ dùng phần lexer: panel tự dựng từng node DOM, không bao giờ gán HTML. Đây là chủ đích chứ không phải cầu kỳ — câu trả lời thường trích lại đúng thứ một trang web hiển thị (kết quả của get_page_text, read_console_messages…), mà panel lại là trang extension có đặc quyền. Nên thẻ thô trong nội dung hiện ra thành chữ, và link javascript:/data: không bao giờ thành link.
Tô màu có sẵn cho markup, css, javascript, typescript, json, bash, python, yaml, diff, sql. Ngôn ngữ khác vẫn hiện thành khối code, chỉ là không màu.
Ba lỗi trên Windows
Cả ba đều do người dùng Windows báo hoặc phát hiện khi kiểm thử trên máy thật.
Installer chọn nhầm claude.ps1. PowerShell phân giải ExternalScript trước Application, mà npm i -g thả cả claude, claude.cmd lẫn claude.ps1 vào cùng một thư mục — nên Get-Command claude trả về file .ps1, và nó bị ghi vào bridge.cmd. Nhưng bridge spawn claude qua cmd.exe, mà cmd không chạy được .ps1. Cài xong trông hoàn hảo, còn mọi lượt chat trong khung chat đều chết. Bản này lọc theo CommandType và phần mở rộng, và lọc cả giá trị kế thừa — nhờ vậy bản cập nhật sẽ tự chữa những máy đã cài bản lỗi thay vì bake lại cái sai.
Stop-ScheduledTask + Start-ScheduledTask không phải là restart. Đo trên máy thật: dừng task chỉ kết thúc wscript, còn node.exe — cháu của nó — vẫn sống, vẫn giữ cổng, vẫn phục vụ bằng cấu hình cũ đã nạp trong bộ nhớ; PID không đổi và /health vẫn trả 200 suốt. Giờ đã có Restart-CcTask, và tài liệu (/ccchrome restart, cả hai README) trỏ vào đó.
Task đăng ký hỏng ở máy có USERDOMAIN khác tên máy. Register-ScheduledTask từ chối với 0x80070534, mà installer lại cố tình nuốt lỗi này — nên nó in đủ dòng "Xong" trong khi không có dịch vụ nào được đăng ký, và lần đăng nhập sau không có gì chạy. Principal giờ lấy từ identity đang chạy.
Cổng mặc định: 8787 → 23949
Máy đã cài giữ nguyên cổng cũ. Bản cập nhật đọc port trong ~/.ccchrome.json y như nó vẫn đọc token, nên bridge của bạn không bị dời và URL trong popup extension vẫn đúng. Mặc định mới chỉ áp cho máy cài lần đầu.
Muốn chuyển máy đang chạy sang cổng mới thì đặt biến rồi chạy lại lệnh cài:
CC_CHROME_PORT=23949 curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashrồi dán URL mới (installer in ra ở cuối) vào popup extension.
Vì sao đổi: dải ephemeral đo được là macOS 49152–65535, Windows 49152–65535, Linux 32768–60999 — hợp lại 32768–65535. 8787 vốn không nằm trong đó, nhưng mặc định mới cũng phải ở ngoài, nên chọn 23949 chứ không phải một số ≥ 32768, để hệ điều hành không thể mượn mất cổng của bridge làm source port rồi khiến dịch vụ không bind được lúc đăng nhập.
Popup cũng nói rõ hơn khi mất kết nối: bridge không trả lời ở cổng trong URL đang lưu, và cổng hiện tại nằm ở ~/.ccchrome.json hoặc xem bằng /ccchrome status.
Sau khi cập nhật
Nhớ vào chrome://extensions bấm Reload trên "Claude Code Chrome Bridge". Trình cài đặt thay mã nguồn trên đĩa nhưng không thể nạp lại extension đang chạy trong Chrome — không Reload thì bạn vẫn đang chạy extension của bản cũ, tức là chưa có Markdown.
Nhật ký cũ trong panel lưu Markdown gốc, nên các câu trả lời từ trước cũng sẽ hiện ra đã render, không chỉ tin nhắn mới.