Lane N3 (Co4E Studio) — dùng bộ workflow refactor-god-file, mỗi bước có characterization test trước khi tách, hậu kiểm ranh giới tầng sau mỗi bước: - skills_list_panel.py / agent_list_panel.py — 2 khu vực sidebar - co4e_canvas_widget.py + canvas_items.py + canvas_interaction_mixin.py — Co4ECanvas tách 3 file (vượt 400 dòng nếu đứng một mình) - node_property_panel.py + node_property_actions_mixin.py + step_config_section.py — StepConfigPanel, cùng lý do - co4e_run_control_widget.py — RunsPagePanel (trang Flow Status) - co4e_chat_view.py — ChatPanel + _ChatInput + helper autocomplete - palette_list.py — _PaletteList dời khỏi ui/co4e_tab.py, hết import ngược presentation -> ui (agent/skills panel giờ import top-level) ui/co4e_tab.py giảm 2089 -> 1878 dòng, chỉ còn phần wiring + business logic (Co4ERunManager/AgentWorker chưa đổi — nằm ngoài phạm vi này, xem docstring presentation/co4e/co4e_tab.py). ui/co4e_canvas.py và ui/co4e_config_panel.py còn lại là compat shim re-export, không đổi API cho bên gọi. Thêm tests/test_co4e_integration.py — dựng thật Co4ETab qua build_co4e_tab(), lái luồng qua nhiều panel trong cùng instance (thêm node, mở/gập chat, chuyển trang Flow Status rồi quay lại không mất state canvas) — bắt lỗi wiring xuyên-panel mà characterization test từng panel riêng không thấy được. Đã xác minh: pytest 348 passed/1 skipped, tools/check_co4e.py sạch, không file nào >400 dòng, domain/application không import PySide6, và so pixel before/after (git worktree tại HEAD cũ) ra 0/1.125.000 pixel khác biệt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
59 KiB
59 KiB
Bản đồ tách file — Chat View (khung Messages / composer)
Gộp 220 symbol thô từ 3 agent quét song song trên ui/co4e_tab.py, còn lại 218 dòng sau khi gộp 2 nhóm trùng lặp thật do lát quét cắt ngang symbol (Co4ETab._reload_sidebar dòng 686, Co4ETab._run_from dòng 1399 — xem bảng bên dưới) và giải quyết 5 dòng có target_file ban đầu ghi unsure.
- File đích của lane chat-view:
presentation/co4e/co4e_chat_view.py— 21 symbol. - Phần còn lại của container:
ui/co4e_tab.py— 197 symbol. - Thuộc lane/file khác (ngoài phạm vi hai đích trên): 0 symbol — dữ liệu thô của lần quét này chỉ dùng đúng 2 target_file thật (
ui/co4e_tab.py,presentation/co4e/co4e_chat_view.py) cộngunsure. - Note bắt đầu bằng
khac tai lieu:tìm thấy trong dữ liệu thô: 0.
Các nhóm đã gộp (lát quét cắt ngang 1 symbol thành 2 mảnh)
- Co4ETab._reload_sidebar (dong 686 va 701, 2 luot quet trung, gop thanh 686-719)
- Co4ETab._run_from (dong 1399 va unknown_method_fragment_before_1401 dong 1401, 2 luot quet trung, gop thanh 1399-1403)
Anomaly cố ý giữ tách riêng (không gộp)
Co4ETab.showEventxuất hiện 2 lần trong dữ liệu thô ở hai dòng khác nhau (939-941 và 1772-1775) — đây KHÔNG phải lỗi quét trùng mà là 2 định nghĩa method cùng tên thật sự tồn tại trong class (định nghĩa thứ 2 đè lên định nghĩa đầu lúc runtime, hành vi Python bình thường). Khớp vớikept_separate_anomaly_symbolsđã ghi nhận ở cả bảng cũ (co4e-split-map.json) và bản đồ run-control — giữ tách riêng thành 2 dòng ở bảng dưới.
Phát hiện quan trọng nhất từ việc đối chiếu với bảng cũ (docs/architecture/co4e-split-map.json, 363 dòng)
- Đường dẫn
presentation/co4e/co4e_tab.pytrong bảng cũ tương đươngui/co4e_tab.pyhôm nay. Bảng cũ dùngtarget_file="presentation/co4e/co4e_tab.py"cho phần thân lớpCo4ETabcòn lại, nhưng file đó ở repo hiện tại chỉ là factorybuild_co4e_tab()mỏng (~53 dòng, bọc nguyênCo4ETabcũ 1:1) — KHÔNG phải nơi lớpCo4ETabthật sự sống (lớp đó vẫn ởui/co4e_tab.py). Phát hiện này đã được xác nhận trước đó ở bản đồ run-control; bảng này tự quy đổi mọi so sánh trước khi kết luận lệch. - Phạm vi
co4e_chat_view.pybị thu hẹp mạnh so với bảng cũ. Bảng cũ (50 dòng liên quan) coi 'chat view' là toàn bộ chuỗi: khung widget (header Messages,chat_stack, composer,_ChatInput, RoutingToggle) LẪN business logic điều phối lượt chat (_chat_send,_apply_co4e_routing,_run_chat_turn+ 4 closure lồng bên trong,_extract_agent_directive,_resolve_agent,_append_chat/_append_diff/_append_plan,_fmt_usage/_apply_usage/_refresh_usage_total,_toggle_messages/_ensure_flow_log/_active_log/chat_log/_plan_bubble). Lần quét 3-agent hiện tại (lặp lại trong từng ghi chú riêng lẻ với cụm từ 'theo yêu cầu KHÔNG thuộc co4e_chat_view.py') thu hẹpco4e_chat_view.pychỉ còn là khung widget thuần túy:_ChatInput+_directive_token(ô nhập autocomplete) và phần dựng UI của_build_chat(header/composer/stack). Toàn bộ business logic điều phối chat, quản lý log per-flow, usage và routing ở lạiui/co4e_tab.py. Đây là khác biệt lớn nhất giữa hai bảng — ảnh hưởng tới hơn 20 dòng bên dưới (đánh dấu ở cột cuối). _PLAN_GLYPH/_fmt_plan/_qcolorbị bảng cũ xếp sai lane (không phải chat_view.py, cũng không phải ui/co4e_tab.py). Cả ba đều phục vụ chat (glyph/format cho bong bóng 'plan', màu cột trạng thái) nhưng bảng cũ xếp chung vàopresentation/co4e/co4e_run_control_widget.py— sai giống hệt phát hiện đã ghi nhận ở bản đồ run-control cho chính 3 symbol này. Thêm 2 symbol mới chưa từng được đối chiếu trước đó (_skill_names,_agent_names, cũng bị bảng cũ xếp thẳng vàoco4e_chat_view.py) — quyết định ở đây là giữ cả 5 symbol tạiui/co4e_tab.pyvì chúng dùng ở nhiều nơi ngoài phạm vi composer chat hoặc thuộc business logic thuần.- Bảng cũ bỏ sót 7 symbol không có dòng nào dù nằm trong phạm vi đã quét:
_ChatInput.submit(dòng 143),Co4ETab.status_message(dòng 232),Co4ETab._build_sidebar.<locals>._Col(dòng 505-514),Co4ETab._build_sidebar.<locals>._Col.__init__(dòng 508-509),Co4ETab._build_sidebar.<locals>._Col.addWidget(dòng 511-513),Co4ETab._agent_panel(dòng 557),Co4ETab._run_chat_turn.job._emit(dòng 1894-1901).
Tổng số dòng có lệch với bảng cũ (khác target_file sau khi quy đổi đường dẫn): 120/218.
Bảng đầy đủ (sắp theo số dòng)
| symbol | dòng | file đích | lý do | có trong bảng cũ chưa | chỗ nào thấy bảng cũ sai |
|---|---|---|---|---|---|
_PLAN_GLYPH |
47-48 | ui/co4e_tab.py |
hằng số module dùng bởi _fmt_plan cho việc hiển thị plan trong chat log — thuộc business logic của Co4ETab, không phải khung widget chat | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 45-46) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
_fmt_plan |
51-60 | ui/co4e_tab.py |
dùng bởi _append_plan (business logic per-flow, ở lại Co4ETab theo mô tả target) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 49-58) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
_skill_names |
63-67 | ui/co4e_tab.py |
đọc skills từ đĩa qua core.skills.list_skills/builtin_skills; dùng ở nhiều nơi trong file (dòng 164, 714, 1294, 1321, 1344) không chỉ trong chat composer nên không chuyển riêng vào co4e_chat_view.py | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 61-65) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
_agent_names |
70-73 | ui/co4e_tab.py |
đọc agents từ đĩa qua core.co4e.list_custom_agents; dùng ở nhiều nơi (dòng 168 và ngoài phạm vi đọc), giữ ở Co4ETab như _skill_names | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 68-71) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
_EqualTabBar |
76-96 | ui/co4e_tab.py |
không thấy chỗ nào khởi tạo _EqualTabBar trong toàn file (grep 'flow_bar =' cho thấy dùng QTabBar thường ở dòng 735) — có thể là code chết, cần người quyết có xoá hay giữ -- QUYET DINH: khong tim thay noi nao khoi tao _EqualTabBar trong toan file (flow_bar dung QTabBar thuong o dong 735) -- co the la code chet, nhung du con hay khong no la mot QTabBar tien ich cho sidebar icon-tabs, KHONG lien quan chat -- khop voi quyet dinh da chot cho cung symbol nay o lane run-control (ui/co4e_tab.py). | co | - |
_EqualTabBar.tabSizeHint |
84-92 | ui/co4e_tab.py |
thuộc _EqualTabBar — xem note ở class, có vẻ không còn dùng -- QUYET DINH: thuoc _EqualTabBar -- xem ly do o class, khong lien quan chat. | co | - |
_EqualTabBar.resizeEvent |
94-96 | ui/co4e_tab.py |
thuộc _EqualTabBar — xem note ở class -- QUYET DINH: thuoc _EqualTabBar -- xem ly do o class, khong lien quan chat. | co | - |
_PaletteList |
99-121 | ui/co4e_tab.py |
dùng cho wf_list ở sidebar (drag workflow lên canvas), không liên quan chat view | co | BANG CU KHAC: bang cu xep vao unsure (dong 97-119) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
_PaletteList.__init__ |
104-108 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao unsure (dong 102-106) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
_PaletteList.startDrag |
110-121 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao unsure (dong 108-119) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
_directive_token |
124-136 | presentation/co4e/co4e_chat_view.py |
chỉ được gọi bởi _ChatInput (dòng 156, 194) — hàm thuần Python phục vụ autocomplete của ô nhập chat, nên đi cùng _ChatInput | co | - |
_ChatInput |
139-228 | presentation/co4e/co4e_chat_view.py |
ô nhập của composer — nằm trong phạm vi widget khung chat theo mô tả target | co | - |
_ChatInput.submit |
143 | presentation/co4e/co4e_chat_view.py |
Signal lớp, phát khi Enter được nhấn — Co4ETab._chat_send (nằm ngoài phạm vi đọc) sẽ nối vào signal này từ bên ngoài widget | chua | BANG CU BO SOT: khong co dong nao cho symbol nay trong bang cu (363 dong) du no ro rang ton tai trong pham vi da quet -- co the do agent quet truoc bo lot, hoac day la ten sinh ra tu buoc gop lat cua ban do nay (vd ten method suy doan/tam). |
_ChatInput.__init__ |
145-153 | presentation/co4e/co4e_chat_view.py |
- | co | - |
_ChatInput._maybe_popup |
155-180 | presentation/co4e/co4e_chat_view.py |
gọi _skill_names()/_agent_names() (đọc đĩa) để dựng popup gợi ý — phần Qt (định vị popup, resize) đòi QWidget sống | co | - |
_ChatInput._add_row |
182-186 | presentation/co4e/co4e_chat_view.py |
- | co | - |
_ChatInput._accept |
188-201 | presentation/co4e/co4e_chat_view.py |
- | co | - |
_ChatInput.focusOutEvent |
203-206 | presentation/co4e/co4e_chat_view.py |
- | co | - |
_ChatInput.keyPressEvent |
208-228 | presentation/co4e/co4e_chat_view.py |
phát submit khi Enter và popup không hiện — Co4ETab nối submit -> _chat_send ở ngoài widget | co | - |
Co4ETab |
231-700 | ui/co4e_tab.py |
cắt ngang lát — cần agent gộp đối chiếu (class tiếp tục sau dòng 700) | co | - |
Co4ETab.status_message |
232 | ui/co4e_tab.py |
Signal lớp | chua | BANG CU BO SOT: khong co dong nao cho symbol nay trong bang cu (363 dong) du no ro rang ton tai trong pham vi da quet -- co the do agent quet truoc bo lot, hoac day la ten sinh ra tu buoc gop lat cua ban do nay (vd ten method suy doan/tam). |
Co4ETab.__init__ |
234-306 | ui/co4e_tab.py |
dựng toàn bộ layout 3 cột (sidebar/center/config); chưa thấy lệnh dựng chat panel trong phạm vi 1-700 — có thể nằm trong _build_center() ở dòng > 700 | co | - |
Co4ETab.ctx |
236 | ui/co4e_tab.py |
- | co | - |
Co4ETab._wf |
237 | ui/co4e_tab.py |
trạng thái chia sẻ rộng — flow đang hiển thị trên canvas; nhiều method (kể cả chat log lookup ngoài phạm vi đọc) phụ thuộc vào self._wf | co | - |
Co4ETab._chat_worker |
238 | ui/co4e_tab.py |
AgentWorker của chat — theo mô tả target, _chat_send/job()/AgentWorker KHÔNG chuyển vào co4e_chat_view.py, ở lại Co4ETab | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 236) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.manager |
240 | ui/co4e_tab.py |
Co4ERunManager — đã có RunsPagePanel/co4e_run_control_widget.py riêng, nhưng self.manager là thuộc tính của Co4ETab, ở lại | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 238) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._flow_runs |
245 | ui/co4e_tab.py |
trạng thái chia sẻ: wf_id -> run_id đang chạy trên canvas, dùng bởi nhiều method flow tab | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 243) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_logs |
246 | ui/co4e_tab.py |
map run_id -> ChatView; theo mô tả target đây là business logic per-flow, ở lại Co4ETab dù ChatView instance được hiển thị trong QStackedWidget của co4e_chat_view.py | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 244) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._flow_outputs |
247 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao application/workflows/co4e_workflow_service.py (dong 245) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._flow_usage |
250 | ui/co4e_tab.py |
usage per-flow (↓in ↑out ▤ctx $cost) — hiển thị ở label usage-total trong composer của co4e_chat_view.py, nhưng dữ liệu và logic tính toán ở lại Co4ETab (chỉ phần dựng label rỗng thuộc chat_view) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 248) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._project_id |
251 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao unsure (dong 249) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._project_dir |
252 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao unsure (dong 250) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._manual_active |
254 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 252) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._manual_order |
255 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 253) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._manual_idx |
256 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 254) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._flows |
259 | ui/co4e_tab.py |
trạng thái chia sẻ — danh sách flow đang mở dạng tab kiểu trình duyệt, dùng bởi hầu hết method _flow_tab | co | - |
Co4ETab._active_flow_idx |
260 | ui/co4e_tab.py |
- | co | - |
Co4ETab._split |
263 | ui/co4e_tab.py |
- | co | - |
Co4ETab.config |
270 | ui/co4e_tab.py |
StepConfigPanel — đã tách sang presentation/co4e/node_property_panel.py ở làn khác; thuộc tính self.config trên Co4ETab ở lại đây | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 268) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._config_collapsed |
276 | ui/co4e_tab.py |
- | co | - |
Co4ETab._config_expanded_w |
277 | ui/co4e_tab.py |
- | co | - |
Co4ETab._narrow_guard |
282 | ui/co4e_tab.py |
- | co | - |
Co4ETab._open_flow |
309-340 | ui/co4e_tab.py |
đọc/ghi self._flows, self.flow_bar — trạng thái chia sẻ giữa các flow tab | co | - |
Co4ETab._close_other_flows |
342-357 | ui/co4e_tab.py |
self._flows, self._active_flow_idx | co | - |
Co4ETab._show_runs |
359-369 | ui/co4e_tab.py |
self.flow_bar dùng chung với logic mở flow tab | co | - |
Co4ETab._on_flow_tab_changed |
371-387 | ui/co4e_tab.py |
đọc self.center_stack (được gán ở ngoài phạm vi đọc, có thể trong _build_center) — trạng thái chia sẻ quan trọng theo mô tả của team | co | - |
Co4ETab._sync_runs_toggle |
389-396 | ui/co4e_tab.py |
- | co | - |
Co4ETab._add_tab_close_button |
398-408 | ui/co4e_tab.py |
- | co | - |
Co4ETab._close_flow_tab_button |
410-414 | ui/co4e_tab.py |
- | co | - |
Co4ETab._close_flow_tab |
416-444 | ui/co4e_tab.py |
self._flows, self._flow_runs, self._run_logs — trạng thái chia sẻ giữa flow tab và run log của chat | co | - |
Co4ETab._sync_active_flow_tab_text |
446-449 | ui/co4e_tab.py |
- | co | - |
Co4ETab._reflect_active_run |
451-459 | ui/co4e_tab.py |
self._flow_runs, self.canvas — canvas là thuộc tính được gán ngoài phạm vi đọc | co | BANG CU KHAC: bang cu xep vao unsure (dong 449-457) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._cur_run_id |
462-475 | ui/co4e_tab.py |
self._wf, self._flow_runs — logic thuần, không đụng Qt trực tiếp (chỉ đọc self._wf là attribute) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 460-473) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._outputs_for |
477-480 | ui/co4e_tab.py |
self._flow_outputs — logic thuần | co | BANG CU KHAC: bang cu xep vao application/workflows/co4e_workflow_service.py (dong 475-478) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._update_run_btn |
482-484 | ui/co4e_tab.py |
self.run_btn được gán ngoài phạm vi đọc | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 480-482) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._build_sidebar |
487-600 | ui/co4e_tab.py |
method dài 113 dòng, gộp nhiều việc không liên quan: dựng section Workflows (list+CRUD+run-bg), section Agents (AgentListPanel), section Skills (SkillsListPanel), và section Runs (danh sách rút gọn) — nên tách thành các hàm _build_workflows_section/_build_agents_section/_build_skills_section/_build_runs_section riêng | co | - |
Co4ETab._sections |
495 | ui/co4e_tab.py |
trạng thái chia sẻ giữa _section/_fold_section/_sync_section_arrow — map key -> (header, body, stretch) | co | - |
Co4ETab.sidebar |
496 | ui/co4e_tab.py |
- | co | - |
Co4ETab.side_split |
500 | ui/co4e_tab.py |
- | co | - |
Co4ETab._build_sidebar.<locals>._Col |
505-514 | ui/co4e_tab.py |
lớp adapter cục bộ bên trong _build_sidebar, bọc QSplitter để các section builder gọi .addWidget(w, stretch) như trước | chua | BANG CU BO SOT: khong co dong nao cho symbol nay trong bang cu (363 dong) du no ro rang ton tai trong pham vi da quet -- co the do agent quet truoc bo lot, hoac day la ten sinh ra tu buoc gop lat cua ban do nay (vd ten method suy doan/tam). |
Co4ETab._build_sidebar.<locals>._Col.__init__ |
508-509 | ui/co4e_tab.py |
- | chua | BANG CU BO SOT: khong co dong nao cho symbol nay trong bang cu (363 dong) du no ro rang ton tai trong pham vi da quet -- co the do agent quet truoc bo lot, hoac day la ten sinh ra tu buoc gop lat cua ban do nay (vd ten method suy doan/tam). |
Co4ETab._build_sidebar.<locals>._Col.addWidget |
511-513 | ui/co4e_tab.py |
- | chua | BANG CU BO SOT: khong co dong nao cho symbol nay trong bang cu (363 dong) du no ro rang ton tai trong pham vi da quet -- co the do agent quet truoc bo lot, hoac day la ten sinh ra tu buoc gop lat cua ban do nay (vd ten method suy doan/tam). |
Co4ETab.wf_new_btn |
518 | ui/co4e_tab.py |
- | co | - |
Co4ETab.wf_list |
529 | ui/co4e_tab.py |
- | co | - |
Co4ETab.wf_edit_btn |
536 | ui/co4e_tab.py |
- | co | - |
Co4ETab.wf_dup_btn |
537 | ui/co4e_tab.py |
- | co | - |
Co4ETab.wf_del_btn |
538 | ui/co4e_tab.py |
- | co | - |
Co4ETab.wf_runbg_btn |
545 | ui/co4e_tab.py |
- | co | - |
Co4ETab._agent_panel |
557 | ui/co4e_tab.py |
AgentListPanel — widget đã tách sẵn ở làn khác (presentation/co4e/agent_list_panel.py), Co4ETab chỉ giữ tham chiếu và nối signal | chua | BANG CU BO SOT: khong co dong nao cho symbol nay trong bang cu (363 dong) du no ro rang ton tai trong pham vi da quet -- co the do agent quet truoc bo lot, hoac day la ten sinh ra tu buoc gop lat cua ban do nay (vd ten method suy doan/tam). |
Co4ETab.ag_new_btn |
558 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/agent_list_panel.py (dong 550) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.agent_list |
560 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/agent_list_panel.py (dong 558) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.ag_edit_btn |
561 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/agent_list_panel.py (dong 562) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.ag_del_btn |
563 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/agent_list_panel.py (dong 563) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._skills_panel |
572 | ui/co4e_tab.py |
SkillsListPanel — đã tách sẵn ở làn khác (presentation/co4e/skills_list_panel.py) | co | - |
Co4ETab.sk_manage_btn |
573 | ui/co4e_tab.py |
- | co | - |
Co4ETab.skill_list |
575 | ui/co4e_tab.py |
- | co | - |
Co4ETab.runs_more_btn |
583 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 586) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.runs_side_list |
591 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 594) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._SIDE_RUNS |
602 | ui/co4e_tab.py |
hằng số lớp | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 605) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._refresh_side_runs |
604-616 | ui/co4e_tab.py |
self.manager.runs() — trạng thái run manager | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 607-619) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._on_side_run_clicked |
618-626 | ui/co4e_tab.py |
self.runs_table được gán ngoài phạm vi đọc | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 621-629) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._section |
628-660 | ui/co4e_tab.py |
ghi vào self._sections — trạng thái chia sẻ | co | - |
Co4ETab._fold_section |
662-674 | ui/co4e_tab.py |
- | co | - |
Co4ETab._sync_section_arrow |
676-678 | ui/co4e_tab.py |
- | co | - |
Co4ETab._icon_btn |
680-684 | ui/co4e_tab.py |
- | co | - |
Co4ETab._reload_sidebar |
686-719 | ui/co4e_tab.py |
[GOP 2 luot quet trung ky hieu, dong 686] mot agent doc than den 700 (cat ngang lat), agent kia doc tiep 701-719 (vong lap nap agent list + skill list vao palette qua co4e.list_custom_agents()/skills_mod.skill_prefix_for) -- QUYET DINH: nap lai toan bo sidebar (Workflows/Agents/Skills/Runs quick-list), khong lien quan chat -- khop voi quyet dinh da chot o lane run-control (dong 685-718 trong ban do do). | co | - |
Co4ETab._palette_item |
721-725 | ui/co4e_tab.py |
helper tĩnh dựng QListWidgetItem với icon() — không liên quan chat | co | BANG CU KHAC: bang cu xep vao unsure (dong 724-728) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._build_center |
728-868 | ui/co4e_tab.py |
method dài ~140 dòng, gộp nhiều việc không liên quan: (1) dựng flow tab bar + scroll ẩn (không hiển thị), (2) center_stack + trang Runs, (3) toolbar flow editor (name_edit/add/save/mode/run/runs_btn), (4) canvas + overlay zoom, (5) tích hợp splitter canvas/chat qua self._build_chat(). Nên tách nhỏ thêm. Đọc/ghi self.center_stack, self.canvas, self._vsplit — trạng thái chia sẻ rộng với nhiều nhóm chức năng khác (canvas widget, run control, chat view) | co | - |
Co4ETab.flow_bar |
735 | ui/co4e_tab.py |
- | co | - |
Co4ETab.flow_add_btn |
761 | ui/co4e_tab.py |
- | co | - |
Co4ETab.flow_scroll |
778 | ui/co4e_tab.py |
- | co | - |
Co4ETab.center_stack |
802 | ui/co4e_tab.py |
trạng thái chia sẻ — self.center_stack được dùng bởi _build_runs_page, _show_runs và nhiều nơi khác ngoài lát này; chuyển trang giữa Runs table và flow editor | co | - |
Co4ETab.name_edit |
811 | ui/co4e_tab.py |
- | co | - |
Co4ETab.add_step_btn |
816 | ui/co4e_tab.py |
- | co | - |
Co4ETab.save_btn |
819 | ui/co4e_tab.py |
- | co | - |
Co4ETab.save_tpl_btn |
823-824 | ui/co4e_tab.py |
- | co | - |
Co4ETab.mode_combo |
825 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 828) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.run_btn |
830 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 833) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.runs_btn |
837 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 840) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.canvas |
853 | ui/co4e_tab.py |
trạng thái chia sẻ rộng — self.canvas đọc/ghi bởi rất nhiều method trong và ngoài lát này (add_blank_step, _on_node_selected, _on_config_changed, _sync_wf_from_canvas, _apply_workflow, _start_canvas_run...) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_canvas_widget.py (dong 856) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._vsplit |
860 | ui/co4e_tab.py |
trạng thái chia sẻ — self._vsplit dùng bởi _toggle_messages để co giãn giữa canvas và chat box; đúng như cảnh báo trong đề bài | co | - |
Co4ETab._build_runs_page |
870-898 | ui/co4e_tab.py |
chỉ wiring RunsPagePanel (đã tách ở co4e_run_control_widget.py, không thuộc lát này) vào handler của Co4ETab — ở lại ui/co4e_tab.py theo đúng mô tả docstring của method | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 873-932) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.runs_back_btn |
881 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 882) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.runs_title |
883 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 887) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.ws_folder_btn |
884 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 892) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.run_stop_btn |
887 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 900) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.run_rename_btn |
889 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 905) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.run_del_btn |
891 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 909) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.run_clear_btn |
893 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 913) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.runs_table |
895 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 921) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._wrap_config |
900-930 | ui/co4e_tab.py |
không liên quan chat; liên quan node-property config panel (đã tách riêng ở node_property_panel.py, không thuộc lát/target được giao cho agent này) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 934-964) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.config_toggle_btn |
912 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 946) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.config_title |
917 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 951) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._cfg_vlayout |
923 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 957) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._cfg_top_spacer |
927 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 961) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._cfg_bot_spacer |
928 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 962) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.config_container |
929 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 963) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._NARROW |
937 | ui/co4e_tab.py |
hằng số class-level (không phải self.<tên>) — ngưỡng bề rộng cửa sổ hẹp, không liên quan chat | co | - |
Co4ETab.showEvent |
939-941 | ui/co4e_tab.py |
Qt override, không liên quan chat | co | - |
Co4ETab._apply_narrow_layout |
943-953 | ui/co4e_tab.py |
không liên quan chat | co | - |
Co4ETab._toggle_config |
955-998 | ui/co4e_tab.py |
không liên quan chat; điều khiển config panel + splitter self._split | co | - |
Co4ETab._refresh_min_width |
1000-1005 | ui/co4e_tab.py |
không liên quan chat | co | - |
Co4ETab._build_canvas_overlay |
1007-1028 | ui/co4e_tab.py |
overlay zoom cho canvas — không liên quan chat, thuộc nhóm canvas widget | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_canvas_widget.py (dong 1041-1062) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.zoom_in_btn |
1020 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_canvas_widget.py (dong 1054) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.zoom_out_btn |
1021 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_canvas_widget.py (dong 1055) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.fit_btn |
1022 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_canvas_widget.py (dong 1056) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._build_chat |
1030-1093 | presentation/co4e/co4e_chat_view.py |
Khớp trực tiếp với mô tả target: dựng header 'Messages' (icon+tiêu đề+nút thu/mở), QStackedWidget chat_stack chứa ChatView theo flow, composer (usage_total label + _ChatInput + RoutingToggle + nút Gửi). NHƯNG method này CŨNG khởi tạo trạng thái chia sẻ không thuộc widget thuần: self._flow_logs (dict per-flow), self._vsplit_sizes, self._msgs_collapsed (dùng bởi _toggle_messages/_ensure_flow_log ở lại Co4ETab) — nên tách phần init state đó ra khỏi hàm dựng widget khi chuyển file. Cũng nối self.chat_input.submit và self.chat_send_btn.clicked trực tiếp tới self._chat_send (method ở lại Co4ETab) — cần thiết kế callback/signal khi tách. | co | - |
Co4ETab._chat_widget |
1032 | presentation/co4e/co4e_chat_view.py |
trạng thái chia sẻ — self._chat_widget.setMaximumHeight() được gọi từ _toggle_messages (ở lại Co4ETab) — điểm nối giữa 2 file | co | - |
Co4ETab._mhdr |
1038 | presentation/co4e/co4e_chat_view.py |
trạng thái chia sẻ — self._mhdr.sizeHint() đọc từ _toggle_messages (ở lại Co4ETab) | co | - |
Co4ETab.msgs_icon |
1040 | presentation/co4e/co4e_chat_view.py |
- | co | - |
Co4ETab.msgs_title |
1041 | presentation/co4e/co4e_chat_view.py |
- | co | - |
Co4ETab.chat_toggle_btn |
1042 | presentation/co4e/co4e_chat_view.py |
trạng thái chia sẻ — icon/tooltip của nút này bị _toggle_messages (ở lại Co4ETab) đổi qua lại icon 'chevron-up'/'chevron-down' | co | - |
Co4ETab.chat_stack |
1057 | presentation/co4e/co4e_chat_view.py |
trạng thái chia sẻ quan trọng — self.chat_stack được _ensure_flow_log (addWidget) và _apply_workflow (setCurrentWidget) đọc/ghi, cả hai ở lại Co4ETab; điểm nối chính giữa chat_view.py và Co4ETab | co | - |
Co4ETab._flow_logs |
1058 | ui/co4e_tab.py |
trạng thái chia sẻ per-flow (dict wf_id -> ChatView) — theo mô tả target, business logic quản lý log stays ở Co4ETab (_ensure_flow_log/_active_log/chat_log), nên dict này nên ở lại ui/co4e_tab.py dù được khởi tạo trong _build_chat (widget-building method) — cần tách khởi tạo này ra khỏi _build_chat khi chuyển file | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1092) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.chat_input_row |
1060 | presentation/co4e/co4e_chat_view.py |
trạng thái chia sẻ — show()/hide() gọi từ _toggle_messages (ở lại Co4ETab) | co | - |
Co4ETab._usage_total_lbl |
1065 | presentation/co4e/co4e_chat_view.py |
label usage-total của composer — có khả năng được cập nhật bởi _refresh_usage_total (không thuộc lát này, khả năng ở Co4ETab) — kiểm tra lại khi gộp | co | - |
Co4ETab.chat_input |
1071 | presentation/co4e/co4e_chat_view.py |
_ChatInput — submit signal nối tới self._chat_send (method ở lại Co4ETab, không có trong lát này) | co | - |
Co4ETab.chat_send_btn |
1074 | presentation/co4e/co4e_chat_view.py |
clicked nối tới self._chat_send (ở lại Co4ETab) | co | - |
Co4ETab.co4e_routing_toggle |
1079 | presentation/co4e/co4e_chat_view.py |
- | co | - |
Co4ETab._co4e_routed_provider |
1080 | ui/co4e_tab.py |
biến trạng thái routing override cho lượt chat kế tiếp — là business state hơn là widget, được đọc/ghi ở _chat_send (không thuộc lát này); không rõ nó nên ở composer widget hay ở lại Co4ETab, cần người quyết -- QUYET DINH: bien trang thai routing override cho luot chat ke tiep la BUSINESS STATE, khong phai widget -- cung mot self._co4e_routed_provider duoc gan lai o dong 1819 (trong _apply_co4e_routing, o lai ui/co4e_tab.py theo yeu cau de bai); khoi tao lan dau nay (dong 1080, ben trong _build_chat) nen duoc TACH RA khoi ham dung widget khi chuyen file, giong cach xu ly _flow_logs (dong 1058) -- quyet dinh o day = ui/co4e_tab.py. | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1114; 1853) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._vsplit_sizes |
1087 | ui/co4e_tab.py |
trạng thái chia sẻ với _toggle_messages (ở lại Co4ETab theo mô tả target) — dùng self._vsplit | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1121) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._msgs_collapsed |
1088 | ui/co4e_tab.py |
trạng thái chia sẻ với _toggle_messages (ở lại Co4ETab theo mô tả target) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1122) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._toggle_messages |
1095-1127 | ui/co4e_tab.py |
loại trừ khỏi chat_view.py theo mô tả đề bài — dùng self._vsplit (splitter canvas/chat) để co giãn không gian, đây là logic của Co4ETab không phải của widget chat | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1129-1161) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._ensure_flow_log |
1130-1139 | ui/co4e_tab.py |
loại trừ khỏi chat_view.py theo mô tả đề bài — quản lý state per-flow (self._flow_logs, self.chat_stack) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1164-1173) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._active_log |
1141-1143 | ui/co4e_tab.py |
loại trừ khỏi chat_view.py theo mô tả đề bài | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1175-1177) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.chat_log |
1145-1149 | ui/co4e_tab.py |
property, loại trừ khỏi chat_view.py theo mô tả đề bài | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1180-1183) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._plan_bubble |
1151-1157 | ui/co4e_tab.py |
property với getter (1151-1153) và setter (1155-1157), loại trừ khỏi chat_view.py theo mô tả đề bài | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1186-1187) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._apply_workflow |
1160-1173 | ui/co4e_tab.py |
đọc/ghi self._wf, self.chat_stack, self.canvas — trạng thái chia sẻ rộng, business logic đổi workflow đang hiển thị | co | - |
Co4ETab._new_workflow |
1175-1183 | ui/co4e_tab.py |
- | co | - |
Co4ETab._selected_wf |
1185-1191 | ui/co4e_tab.py |
co4e.get_workflow(ident) đọc từ repository lưu trữ workflow (đĩa) | co | - |
Co4ETab._load_selected_workflow |
1193-1196 | ui/co4e_tab.py |
qua _selected_wf() chạm đĩa | co | - |
Co4ETab._edit_selected_workflow |
1198-1203 | ui/co4e_tab.py |
qua _selected_wf() chạm đĩa | co | - |
Co4ETab._duplicate_selected_workflow |
1205-1212 | ui/co4e_tab.py |
co4e.duplicate_workflow ghi đĩa | co | BANG CU KHAC: bang cu xep vao application/workflows/co4e_workflow_service.py (dong 1239-1246) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._wf_context_menu |
1214-1237 | ui/co4e_tab.py |
dựng QMenu và dispatch tới các method khác (một số chạm đĩa) — bản thân method này không chạm đĩa trực tiếp | co | - |
Co4ETab._rename_workflow |
1239-1255 | ui/co4e_tab.py |
QInputDialog modal + co4e.save_workflow ghi đĩa; cũng đồng bộ self._wf.name nếu đang mở đúng flow — trạng thái chia sẻ với name_edit/self._wf | co | BANG CU KHAC: bang cu xep vao application/workflows/co4e_workflow_service.py (dong 1273-1289) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._delete_selected_workflow |
1257-1263 | ui/co4e_tab.py |
co4e.delete_workflow ghi đĩa | co | BANG CU KHAC: bang cu xep vao application/workflows/co4e_workflow_service.py (dong 1291-1297) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._sync_wf_from_canvas |
1265-1268 | ui/co4e_tab.py |
đọc self.canvas.nodes()/edges() và self.name_edit — trạng thái chia sẻ với canvas | co | - |
Co4ETab._save |
1270-1275 | ui/co4e_tab.py |
co4e.save_workflow ghi đĩa | co | BANG CU KHAC: bang cu xep vao application/workflows/co4e_workflow_service.py (dong 1304-1309) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._autosave |
1277-1280 | ui/co4e_tab.py |
co4e.save_workflow ghi đĩa (chỉ khi workflow đã tồn tại) | co | BANG CU KHAC: bang cu xep vao application/workflows/co4e_workflow_service.py (dong 1311-1314) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._on_name_changed |
1282-1284 | ui/co4e_tab.py |
gọi self._sync_active_flow_tab_text() (không thuộc lát này) — cập nhật self._wf.name | co | - |
Co4ETab._add_blank_step |
1286-1288 | ui/co4e_tab.py |
- | co | - |
Co4ETab._on_node_selected |
1291-1297 | ui/co4e_tab.py |
đọc self.canvas.nodes() và self.config — thuộc nhóm node-property, không phải chat | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 1325-1331) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._on_config_changed |
1299-1302 | ui/co4e_tab.py |
gọi self._autosave() (ghi đĩa gián tiếp) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/node_property_panel.py (dong 1333-1336) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._new_agent |
1305-1306 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/agent_list_panel.py (dong 1339-1340) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._edit_agent |
1308-1316 | ui/co4e_tab.py |
co4e.list_custom_agents() khả năng đọc đĩa | co | BANG CU KHAC: bang cu xep vao presentation/co4e/agent_list_panel.py (dong 1342-1350) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._edit_agent_dialog |
1318-1324 | ui/co4e_tab.py |
mở Co4EAgentDialog modal, co4e.save_custom_agent ghi đĩa | co | BANG CU KHAC: bang cu xep vao presentation/co4e/agent_list_panel.py (dong 1352-1358) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._delete_agent |
1326-1333 | ui/co4e_tab.py |
co4e.delete_custom_agent ghi đĩa | co | BANG CU KHAC: bang cu xep vao presentation/co4e/agent_list_panel.py (dong 1360-1367) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._manage_skills |
1335-1339 | ui/co4e_tab.py |
mở SkillsDialog modal | co | BANG CU KHAC: bang cu xep vao presentation/co4e/skills_list_panel.py (dong 1369-1373) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._skill_map |
1342-1348 | ui/co4e_tab.py |
logic thuần Python, đọc skills_mod.skill_prefix_for(name) — có khả năng đọc file skill từ đĩa | co | BANG CU KHAC: bang cu xep vao application/workflows/co4e_workflow_service.py (dong 1376-1382) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._current_mode |
1350-1351 | ui/co4e_tab.py |
đọc self.mode_combo.currentData() | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1384-1385) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._on_mode_changed |
1353-1359 | ui/co4e_tab.py |
reset self._manual_active/_manual_order/_manual_idx — trạng thái run-mode chia sẻ | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1387-1393) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._on_run_clicked |
1361-1371 | ui/co4e_tab.py |
gọi self.manager.stop/self._start_canvas_run — thuộc nhóm run control | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1395-1400) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._start_canvas_run |
1373-1390 | ui/co4e_tab.py |
khởi động self.manager.start(...) — sẽ trigger chạy step/agent (network/AI provider); ghi self._flow_runs, self._run_logs[run_id] = self.chat_log — điểm nối giữa run-control và chat log (self.chat_log là property loại trừ khỏi chat_view.py) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1407-1424) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_single |
1392-1397 | ui/co4e_tab.py |
gọi _start_canvas_run | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1426-1431) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_from |
1399-1403 | ui/co4e_tab.py |
[GOP 2 luot quet trung ky hieu, dong 1399] mot agent doc phan dau (1399-1400, chua thay than ham), agent kia doc phan duoi (1401-1403, tag tam 'unknown_method_fragment_before_1401') voi than ham la self._start_canvas_run(..., only=self._downstream(node_id), seed=dict(self._outputs_for(self._wf.id))) -- QUYET DINH: chay lai tu 1 node cu the tren canvas (logic thuc thi run), khong lien quan chat; giu o ui/co4e_tab.py cung nhom voi _run_single/_downstream. | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1433-1437) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._downstream |
1405-1416 | ui/co4e_tab.py |
đọc self.canvas.edges() — thuần logic đồ thị, test được không cần Qt nếu canvas là fake | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1439-1450) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._manual_run_or_advance |
1419-1432 | ui/co4e_tab.py |
đọc/ghi self._wf, self._manual_order, self._manual_idx, self._manual_active, self._outputs_for — trạng thái chia sẻ giữa manual-run và canvas; gọi self.canvas.reset_statuses() | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1453-1466) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._manual_step |
1434-1450 | ui/co4e_tab.py |
ghi self._flow_runs, self._run_logs (định tuyến log theo từng flow — trạng thái chia sẻ then chốt); self.manager.start có thể chạm đĩa/spawn agent; self.run_btn.setText cần widget sống | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1468-1484) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._topo_order |
1452-1457 | ui/co4e_tab.py |
- | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1486-1491) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._on_manager_event |
1460-1516 | ui/co4e_tab.py |
method dài (~57 dòng) gộp nhiều việc: định tuyến sự kiện theo run_id/flow, cập nhật canvas status, ghi self._outputs_for/self._run_logs/self._flow_runs (trạng thái chia sẻ nhiều flow song song), gọi self._append_chat/_append_diff/_append_plan, hiện popup thông báo — nên cân nhắc tách theo loại event | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1494-1550) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._notify_run_finished |
1518-1539 | ui/co4e_tab.py |
dựng QMessageBox không chặn — cần QApplication sống | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1552-1573) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_popups |
1526-1527 | ui/co4e_tab.py |
khởi tạo lười (hasattr guard) bên trong _notify_run_finished — không thấy gán trong init ở lát này, agent đọc init nên đối chiếu | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1560-1561) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._refresh_runs |
1541-1582 | ui/co4e_tab.py |
cập nhật self.runs_table, self.flow_bar, self._sections — chạm nhiều widget cùng lúc | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1575-1616) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._stop_selected_run |
1584-1590 | ui/co4e_tab.py |
đọc self.runs_table.currentRow() | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1618-1624) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._delete_selected_run |
1592-1605 | ui/co4e_tab.py |
ghi self._flow_runs, self._run_logs — trạng thái chia sẻ per-flow | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1626-1639) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._runs_context_menu |
1607-1621 | ui/co4e_tab.py |
dựng QMenu tại vị trí chuột — cần widget sống | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1641-1655) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.set_project |
1624-1640 | ui/co4e_tab.py |
ghi self._project_id, self._project_dir (trạng thái workspace chia sẻ, ảnh hưởng _flow_output_root/_out_dir); load_project đọc dữ liệu project (đĩa); gọi self._refresh_ws_folder_btn nếu widget tồn tại | co | - |
Co4ETab._flow_output_root |
1642-1652 | ui/co4e_tab.py |
đọc self._project_dir, self.ctx.config — logic thuần tính đường dẫn, không tự chạm đĩa (không mkdir/open) | co | - |
Co4ETab._refresh_ws_folder_btn |
1654-1659 | ui/co4e_tab.py |
self.ws_folder_btn.setText/setToolTip | co | - |
Co4ETab._open_workspace_folder |
1661-1668 | ui/co4e_tab.py |
mkdir + open_location (mở file explorer hệ điều hành, spawn process) | co | - |
Co4ETab._open_run_output_folder |
1670-1681 | ui/co4e_tab.py |
kiểm tra path.exists()/mkdir + open_location | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1704-1715) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._rename_selected_run |
1683-1714 | ui/co4e_tab.py |
dựng QInputDialog; ghi self._flows, self.flow_bar (tab text), self._wf, self.name_edit — trạng thái chia sẻ giữa danh sách flow và tab đang mở; co4e.save_workflow ghi đĩa | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1717-1748) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_selected_in_background |
1716-1726 | ui/co4e_tab.py |
self.manager.start khởi chạy agent nền (ghi output ra đĩa) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1750-1760) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._wf_by_id |
1728-1736 | ui/co4e_tab.py |
co4e.get_workflow đọc workflow đã lưu từ đĩa; đọc self._wf | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1762-1770) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._rerun_run_item |
1738-1749 | ui/co4e_tab.py |
item là QTableWidgetItem; manager.start khởi chạy agent nền | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1772-1783) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._open_run_from_table |
1751-1770 | ui/co4e_tab.py |
gọi self._open_flow(wf), self.canvas.update_node_status — chạm canvas widget và self._wf | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 1785-1804) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab.showEvent |
1772-1775 | ui/co4e_tab.py |
override Qt event | co | - |
Co4ETab._out_dir |
1777-1783 | ui/co4e_tab.py |
mkdir(parents=True); đọc self._wf.name | co | - |
Co4ETab._chat_send |
1786-1812 | ui/co4e_tab.py |
theo yêu cầu, _chat_send KHÔNG thuộc co4e_chat_view.py dù đọc self.chat_input — ở lại Co4ETab; đọc/ghi self._chat_worker | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1820-1846) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._apply_co4e_routing |
1814-1849 | ui/co4e_tab.py |
ghi self._co4e_routed_provider (trạng thái đọc lại trong _run_chat_turn/job); nhánh manual gọi confirm_switch — mở dialog Qt (routing_toggle) nên cần widget sống ở nhánh đó | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1848-1883) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._co4e_routed_provider |
1819 | ui/co4e_tab.py |
gán lại mỗi lần gọi _apply_co4e_routing; được đọc bằng getattr(...,'None') ở _run_chat_turn/job — không chắc có init trong init (nằm ngoài lát này) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1114; 1853) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._extract_agent_directive |
1851-1857 | ui/co4e_tab.py |
logic regex thuần, dễ test độc lập | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1885-1891) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._resolve_agent |
1859-1867 | ui/co4e_tab.py |
duyệt BUILTIN_AGENTS + co4e.list_custom_agents() (custom agents có thể đọc đĩa nhưng bản thân hàm chỉ gọi list) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1893-1901) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_chat_turn |
1869-1940 | ui/co4e_tab.py |
method dài (~72 dòng) gộp: build prompt, định nghĩa 4 closure lồng nhau (job/on_event/done/failed), khởi AgentWorker — nên tách; theo yêu cầu KHÔNG đưa job()/AgentWorker sang co4e_chat_view.py; đọc/ghi self.chat_log, self._wf, self._chat_worker (trạng thái chia sẻ) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1903-1974) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_chat_turn.job |
1883-1912 | ui/co4e_tab.py |
closure lồng trong _run_chat_turn, chạy trong AgentWorker thread; gọi run_cowork → gọi provider AI qua mạng; theo yêu cầu ở lại Co4ETab cùng _chat_send | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1917-1946) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_chat_turn.job._emit |
1894-1901 | ui/co4e_tab.py |
helper lồng bên trong job(), chuyển tiếp event streaming sang worker.emit_event | chua | BANG CU BO SOT: khong co dong nao cho symbol nay trong bang cu (363 dong) du no ro rang ton tai trong pham vi da quet -- co the do agent quet truoc bo lot, hoac day la ten sinh ra tu buoc gop lat cua ban do nay (vd ten method suy doan/tam). |
Co4ETab._run_chat_turn.on_event |
1914-1920 | ui/co4e_tab.py |
closure cập nhật assistant.set_markdown/log.scroll_to_bottom — cần widget sống; gọi self._append_plan | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1948-1954) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_chat_turn.done |
1922-1928 | ui/co4e_tab.py |
ghi self._chat_worker=None, gọi self._apply_usage — chạm self._flow_usage | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1956-1962) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._run_chat_turn.failed |
1930-1933 | ui/co4e_tab.py |
ghi self._chat_worker=None, gọi self._append_chat | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1964-1967) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._append_chat |
1942-1957 | ui/co4e_tab.py |
theo yêu cầu, _append_chat KHÔNG thuộc co4e_chat_view.py — dùng self.chat_log mặc định, business logic per-flow ở lại Co4ETab | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1976-1991) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._fmt_usage |
1960-1967 | ui/co4e_tab.py |
logic thuần định dạng chuỗi + tra bảng giá từ self.ctx.config.data — test được không cần Qt | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 1994-2001) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._apply_usage |
1969-1986 | ui/co4e_tab.py |
ghi self._flow_usage (tổng usage theo từng flow — trạng thái chia sẻ với composer label usage-total ở co4e_chat_view.py); gọi bub.add_usage cần widget bubble sống | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 2003-2020) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._refresh_usage_total |
1988-2003 | ui/co4e_tab.py |
đọc self._flow_usage, self._wf; ghi self._usage_total_lbl.setText — label này được dựng trong co4e_chat_view.py (composer) nên đây là điểm nối trạng thái chia sẻ giữa 2 file | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 2022-2037) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._append_diff |
2005-2009 | ui/co4e_tab.py |
theo yêu cầu KHÔNG thuộc co4e_chat_view.py — ở lại Co4ETab | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 2039-2043) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._append_plan |
2011-2022 | ui/co4e_tab.py |
theo yêu cầu KHÔNG thuộc co4e_chat_view.py — dùng log._co4e_plan_bubble (state gắn trên đối tượng ChatView, không phải self) | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 2045-2056) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Co4ETab._retranslate |
2025-2045 | ui/co4e_tab.py |
duyệt self._sections (trạng thái chia sẻ toàn tab) và setText hàng loạt widget nhiều khu vực khác nhau (runs, sidebar, header) — cắt ngang nhiều nhóm chức năng khác nhau nên khó tách gọn | co | - |
_html_escape |
2048-2049 | ui/co4e_tab.py |
hàm module-level, tiện ích thuần chuỗi, không thuộc riêng chat_view | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_chat_view.py (dong 2082-2083) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
_qcolor |
2052-2054 | ui/co4e_tab.py |
QColor dùng như kiểu giá trị, không cần QApplication sống | co | BANG CU KHAC: bang cu xep vao presentation/co4e/co4e_run_control_widget.py (dong 2086-2088) nhung theo mo ta dich cua lan quet nay -> quyet dinh o day = ui/co4e_tab.py. |
Chỗ thấy khác tài liệu — cần người quyết
Không có symbol nào trong 220 symbol thô có note bắt đầu bằng khac tai lieu: — mục này để trống theo đúng yêu cầu tự kiểm (không có gì cần liệt kê).