CoworkLocal — Audit UI/UX

Hiện trạng 27 màn hình · đề xuất sắp xếp lại theo UI/UX kiểu Claude · bảng màu Visual Studio Code · dựng lúc 09:51 17/08/2026

Ràng buộc: chỉ sắp xếp lại, không xoá/thêm chức năng. Hai chỗ lệch được đánh dấu ở Phần 1.
Ảnh chụp: render offscreen trên bản sao dữ liệu (scheduler tắt, hash dữ liệu thật trước/sau giống hệt). Nạp dữ liệu mẫu: 3 project · 6 chat · 10 task · 3 workflow · 45 ngày token. Ảnh đã chỉnh menu sáng đúng mục — xem lỗi #9.
Mục lục

Phần 1 — Điều hướng · Phần 2 — Luồng người dùng · Phần 3 — 27 màn hình · Phần 4 — Màn chết

  1. Dashboard
  2. Schedule Task — Kanban
  3. Schedule Task — Calendar
  4. Workspace ▸ Project
  5. Workspace ▸ Cowork
  6. Workspace ▸ Co4E
  7. Workspace ▸ Folder
  8. Workspace ▸ GraphRAG
  9. Monitoring ▸ Tổng quan
  10. Monitoring ▸ Sự kiện bảo mật
  11. Monitoring ▸ Lịch sử gọi MCP
  12. Monitoring ▸ Nhật ký hành động
  13. Monitoring ▸ Trạng thái Agent
  14. Monitoring ▸ Agents Admin
  15. Monitoring ▸ Công cụ
  16. Monitoring ▸ Icon
  17. Settings
  18. Task Editor
  19. Skills manager
  20. Skill editor
  21. File view & AI edit
  22. Co4E agent editor
  23. External connector
  24. Permission request
  25. Admin agent editor
  26. Login (dead screen — not wired)
  27. Help dock — expanded panel

Phần 1 — Điều hướng

Hiện tại
Dashboard
Schedule Task
Workspace  ▼          ← nhánh accordion, tab strip bên trong BỊ ẨN
   Project
   Cowork             ← TỰ ẨN khi chưa chọn project
   Co4E
   Folder
   GraphRAG           ← TỰ ẨN khi chưa chọn project
Monitoring ▼          ← nhánh accordion, tab strip BỊ ẨN
   Tổng quan
   Sự kiện bảo mật
   Lịch sử gọi MCP
   Nhật ký hành động
   Trạng thái Agent
   Agents Admin
   Công cụ
   Icon
Đề xuất
[ + Đoạn chat mới ]     ← hành động chính, trên cùng
──────────────
Project                 ← màn đầu, giữ nguyên
Cowork                  ← luôn hiện (mờ đi nếu chưa chọn project)
Co4E
Folder
GraphRAG                ← luôn hiện (mờ đi nếu chưa chọn project)
Schedule Task
──────────────
RECENTS                 ← History dời từ pane giữa lên đây
  · thread gần nhất…
──────────────  (ghim đáy — nhóm phụ trợ)
Dashboard               ← vẫn 1 cú nhấp như cũ
Monitoring              ← BỎ ẨN dải tab, đủ 8 mục nằm ngang trong trang:
   [Tổng quan] [Sự kiện bảo mật] [Lịch sử gọi MCP]
   [Nhật ký hành động] [Trạng thái Agent]
   [Agents Admin] [Công cụ] [Icon]
👤 local · Provider ▾   ← gom Provider/Language/Theme/Settings

Chín điểm đã xác minh trong code

Vấn đềChi tiết
Accordion 2 cấp, không phẳngapp.py:170 ghi là \“Claude-style\” nhưng là QTreeWidget accordion. Claude dùng danh sách phẳng.
Mục tự biến mấtworkspace_tab.py:485 ẩn Cowork và GraphRAG khi chưa chọn project.
Tab strip bị ẩnhide_tab_bar() ẩn dải tab có sẵn → menu là đường duy nhất.
History chỉ có ở tab Coworkworkspace_tab.py:169. Điểm làm tốt phải giữ: lịch sử đã gom theo project — lưu trong <project>/.cowork_history (config.py:590), hiển thị gom nhóm ở sidebar.py:193.
Monitoring gom 5 việc rời rạcChi phí · log bảo mật · quản trị agent · cấu hình tool · thư viện icon.
Dashboard trùng Monitoring ▸ Tổng quanCùng bộ StatCard + BudgetCard.
Top bar giữ thiết lậpProvider/Ngôn ngữ/Giao diện ở topbar, tách khỏi Cài đặt.
Header không đổi theo mànMọi sub-tab đều hiện \“Workspace — Projects\”.
LỖI: bấm mục con Workspace, menu nhảy về mục cha_goto gọi refresh() (app.py:726) → subtabs_changed vô điều kiện (workspace_tab.py:497) → takeChildren() (app.py:691) huỷ mục vừa bấm.
Đo được: 5/5 mục Workspace mất highlight, 0/8 mục Monitoring bị.

Khung ứng dụng — thanh trên cùng & thanh menu

Không thuộc màn nào nên liệt kê riêng.

Kiểm kê control — 8 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
—câylambda cur, _prev: self._navigate(cur); self._on_nav_clickapp.py:175giữ nguyên tại chỗ
MENUnútself._toggle_navapp.py:218Giữ — nút MENU gập sidebar (150↔54px)
—droplistself._on_provider_changedapp.py:559→ menu tài khoản ở đáy sidebar
—droplistself._on_language_changedapp.py:568→ menu tài khoản ở đáy sidebar
Cài đặtnútself._open_settingsapp.py:586→ menu tài khoản ở đáy sidebar
self._tray_open_actmenu chuột phải—app.py:329giữ nguyên tại chỗ
self._tray_quit_actmenu chuột phải—app.py:330giữ nguyên tại chỗ
_icon(icon_namemenu chuột phải—app.py:625giữ nguyên tại chỗ

Các nút thu gọn / mở rộng — giữ nguyên toàn bộ

App có 11 chỗ gập được. Thiết kế mới giữ đủ cả 11.

Menu mở rộng
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Nội dung
Menu đã gập (54px, chỉ còn icon)
+
▣
▤
◫
⌥
◈
▦
◔
◕
👤
Nội dung
Chỗ gập đượcCách dùng NguồnThiết kế mới
Thanh menu chínhMENU ‹ ở đầu thanh — gập còn dải icon (150px → 54px)app.py:409giữ
Pane Projectchevron ‹ trên đầu danh sách projectworkspace_tab.py:368giữ
Pane Lịch sửchevron trên đầu History, gập thành dải mỏngsidebar.py:167 · workspace_tab.py:247giữ
Pane Tệp trong chatchevron › — gập panel Files bên phải khung chatchat_panel.py:709giữ
Panel Hỏi đáp GraphRAGchevron › — gập panel agent bên phải đồ thịstructure_graph_view.py:615giữ
Panel cấu hình bước Co4Enút gập panel phải của canvasco4e_tab.py:767giữ
Panel Tin nhắn Co4Egập khung log dưới canvas — mặc định đang gậpco4e_tab.py:894giữ
Terminal trong Thư mụcbấm thanh tiêu đề để mở/gập — mặc định đang gậpterminal_panel.py:156giữ
Panel AI sửa tệpnút ✨ bật/tắt panel — mặc định đang ẩnfolder_tab.py:777giữ
Đồ thị ⇄ Tin nhắn (GraphRAG)nút đổi nội dung pane tráistructure_graph_view.py:416giữ — đổi thành cặp tab
Khối kết quả công cụ trong chatbấm tiêu đề để mở/gập output dàichat_view.py:253giữ

Từng màn hình đi đâu sau khi sửa

Không màn nào bị bỏ. Giám sát (Dashboard + 8 màn Monitoring) ở nhóm phụ trợ đáy sidebar, mở ra thấy đủ 8 tab.

Màn hìnhHiện tại ở đâu Sau khi sửa ở đâuChức năng
Màn hình làm việc
Workspace ▸ ProjectMenu ▸ Workspace (mở nhánh) ▸ ProjectSidebar ▸ Project — lên cấp 1, bớt 1 lần mở nhánhgiữ nguyên
Workspace ▸ CoworkMenu ▸ Workspace ▸ Cowork — biến mất nếu chưa chọn projectSidebar ▸ Cowork — luôn thấy, mờ khi chưa chọngiữ nguyên
Workspace ▸ Co4EMenu ▸ Workspace ▸ Co4ESidebar ▸ Co4Egiữ nguyên
Workspace ▸ Folder (“Thư mục”)Menu ▸ Workspace ▸ Thư mụcSidebar ▸ Foldergiữ nguyên
Workspace ▸ GraphRAGMenu ▸ Workspace ▸ GraphRAG — biến mất nếu chưa chọn projectSidebar ▸ GraphRAG — luôn thấygiữ nguyên
Schedule Task — KanbanMenu ▸ Schedule TaskSidebar ▸ Schedule Task ▸ tab Kanbangiữ nguyên
Schedule Task — LịchMenu ▸ Schedule Task ▸ combo đổi sang “Lịch”Sidebar ▸ Schedule Task ▸ tab Lịch — combo thành tab, dễ thấy hơngiữ nguyên
Giám sát & vận hành — phần bạn hỏi
DashboardMenu ▸ Dashboard (cấp 1)Sidebar ▸ vùng đáy — vẫn 1 cú nhấpgiữ nguyên
Monitoring ▸ Tổng quanMenu ▸ Monitoring (mở nhánh) ▸ Tổng quanSidebar ▸ Monitoring ▸ tab Tổng quangiữ nguyên
Monitoring ▸ Sự kiện bảo mậtMenu ▸ Monitoring ▸ Sự kiện bảo mậtSidebar ▸ Monitoring ▸ tab Sự kiện bảo mậtgiữ nguyên
Monitoring ▸ Lịch sử gọi MCPMenu ▸ Monitoring ▸ Lịch sử gọi MCPSidebar ▸ Monitoring ▸ tab Lịch sử gọi MCPgiữ nguyên
Monitoring ▸ Nhật ký hành độngMenu ▸ Monitoring ▸ Nhật ký hành độngSidebar ▸ Monitoring ▸ tab Nhật ký hành độnggiữ nguyên
Monitoring ▸ Trạng thái AgentMenu ▸ Monitoring ▸ Trạng thái AgentSidebar ▸ Monitoring ▸ tab Trạng thái Agentgiữ nguyên
Monitoring ▸ Agents AdminMenu ▸ Monitoring ▸ Agents AdminSidebar ▸ Monitoring ▸ tab Agents Admingiữ nguyên
Monitoring ▸ Công cụMenu ▸ Monitoring ▸ Công cụ ▸ tab con Tool | ConnectorSidebar ▸ Monitoring ▸ tab Công cụ ▸ Tool | Connectorgiữ nguyên
Monitoring ▸ IconMenu ▸ Monitoring ▸ IconSidebar ▸ Monitoring ▸ tab Icongiữ nguyên
Thành phần bị dời chỗ
History (lịch sử chat)Pane giữa, chỉ ở tab Cowork. Đã gom theo project.Sidebar ▸ RECENTS — vẫn gom theo project + “Tất cả project…”giữ, dễ tới hơn
Bộ chọn projectPane trái, chỉ ở tab ProjectThanh chọn đầu trang, dùng chung mọi màngiữ, dễ tới hơn
Provider · Ngôn ngữ · Giao diệnThanh trên cùng (topbar)Menu tài khoản ở đáy sidebar — gom cùng chỗ với Cài đặtgiữ nguyên
Nút Cài đặtThanh trên cùngMenu tài khoản ở đáy sidebargiữ nguyên
Hộp thoại & lớp phủ
11 hộp thoạiMở từ nút trên các màn tương ứngKhông đổi — vẫn mở từ đúng những nút đógiữ nguyên
Robot trợ giúp · Terminal · ComposerLớp phủ / panel thu gọnKhông đổigiữ nguyên
Dashboard/Monitoring xuống đáy nhưng vẫn là mục cấp 1, vẫn một cú nhấp. Sidebar chia theo tần suất: việc hằng ngày ở trên, quản trị ở dưới.

Toàn bộ nhóm tab / lane / chế độ trong app

Đầy đủ, kể cả nhóm không hiện ra màn hình.

NhómSLCác mục Nhìn thấy?Nguồn
Thanh menu trái4 mụcDashboard · Schedule Task · Workspace · Monitoringcóapp.py:154
Workspace ▸ mục con5 mụcProject · Cowork · Co4E · Folder · GraphRAGkhông — hide_tab_bar(), và Cowork/GraphRAG còn tự ẩn khi chưa chọn projectworkspace_tab.py:43
Monitoring ▸ mục con8 mụcTổng quan · Sự kiện bảo mật · Lịch sử gọi MCP · Nhật ký hành động · Trạng thái Agent · Agents Admin · Công cụ · Iconkhông — hide_tab_bar()monitoring_tab.py:215
Công cụ ▸ tab con2 tabTool · Connectorcó — màn duy nhất còn hiện dải tabtools_admin_tab.py:91
Schedule ▸ chế độ xem2 chế độKanban · Lịchlà combo, không phải tabschedule_task_tab.py:171
Kanban ▸ lane trạng thái7 lanebacklog · scheduled · running · waiting_input · done · failed · pausedcắt ở mép phải, phải cuộn ngangtasks.py:24
Co4E ▸ sidebar3 tab iconWorkflows · Agents · Skillschỉ có icon, tên nằm trong tooltipco4e_tab.py:426
Co4E ▸ dải tab flow1 + NFlow Status (ghim) + mỗi workflow đang mở một tabcó, kiểu trình duyệtco4e_tab.py:556
Folder ▸ trình xem5 trangtrống · mã nguồn · HTML · tài liệu · ảnh (+ bảng tính)tự đổi theo đuôi tệp, không có tabfolder_tab.py:322
GraphRAG ▸ khung trái2 trangĐồ thị · Tin nhắnlà nút bấm, không phải tabstructure_graph_view.py:217
Dialog Tạo task bằng AI2 tabSinh bằng AI · Nhập từ Excelcóschedule_task_tab.py:530
Dialog Kết nối ngoài2 chế độMCP (stdio) · REST APIlà combo đổi trangext_connector_dialog.py:23
Dialog Đăng nhập (màn chết)3 trangKhởi tạo lần đầu · Đăng nhập · Dự phòng offlinekhông tới đượclogin_dialog.py:74
Dialog Flow Builder (màn chết)3 tabFlow · Agents · Skillskhông tới đượcflow_dialog.py:247
14 nhóm tab/lane, chỉ 4 nhóm hiện ra màn hình. Số còn lại bị ẩn, thành combo, thành nút, hoặc không tới được.
Hai chỗ lệch — cần bạn quyết: (1) Cowork/GraphRAG: biến mất → hiện nhưng mờ. (2) Bỏ ẩn tab strip Monitoring (khôi phục thứ đã có).

Phần 2 — Luồng người dùng

LuồngHiện tạiSau khi sửa
Khởi động → màn đầupython -m cowork_local → MainWindow → Workspace ▸ Project
Không có bước đăng nhập (LoginDialog bị bỏ qua)
Giữ nguyên đích đến. Sidebar phẳng nên Project là mục đầu, không còn nằm dưới nhánh Workspace.
Tạo project → chatNav ▸ Workspace (mở nhánh) → Project → “+” → điền form → Lưu → chọn project → nav ▸ Cowork (mục vừa mới xuất hiện) → gõSidebar ▸ Project → “+” → Lưu → sidebar ▸ Cowork (luôn nhìn thấy) → gõ.
Bớt 1 bước mở nhánh, và menu không đổi hình giữa chừng.
Co4E: tạo → chạy → xem runNav ▸ Workspace ▸ Co4E → “+” trên dải tab → kéo agent từ sidebar → chọn node → sửa ở panel phải → Lưu → Chạy → bấm tab Flow Status để xemSidebar ▸ Co4E → “+ Workflow” trong danh sách trái → kéo → sửa phải → Lưu → Chạy.
Trạng thái run là một mục trong danh sách trái, không phải tab riêng.
Tạo & chạy scheduled taskNav ▸ Schedule → “+ Task” → form 5 group → Lưu → kéo thẻ vào lane Running (chạy ngay, không hỏi)Sidebar ▸ Schedule Task → “+ Task” → form 3 tab → Lưu → kéo vào Running (lane có viền cảnh báo).
Duyệt tệp → AI sửaNav ▸ Workspace ▸ Folder → chọn tệp → bấm ✨ mở panel AI → gõ lệnh → xem plan → xem diff → ApplySidebar ▸ Folder → chọn tệp → ✨ mở lớp phủ AI → gõ → plan → diff → Apply.
Luồng giữ nguyên; panel không còn chiếm chỗ cố định.

Truy vết chi tiết: “Đoạn chat mới”

Khía cạnhGiao diện cũ Giao diện mớiCó đồng bộ không
Số lối vào1 — nút “Cuộc trò chuyện mới” trên toolbar Cowork (cowork_tab.py:34)2 — nút sidebar + nút toolbar cũ giữ nguyênTôi vẽ thêm nút sidebar mà chưa nói gì về nút cũ. Giữ cả hai (bỏ nút cũ là xoá chức năng), cùng gọi một hàm.
Thấy được khi nàoChỉ khi đang ở tab Cowork — mà tab này tự ẩn khi chưa chọn projectLuôn thấy trên sidebarMới dễ tới hơn. Chưa chọn project thì nút mờ đi.
Chat mới thuộc project nàoProject đang mở, ngầm định — không hiển thị ở đâuBộ chọn project ngay trên nút, trong sidebarCùng hành vi — vẫn là project đang mở (ctx.active_project_id), nhưng nay nhìn thấy và đổi được tại chỗ.
Đổi project trước khi tạoPhải rời Cowork → về tab Project → chọn dòng trong danh sách → quay lại Cowork → bấm nút. 4 bước.Bấm droplist ngay trên nút → chọn → bấm nút. 2 bước, không rời màn.Ít bước hơn, không thêm chức năng — vẫn là chọn project rồi tạo chat.
Bấm từ màn khácKhông xảy ra được — nút chỉ có trên CoworkChuyển sang Cowork rồi tạo chat mớiHành vi mới, cần thiết vì nút giờ ở mọi màn.
Việc thực sự làmnew_session() (chat_panel.py:1653): xoá messages · sinh session_id mới · dọn view, composer, plan, tệp vào/ra · turn đang chạy vẫn chạy nềnGiữ y nguyênKhông đổi.
Lưu chat cũTự lưu; History refresh qua history_changedGiữ y nguyên — RECENTS refreshKhông đổi.
Có project
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Cowork
Chưa có project nào
Chưa có project▾
+ Đoạn chat mới
Tạo project trước
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
trống
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Quản lý project
Chưa có project — bấm “+ Project mới”
Khi chưa có project (đã chạy thử app với 0 project): hiện nay Cowork và GraphRAG biến mất khỏi menu nên không chat được, mà không nói vì sao. Thiết kế mới giữ nguyên cổng chặn đó — vẫn không tạo chat được — nhưng hai mục vẫn nằm đúng chỗ, chỉ mờ đi; droplist ghi “Chưa có project”; nút chat mới bị khoá kèm lý do “Tạo project trước”.
Ghi nhận thêm: lúc đó ctx.active_project_id vẫn giữ 'default' — trỏ vào một project không tồn tại. Và projects.ensure_starter_project() (“đảm bảo luôn có ít nhất một project”) không nơi nào gọi.
Phát hiện: sidebar.py:68 khai báo tín hiệu new_chat và workspace_tab.py:241 đã nối nó vào _on_sidebar_new — nhưng không nơi nào phát tín hiệu này (grep new_chat.emit → rỗng). Tức pane Lịch sử vốn được thiết kế để có nút “chat mới” nhưng nút đó chưa bao giờ được thêm. Đề xuất đưa nút lên sidebar chính là hoàn thiện ý định sẵn có trong code, không phải thêm mới.

Phần 3 — Từng màn hình

1. Dashboardui/dashboard_tab.py:35

Token đã tiêu và chi phí quy ra tiền, theo kỳ.

Hiện tại
Dashboard

Header: kỳ · granularity · metric · tiền tệ · 6 thẻ: Total · In · Out · Cache · Cost · Ngân sách · Biểu đồ: spline + đường so sánh kỳ trước · Thói quen: top task tốn token

Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Dashboard
◀
08/03 – 08/09
▶
Theo tuần ▾
Chi phí ▾
USD ▾
⟳
$0.31Tổng chi phí · 57 lượt
395.4KTổng token
292.8KInput
102.7KOutput
108.9KCache
Tốn nhiều nhất: Dựng slide trình bày — 105.4K (26%)
✨
Kiểm kê control — 10 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
Kỳ trướcnútself._chart_prevui\dashboard_tab.py:59giữ nguyên tại chỗ
Kỳ saunútself._chart_nextui\dashboard_tab.py:67giữ nguyên tại chỗ
—droplistself._on_gran_changedui\dashboard_tab.py:71giữ nguyên tại chỗ
—droplistself._refresh_chartui\dashboard_tab.py:75giữ nguyên tại chỗ
Tiền tệ hiển thị (tỉ giá USD→VND/JPY cố định, sửa được trongdroplistself._on_currency_changedui\dashboard_tab.py:84giữ nguyên tại chỗ
nútself.refreshui\dashboard_tab.py:91→ lên sidebar cùng RECENTS
AI phân tíchnútself._ai_analyzeui\dashboard_tab.py:145giữ nguyên tại chỗ
Áp dụng chiến lược tiết kiệmnútself._apply_saving_strategyui\dashboard_tab.py:150giữ nguyên tại chỗ
f'{arrow} {self._title} ({self._count}nútself._toggle; self._toggleui\widgets.py:254giữ nguyên tại chỗ
—danh sáchself._emitui\widgets.py:261giữ nguyên tại chỗ
Vấn đề
  • Tám control trên một hàng header.
  • Trùng Monitoring ▸ Tổng quan: cùng StatCard + BudgetCard.
  • Sáu thẻ số bằng nhau — không thấy đâu là chỉ số chính.
Thay đổi
  • Header tách 2 hàng: thời gian / bộ lọc.
  • Nâng Chi phí làm thẻ chính, 4 thẻ còn lại phụ.
2. Schedule Task — Kanbanui/schedule_task_tab.py:70

Kanban các tác vụ hẹn giờ. Bộ lập lịch chạy nền dù màn này đóng.

Hiện tại
Schedule Task — Kanban

Lane: một cột mỗi trạng thái · Thẻ: kéo đổi lane · double-click sửa · chuột phải: Chạy ngay / Lịch sử

Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Kanban
Lịch
+ Task
✨ AI tạo
BACKLOG (2)
[AI] Xuất DS khách hàng B2BChưa đặt lịch
Rà soát bảo mật trước releasehigh
ĐÃ LÊN LỊCH (2)
Quét lại chỉ mục ISO08-11 14:32
Báo cáo doanh thu 08:0008-09 14:32
ĐANG CHẠY (1) ⚠
Đồng bộ heartbeat trạm sạc08-08 · high
CHỜ DUYỆT (1)
Chờ kế toán duyệt số liệu T7Chưa đặt lịch
XONG (2)
Sao lưu CSDL hằng đêm08-07 · critical
[AI] Slide tổng kết Q3Thành công
LỖI (1)
Kiểm tra chứng chỉ TLScritical · Lỗi
TẠM DỪNG (1)
Dọn log cũ hơn 90 ngàylow
Đủ 7 lane theo core.tasks.STATUSES — không gộp, không giấu lane nào. Lane hẹp lại để vừa một màn, hết cuộn ngang.
✨
Kiểm kê control — 23 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
Thêm Tasknútself._add_taskui\schedule_task_tab.py:88giữ nguyên tại chỗ
AI tạo Tasknútself._ai_createui\schedule_task_tab.py:92giữ nguyên tại chỗ
—droplistself._on_view_changedui\schedule_task_tab.py:95→ đổi thành cặp tab Kanban | Lịch
len(runsbảngself._open_artifactui\schedule_task_tab.py:436giữ nguyên tại chỗ
QDialogButtonBox.Closenút hộp thoại—ui\schedule_task_tab.py:461giữ nguyên tại chỗ
Project/workspace mà agent của task này sẽ chạy trong đó — ádroplist—ui\schedule_task_tab.py:523giữ nguyên tại chỗ
vd: Mỗi thứ 2 lúc 9h, dùng Code đọc dữ liệu CAE mới tạo báo ô nhập nhiều dòng—ui\schedule_task_tab.py:537giữ nguyên tại chỗ
Đường dẫn tệp local, cách nhau bằng ;ô nhập—ui\schedule_task_tab.py:544giữ nguyên tại chỗ
Chọn tệp…nútself._ai_pick_filesui\schedule_task_tab.py:546giữ nguyên tại chỗ
https://… các link, cách nhau bằng ;ô nhập—ui\schedule_task_tab.py:553giữ nguyên tại chỗ
Tạo kế hoạchnútself._generateui\schedule_task_tab.py:557giữ nguyên tại chỗ
Tạo template Excel…nútself._export_templateui\schedule_task_tab.py:571giữ nguyên tại chỗ
Chọn file…nútself._pick_import_fileui\schedule_task_tab.py:576giữ nguyên tại chỗ
QDialogButtonBox.Ok | QDialogButtonBox.Cancelnút hộp thoại—ui\schedule_task_tab.py:592giữ nguyên tại chỗ
Chạy ngaymenu chuột phải—ui\schedule_task_tab.py:309giữ nguyên tại chỗ
Sửa taskmenu chuột phải—ui\schedule_task_tab.py:310giữ nguyên tại chỗ
Nhân bản taskmenu chuột phải—ui\schedule_task_tab.py:311giữ nguyên tại chỗ
schedtask.menu_resume' if paused else 'schedtask.menu_pausemenu chuột phải—ui\schedule_task_tab.py:313giữ nguyên tại chỗ
Xem logmenu chuột phải—ui\schedule_task_tab.py:314giữ nguyên tại chỗ
Lịch sử chạy…menu chuột phải—ui\schedule_task_tab.py:315giữ nguyên tại chỗ
Tạo task tiếp theo từ outputmenu chuột phải—ui\schedule_task_tab.py:316giữ nguyên tại chỗ
Xóa taskmenu chuột phải—ui\schedule_task_tab.py:318giữ nguyên tại chỗ
schedtask.menu_delete_selected', n=len(selectedmenu chuột phải—ui\schedule_task_tab.py:348giữ nguyên tại chỗ
Vấn đề
  • 7 lane bị cắt ở mép phải — lane Paused mất một nửa.
  • Kéo-thả có tác dụng thật: thả vào Running là chạy task ngay (schedule_task_tab.py:265), không cảnh báo.
  • Kanban/Calendar là combo, không phải tab.
Thay đổi
  • Giữ đủ 7 lane, thu hẹp cho vừa một màn. Không gộp lane nào.
  • Combo → cặp tab Kanban | Lịch.
  • Lane Running có viền cảnh báo.
3. Schedule Task — Calendarui/calendar_view.py:88

Cùng dữ liệu Kanban, xếp theo ngày.

Hiện tại
Schedule Task — Calendar

Ô ngày: nút + tạo task lúc 09:00 ngày đó

Đề xuất — bố cục mới

Giữ nguyên bố cục bên trong; chỉ đổi thanh menu sang danh sách phẳng.

Kiểm kê control — 7 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
+nútlambda: self.add_requested.emit(self._date_str)ui\calendar_view.py:43giữ nguyên tại chỗ
—danh sáchself._on_item_clickedui\calendar_view.py:49giữ nguyên tại chỗ
Trướcnútlambda: self._shift(-1)ui\calendar_view.py:100giữ nguyên tại chỗ
Hôm naynútself._go_todayui\calendar_view.py:103giữ nguyên tại chỗ
Saunútlambda: self._shift(1)ui\calendar_view.py:105giữ nguyên tại chỗ
—droplistself._on_granularity_changedui\calendar_view.py:110giữ nguyên tại chỗ
—danh sáchlambda item: self.show_month(self.anchor.year, item.data(Qt.UserRole))ui\calendar_view.py:213giữ nguyên tại chỗ
Vấn đề
  • Bố cục hiện tại giữ nguyên; chưa phát hiện vấn đề sắp xếp nghiêm trọng.
Thay đổi
  • Chỉ áp thanh menu phẳng mới; nội dung bên trong giữ nguyên.
4. Workspace ▸ Projectui/workspace_tab.py:188

Khai báo project — đơn vị gom nhóm của app. Mỗi project có sandbox riêng và Instructions chèn vào mọi chat. Đây là bộ chọn project duy nhất.

Hiện tại
Workspace ▸ Project

Trái: danh sách project — chỉ hiện ở tab này · Phải: Tên · Mô tả · Instructions · thư mục

Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Quản lý project
+ Project mới
PROJECT‹
Trạm sạc EV — Cổng vận hành6 đoạn chat · 4 task
Báo cáo tài chính Q32 đoạn chat · 3 task
Cổng tra cứu tài liệu ISO1 đoạn chat · 1 task
Tên
Báo cáo tài chính Q3
Mô tả
Tự động gom số liệu từ Excel phòng ban, dựng bảng tổng hợp và slide.
Instructions
Đơn vị tiền tệ mặc định VND. Làm tròn tới nghìn đồng.
Mọi con số phải truy được về file nguồn.
Thư mục làm việc
…\workspaces\bao-cao-tai-chinh-q3
Đổi
Mở
Lưu project
✨
Kiểm kê control — 11 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
Thu gọn danh sách projectnútlambda: self._set_projects_collapsed(True)ui\workspace_tab.py:90giữ nguyên tại chỗ
—danh sáchself._on_selectui\workspace_tab.py:97→ giữ ở màn Quản lý project + thêm thanh chọn đầu trang
Project mớinútself._createui\workspace_tab.py:101giữ nguyên tại chỗ
Xóanútself._deleteui\workspace_tab.py:105giữ nguyên tại chỗ
—dải tabself._on_tab_changedui\workspace_tab.py:129giữ nguyên tại chỗ
project.nameô nhập—ui\workspace_tab.py:193giữ nguyên tại chỗ
project.descriptionô nhập—ui\workspace_tab.py:194giữ nguyên tại chỗ
vd: "Trả lời bằng tiếng Việt. Team đang xây tool báo cáo X; ô nhập nhiều dòng—ui\workspace_tab.py:203giữ nguyên tại chỗ
Đổi thư mục…nútself._pick_folderui\workspace_tab.py:211giữ nguyên tại chỗ
Mở thư mụcnútself._open_workspaceui\workspace_tab.py:214giữ nguyên tại chỗ
Lưu projectnútself._saveui\workspace_tab.py:223giữ nguyên tại chỗ
Vấn đề
  • Pane trái đổi danh tính theo tab (workspace_tab.py:310-338): Project → danh sách project, Cowork → History, còn lại → trống.
  • History chỉ tới được từ tab Cowork.
  • Bộ chọn project chỉ có ở tab Project.
  • 2/3 chiều cao dưới là khoảng trống chết.
  • Header “Workspace — Projects” hiện ở mọi sub-tab.
Thay đổi
  • History lên sidebar thành RECENTS, luôn thấy.
  • Thanh chọn project ở đầu trang, dùng chung mọi màn.
  • Pane trái cố định, không đổi danh tính.
  • Header đổi theo màn.
5. Workspace ▸ Coworkui/cowork_tab.py:21

Chat với agent. Agent đọc/ghi tệp trong sandbox, chạy lệnh, gọi MCP.

Hiện tại
Workspace ▸ Cowork

Lịch sử: chat gom theo project; nhãn đậm = tên project, chỉ là nhãn · Hội thoại: bong bóng theo trục thời gian · Files: tệp đầu ra, gập được · Composer: Enter gửi · /skill · /agent · Hàng dưới: thư mục sandbox (chỗ thứ 2 lộ project) · model · Định tuyến · Tự chạy

Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Gom số liệu doanh thu
qwen2.5-coder
Skills
Cuộc trò chuyện mới
Có 6 file Excel trong thư mục input, gom lại thành 1 bảng tổng hợp giúp mình.
Đã đọc cả 6 file. Lưu ý: PB_Marketing.xlsx để cột “Doanh thu” ở cột F thay vì D và có 3 dòng trống ở cuối.

Mình đã chuẩn hoá và xuất tonghop_q3.xlsx — 1.284 dòng, tổng 42.7 tỷ VND.
TỆP ĐẦU RA (3)›
tonghop_q3.xlsx
BaoCao_Q3.pptx
README.md
Nhập yêu cầu… (Enter để gửi)
📎
Gửi
Agent: qwen2.5-coder · Định tuyến: Tắt  ·  ↓292.8K ↑102.7K · $0.31  ·  📁 bao-cao-tai-chinh-q3
✨
Kiểm kê control — 26 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
Skillsnútself._open_skills_managerui\cowork_tab.py:30giữ nguyên tại chỗ
Cuộc trò chuyện mớinútself.new_sessionui\cowork_tab.py:34giữ nguyên tại chỗ
Thư mục Local…nútself._pick_output_folderui\cowork_tab.py:48giữ nguyên tại chỗ
Model/agent riêng cho tab này — độc lập với tab kiadroplistself._on_agent_changedui\chat_panel.py:165giữ nguyên tại chỗ
Nénnútself._compress_messagesui\chat_panel.py:177giữ nguyên tại chỗ
Thu gọn bảng Filesnútlambda: self._set_io_collapsed(True)ui\chat_panel.py:239giữ nguyên tại chỗ
app_icon('linkmenu chuột phải—ui\chat_panel.py:439giữ nguyên tại chỗ
app_icon('editmenu chuột phải—ui\chat_panel.py:440giữ nguyên tại chỗ
Nhấp đúp để xoá một tin nhắn khỏi hàng đợidanh sáchself._remove_queue_itemui\composer.py:406giữ nguyên tại chỗ
Bấm trên thẻ để gỡ tệp đính kèm nhầmdanh sáchself._remove_attachmentui\composer.py:420giữ nguyên tại chỗ
nútself._pick_attachmentsui\composer.py:443giữ nguyên tại chỗ
composer.queue_btn') if self._busy else 'composer.sendnútself._on_submitui\composer.py:446giữ nguyên tại chỗ
Dừngnútself.stop_requested.emitui\composer.py:450giữ nguyên tại chỗ
Gỡ tệp này (đính kèm nhầmnútlambda _=False, path=p: self._remove_attachment_path(path)ui\composer.py:599giữ nguyên tại chỗ
Thu gọn bảng Lịch sửnútself.collapse_requested.emitui\sidebar.py:104giữ nguyên tại chỗ
Tìm theo tiêu đề hoặc nội dung…ô nhậpself.refresh; self.refreshui\sidebar.py:119giữ nguyên tại chỗ
nútself.refreshui\sidebar.py:123→ lên sidebar cùng RECENTS
—câyself._on_item; self._context_menuui\sidebar.py:132giữ nguyên tại chỗ
Làm mớinútself.refresh_requested.emitui\sidebar.py:147giữ nguyên tại chỗ
sidebar.menu.unpin') if pinned else 'sidebar.menu.pinmenu chuột phải—ui\sidebar.py:305giữ nguyên tại chỗ
Đổi tên…menu chuột phải—ui\sidebar.py:306giữ nguyên tại chỗ
Xóamenu chuột phải—ui\sidebar.py:307giữ nguyên tại chỗ
sidebar.menu.delete_selected', n=len(selectedmenu chuột phải—ui\sidebar.py:332giữ nguyên tại chỗ
titlenútself._toggle_bodyui\chat_view.py:228giữ nguyên tại chỗ
Tự động định tuyến model cho khung chat này. Tắt: luôn dùng droplistself._on_changedui\routing_toggle.py:66giữ nguyên tại chỗ
Tự chạyô tickself._on_toggledui\routing_toggle.py:133giữ nguyên tại chỗ
Vấn đề
  • Hàng dưới composer nhồi 5 control + usage/cost + nút thư mục (chat_panel.py:142-181).
  • Không có lối tắt “chat mới” — phải chọn project → mở nav → Cowork.
  • Màn duy nhất thấy được History.
  • Ba pane bóp vùng đọc hội thoại còn chưa tới 60% bề ngang.
  • Biết project nào, nhưng không đổi được. Project hiện ở 2 chỗ (nhãn nhóm Lịch sử, nhãn thư mục đáy) — cả hai chỉ là nhãn. Đổi phải quay về tab Project (workspace_tab.py:323).
Thay đổi
  • Bộ chọn project lên sidebar — nó là trạng thái toàn cục (ctx.active_project_id), không phải của riêng màn nào.
  • Bộ chọn project + nút “+ Đoạn chat mới” đặt cạnh nhau ở đầu sidebar: chọn project rồi bấm, không rời màn. Nút cũ trên toolbar giữ nguyên.
  • History lên sidebar, vẫn gom theo project + mục “Tất cả project…”.
  • Usage/cost xuống thanh trạng thái; vùng gõ chỉ còn nhập · đính kèm · gửi.
6. Workspace ▸ Co4Eui/co4e_tab.py:228

Xưởng dựng workflow node-graph. Lưu toàn cục, không theo project.

Hiện tại
Workspace ▸ Co4E

Sidebar: 3 tab icon: Workflows · Agents · Skills — kéo thả được · Dải tab: Flow Status ghim + mỗi workflow một tab · Canvas: node và cạnh · Phải: cấu hình bước đang chọn

Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Quy trình phát triển tính năng
+ Bước
Auto ▾
▷ Chạy
WORKFLOWS+ Mới‹
Quy trình phát triển tính năng5 bước · đã lưu
Rà soát bảo mật định kỳ2 bước · đã lưu
Dựng báo cáo từ Excel3 bước · đã lưu
AGENTS (5)+ Mới
Phân tích yêu cầuANALYST
Thiết kế giải phápARCHITECT
Lập trình viênCODER
Kiểm thửTESTER
Soạn tài liệuWRITER
SKILLS (5)Quản lý…
Rà soát bảo mật · Viết test trước · Chuẩn hoá Excel · …
LẦN CHẠY (6)
✓ Quy trình phát triển5/5 · 08-08 15:32
✕ Rà soát bảo mật3/5 · 08-06 16:32
■ Dựng báo cáo từ Excel1/5 · 08-04 18:32
✎
⧉
🗑
▷ Chạy nền
Phân tích yêu cầu
→
Thiết kế
→
Lập trình viên
→
Kiểm thử
CẤU HÌNH BƯỚC›
▾ Cơ bảnLập trình viên · CODER
Hiện thực theo thiết kế. Viết test trước khi sửa logic nghiệp vụ.
▸ Model & quyềnqwen2.5-coder · full
▸ Skills & tệpViết test trước
▸ Agent song songchưa có
✨
Kiểm kê control — 52 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
—danh sáchlambda _i: self._accept()ui\co4e_tab.py:144giữ nguyên tại chỗ
×nútlambda: self._close_flow_tab_button(btn)ui\co4e_tab.py:341giữ nguyên tại chỗ
Chạynútself._run_selected_in_backgroundui\co4e_tab.py:459giữ nguyên tại chỗ
Mớinútself._new_agentui\co4e_tab.py:476→ nút “+ Mới” cạnh tiêu đề AGENTS
Quản lý skill…nútself._manage_skillsui\co4e_tab.py:493→ nút “Quản lý…” cạnh tiêu đề SKILLS
tip_keynútslotui\co4e_tab.py:502giữ nguyên tại chỗ
—dải tabself._on_flow_tab_changed; self._close_flow_tabui\co4e_tab.py:556→ bỏ; chọn workflow từ danh sách trái
+nútself._new_workflowui\co4e_tab.py:582→ nút “+ Mới” cạnh tiêu đề WORKFLOWS (chỗ cũ là dải tab, đã bỏ nên phải có chỗ mới)
self._wf.nameô nhậpself._on_name_changedui\co4e_tab.py:631giữ nguyên tại chỗ
Thêmnútself._add_blank_stepui\co4e_tab.py:636giữ nguyên tại chỗ
Lưunútlambda: self._save(as_template=False)ui\co4e_tab.py:639giữ nguyên tại chỗ
Auto = mỗi bước tự lập kế hoạch rồi chạy · Plan = chỉ lập kếdroplistself._on_mode_changedui\co4e_tab.py:645giữ nguyên tại chỗ
Chạynútself._on_run_clickedui\co4e_tab.py:650giữ nguyên tại chỗ
shortnútself._open_workspace_folderui\co4e_tab.py:693giữ nguyên tại chỗ
Dừngnútself._stop_selected_runui\co4e_tab.py:701giữ nguyên tại chỗ
Đổi tênnútself._rename_selected_runui\co4e_tab.py:706giữ nguyên tại chỗ
Xóanútself._delete_selected_runui\co4e_tab.py:710giữ nguyên tại chỗ
Xóa đã xongnútlambda: self.manager.clear_finished()ui\co4e_tab.py:714giữ nguyên tại chỗ
0bảngself._open_run_from_table; self._runs_context_menuui\co4e_tab.py:722giữ nguyên tại chỗ
Thu gọn bảng cấu hìnhnútself._toggle_configui\co4e_tab.py:747giữ nguyên tại chỗ
Mở rộng khung tin nhắnnútself._toggle_messagesui\co4e_tab.py:841giữ nguyên tại chỗ
Gửinútself._chat_sendui\co4e_tab.py:873giữ nguyên tại chỗ
icon('editmenu chuột phải—ui\co4e_tab.py:1014giữ nguyên tại chỗ
icon('editmenu chuột phải—ui\co4e_tab.py:1015giữ nguyên tại chỗ
icon('branchmenu chuột phải—ui\co4e_tab.py:1016giữ nguyên tại chỗ
icon('playmenu chuột phải—ui\co4e_tab.py:1017giữ nguyên tại chỗ
icon('trashmenu chuột phải—ui\co4e_tab.py:1018giữ nguyên tại chỗ
Mở flowmenu chuột phải—ui\co4e_tab.py:1400giữ nguyên tại chỗ
Mở thư mục outputmenu chuột phải—ui\co4e_tab.py:1404giữ nguyên tại chỗ
Đổi tênmenu chuột phải—ui\co4e_tab.py:1405giữ nguyên tại chỗ
Xóamenu chuột phải—ui\co4e_tab.py:1406giữ nguyên tại chỗ
step.labelô nhậpself._on_editui\co4e_config_panel.py:44giữ nguyên tại chỗ
step.roleô nhậpself._on_editui\co4e_config_panel.py:48giữ nguyên tại chỗ
—ô nhập nhiều dòngself._on_editui\co4e_config_panel.py:60giữ nguyên tại chỗ
Soạn bằng AInútself._ai_draftui\co4e_config_panel.py:63giữ nguyên tại chỗ
Thông tin/ngữ cảnh bổ sung cho agent hoặc step này (thêm vàoô nhập nhiều dòngself._on_editui\co4e_config_panel.py:77giữ nguyên tại chỗ
Tải danh sách modelnútself._load_modelsui\co4e_config_panel.py:87giữ nguyên tại chỗ
—droplistself._on_editui\co4e_config_panel.py:97giữ nguyên tại chỗ
Tự kiểm traô tickself._on_editui\co4e_config_panel.py:104giữ nguyên tại chỗ
—ô sốself._on_editui\co4e_config_panel.py:106giữ nguyên tại chỗ
Đính kèm tệpnútself._add_attachmentui\co4e_config_panel.py:125giữ nguyên tại chỗ
Bỏnútself._del_attachmentui\co4e_config_panel.py:128giữ nguyên tại chỗ
—danh sáchself._edit_subagentui\co4e_config_panel.py:141giữ nguyên tại chỗ
Thêmnútself._add_subagentui\co4e_config_panel.py:144giữ nguyên tại chỗ
Bỏnútself._del_subagentui\co4e_config_panel.py:147giữ nguyên tại chỗ
Chạynútlambda: self.run_node.emit(self._node_id)ui\co4e_config_panel.py:159giữ nguyên tại chỗ
Chạy từ đâynútlambda: self.run_from.emit(self._node_id)ui\co4e_config_panel.py:163giữ nguyên tại chỗ
Xóa bướcnútlambda: self.delete_node.emit(self._node_id)ui\co4e_config_panel.py:166giữ nguyên tại chỗ
+ Add next stepmenu chuột phải—ui\co4e_canvas.py:188giữ nguyên tại chỗ
→ Connect from heremenu chuột phải—ui\co4e_canvas.py:189giữ nguyên tại chỗ
🗑 Delete stepmenu chuột phải—ui\co4e_canvas.py:190giữ nguyên tại chỗ
🗑 Delete connectionmenu chuột phải—ui\co4e_canvas.py:368giữ nguyên tại chỗ
Vấn đề
  • Bốn lớp điều hướng chồng nhau: nav → tab icon sidebar → dải tab flow → panel phải.
  • Dải tab flow lặp lại danh sách Workflows ngay bên trái.
  • Panel cấu hình 11 trường dọc, phải cuộn.
Thay đổi
  • Bỏ dải tab flow; chọn workflow từ danh sách trái.
  • 3 tab icon → 3 mục có nhãn cùng danh sách.
  • Còn 2 lớp: chọn trái → sửa phải.
7. Workspace ▸ Folderui/folder_tab.py:238

Duyệt tệp + nhờ AI sửa. AI không ghi đè — đề xuất diff, bấm Apply mới ghi.

Hiện tại
Workspace ▸ Folder

Cây trái: hệ thống tệp thật · Viewer: code / HTML / PDF / ảnh / bảng tính · Panel AI: yêu cầu → plan → diff → Apply · Terminal: shell thật, không qua sandbox

Đề xuất — bố cục mới
📁 Trạm sạc EV — Cổng vận hành▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Trạm sạc EV — Cổng vận hành
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Thư mục
…\workspaces\tram-sac-ev
Sửa
✨ AI
Lưu
📁 src
 📄 main.py
 📁 billing
  📄 session.py
📁 tests
 📄 test_stations.py
📄 README.md
# billing/session.py
def close_session(sid):
  s = repo.get(sid)
  s.ended_at = None # ← lỗi tính tiền
  return bill(s)
✨ AI SỬA TỆP›
Sửa lỗi tính dư tiền khi phiên bị ngắt đột ngột.
Lấy mốc heartbeat cuối làm ended_at.
- s.ended_at = None
+ s.ended_at = last_heartbeat(sid)
Bỏ
Áp dụng
▸ Terminal — bật khi cần
✨
Kiểm kê control — 15 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
self._rootô nhập—ui\folder_tab.py:265giữ nguyên tại chỗ
Mở thư mụcnútself._pick_rootui\folder_tab.py:267giữ nguyên tại chỗ
folder.edit') if not self.mode_btn.isChecked() else 'folder.nútself._toggle_edit_modeui\folder_tab.py:299giữ nguyên tại chỗ
AI Editnútself._toggle_ai_panelui\folder_tab.py:304giữ nguyên tại chỗ
Lưunútself._saveui\folder_tab.py:309giữ nguyên tại chỗ
Mở bằng app ngoàinútself._open_externalui\folder_tab.py:315giữ nguyên tại chỗ
len(rowsbảng—ui\folder_tab.py:534giữ nguyên tại chỗ
Mô tả chỉnh sửa… (vd: thêm xử lý lỗiô nhậpself._ai_sendui\folder_tab.py:736giữ nguyên tại chỗ
Gửinútself._ai_sendui\folder_tab.py:740giữ nguyên tại chỗ
Hủynútself._ai_discardui\folder_tab.py:752giữ nguyên tại chỗ
Áp dụngnútself._ai_applyui\folder_tab.py:755giữ nguyên tại chỗ
terminal.expand_tooltip') if self._collapsed else 'terminal.nútself.toggleui\terminal_panel.py:85giữ nguyên tại chỗ
—ô nhập nhiều dòng—ui\terminal_panel.py:105giữ nguyên tại chỗ
Chạynútself._run_currentui\terminal_panel.py:130giữ nguyên tại chỗ
Mở bằng LibreOfficenútself._open_externalui\libreoffice_view.py:97giữ nguyên tại chỗ
Vấn đề
  • Năm vùng cùng lúc: path · cây · viewer · panel AI · terminal.
  • Hàng nút viewer trộn 5 chức năng khác loại.
Thay đổi
  • Path bar gộp vào tiêu đề.
  • Panel AI thành lớp phủ phải; terminal xuống đáy dạng thanh mỏng.
8. Workspace ▸ GraphRAGui/structure_graph_view.py:188

Đồ thị tri thức về cấu trúc mã/tài liệu + agent hỏi đáp trên đó.

Hiện tại
Workspace ▸ GraphRAG

Đồ thị: node theo loại, cạnh có nhãn quan hệ · Phải: hỏi đáp dựa trên đồ thị

Đề xuất — bố cục mới
📁 Cổng tra cứu tài liệu ISO▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Cổng tra cứu tài liệu ISO
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
GraphRAG
…\workspaces\cong-tra-cuu-iso
Quét
Xuất PNG
Đồ thị
Tin nhắn
1.902 node · 3.418 cạnh
ISO 9001
→
Điều 7.5
→
Hồ sơ
HỎI ĐÁP TRÊN ĐỒ THỊ›
Điều khoản nào nói về kiểm soát hồ sơ?
Điều 7.5.3 — Kiểm soát thông tin dạng văn bản. Có 12 tài liệu trùng số hiệu, xem trung_lap.md.
Đặt câu hỏi…
Hỏi
✨
Kiểm kê control — 10 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
sctx.config.cowork_output_dir(ô nhập—ui\structure_graph_view.py:220giữ nguyên tại chỗ
Browse…nútself._pickui\structure_graph_view.py:222giữ nguyên tại chỗ
Khóa phạm vi quét vào đúng thư mục sandbox của 1 project — pdroplistself._on_project_changedui\structure_graph_view.py:226giữ nguyên tại chỗ
Scannútself._scanui\structure_graph_view.py:228giữ nguyên tại chỗ
Xem mọi message hội thoại nhóm theo ngày (dạng JSON).nútself._toggle_messagesui\structure_graph_view.py:242giữ nguyên tại chỗ
Xuất PNGnútself._exportui\structure_graph_view.py:248giữ nguyên tại chỗ
—câyself._show_msg_jsonui\structure_graph_view.py:268giữ nguyên tại chỗ
Thu gọn bảng Agentnútlambda: self._set_agent_collapsed(True)ui\structure_graph_view.py:288giữ nguyên tại chỗ
vd. cái gì gọi hàm main? file nào định nghĩa class?ô nhậpself._askui\structure_graph_view.py:299giữ nguyên tại chỗ
Hỏinútself._askui\structure_graph_view.py:301giữ nguyên tại chỗ
Vấn đề
  • Hai hàng toolbar riêng biệt — nên là một.
  • Nút Messages/Graph đổi hẳn nội dung pane nhưng trông như nút thường.
Thay đổi
  • Gộp hai hàng toolbar thành một.
  • Messages/Graph thành cặp tab rõ ràng phía trên pane trái.
9. Monitoring ▸ Tổng quanui/monitoring_tab.py:132

Chi phí, tài nguyên máy, sandbox, nhật ký gần đây.

Hiện tại
Monitoring ▸ Tổng quan

Trái: Token & chi phí · Hoạt động · Tài nguyên · Bảng giá model · Phải: Sandbox · Quyền · Audit log

Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
Cài đặt
👤 localVN ▾🌙
Monitoring
Tổng quan
Bảo mật
MCP
Hành động
Agent
Agents Admin
Công cụ
Icon
TOKEN & CHI PHÍ
395.4KTổng token
$0.31Chi phí
57Lượt gọi
—Ngân sách
TÀI NGUYÊN
CPU 34% · RAM 2.1/8 GB · Đĩa 41 GB trống
SANDBOX & QUYỀN
Tệp: chỉ trong workspace · Mạng: chặn · Tiến trình: giới hạn 4
BẢNG GIÁ MODELNhập · Xuất · Thêm · Tự dòUSD ▾
ModelVàoRaCacheĐơn vị
qwen2.5-coder:7b0.000.000.00/Mtok
gpt-4o-mini0.150.600.08/Mtok
NHẬT KÝ GẦN ĐÂYXem tất cả
✕ Chặn đọc personal.xlsx (ngoài sandbox)
✓ pytest tests/test_stations.py → 4 passed
✕ jira.create_issue — 401 token hết hạn
✨
Kiểm kê control — 14 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
Làm mớinútself.refreshui\monitoring_tab.py:149→ lên sidebar cùng RECENTS
0bảng—ui\monitoring_tab.py:175giữ nguyên tại chỗ
Lọc dòng (hoặc gõ câu hỏi rồi bấm )…ô nhậptable.apply_filterui\monitoring_tab.py:347giữ nguyên tại chỗ
AInútlambda: self._ai_filter(search, ai_btn)ui\monitoring_tab.py:350giữ nguyên tại chỗ
—droplistself._reload_pricing_tableui\monitoring_tab.py:486giữ nguyên tại chỗ
Nhậpnútself._import_pricingui\monitoring_tab.py:496giữ nguyên tại chỗ
Mẫunútself._export_pricingui\monitoring_tab.py:498giữ nguyên tại chỗ
Thêmnútself._add_pricing_rowui\monitoring_tab.py:500giữ nguyên tại chỗ
Tự lấynútself._autolink_pricingui\monitoring_tab.py:502giữ nguyên tại chỗ
Xóanútself._delete_pricing_rowui\monitoring_tab.py:504giữ nguyên tại chỗ
0bảng—ui\monitoring_tab.py:510giữ nguyên tại chỗ
Sửanútself._open_settings_and_refreshui\monitoring_tab.py:547giữ nguyên tại chỗ
Sửanútself._open_settings_and_refreshui\monitoring_tab.py:573giữ nguyên tại chỗ
Xem tất cảnútlambda: self.tabs.setCurrentIndex(self.tabs.indexOf(self.action_page))ui\monitoring_tab.py:586giữ nguyên tại chỗ
Vấn đề
  • Sáu group box, hai cột — màn dày đặc nhất app.
  • Trộn 3 mối quan tâm: chi phí · tài nguyên · bảo mật.
  • Bảng giá model nhét chung hàng với thanh CPU/RAM.
Thay đổi
  • Tách thành các mục có tiêu đề, cuộn dọc một cột chính.
  • Bảng giá model tách ra thành mục riêng.
10. Monitoring ▸ Sự kiện bảo mậtui/monitoring_tab.py:132

Nhật ký lần agent chạm thứ nhạy cảm: lệnh bị chặn, truy cập ngoài sandbox.

Hiện tại
Monitoring ▸ Sự kiện bảo mật

Trên: 4 thẻ KPI · Giữa: ô tìm + nút ✨AI, lọc Agent/Hành động/Thời gian · Dưới: bảng cột Hành động dạng badge màu (thay cho ✕/✓ luôn giống nhau) + phân trang, nhấp dòng mở panel chi tiết bên phải.

Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
👤 local · Ollama ▾
Monitoring
Tổng quan
Bảo mật
MCP
Hành động
Agent
Agents Admin
Công cụ
Icon
Sự kiện bảo mật
⭳ Xuất CSV
⟳ Làm mới
▦
1.247Tổng sự kiện · +12.3%
◔
84Hôm nay · -8.1%
⛔
23Chặn lệnh · +3 mới
🛡
156Chặn prompt · 12.5%
✨ AI
✕ Xoá lọc
☐Thời gianAgentTài khoảnMáyHành độngChi tiết chặn
Hiển thị 24 / 24 sự kiện
‹
1
›
✨
Vấn đề
  • Dải tab Monitoring bị ẩn sau accordion — không thấy 7 màn Giám sát còn lại từ đây.
  • Cột "Kết quả" (✓/✕) trong bảng thật luôn hiện ✕ vì audit_log.record("security_block",…) luôn truyền ok=False — dư thừa, không phân biệt được gì.
  • KPI · lọc Agent/Hành động/Thời gian · phân trang · panel chi tiết đều là tính năng mới: bản thật hiện chỉ có 1 ô tìm + nút ✨AI + bảng cuộn (xem ui/monitoring_tab.py:_wrap_with_filter).
Thay đổi
  • Bỏ ẩn dải tab Monitoring (8 mục ngang hàng) — không đổi accordion nav rail.
  • Bỏ cột Kết quả luôn-giống-nhau; thay bằng cột Hành động dạng badge màu theo name thật (prompt/run_command/install_package).
  • Vượt phạm vi "chỉ sắp xếp lại": 4 thẻ KPI, 3 dropdown lọc, phân trang và panel chi tiết trượt — cần bổ sung logic đếm/lọc/phân trang ở ui/monitoring_tab.py trước khi hiện thực, và 2/4 loại "Hành động" (path ngoài sandbox, mạng chặn) chưa có nguồn ghi log thật.
11. Monitoring ▸ Lịch sử gọi MCPui/monitoring_tab.py:132

Mọi lần agent gọi MCP server ngoài.

Hiện tại
Monitoring ▸ Lịch sử gọi MCP

Trên: 4 thẻ KPI · Giữa: ô tìm + nút ✨AI, lọc Server/Kết quả/Thời gian · Dưới: bảng có badge Kết quả (✓/✕ phân biệt thật theo ok) + phân trang, nhấp dòng mở panel chi tiết bên phải. Bảng hiện tại (ảnh trên) không có ô lọc/tìm kiếm nào — khác biệt không chủ đích so với 2 màn log kia.

Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
👤 local · Ollama ▾
Monitoring
Tổng quan
Bảo mật
MCP
Hành động
Agent
Agents Admin
Công cụ
Icon
Lịch sử gọi MCP
⭳ Xuất CSV
⟳ Làm mới
▦
892Tổng cuộc gọi · +8.4%
✓
823Thành công · 92.3%
✕
69Thất bại · 7.7%
◔
7Hôm nay · cuộc gọi
✨ AI
✕ Xoá lọc
Thời gianAgentTài khoảnMáyToolKết quảChi tiết
Hiển thị 25 / 25 cuộc gọi
‹
1
›
✨
Vấn đề
  • Dải tab Monitoring bị ẩn sau accordion — không thấy 7 màn Giám sát còn lại từ đây.
  • Bảng Lịch sử gọi MCP thật hiện không có ô tìm/lọc nào — còn thiếu hơn cả Sự kiện bảo mật: ui/monitoring_tab.py:166-168 tạo thẳng self.mcp_table = _EventTable() rồi thêm vào tab, không bọc qua _wrap_with_filter như Sự kiện bảo mật/Nhật ký hành động — đúng như đã ghi ở ảnh Hiện tại.
  • KPI · lọc Server/Kết quả/Thời gian · phân trang · panel chi tiết đều là tính năng mới: bản thật chỉ có bảng 7 cột (Thời gian/Vai trò/Tài khoản/Máy/Tên/Kết quả/Chi tiết), không tìm không lọc không phân trang (xem ui/monitoring_tab.py:_EventTable).
  • 5 server trong bảng mẫu (M365/GitHub/Filesystem/Brave Search/PostgreSQL) chỉ là ví dụ minh hoạ lấy từ docstring core/mcp_client.py — server thật phụ thuộc Admin đã cấu hình connector nào ở Settings, không có sẵn mặc định.
Thay đổi
  • Bỏ ẩn dải tab Monitoring (8 mục ngang hàng) — không đổi accordion nav rail.
  • Thêm ô tìm kiếm + nút ✨AI cho bảng này để đồng bộ với 2 bảng log kia — hiện là bảng log duy nhất trong 3 bảng không có tìm kiếm.
  • Vượt phạm vi "chỉ sắp xếp lại": 4 thẻ KPI, 3 dropdown lọc (Server/Kết quả/Thời gian), phân trang và panel chi tiết trượt — cần bổ sung logic đếm/lọc/phân trang ở ui/monitoring_tab.py trước khi hiện thực; danh sách server chỉ minh hoạ, không phải cấu hình mặc định.
12. Monitoring ▸ Nhật ký hành độngui/monitoring_tab.py:132

Nhật ký cấp ứng dụng: ai đổi cấu hình, ai chạy task.

Hiện tại
Monitoring ▸ Nhật ký hành động
Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
👤 local · Ollama ▾
Monitoring
Tổng quan
Bảo mật
MCP
Hành động
Agent
Agents Admin
Công cụ
Icon
Nhật ký hành động
⭳ Xuất CSV
⟳ Làm mới
▤
25Tổng sự kiện · +6.2%
✓
19Thành công · 76%
✕
6Thất bại · 24%
🛡
4Chặn bảo mật
✨ AI
✕ Xóa lọc
Thời gianAgentLoạiMáyHành độngKết quảChi tiết
15/08 · 09:42CACowork AgentGọi MCPDESKTOP-DEMOms365__send_mail✓ Thành côngĐã gửi email đến nam.pdt@company.com — chủ đề "Báo cáo tuần Q3".
15/08 · 09:38CACowork AgentCông cụDESKTOP-DEMOread_file✓ Thành côngĐã đọc ./docs/installation.md (172 dòng).
15/08 · 09:31SASecurity AgentChặn bảo mậtDESKTOP-DEMOdangerous_command✕ Thất bạiChặn lệnh: rm -rf / --no-preserve-root
15/08 · 09:20CACowork AgentQuyềnDESKTOP-DEMOpath_outside_sandbox✕ Thất bạiChặn đọc C:\Users\NamPDT\Documents\personal.xlsx — ngoài sandbox.
15/08 · 08:55SASecurity AgentGọi MCPDESKTOP-DEMObrave__web_search✓ Thành côngTrả về 8 kết quả cho "CVE-2026-1234".
14/08 · 17:45SCscheduleCông cụDESKTOP-DEMOrun_command✓ Thành côngpython scripts/report.py — thoát mã 0.
Hiển thị 1-25 của 25 sự kiện
‹
1
›
✨
Vấn đề
  • Bảng thật (ui/monitoring_tab.py:_EventTable) gộp cả 4 loại sự kiện (tool_call/mcp_call/security_block/permission) vào tab này nhưng không có cột phân loại — phải tự suy ra loại hành động từ cột "Tên".
  • Bộ lọc thật (_wrap_with_filter) chỉ có 1 ô tìm + nút ✨AI; 3 dropdown Loại/Trạng thái/Thời gian, 4 thẻ KPI, phân trang và nút Xuất CSV trong 12.ui-redesign-action-logs.html đều là tính năng mới, chưa có trong code.
  • Bảng thật giới hạn ngầm _MAX_ROWS dòng mới nhất và không phân trang — không biết còn bao nhiêu sự kiện bị ẩn.
Thay đổi
  • Thêm cột Loại dạng pill màu (Công cụ/Gọi MCP/Chặn bảo mật/Quyền) trước cột Hành động, tái dùng đúng bảng màu .pill đã áp cho Sự kiện bảo mật (mục 10).
  • Vượt phạm vi "chỉ sắp xếp lại": 4 thẻ KPI, 3 dropdown lọc, phân trang và nút Xuất CSV cần bổ sung logic đếm/lọc/phân trang/export ở ui/monitoring_tab.py trước khi hiện thực — hiện bảng thật chỉ lọc bằng 1 ô tìm text.
13. Monitoring ▸ Trạng thái Agentui/monitoring_tab.py:132

Agent nào đang bật và nguồn định nghĩa.

Hiện tại
Monitoring ▸ Trạng thái Agent
Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
👤 local · Ollama ▾
Monitoring
Tổng quan
Bảo mật
MCP
Hành động
Agent
Agents Admin
Công cụ
Icon
Trạng thái Agent
⟳ Làm mới
AgentTrạng tháiNguồn
👤Cowork Agent● RảnhLượt đang chạy của tab Cowork
⏱Task Agent● RảnhTask đang chạy trong Schedule Task
◈Knowledge Agent● RảnhÔ hỏi của GraphRAG
▦Planner Agent—Một giai đoạn trong lượt Cowork/Task đang chạy (update_plan) — không theo dõi riêng
⬡Reasoning Agent—Luồng suy luận (reasoning) của model trong lượt đang chạy — không theo dõi riêng
🛡Security Agent● BậtKiểm duyệt prompt/đính kèm/lệnh của Agent Security — chạy inline trong lượt đang chạy
✨
Vấn đề
  • Bảng thật 3 cột (Agent · Đang chạy · Nguồn, ui/monitoring_tab.py:_refresh_agent_status) chỉ dùng chữ/icon đơn cho trạng thái — khó quét nhanh dòng nào đang chạy khi bảng dài.
Thay đổi
  • Giữ nguyên 3 cột Agent · Trạng thái · Nguồn (không chuyển sang lưới thẻ, không thêm cột mới) — chỉ thêm icon màu theo loại agent trước tên và badge màu cho Trạng thái (xanh khi đang chạy/bật, xám khi "—") thay cho chữ thuần.
14. Monitoring ▸ Agents Adminui/monitoring_tab.py:132

Quản trị agent hệ thống. Cũng là nơi chọn model cho robot trợ giúp.

Hiện tại
Monitoring ▸ Agents Admin

Nút Kiểm tra: probe provider thật

Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
👤 local · Ollama ▾
Monitoring
Tổng quan
Bảo mật
MCP
Hành động
Agent
Agents Admin
Công cụ
Icon
Agents Admin
⟳ Làm mới
+ Thêm
Agent quản lý hệ thống, dùng chung mọi máy (lưu trong thư mục dùng chung): agent trợ giúp và agent chạy Schedule Task. Đây KHÔNG phải agent để chọn trong Cowork hay Co4E.
TênVai tròModelKích hoạtTrạng tháiCập nhật
SASecurity AgentBảo mậtOllama — qwen2.5:7bOK11/08 09:30✎ 🗑
GAGraphRAG AgentTri thứcOllama — qwen2.5:14bOK10/08 14:22✎ 🗑
MAMonitor AgentGiám sátMặc định — qwen2.5:7bKiểm tra…09/08 11:05✎ 🗑
HAHelp AssistantHỗ trợMặc định — qwen2.5:7bChưa kiểm tra08/08 16:40✎ 🗑
✨
Kiểm kê control — 11 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
agent.name if agent else ô nhập—ui\agents_admin_tab.py:55giữ nguyên tại chỗ
agent.prompt if agent else ô nhập nhiều dòng—ui\agents_admin_tab.py:65giữ nguyên tại chỗ
—droplistself._refresh_model_comboui\agents_admin_tab.py:70→ menu tài khoản ở đáy sidebar
Lấy danh sách model thực tế của provider này để chọn từ dropnútself._load_live_modelsui\agents_admin_tab.py:89giữ nguyên tại chỗ
Kích hoạtô tick—ui\agents_admin_tab.py:98giữ nguyên tại chỗ
QDialogButtonBox.Save | QDialogButtonBox.Cancelnút hộp thoại—ui\agents_admin_tab.py:101giữ nguyên tại chỗ
0bảng—ui\agents_admin_tab.py:169giữ nguyên tại chỗ
Thêmnútself._addui\agents_admin_tab.py:178giữ nguyên tại chỗ
Sửanútself._editui\agents_admin_tab.py:182giữ nguyên tại chỗ
Xóanútself._deleteui\agents_admin_tab.py:185giữ nguyên tại chỗ
Kiểm tranútself._check_allui\agents_admin_tab.py:188giữ nguyên tại chỗ
Vấn đề
  • Cột Vai trò/Kích hoạt/Trạng thái chỉ là chữ hoặc icon đơn — khó phân biệt nhanh giữa các dòng khi bảng dài.
  • Bỏ [Kiểm tra tất cả] khỏi thanh công cụ chính làm mất lối vào hành động thật (_check_all trong ui/agents_admin_tab.py) — cần chỗ khác để gọi (icon riêng theo dòng, hoặc menu ⋯).
Thay đổi
  • Vai trò/Trạng thái chuyển sang badge màu + avatar viết tắt tên trước Tên agent; nút Sửa/Xoá dời vào từng dòng thay vì thanh công cụ rời bên dưới.
  • Thanh công cụ chính chỉ còn 2 nút: Làm mới (giống nút monitoring.refresh toàn màn hình) và + Thêm (giống nút agents_admin.add_btn thật) — Sửa/Xoá đã dời vào từng dòng nên không cần ở đây nữa.
15. Monitoring ▸ Công cụui/monitoring_tab.py:132

Bật/tắt công cụ dựng sẵn và khai báo kết nối ngoài. Màn duy nhất còn hiện dải tab bên trong.

Hiện tại
Monitoring ▸ Công cụ

Tool: công cụ dựng sẵn + tự kiểm tra Internet · Connector: MCP · REST · MS365 · Jira

Đề xuất — bố cục mới
Tab Tool
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
👤 local · Ollama ▾
Monitoring
Tổng quan
Bảo mật
MCP
Hành động
Agent
Agents Admin
Công cụ
Icon
Tool
Connector
📄
read_file
Đọc nội dung file text trong thư mục làm việc
📁
list_dir
Liệt kê file/thư mục con tại một đường dẫn
✎
write_file
Tạo file mới hoặc ghi đè toàn bộ file
✏
edit_file
Sửa một đoạn chính xác trong file có sẵn
▤
run_command
Chạy lệnh shell trong thư mục làm việc
⭳
install_package
Cài package Python (pip) vào môi trường app
⤓
fetch_url
Lấy nội dung trang web/tài liệu theo URL
🌐 Kiểm tra Internet
✓ Kết nối OK · 42ms
🔍
jira_search
Tìm issue Jira bằng JQL, trả về danh sách tóm tắt
🔗
jira_get_issue
Đọc chi tiết 1 issue Jira theo mã (vd ABX-123)
Tab Connector
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
👤 local · Ollama ▾
Monitoring
Tổng quan
Bảo mật
MCP
Hành động
Agent
Agents Admin
Công cụ
Icon
Tool
Connector
Kết nối tới connector bên ngoài
Một nơi duy nhất cho mọi nguồn tool ngoài — nhóm theo CAD (NX/CATIA/SolidWorks/AutoCAD), CAE (ANSA/ABAQUS/HyperWorks/ANSYS), MS365 (Microsoft 365/OneDrive/SharePoint) và Other (MCP server bất kỳ). MS365 tự kết nối qua server tích hợp sau khi đăng nhập; còn lại bạn trỏ mỗi connector tới MCP server bạn đã có hoặc REST API nó cung cấp (không kèm SDK hãng nào).
🔧CAD(NX / CATIA / SolidWorks / AutoCAD)
AutoCAD
MCP server (stdio)✎ Sửa  ·  🗑 Xóa
📐CAE(ANSA / ABAQUS / HyperWorks / ANSYS)
ANSA
MCP server (stdio)✎ Sửa  ·  🗑 Xóa
☁MS365(Microsoft 365 / OneDrive / SharePoint)
OneDrive
Tích hợp, tự kết nối
SharePoint
Tích hợp, tự kết nối
🔌Other(any generic MCP server)
Jira
Tích hợp, tự kết nối · chưa cấu hình✎ Sửa
+ Thêm connector…
✨
Kiểm kê control — 15 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
—ô tickon_toggleui\tools_admin_tab.py:32giữ nguyên tại chỗ
0bảng—ui\tools_admin_tab.py:57giữ nguyên tại chỗ
Kiểm tra Internetnútself._test_internetui\tools_admin_tab.py:72giữ nguyên tại chỗ
Làm mớinútself.refreshui\tools_admin_tab.py:80→ lên sidebar cùng RECENTS
Dán bất kỳ link Jira nào — tự điền Base URLô nhậpself._on_pasteui\connectors_panel.py:42giữ nguyên tại chỗ
jira.get('base_url', ô nhập—ui\connectors_panel.py:46giữ nguyên tại chỗ
jira.get('email', ô nhập—ui\connectors_panel.py:48giữ nguyên tại chỗ
jira.get('api_token', ô nhập—ui\connectors_panel.py:49giữ nguyên tại chỗ
Kiểm tra kết nốinútself._testui\connectors_panel.py:58giữ nguyên tại chỗ
Lưunútself._save_closeui\connectors_panel.py:60giữ nguyên tại chỗ
Kết nối tới connector bên ngoàiô tickself._on_connect_external_toggledui\connectors_panel.py:133giữ nguyên tại chỗ
—câylambda *_: self._ext_edit()ui\connectors_panel.py:144giữ nguyên tại chỗ
Thêm connector…nútself._ext_addui\connectors_panel.py:155giữ nguyên tại chỗ
Sửanútself._ext_editui\connectors_panel.py:159giữ nguyên tại chỗ
Xóanútself._ext_deleteui\connectors_panel.py:162giữ nguyên tại chỗ
Vấn đề
  • Màn duy nhất còn hiện dải tab — 7 màn Monitoring kia bị ẩn. Không nhất quán.
  • Tab Tool/Connector lọt thỏm trong một mục nav.
  • Cấu hình kết nối tách khỏi Settings → thiết lập ở 2 nơi.
  • Tab Tool liệt kê 9 tool thật (core/tools.py:TOOL_SPECS) dạng chữ phẳng (☑/☐) — không thấy ngay tool nào đang bật khi lướt nhanh.
  • Tab Connector là cây phân cấp 4 nhóm (CAD/CAE/MS365/Other, ui/connectors_panel.py) — phải bung từng nhóm mới thấy có gì bên trong.
Thay đổi
  • Bỏ ẩn dải tab cho toàn bộ Monitoring → 8 tab một hàng; Tool/Connector ngang hàng.
  • Tab Tool: 9 tool thành lưới thẻ căn trái (không kéo giãn lấp đầy hàng) — icon màu theo loại + công tắc gạt bật/tắt, thay ô tick trong list phẳng.
  • Tab Connector: 4 nhóm thật thành khối nhóm theo catalog (không gộp vào tab Tool) — mỗi catalog là 1 tiêu đề (icon + tên + loại máy/phần mềm), bên dưới là hàng thẻ nhỏ căn trái, mỗi thẻ 1 option thật kèm công tắc gạt bật/tắt (không phải badge tĩnh) — đúng bản chất mỗi option đều chuyển được trạng thái, nhất quán với công tắc ở tab Tool; giữ đúng cấu trúc phân cấp 2 tầng của cây thật thay vì gộp phẳng vào 1 thẻ/catalog. Công tắc "Kết nối ngoài" tổng vẫn ở trên cùng. Thẻ của connector do người dùng tự thêm (AutoCAD, ANSA) có thêm ✎ Sửa/🗑 Xóa đúng như _ext_edit/_ext_delete thật; Jira (built-in) chỉ có ✎ Sửa (mở dialog cấu hình riêng, không xóa được); OneDrive/SharePoint (built-in MS365) không có nút nào — thật cũng chỉ bật/tắt, không sửa/xóa.
  • Nút Kiểm tra Internet dời từ thanh trên (tách khỏi tool nào) vào đúng bên trong thẻ fetch_url, khớp tools_admin_tab.py:_fetch_url_desc_cell — nút này gắn với khả năng fetch_url, không phải một hành động chung của cả tab.
16. Monitoring ▸ Iconui/monitoring_tab.py:132

Thư viện icon, dùng lại khi đặt icon cho agent Co4E.

Hiện tại
Monitoring ▸ Icon
Đề xuất — bố cục mới
📁 Báo cáo tài chính Q3▾
+ Đoạn chat mới
Project
Cowork
Co4E
Folder
GraphRAG
Schedule Task
RECENTS
📁 Báo cáo tài chính Q3
📌 Gom số liệu doanh thu
Dựng slide trình bày Q3
Tất cả project…
Dashboard
Monitoring
👤 local · Ollama ▾
Monitoring
Tổng quan
Bảo mật
MCP
Hành động
Agent
Agents Admin
Công cụ
Icon
Icon
+ Thêm icon
Dán SVG
Xoá
🔍 Tìm icon theo tên…
ICON TÍCH HỢP
✛
plus
✓
check
✕
close
✎
edit
🗑
trash
⟳
refresh
🔍
search
⚙
settings
🤖
robot
🛡
shield
🔧
wrench
★
star
ICON TÙY CHỈNH
🧠
brain
⌥
code
☁
cloud
✨
Kiểm kê control — 4 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
Tìm icon có sẵn…ô nhậpself._reload_builtinui\icons_admin_tab.py:43giữ nguyên tại chỗ
Thêm tệp SVGnútself._add_iconui\icons_admin_tab.py:58giữ nguyên tại chỗ
Dán SVGnútself._add_from_svg_textui\icons_admin_tab.py:60giữ nguyên tại chỗ
Xóa tùy chỉnhnútself._delete_iconui\icons_admin_tab.py:62giữ nguyên tại chỗ
Vấn đề
  • Ô icon trong lưới hiện tại không có viền/hover rõ khi rê chuột hay khi đang chọn.
Thay đổi
  • Ô tìm kiếm thêm icon kính lúp bên trái; mỗi ô icon có viền accent khi hover/chọn — cùng ngôn ngữ thẻ với Agent/Công cụ.
17. Settingsui/settings_dialog.py:26

Thiết lập toàn app. Cuộn dọc, không mục lục.

Hiện tại
Settings

5 nhóm: Ngôn ngữ · Provider · Bảo mật (khoá mật khẩu) · Tham số · Routing

Đề xuất — bố cục mới
Cài đặt
Chungngôn ngữ · giao diện · khay
AI ProviderOllama · qwen2.5-coder
Bảo mật sandbox🔒 cần mở khoá
Tham sốđính kèm · GraphRAG · giới hạn
Auto Model Routingđang Tắt
Ngôn ngữ hiển thị
EnglishTiếng Việt日本語
Giao diện
SángHệ thốngTối
Giữ chạy nền trong khay hệ thống khi đóng
Hiện thông báo khay khi tác vụ xong hoặc lỗi
Nhà cung cấp AI
Ollama (local models)
Base URL
http://localhost:11434
API Key
••••••••
Model
qwen2.5-coder:7b ⭳ Tải · ⚗ Test kết nối
Nhập mật khẩu…
Unlock
🔒 Locked
Xác nhận trước khi Cowork chạy lệnh
Chặn mạng cho lệnh do agent chạy
Enable Agent Security (kiểm tra lệnh)
AI check commands
Đính kèm
Số tệp tối đa
−20+
tệp
Token tối đa mỗi tệp
−500+
nghìn
Cấu trúc & GraphRAG
Số node tối đa
−500+
node
Số cạnh tối đa
−500+
cạnh
Giới hạn sandbox
CPU
Không giới hạn
Bộ nhớ
2.048 MB
Disk I/O
2.048 MB
Chế độ
TắtAutoManual
Chính sách
Chất lượngChi phíĐộ trễCân bằng
Ngưỡng tăng điểm tối thiểu
−5+
%
Timeout xác nhận
−60+
giây
Chu kỳ đánh giá lại
−24+
giờ
Đồng thời mỗi provider
−2+
Judge model
(để trống · dùng model đang chọn)
⟳ Đánh giá lại ngay
Huỷ
Lưu
Kiểm kê control — 23 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
Giữ chạy nền trong khay hệ thống khi đóng cửa sổô tick—ui\settings_dialog.py:56giữ nguyên tại chỗ
Hiện thông báo khay hệ thống khi tác vụ xong hoặc lỗiô tick—ui\settings_dialog.py:59giữ nguyên tại chỗ
—droplistself._on_provider_edit_changedui\settings_dialog.py:70→ menu tài khoản ở đáy sidebar
conf.get('base_url', ô nhập—ui\settings_dialog.py:77giữ nguyên tại chỗ
ô nhập—ui\settings_dialog.py:103giữ nguyên tại chỗ
Unlocknútself._sandbox_unlockui\settings_dialog.py:107giữ nguyên tại chỗ
Xác nhận trước khi Cowork chạy lệnhô tick—ui\settings_dialog.py:121giữ nguyên tại chỗ
Chặn mạng cho lệnh do agent chạyô tick—ui\settings_dialog.py:126giữ nguyên tại chỗ
Enable Agent Security (command validationô tick—ui\settings_dialog.py:136giữ nguyên tại chỗ
AI check commandsô tick—ui\settings_dialog.py:142giữ nguyên tại chỗ
Số tệp tối đa đính kèm vào một tin nhắn.ô số—ui\settings_dialog.py:178giữ nguyên tại chỗ
Giới hạn nội dung mỗi tệp đính kèm đưa vào prompt; phần vượtô số—ui\settings_dialog.py:183giữ nguyên tại chỗ
Giới hạn số node trong đồ thị Cấu trúc (0 = không giới hạn).ô số—ui\settings_dialog.py:194giữ nguyên tại chỗ
Giới hạn số cạnh trong đồ thị Cấu trúc (0 = không giới hạn).ô số—ui\settings_dialog.py:200giữ nguyên tại chỗ
routing.get('judge_model', ô nhập—ui\settings_dialog.py:279giữ nguyên tại chỗ
Đánh giá lại ngaynútself._routing_reassess_nowui\settings_dialog.py:282giữ nguyên tại chỗ
QDialogButtonBox.Save | QDialogButtonBox.Cancelnút hộp thoại—ui\settings_dialog.py:299giữ nguyên tại chỗ
valueô nhập—ui\settings_dialog.py:316giữ nguyên tại chỗ
Tảinútlambda: self._load_models(self.provider_combo.currentData(), combo, stui\settings_dialog.py:368giữ nguyên tại chỗ
Test kết nốinútlambda: self._test_connection(self.provider_combo.currentData(), statuui\settings_dialog.py:374giữ nguyên tại chỗ
codeô nhập—ui\settings_dialog.py:496giữ nguyên tại chỗ
Copy mãnútlambda: QGuiApplication.clipboard().setText(code)ui\settings_dialog.py:503giữ nguyên tại chỗ
Mở linknútlambda: webbrowser.open(flow.get('verification_uri_complete') or url)ui\settings_dialog.py:506giữ nguyên tại chỗ
Vấn đề
  • Năm group cuộn dọc, không mục lục.
  • Sandbox khoá bằng mật khẩu hard-code (settings_dialog.py:115).
  • Provider/Ngôn ngữ/Giao diện ở top bar, tách khỏi Settings.
Thay đổi
  • Thêm cột mục lục bên trái; gom Ngôn ngữ/Giao diện vào nhóm Chung (AI Provider vẫn là nhóm riêng như hiện tại, không gộp).
  • Đổi cách hiển thị field theo đúng loại dữ liệu: checkbox ☑/☐ → toggle switch, dropdown ít lựa chọn (2–4 giá trị) → segmented control, số nhập tay → stepper, 3 nhóm con trong Tham số → gom thành card — vẫn đúng field/giá trị mặc định thật từ ui/settings_dialog.py, chỉ đổi cách trình bày chứ không đổi dữ liệu.
18. Task Editorui/task_editor_dialog.py:55

Khai báo tác vụ hẹn giờ: nội dung, lịch lặp, phụ thuộc, thông báo.

Hiện tại
Task Editor

5 nhóm: Cơ bản · Lịch · Đầu vào · Phụ thuộc · Thực thi

Đề xuất — bố cục mới

Cùng 1 dialog TaskEditorDialog cho cả Thêm task và Sửa task — chỉ đổi tiêu đề (Thêm/Sửa), bố cục dưới đây dùng chung cho cả hai. Layout theo đúng kiểu màn Cài đặt: danh sách 5 nhóm bên trái thay cho 3 tab wizard, đúng 5 QGroupBox thật (không phải 3 bước tự đặt ra).

Sửa task
Cơ bảntiêu đề · loại chạy · model
Lịchchạy 1 lần · lặp lại
Đầu vàoprompt · tệp · liên kết
Phụ thuộctask kế tiếp · chờ hoàn tất
Thực thithử lại · timeout · phê duyệt
Chế độ
Bình thườngTự động
Tiêu đề
Gửi báo cáo doanh thu hằng ngày 08:00
Mô tả
Gom số liệu ngày hôm trước, dựng bảng và gửi email cho nhóm kế toán. ✨ Sinh prompt từ mô tả
Project
Báo cáo tài chính Q3
Loại chạy
AI AgentCo4E Flow
Nhà cung cấp
Ollama (local models)
Model
qwen2.5-coder:7b ⭳ Tải model
Skill
(Không dùng)
Ưu tiên
medium
Trạng thái
backlog
Bật lịch chạy
Thời điểm chạy
2026-08-17 08:00 AM
Lặp lại
Hằng ngày
Cron (khi lặp = tuỳ chỉnh)
0 8 * * * — chọn mẫu có sẵn
Chỉ ngày làm việc (bỏ T7/CN)
Bỏ qua ngày nghỉ lễ
Mã quốc gia lễ
VN
Kênh thông báo
KhôngTeamsOutlook
Email nhận thông báo
ketoan@company.com
Prompt thủ công
Tổng hợp số liệu doanh thu ngày hôm trước từ file đính kèm, dựng bảng tóm tắt.
Tệp đính kèm
📄 sales_template.xlsx
📄 Q3_report_outline.docx
+ Thêm tệp
🗑 Xoá
Liên kết
🔗 https://intranet.company.com/sales-dashboard
+ Thêm liên kết
🗑 Xoá
Task kế tiếp
(Không có)
Chế độ chạy tiếp
Không tự động chạy tiếp
Dùng output làm input task sau
Chờ các task này xong (fan-in)
☑ Gom số liệu doanh thu
☐ Dựng slide trình bày Q3
Số lần thử lại
0 lần
Timeout
600 giây
Cần phê duyệt (chờ bấm Chạy ngay)
Huỷ
Lưu
Kiểm kê control — 26 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
self.task.get('title', ô nhập—ui\task_editor_dialog.py:96giữ nguyên tại chỗ
self.task.get('description', ô nhập nhiều dòng—ui\task_editor_dialog.py:100giữ nguyên tại chỗ
nútself._gen_prompt_from_descriptionui\task_editor_dialog.py:102giữ nguyên tại chỗ
—droplistself._refresh_model_comboui\task_editor_dialog.py:135→ menu tài khoản ở đáy sidebar
Tải danh sách model của provider nàynútself._load_live_modelsui\task_editor_dialog.py:147giữ nguyên tại chỗ
AI agent = chạy một agent Cowork với model đã chọn. Co4E flodroplistself._on_run_kind_changedui\task_editor_dialog.py:170giữ nguyên tại chỗ
Flow Co4E đã lưu mà task này sẽ chạy (có sẵn hoặc của bạn).droplist—ui\task_editor_dialog.py:176giữ nguyên tại chỗ
Thông thường = chạy một lần (hoặc thủ công). Tự động = cronjdroplistself._on_task_mode_changedui\task_editor_dialog.py:188giữ nguyên tại chỗ
Bật lịch chạyô tick—ui\task_editor_dialog.py:217giữ nguyên tại chỗ
—droplistself._on_repeat_changedui\task_editor_dialog.py:232giữ nguyên tại chỗ
sched.get('cron_expression') or ô nhập—ui\task_editor_dialog.py:238giữ nguyên tại chỗ
Chọn một lịch mẫu — sẽ điền đúng cú pháp vào ô cron.droplistself._on_cron_sampleui\task_editor_dialog.py:242giữ nguyên tại chỗ
Chỉ ngày làm việc (bỏ T7/CNô tick—ui\task_editor_dialog.py:258giữ nguyên tại chỗ
Bỏ qua ngày nghỉ lễô tick—ui\task_editor_dialog.py:260giữ nguyên tại chỗ
sched.get('holiday_country', 'VN') or 'VNô nhập—ui\task_editor_dialog.py:262giữ nguyên tại chỗ
—droplistself._on_notify_changedui\task_editor_dialog.py:274giữ nguyên tại chỗ
ex_sched.get('notify_email', '') or ô nhập—ui\task_editor_dialog.py:280giữ nguyên tại chỗ
inp.get('manual_text') or ô nhập nhiều dòng—ui\task_editor_dialog.py:313giữ nguyên tại chỗ
—nútself._add_filesui\task_editor_dialog.py:324giữ nguyên tại chỗ
—nútlambda: self._remove_selected(self.files_list)ui\task_editor_dialog.py:328giữ nguyên tại chỗ
—nútself._add_linkui\task_editor_dialog.py:349giữ nguyên tại chỗ
—nútlambda: self._remove_selected(self.links_list)ui\task_editor_dialog.py:353giữ nguyên tại chỗ
—droplistself._check_chainui\task_editor_dialog.py:376giữ nguyên tại chỗ
Dùng output task này làm input task sauô tick—ui\task_editor_dialog.py:385giữ nguyên tại chỗ
Cần phê duyệt (không tự chạy theo lịch; chờ bấm Chạy ngayô tick—ui\task_editor_dialog.py:421giữ nguyên tại chỗ
QDialogButtonBox.Save | QDialogButtonBox.Cancelnút hộp thoại—ui\task_editor_dialog.py:430giữ nguyên tại chỗ
Vấn đề
  • Năm group dọc — form dài nhất app, không thấy đang ở bước nào.
Thay đổi
  • Đổi sang layout danh sách bên trái + panel bên phải giống màn Cài đặt (thay vì chia tab) — 5 mục danh sách khớp đúng 5 QGroupBox thật (Cơ bản · Lịch · Đầu vào · Phụ thuộc · Thực thi, xem ui/task_editor_dialog.py), luôn thấy đang ở nhóm nào và còn bao nhiêu nhóm nữa — nhất quán với cách điều hướng ở Cài đặt thay vì mỗi màn một kiểu.
19. Skills managerui/skills_dialog.py:108

Quản lý skill — khối hướng dẫn tái dùng, gõ /skill để chèn.

Hiện tại
Skills manager

Ô tick: chính là bật/tắt skill

Đề xuất — bố cục mới

Giữ nguyên bố cục bên trong; chỉ đổi thanh menu sang danh sách phẳng.

Kiểm kê control — 13 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
skill.name if skill else ô nhập—ui\skills_dialog.py:34giữ nguyên tại chỗ
skill.description if skill else ô nhập—ui\skills_dialog.py:39giữ nguyên tại chỗ
Tạo từ mô tảnútself._gen_instructionsui\skills_dialog.py:44giữ nguyên tại chỗ
skill.instructions if skill else ô nhập nhiều dòng—ui\skills_dialog.py:50giữ nguyên tại chỗ
QDialogButtonBox.Save | QDialogButtonBox.Cancelnút hộp thoại—ui\skills_dialog.py:55giữ nguyên tại chỗ
Tự động tạonútself._auto_generateui\skills_dialog.py:127giữ nguyên tại chỗ
Từ file template…nútself._from_templateui\skills_dialog.py:132giữ nguyên tại chỗ
Nhập…nútself._importui\skills_dialog.py:136giữ nguyên tại chỗ
Xuất .mdnútself._export_mdui\skills_dialog.py:140giữ nguyên tại chỗ
Nhân bảnnútself._duplicateui\skills_dialog.py:144giữ nguyên tại chỗ
Sửanútself._editui\skills_dialog.py:148giữ nguyên tại chỗ
Xóanútself._deleteui\skills_dialog.py:151giữ nguyên tại chỗ
Đóngnútself.acceptui\skills_dialog.py:154giữ nguyên tại chỗ
Vấn đề
  • Bố cục hiện tại giữ nguyên; chưa phát hiện vấn đề sắp xếp nghiêm trọng.
Thay đổi
  • Chỉ áp thanh menu phẳng mới; nội dung bên trong giữ nguyên.
20. Skill editorui/skills_dialog.py:23

Soạn skill: tên, mô tả, hướng dẫn.

Hiện tại
Skill editor

✨: sinh hướng dẫn từ mô tả ngắn

Đề xuất — bố cục mới

Giữ nguyên bố cục bên trong; chỉ đổi thanh menu sang danh sách phẳng.

Vấn đề
  • Bố cục hiện tại giữ nguyên; chưa phát hiện vấn đề sắp xếp nghiêm trọng.
Thay đổi
  • Chỉ áp thanh menu phẳng mới; nội dung bên trong giữ nguyên.
21. File view & AI editui/file_edit_dialog.py:50

Xem và nhờ AI sửa tệp, mở từ panel Files trong chat.

Hiện tại
File view & AI edit

Tệp nhị phân: trích văn bản, chỉ đọc · Lưu: tạo .bak trước khi ghi

Đề xuất — bố cục mới

Giữ nguyên bố cục bên trong; chỉ đổi thanh menu sang danh sách phẳng.

Kiểm kê control — 8 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
spô nhập—ui\file_edit_dialog.py:66giữ nguyên tại chỗ
Mở file khác…nútself._browseui\file_edit_dialog.py:68giữ nguyên tại chỗ
Tải lại từ đĩanútself._reloadui\file_edit_dialog.py:73giữ nguyên tại chỗ
Mở một file để xem hoặc chỉnh sửa.ô nhập nhiều dòng—ui\file_edit_dialog.py:84giữ nguyên tại chỗ
Nói cho AI cách sửa file này (vd: 'sửa lỗi chính tả', 'dịch ô nhậpself._ai_editui\file_edit_dialog.py:94giữ nguyên tại chỗ
Sửa bằng AInútself._ai_editui\file_edit_dialog.py:97giữ nguyên tại chỗ
Lưunútself._saveui\file_edit_dialog.py:106giữ nguyên tại chỗ
Đóngnútself.rejectui\file_edit_dialog.py:110giữ nguyên tại chỗ
Vấn đề
  • Bố cục hiện tại giữ nguyên; chưa phát hiện vấn đề sắp xếp nghiêm trọng.
Thay đổi
  • Chỉ áp thanh menu phẳng mới; nội dung bên trong giữ nguyên.
22. Co4E agent editorui/co4e_agent_dialog.py:23

Định nghĩa agent Co4E: tính cách, quyền, model, skill.

Hiện tại
Co4E agent editor
Đề xuất — bố cục mới

Giữ nguyên bố cục bên trong; chỉ đổi thanh menu sang danh sách phẳng.

Kiểm kê control — 9 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
agent.nameô nhập—ui\co4e_agent_dialog.py:32giữ nguyên tại chỗ
agent.role or 'AGENTô nhập—ui\co4e_agent_dialog.py:34giữ nguyên tại chỗ
agent.instructionsô nhập nhiều dòng—ui\co4e_agent_dialog.py:42giữ nguyên tại chỗ
Soạn bằng AInútself._ai_draftui\co4e_agent_dialog.py:46giữ nguyên tại chỗ
getatagent, 'context', ô nhập nhiều dòng—ui\co4e_agent_dialog.py:59giữ nguyên tại chỗ
Tải danh sách modelnútself._load_modelsui\co4e_agent_dialog.py:68giữ nguyên tại chỗ
Đính kèm tệpnútself._add_attachmentui\co4e_agent_dialog.py:99giữ nguyên tại chỗ
Bỏnútself._del_attachmentui\co4e_agent_dialog.py:102giữ nguyên tại chỗ
QDialogButtonBox.Save | QDialogButtonBox.Cancelnút hộp thoại—ui\co4e_agent_dialog.py:113giữ nguyên tại chỗ
Vấn đề
  • Bố cục hiện tại giữ nguyên; chưa phát hiện vấn đề sắp xếp nghiêm trọng.
Thay đổi
  • Chỉ áp thanh menu phẳng mới; nội dung bên trong giữ nguyên.
23. External connectorui/ext_connector_dialog.py:23

Khai báo kết nối ngoài, 2 chế độ.

Hiện tại
External connector

MCP (stdio): lệnh + tham số · REST: URL · key · header · Test: thử kết nối thật

Đề xuất — bố cục mới

Giữ nguyên bố cục bên trong; chỉ đổi thanh menu sang danh sách phẳng.

Kiểm kê control — 11 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
—droplistself._apply_presetui\ext_connector_dialog.py:35giữ nguyên tại chỗ
connector.get('name', ô nhập—ui\ext_connector_dialog.py:43giữ nguyên tại chỗ
—droplistlambda i: self.stack.setCurrentIndex(self.mode_combo.currentData() != ui\ext_connector_dialog.py:47giữ nguyên tại chỗ
connector.get('command', ô nhập—ui\ext_connector_dialog.py:59giữ nguyên tại chỗ
'.join(connector.get('args', []) or []ô nhập—ui\ext_connector_dialog.py:62giữ nguyên tại chỗ
connector.get('base_url', ô nhập—ui\ext_connector_dialog.py:69giữ nguyên tại chỗ
connector.get('api_key', ô nhập—ui\ext_connector_dialog.py:72giữ nguyên tại chỗ
connector.get('auth_header', 'Authorizationô nhập—ui\ext_connector_dialog.py:75giữ nguyên tại chỗ
connector.get('auth_scheme', 'Bearerô nhập—ui\ext_connector_dialog.py:77giữ nguyên tại chỗ
Kiểm tra kết nốinútself._test_connectionui\ext_connector_dialog.py:90giữ nguyên tại chỗ
QDialogButtonBox.Save | QDialogButtonBox.Cancelnút hộp thoại—ui\ext_connector_dialog.py:103giữ nguyên tại chỗ
Vấn đề
  • Bố cục hiện tại giữ nguyên; chưa phát hiện vấn đề sắp xếp nghiêm trọng.
Thay đổi
  • Chỉ áp thanh menu phẳng mới; nội dung bên trong giữ nguyên.
24. Permission requestui/permission_dialog.py:13

Chốt chặn cuối trước khi agent làm việc có hậu quả. Bật Tự chạy thì bỏ qua bước này.

Hiện tại
Permission request

Xem trước: lệnh sắp chạy hoặc diff sắp ghi

Đề xuất — bố cục mới

Giữ nguyên bố cục bên trong; chỉ đổi thanh menu sang danh sách phẳng.

Vấn đề
  • Bố cục hiện tại giữ nguyên; chưa phát hiện vấn đề sắp xếp nghiêm trọng.
Thay đổi
  • Chỉ áp thanh menu phẳng mới; nội dung bên trong giữ nguyên.
25. Admin agent editorui/agents_admin_tab.py:35

Soạn agent hệ thống: gắn vào chức năng nào, provider/model gì.

Hiện tại
Admin agent editor
Đề xuất — bố cục mới

Giữ nguyên bố cục bên trong; chỉ đổi thanh menu sang danh sách phẳng.

Vấn đề
  • Bố cục hiện tại giữ nguyên; chưa phát hiện vấn đề sắp xếp nghiêm trọng.
Thay đổi
  • Chỉ áp thanh menu phẳng mới; nội dung bên trong giữ nguyên.
26. Login (dead screen — not wired)ui/login_dialog.py:57

Màn đăng nhập — đã dựng xong nhưng không nơi nào gọi. App khởi động thẳng với user \“local\”, quyền admin.

Hiện tại
Login (dead screen — not wired)

3 trang: Khởi tạo · Đăng nhập · Offline

Đề xuất — bố cục mới

Giữ nguyên bố cục bên trong; chỉ đổi thanh menu sang danh sách phẳng.

Kiểm kê control — 9 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
Thoátnútself.rejectui\login_dialog.py:87giữ nguyên tại chỗ
self.ctx.config.shared_dirô nhập—ui\login_dialog.py:121giữ nguyên tại chỗ
Chọn…nútself._bs_browseui\login_dialog.py:122giữ nguyên tại chỗ
Tạo tài khoản Adminnútself._bs_create_adminui\login_dialog.py:137giữ nguyên tại chỗ
cached_codeô nhập—ui\login_dialog.py:186giữ nguyên tại chỗ
self.ctx.config.auth.get('last_department', ô nhập—ui\login_dialog.py:199giữ nguyên tại chỗ
Đăng nhậpnútlambda: self._do_login(shared_dir)ui\login_dialog.py:209giữ nguyên tại chỗ
login.offline_btn', role=rolenútlambda: self._finish_login(Account(username=username, role=role, code=ui\login_dialog.py:256giữ nguyên tại chỗ
Thử lạinútself._retryui\login_dialog.py:263giữ nguyên tại chỗ
Vấn đề
  • Bố cục hiện tại giữ nguyên; chưa phát hiện vấn đề sắp xếp nghiêm trọng.
Thay đổi
  • Chỉ áp thanh menu phẳng mới; nội dung bên trong giữ nguyên.
27. Help dock — expanded panelui/help_agent_widget.py:79

Trợ lý dùng app, nổi ở góc phải và có mặt trên mọi màn. Cố tình không có công cụ — chỉ hỏi đáp cách dùng.

Hiện tại
Help dock — expanded panel

3 trạng thái: tab mép phải → huy hiệu → panel 340×460, luôn ghim góc dưới phải · 3 nút: › ẩn vào cạnh phải · — thu nhỏ về huy hiệu · tab mép để hiện lại · Model: chọn ở Monitoring ▸ Agents Admin, agent chức năng “help”

Đề xuất — bố cục mới
Trợ lý — thu gọn còn một chấm
Bình thường
cũ 84×64
✨
26×26 · không chữ, không chevron · −88% diện tích
Rê chuột / focus
✨AI Assistant
tên chỉ hiện lúc cần
Mở — “Ẩn” nằm trong menu ⋯
✨AI Assistant
— ⋯
Thu nhỏ về chấm
Ẩn trợ lý vào cạnh phải
Đổi model…
Xin chào Nam, mình giúp gì khi bạn dùng app?
Hỏi về cách dùng app…
Gửi
Đã ẩn
‹
tab mép 28px
Kiểm kê control — 5 mục (trích bằng AST, không đọc tay)
NhãnLoạiHàm xử lýNguồnSau khi sửa
selfnútself._show_launcherui\help_agent_widget.py:169Giữ — tab mép mở lại trợ lý, nới 16px → 28px
selfnútself._hide_to_edgeui\help_agent_widget.py:178→ mục “Ẩn trợ lý vào cạnh phải” trong menu ⋯ ở header panel
headernútself._collapseui\help_agent_widget.py:214giữ nguyên tại chỗ
rowô nhậpself._sendui\help_agent_widget.py:236giữ nguyên tại chỗ
rownútself._sendui\help_agent_widget.py:241giữ nguyên tại chỗ
Vấn đề
  • Hai vùng bấm cho một tính năng. Huy hiệu mở, chevron ẩn — nằm sát nhau, dễ bấm nhầm.
  • Vùng bấm quá nhỏ. Chevron rộng 18px, tab mép 16px (help_agent_widget.py:36-38) — dưới ngưỡng ~24px để bấm thoải mái, nhất là trên màn cảm ứng.
  • Ba trạng thái, thừa một. “Nép mép” và “huy hiệu” đều nghĩa là đang đóng; người dùng phải học hai kiểu đóng và hai đường quay lại.
  • Chiếm 84×64px vĩnh viễn ngay góc dưới phải (huy hiệu 64 + khe 2 + chevron 18 — help_agent_widget.py:34-37) — ở màn Cowork nó nằm đè lên vùng nút Gửi, dù cả ngày chỉ mở vài lần.
  • Huy hiệu dùng chính icon app (help_agent_widget.py:49-53, dự phòng là glyph robot) nên nhìn không khác gì icon cửa sổ; nhãn “Trợ lý App” / “App Assistant” / “アプリアシスタント” nói chỗ dùng chứ không nói nó là gì.
Thay đổi
  • Một chấm 26px, không chữ. Bỏ luôn chevron rời — chỗ chiếm giảm từ 84×64 xuống 26×26 (−88% diện tích). Vẫn là một vùng bấm, 26px ≥ ngưỡng bấm thoải mái.
  • Tên: “AI Assistant” — giữ nguyên ở cả 3 ngôn ngữ, sửa đúng một khoá help_agent.title (i18n.py:470) thay cho “App Assistant / Trợ lý App / アプリアシスタント”. Tên dài không còn là vấn đề vì nó không nằm trên màn lúc bình thường.
  • Chữ chỉ hiện khi rê chuột / focus bàn phím — chấm nở thành pill “✨ AI Assistant”. Lúc bình thường màn hình không có chữ nào thừa.
  • “Ẩn trợ lý” dời vào menu ⋯ trong header panel, cạnh “Thu nhỏ”. Không mất chức năng — chỉ chuyển tới lúc người dùng đang tương tác.
  • Thường ngày chỉ còn 2 trạng thái: đóng ↔ mở. Ẩn hẳn thành lựa chọn hiếm.
  • Tab mép nới từ 16px → 28px cho bấm được.
  • Ở màn có ô nhập dưới đáy (Cowork), chấm nâng lên trên hàng nhập, không đè nút Gửi.

Phần 4 — Phát triển lần sau

Những việc audit này phát hiện nhưng cố ý không làm, vì đều thêm hoặc đổi chức năng — ngoài phạm vi “chỉ sắp xếp lại”.

ViệcChi tiếtLoại
Xuất log cho Nhật ký gần đâyHiện chỉ có “Xem tất cả” nhảy sang Action Logs (monitoring_tab.py:586). Xuất ra tệp là chức năng mới.chức năng mới
Bỏ auto-refresh, thay bằng nút bấmMonitoring làm mới mỗi 3 giây (monitoring_tab.py:43), Schedule 10 giây (schedule_task_tab.py:150), Dashboard 30 giây (dashboard_tab.py:175). Đề xuất: chỉ làm mới khi vào màn + một nút thủ công.đổi hành vi
Nút tạo skill mớiCả SkillsDialog lẫn SkillManagerTab đều không có. Chỉ tạo được qua AI / template / nhập / nhân bản. SkillEditDialog đã làm được việc này, chỉ thiếu lối vào.chức năng mới
Nút “chat mới” trong pane Lịch sửsidebar.py:68 khai báo tín hiệu new_chat, workspace_tab.py:241 đã nối — nhưng không nơi nào phát.hoàn thiện thứ đã dựng
Gọi ensure_starter_project()Hàm có docstring “đảm bảo luôn có ít nhất một project” nhưng không ai gọi, trong khi refresh() lại ghi “no auto-seed”. Hai chỗ mâu thuẫn.đổi hành vi
Mật khẩu Sandbox hard-codesettings_dialog.py:115 để mật khẩu mở khoá ngay trong mã nguồn.bảo mật
Hai lớp trùng tên CustomAgentcore/custom_agents.py:23 và core/co4e.py:117 — khác trường, khác thư mục lưu.dọn mã
Sáu màn không có đường vàoAccountsTab · LoginDialog · FlowBuilderDialog · AgentManagerTab · SkillManagerTab · McpServerEditDialog — tổng 64 control.quyết định giữ hay gỡ

Phần 5 — Màn chết (chỉ ghi nhận)

Sáu màn có trong code nhưng không tới được — tổng 64 control (accounts 18 · flow_dialog 28 · agent_manager 7 · skill_manager 7 · mcp_servers 4). Không nằm trong kiểm kê phía trên vì không có đường nào tới; chỉ ghi nhận, không đề xuất gỡ.

Thành phầnVị tríTình trạng
AccountsTabui/accounts_tab.py:153Quản lý tài khoản/nhóm đầy đủ, nhưng không được gắn vào MonitoringTab.
LoginDialogui/login_dialog.py:57Màn đăng nhập hoàn chỉnh; app.py:860 bỏ qua, hard-code user “local”.
FlowBuilderDialogui/flow_dialog.py:34Bị Co4E thay thế; không nơi nào gọi.
AgentManagerTabui/agent_manager_tab.py:28Chỉ dùng bởi FlowBuilderDialog → cũng không tới được.
SkillManagerTabui/skill_manager_tab.pyChỉ dùng bởi FlowBuilderDialog → cũng không tới được.
McpServerEditDialogui/mcp_servers_dialog.py:15Bị ExtConnectorEditDialog thay thế.
Ngoài phạm vi: settings_dialog.py:115 hard-code mật khẩu Sandbox; hai lớp cùng tên CustomAgent (custom_agents.py:23 · co4e.py:117).