Files
cowork-local/docs/architecture/co4e-split-map-chat-view.json
T
f9f6bc01fd
CI / test (push) Canceled after 0s
Feature/delta team/epic r04 (#7)
## Summary

epic r04 - begin refactor

## Change Type

- [x] Cowork feature
- [ ] Bug fix
- [ ] Core AI contribution
- [ ] Test / hardening
- [ ] Performance
- [ ] Documentation

## Related Work

Cowork Task:

Core Repo: http://34.143.229.138/gitea-admin/fsg-ai-core-assets

Core AI Issue:

Core Task:

Related PR:

## Scope

What is intentionally included?

What is intentionally NOT included?

## Validation

- [ ] Unit tests
- [ ] Integration tests
- [ ] Manual verification
- [ ] Regression check

Commands / evidence:

## Security Impact

Permission / credential / network / customer data impact:

## Compatibility

- [ ] No breaking change
- [ ] Breaking change documented

## Reviewer Notes

Anything Cowork reviewers should pay attention to.

---------

Co-authored-by: Anh Tran Nguyen Minh <anhtnm1@fpt.com>
Co-authored-by: Huong Le Thi Thien <huongltt35@fpt.com>
Co-authored-by: Nam Pham Dinh Thanh <nampdt@fpt.com>
Co-authored-by: Vu Dam Tuan <vudt15@fpt.com>
Co-authored-by: Hiep Ha Van <hiephv3@fpt.com>
Co-authored-by: Lam Hoang Van <lamhv7@fpt.com>
Reviewed-on: #7
Co-authored-by: Duy Le Huu <duylh19@fpt.com>
2026-08-31 05:15:13 +00:00

3079 lines
123 KiB
JSON

{
"lane": "chat-view (khung Chat / Messages / composer)",
"source_file_scanned": "ui/co4e_tab.py",
"generated_from_raw_symbol_count": 220,
"raw_scan_agents": 3,
"final_row_count": 218,
"chat_view_target": "presentation/co4e/co4e_chat_view.py",
"container_target": "ui/co4e_tab.py",
"chat_view_symbol_count": 21,
"container_symbol_count": 197,
"other_lane_symbol_count": 0,
"khac_tai_lieu_notes_found": 0,
"merged_duplicate_symbol_groups": [
"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)"
],
"kept_separate_anomaly_symbols": [
"Co4ETab.showEvent (2 dinh nghia cung ten trong 1 class -- anomaly co that trong source, ban thu 2 (dong 1772-1775) de len ban dau (dong 939-941) luc runtime; khop voi 'kept_separate_anomaly_symbols' cua ca bang cu va ban do run-control)"
],
"old_table_reference": "docs/architecture/co4e-split-map.json",
"systemic_old_table_finding": "Bang cu dung target_file='presentation/co4e/co4e_tab.py' cho toan bo than con lai cua lop Co4ETab (75 dong), nhung file do o repo hien tai chi la factory build_co4e_tab() mong (~53 dong, boc nguyen Co4ETab cu 1:1) -- KHONG phai noi lop Co4ETab that su song. Lop do van dang o ui/co4e_tab.py. Da xac nhan lai phat hien nay tu ban do run-control (docs/architecture/co4e-split-map-run-control.md, muc 1). Ban do nay tu quy doi 'presentation/co4e/co4e_tab.py' -> 'ui/co4e_tab.py' truoc khi ket luan lech o cot cuoi cung.",
"scope_narrowing_finding": "Bang cu (50 dong, luc no duoc quet) coi 'chat view' theo nghia rong: gom ca KHUNG widget (header Messages, QStackedWidget chat_stack, composer, _ChatInput, RoutingToggle) LAN toan bo business logic dieu phoi luot chat (_chat_send, _apply_co4e_routing, _run_chat_turn va 4 closure long ben 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). Mo ta dich cua lan quet 3-agent hien tai (lap lai trong tung ghi chu rieng le, tu khoa 'theo yeu cau KHONG thuoc co4e_chat_view.py') thu hep pham vi presentation/co4e/co4e_chat_view.py CHI con la KHUNG WIDGET thuan tuy: _ChatInput + _directive_token, va phan _build_chat dung UI (header/composer/stack) cua Co4ETab. Toan bo business logic dieu phoi luot chat, quan ly log per-flow, usage va routing o LAI ui/co4e_tab.py. Day la khac biet lon nhat giua bang cu va ban do nay -- anh huong toi hon 20 dong ben duoi (xem cot cuoi cung cua tung dong lien quan).",
"plan_glyph_and_friends_finding": "_PLAN_GLYPH, _fmt_plan, _skill_names, _agent_names, _qcolor la cac symbol PHUC VU chat (glyph/format cho bong bong 'plan', autocomplete /skill /agent trong o nhap, mau cot trang thai) nhung bang cu lai xep chung vao presentation/co4e/co4e_run_control_widget.py (khong phai chat_view.py, cung khong phai ui/co4e_tab.py) -- cung sai giong he phat hien da ghi nhan o ban do run-control cho chinh 4 symbol nay (_PLAN_GLYPH, _fmt_plan, _qcolor) cong them 2 symbol moi (_skill_names, _agent_names) chua tung duoc doi chieu truoc do. Ly do cac symbol nay o lai ui/co4e_tab.py thay vi chat_view.py: _skill_names/_agent_names duoc dung o nhieu noi trong file (khong chi trong composer chat), con _PLAN_GLYPH/_fmt_plan phuc vu _append_plan (business logic, KHONG thuoc widget) va _qcolor la kieu gia tri dung trong _refresh_runs (khong lien quan chat).",
"khac_tai_lieu_rows": [],
"rows": [
{
"symbol": "_PLAN_GLYPH",
"kind": "attribute",
"line_start": 47,
"line_end": 48,
"line_display": "47-48",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "_fmt_plan",
"kind": "function",
"line_start": 51,
"line_end": 60,
"line_display": "51-60",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "dùng bởi _append_plan (business logic per-flow, ở lại Co4ETab theo mô tả target)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "_skill_names",
"kind": "function",
"line_start": 63,
"line_end": 67,
"line_display": "63-67",
"needs_qt_widget": false,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "đọ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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "_agent_names",
"kind": "function",
"line_start": 70,
"line_end": 73,
"line_display": "70-73",
"needs_qt_widget": false,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "đọ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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "_EqualTabBar",
"kind": "class",
"line_start": 76,
"line_end": 96,
"line_display": "76-96",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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).",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_EqualTabBar.tabSizeHint",
"kind": "method",
"line_start": 84,
"line_end": 92,
"line_display": "84-92",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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.",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_EqualTabBar.resizeEvent",
"kind": "method",
"line_start": 94,
"line_end": 96,
"line_display": "94-96",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "thuộc _EqualTabBar — xem note ở class -- QUYET DINH: thuoc _EqualTabBar -- xem ly do o class, khong lien quan chat.",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_PaletteList",
"kind": "class",
"line_start": 99,
"line_end": 121,
"line_display": "99-121",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "dùng cho wf_list ở sidebar (drag workflow lên canvas), không liên quan chat view",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "_PaletteList.__init__",
"kind": "method",
"line_start": 104,
"line_end": 108,
"line_display": "104-108",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "_PaletteList.startDrag",
"kind": "method",
"line_start": 110,
"line_end": 121,
"line_display": "110-121",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "_directive_token",
"kind": "function",
"line_start": 124,
"line_end": 136,
"line_display": "124-136",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_ChatInput",
"kind": "class",
"line_start": 139,
"line_end": 228,
"line_display": "139-228",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "ô nhập của composer — nằm trong phạm vi widget khung chat theo mô tả target",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_ChatInput.submit",
"kind": "attribute",
"line_start": 143,
"line_end": 143,
"line_display": "143",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "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",
"merge_note": null,
"in_old_table": "chua",
"old_table_mismatch": "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)."
},
{
"symbol": "_ChatInput.__init__",
"kind": "method",
"line_start": 145,
"line_end": 153,
"line_display": "145-153",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_ChatInput._maybe_popup",
"kind": "method",
"line_start": 155,
"line_end": 180,
"line_display": "155-180",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "gọi _skill_names()/_agent_names() (đọc đĩa) để dựng popup gợi ý — phần Qt (định vị popup, resize) đòi QWidget sống",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_ChatInput._add_row",
"kind": "method",
"line_start": 182,
"line_end": 186,
"line_display": "182-186",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_ChatInput._accept",
"kind": "method",
"line_start": 188,
"line_end": 201,
"line_display": "188-201",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_ChatInput.focusOutEvent",
"kind": "method",
"line_start": 203,
"line_end": 206,
"line_display": "203-206",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_ChatInput.keyPressEvent",
"kind": "method",
"line_start": 208,
"line_end": 228,
"line_display": "208-228",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "phát submit khi Enter và popup không hiện — Co4ETab nối submit -> _chat_send ở ngoài widget",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab",
"kind": "class",
"line_start": 231,
"line_end": 700,
"line_display": "231-700",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "cắt ngang lát — cần agent gộp đối chiếu (class tiếp tục sau dòng 700)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.status_message",
"kind": "attribute",
"line_start": 232,
"line_end": 232,
"line_display": "232",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "Signal lớp",
"merge_note": null,
"in_old_table": "chua",
"old_table_mismatch": "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)."
},
{
"symbol": "Co4ETab.__init__",
"kind": "method",
"line_start": 234,
"line_end": 306,
"line_display": "234-306",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.ctx",
"kind": "attribute",
"line_start": 236,
"line_end": 236,
"line_display": "236",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._wf",
"kind": "attribute",
"line_start": 237,
"line_end": 237,
"line_display": "237",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._chat_worker",
"kind": "attribute",
"line_start": 238,
"line_end": 238,
"line_display": "238",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.manager",
"kind": "attribute",
"line_start": 240,
"line_end": 240,
"line_display": "240",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "Co4ERunManager — đã có RunsPagePanel/co4e_run_control_widget.py riêng, nhưng self.manager là thuộc tính của Co4ETab, ở lại",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._flow_runs",
"kind": "attribute",
"line_start": 245,
"line_end": 245,
"line_display": "245",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_logs",
"kind": "attribute",
"line_start": 246,
"line_end": 246,
"line_display": "246",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._flow_outputs",
"kind": "attribute",
"line_start": 247,
"line_end": 247,
"line_display": "247",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._flow_usage",
"kind": "attribute",
"line_start": 250,
"line_end": 250,
"line_display": "250",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._project_id",
"kind": "attribute",
"line_start": 251,
"line_end": 251,
"line_display": "251",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._project_dir",
"kind": "attribute",
"line_start": 252,
"line_end": 252,
"line_display": "252",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._manual_active",
"kind": "attribute",
"line_start": 254,
"line_end": 254,
"line_display": "254",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._manual_order",
"kind": "attribute",
"line_start": 255,
"line_end": 255,
"line_display": "255",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._manual_idx",
"kind": "attribute",
"line_start": 256,
"line_end": 256,
"line_display": "256",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._flows",
"kind": "attribute",
"line_start": 259,
"line_end": 259,
"line_display": "259",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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*",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._active_flow_idx",
"kind": "attribute",
"line_start": 260,
"line_end": 260,
"line_display": "260",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._split",
"kind": "attribute",
"line_start": 263,
"line_end": 263,
"line_display": "263",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.config",
"kind": "attribute",
"line_start": 270,
"line_end": 270,
"line_display": "270",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._config_collapsed",
"kind": "attribute",
"line_start": 276,
"line_end": 276,
"line_display": "276",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._config_expanded_w",
"kind": "attribute",
"line_start": 277,
"line_end": 277,
"line_display": "277",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._narrow_guard",
"kind": "attribute",
"line_start": 282,
"line_end": 282,
"line_display": "282",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._open_flow",
"kind": "method",
"line_start": 309,
"line_end": 340,
"line_display": "309-340",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọc/ghi self._flows, self.flow_bar — trạng thái chia sẻ giữa các flow tab",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._close_other_flows",
"kind": "method",
"line_start": 342,
"line_end": 357,
"line_display": "342-357",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self._flows, self._active_flow_idx",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._show_runs",
"kind": "method",
"line_start": 359,
"line_end": 369,
"line_display": "359-369",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self.flow_bar dùng chung với logic mở flow tab",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._on_flow_tab_changed",
"kind": "method",
"line_start": 371,
"line_end": 387,
"line_display": "371-387",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọ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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._sync_runs_toggle",
"kind": "method",
"line_start": 389,
"line_end": 396,
"line_display": "389-396",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._add_tab_close_button",
"kind": "method",
"line_start": 398,
"line_end": 408,
"line_display": "398-408",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._close_flow_tab_button",
"kind": "method",
"line_start": 410,
"line_end": 414,
"line_display": "410-414",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._close_flow_tab",
"kind": "method",
"line_start": 416,
"line_end": 444,
"line_display": "416-444",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self._flows, self._flow_runs, self._run_logs — trạng thái chia sẻ giữa flow tab và run log của chat",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._sync_active_flow_tab_text",
"kind": "method",
"line_start": 446,
"line_end": 449,
"line_display": "446-449",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._reflect_active_run",
"kind": "method",
"line_start": 451,
"line_end": 459,
"line_display": "451-459",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self._flow_runs, self.canvas — canvas là thuộc tính được gán ngoài phạm vi đọc",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._cur_run_id",
"kind": "method",
"line_start": 462,
"line_end": 475,
"line_display": "462-475",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self._wf, self._flow_runs — logic thuần, không đụng Qt trực tiếp (chỉ đọc self._wf là attribute)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._outputs_for",
"kind": "method",
"line_start": 477,
"line_end": 480,
"line_display": "477-480",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self._flow_outputs — logic thuần",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._update_run_btn",
"kind": "method",
"line_start": 482,
"line_end": 484,
"line_display": "482-484",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self.run_btn được gán ngoài phạm vi đọc",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._build_sidebar",
"kind": "method",
"line_start": 487,
"line_end": 600,
"line_display": "487-600",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._sections",
"kind": "attribute",
"line_start": 495,
"line_end": 495,
"line_display": "495",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "trạng thái chia sẻ giữa _section/_fold_section/_sync_section_arrow — map key -> (header, body, stretch)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.sidebar",
"kind": "attribute",
"line_start": 496,
"line_end": 496,
"line_display": "496",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.side_split",
"kind": "attribute",
"line_start": 500,
"line_end": 500,
"line_display": "500",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._build_sidebar.<locals>._Col",
"kind": "class",
"line_start": 505,
"line_end": 514,
"line_display": "505-514",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "chua",
"old_table_mismatch": "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)."
},
{
"symbol": "Co4ETab._build_sidebar.<locals>._Col.__init__",
"kind": "method",
"line_start": 508,
"line_end": 509,
"line_display": "508-509",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "chua",
"old_table_mismatch": "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)."
},
{
"symbol": "Co4ETab._build_sidebar.<locals>._Col.addWidget",
"kind": "method",
"line_start": 511,
"line_end": 513,
"line_display": "511-513",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "chua",
"old_table_mismatch": "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)."
},
{
"symbol": "Co4ETab.wf_new_btn",
"kind": "attribute",
"line_start": 518,
"line_end": 518,
"line_display": "518",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.wf_list",
"kind": "attribute",
"line_start": 529,
"line_end": 529,
"line_display": "529",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.wf_edit_btn",
"kind": "attribute",
"line_start": 536,
"line_end": 536,
"line_display": "536",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.wf_dup_btn",
"kind": "attribute",
"line_start": 537,
"line_end": 537,
"line_display": "537",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.wf_del_btn",
"kind": "attribute",
"line_start": 538,
"line_end": 538,
"line_display": "538",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.wf_runbg_btn",
"kind": "attribute",
"line_start": 545,
"line_end": 545,
"line_display": "545",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._agent_panel",
"kind": "attribute",
"line_start": 557,
"line_end": 557,
"line_display": "557",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "chua",
"old_table_mismatch": "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)."
},
{
"symbol": "Co4ETab.ag_new_btn",
"kind": "attribute",
"line_start": 558,
"line_end": 558,
"line_display": "558",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.agent_list",
"kind": "attribute",
"line_start": 560,
"line_end": 560,
"line_display": "560",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.ag_edit_btn",
"kind": "attribute",
"line_start": 561,
"line_end": 561,
"line_display": "561",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.ag_del_btn",
"kind": "attribute",
"line_start": 563,
"line_end": 563,
"line_display": "563",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._skills_panel",
"kind": "attribute",
"line_start": 572,
"line_end": 572,
"line_display": "572",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "SkillsListPanel — đã tách sẵn ở làn khác (presentation/co4e/skills_list_panel.py)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.sk_manage_btn",
"kind": "attribute",
"line_start": 573,
"line_end": 573,
"line_display": "573",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.skill_list",
"kind": "attribute",
"line_start": 575,
"line_end": 575,
"line_display": "575",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.runs_more_btn",
"kind": "attribute",
"line_start": 583,
"line_end": 583,
"line_display": "583",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.runs_side_list",
"kind": "attribute",
"line_start": 591,
"line_end": 591,
"line_display": "591",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._SIDE_RUNS",
"kind": "attribute",
"line_start": 602,
"line_end": 602,
"line_display": "602",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "hằng số lớp",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._refresh_side_runs",
"kind": "method",
"line_start": 604,
"line_end": 616,
"line_display": "604-616",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self.manager.runs() — trạng thái run manager",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._on_side_run_clicked",
"kind": "method",
"line_start": 618,
"line_end": 626,
"line_display": "618-626",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self.runs_table được gán ngoài phạm vi đọc",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._section",
"kind": "method",
"line_start": 628,
"line_end": 660,
"line_display": "628-660",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "ghi vào self._sections — trạng thái chia sẻ",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._fold_section",
"kind": "method",
"line_start": 662,
"line_end": 674,
"line_display": "662-674",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._sync_section_arrow",
"kind": "method",
"line_start": 676,
"line_end": 678,
"line_display": "676-678",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._icon_btn",
"kind": "method",
"line_start": 680,
"line_end": 684,
"line_display": "680-684",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._reload_sidebar",
"kind": "method",
"line_start": 686,
"line_end": 719,
"line_display": "686-719",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "[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).",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._palette_item",
"kind": "method",
"line_start": 721,
"line_end": 725,
"line_display": "721-725",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "helper tĩnh dựng QListWidgetItem với icon() — không liên quan chat",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._build_center",
"kind": "method",
"line_start": 728,
"line_end": 868,
"line_display": "728-868",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.flow_bar",
"kind": "attribute",
"line_start": 735,
"line_end": 735,
"line_display": "735",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.flow_add_btn",
"kind": "attribute",
"line_start": 761,
"line_end": 761,
"line_display": "761",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.flow_scroll",
"kind": "attribute",
"line_start": 778,
"line_end": 778,
"line_display": "778",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.center_stack",
"kind": "attribute",
"line_start": 802,
"line_end": 802,
"line_display": "802",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.name_edit",
"kind": "attribute",
"line_start": 811,
"line_end": 811,
"line_display": "811",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.add_step_btn",
"kind": "attribute",
"line_start": 816,
"line_end": 816,
"line_display": "816",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.save_btn",
"kind": "attribute",
"line_start": 819,
"line_end": 819,
"line_display": "819",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.save_tpl_btn",
"kind": "attribute",
"line_start": 823,
"line_end": 824,
"line_display": "823-824",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.mode_combo",
"kind": "attribute",
"line_start": 825,
"line_end": 825,
"line_display": "825",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.run_btn",
"kind": "attribute",
"line_start": 830,
"line_end": 830,
"line_display": "830",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.runs_btn",
"kind": "attribute",
"line_start": 837,
"line_end": 837,
"line_display": "837",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.canvas",
"kind": "attribute",
"line_start": 853,
"line_end": 853,
"line_display": "853",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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...)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._vsplit",
"kind": "attribute",
"line_start": 860,
"line_end": 860,
"line_display": "860",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._build_runs_page",
"kind": "method",
"line_start": 870,
"line_end": 898,
"line_display": "870-898",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.runs_back_btn",
"kind": "attribute",
"line_start": 881,
"line_end": 881,
"line_display": "881",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.runs_title",
"kind": "attribute",
"line_start": 883,
"line_end": 883,
"line_display": "883",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.ws_folder_btn",
"kind": "attribute",
"line_start": 884,
"line_end": 884,
"line_display": "884",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.run_stop_btn",
"kind": "attribute",
"line_start": 887,
"line_end": 887,
"line_display": "887",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.run_rename_btn",
"kind": "attribute",
"line_start": 889,
"line_end": 889,
"line_display": "889",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.run_del_btn",
"kind": "attribute",
"line_start": 891,
"line_end": 891,
"line_display": "891",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.run_clear_btn",
"kind": "attribute",
"line_start": 893,
"line_end": 893,
"line_display": "893",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.runs_table",
"kind": "attribute",
"line_start": 895,
"line_end": 895,
"line_display": "895",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._wrap_config",
"kind": "method",
"line_start": 900,
"line_end": 930,
"line_display": "900-930",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.config_toggle_btn",
"kind": "attribute",
"line_start": 912,
"line_end": 912,
"line_display": "912",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.config_title",
"kind": "attribute",
"line_start": 917,
"line_end": 917,
"line_display": "917",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._cfg_vlayout",
"kind": "attribute",
"line_start": 923,
"line_end": 923,
"line_display": "923",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._cfg_top_spacer",
"kind": "attribute",
"line_start": 927,
"line_end": 927,
"line_display": "927",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._cfg_bot_spacer",
"kind": "attribute",
"line_start": 928,
"line_end": 928,
"line_display": "928",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.config_container",
"kind": "attribute",
"line_start": 929,
"line_end": 929,
"line_display": "929",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._NARROW",
"kind": "attribute",
"line_start": 937,
"line_end": 937,
"line_display": "937",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.showEvent",
"kind": "method",
"line_start": 939,
"line_end": 941,
"line_display": "939-941",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "Qt override, không liên quan chat",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._apply_narrow_layout",
"kind": "method",
"line_start": 943,
"line_end": 953,
"line_display": "943-953",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "không liên quan chat",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._toggle_config",
"kind": "method",
"line_start": 955,
"line_end": 998,
"line_display": "955-998",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "không liên quan chat; điều khiển config panel + splitter self._split",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._refresh_min_width",
"kind": "method",
"line_start": 1000,
"line_end": 1005,
"line_display": "1000-1005",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "không liên quan chat",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._build_canvas_overlay",
"kind": "method",
"line_start": 1007,
"line_end": 1028,
"line_display": "1007-1028",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "overlay zoom cho canvas — không liên quan chat, thuộc nhóm canvas widget",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.zoom_in_btn",
"kind": "attribute",
"line_start": 1020,
"line_end": 1020,
"line_display": "1020",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.zoom_out_btn",
"kind": "attribute",
"line_start": 1021,
"line_end": 1021,
"line_display": "1021",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.fit_btn",
"kind": "attribute",
"line_start": 1022,
"line_end": 1022,
"line_display": "1022",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._build_chat",
"kind": "method",
"line_start": 1030,
"line_end": 1093,
"line_display": "1030-1093",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "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.",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._chat_widget",
"kind": "attribute",
"line_start": 1032,
"line_end": 1032,
"line_display": "1032",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._mhdr",
"kind": "attribute",
"line_start": 1038,
"line_end": 1038,
"line_display": "1038",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "trạng thái chia sẻ — self._mhdr.sizeHint() đọc từ _toggle_messages (ở lại Co4ETab)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.msgs_icon",
"kind": "attribute",
"line_start": 1040,
"line_end": 1040,
"line_display": "1040",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.msgs_title",
"kind": "attribute",
"line_start": 1041,
"line_end": 1041,
"line_display": "1041",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.chat_toggle_btn",
"kind": "attribute",
"line_start": 1042,
"line_end": 1042,
"line_display": "1042",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "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'",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.chat_stack",
"kind": "attribute",
"line_start": 1057,
"line_end": 1057,
"line_display": "1057",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._flow_logs",
"kind": "attribute",
"line_start": 1058,
"line_end": 1058,
"line_display": "1058",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.chat_input_row",
"kind": "attribute",
"line_start": 1060,
"line_end": 1060,
"line_display": "1060",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "trạng thái chia sẻ — show()/hide() gọi từ _toggle_messages (ở lại Co4ETab)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._usage_total_lbl",
"kind": "attribute",
"line_start": 1065,
"line_end": 1065,
"line_display": "1065",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.chat_input",
"kind": "attribute",
"line_start": 1071,
"line_end": 1071,
"line_display": "1071",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "_ChatInput — submit signal nối tới self._chat_send (method ở lại Co4ETab, không có trong lát này)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.chat_send_btn",
"kind": "attribute",
"line_start": 1074,
"line_end": 1074,
"line_display": "1074",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "clicked nối tới self._chat_send (ở lại Co4ETab)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab.co4e_routing_toggle",
"kind": "attribute",
"line_start": 1079,
"line_end": 1079,
"line_display": "1079",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "presentation/co4e/co4e_chat_view.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._co4e_routed_provider",
"kind": "attribute",
"line_start": 1080,
"line_end": 1080,
"line_display": "1080",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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.",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._vsplit_sizes",
"kind": "attribute",
"line_start": 1087,
"line_end": 1087,
"line_display": "1087",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "trạng thái chia sẻ với _toggle_messages (ở lại Co4ETab theo mô tả target) — dùng self._vsplit",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._msgs_collapsed",
"kind": "attribute",
"line_start": 1088,
"line_end": 1088,
"line_display": "1088",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "trạng thái chia sẻ với _toggle_messages (ở lại Co4ETab theo mô tả target)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._toggle_messages",
"kind": "method",
"line_start": 1095,
"line_end": 1127,
"line_display": "1095-1127",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._ensure_flow_log",
"kind": "method",
"line_start": 1130,
"line_end": 1139,
"line_display": "1130-1139",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._active_log",
"kind": "method",
"line_start": 1141,
"line_end": 1143,
"line_display": "1141-1143",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "loại trừ khỏi chat_view.py theo mô tả đề bài",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.chat_log",
"kind": "method",
"line_start": 1145,
"line_end": 1149,
"line_display": "1145-1149",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "property, loại trừ khỏi chat_view.py theo mô tả đề bài",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._plan_bubble",
"kind": "method",
"line_start": 1151,
"line_end": 1157,
"line_display": "1151-1157",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "property với getter (1151-1153) và setter (1155-1157), loại trừ khỏi chat_view.py theo mô tả đề bài",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._apply_workflow",
"kind": "method",
"line_start": 1160,
"line_end": 1173,
"line_display": "1160-1173",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọ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ị",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._new_workflow",
"kind": "method",
"line_start": 1175,
"line_end": 1183,
"line_display": "1175-1183",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._selected_wf",
"kind": "method",
"line_start": 1185,
"line_end": 1191,
"line_display": "1185-1191",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "co4e.get_workflow(ident) đọc từ repository lưu trữ workflow (đĩa)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._load_selected_workflow",
"kind": "method",
"line_start": 1193,
"line_end": 1196,
"line_display": "1193-1196",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "qua _selected_wf() chạm đĩa",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._edit_selected_workflow",
"kind": "method",
"line_start": 1198,
"line_end": 1203,
"line_display": "1198-1203",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "qua _selected_wf() chạm đĩa",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._duplicate_selected_workflow",
"kind": "method",
"line_start": 1205,
"line_end": 1212,
"line_display": "1205-1212",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "co4e.duplicate_workflow ghi đĩa",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._wf_context_menu",
"kind": "method",
"line_start": 1214,
"line_end": 1237,
"line_display": "1214-1237",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._rename_workflow",
"kind": "method",
"line_start": 1239,
"line_end": 1255,
"line_display": "1239-1255",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._delete_selected_workflow",
"kind": "method",
"line_start": 1257,
"line_end": 1263,
"line_display": "1257-1263",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "co4e.delete_workflow ghi đĩa",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._sync_wf_from_canvas",
"kind": "method",
"line_start": 1265,
"line_end": 1268,
"line_display": "1265-1268",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọc self.canvas.nodes()/edges() và self.name_edit — trạng thái chia sẻ với canvas",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._save",
"kind": "method",
"line_start": 1270,
"line_end": 1275,
"line_display": "1270-1275",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "co4e.save_workflow ghi đĩa",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._autosave",
"kind": "method",
"line_start": 1277,
"line_end": 1280,
"line_display": "1277-1280",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "co4e.save_workflow ghi đĩa (chỉ khi workflow đã tồn tại)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._on_name_changed",
"kind": "method",
"line_start": 1282,
"line_end": 1284,
"line_display": "1282-1284",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "gọi self._sync_active_flow_tab_text() (không thuộc lát này) — cập nhật self._wf.name",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._add_blank_step",
"kind": "method",
"line_start": 1286,
"line_end": 1288,
"line_display": "1286-1288",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._on_node_selected",
"kind": "method",
"line_start": 1291,
"line_end": 1297,
"line_display": "1291-1297",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọc self.canvas.nodes() và self.config — thuộc nhóm node-property, không phải chat",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._on_config_changed",
"kind": "method",
"line_start": 1299,
"line_end": 1302,
"line_display": "1299-1302",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "gọi self._autosave() (ghi đĩa gián tiếp)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._new_agent",
"kind": "method",
"line_start": 1305,
"line_end": 1306,
"line_display": "1305-1306",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._edit_agent",
"kind": "method",
"line_start": 1308,
"line_end": 1316,
"line_display": "1308-1316",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "co4e.list_custom_agents() khả năng đọc đĩa",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._edit_agent_dialog",
"kind": "method",
"line_start": 1318,
"line_end": 1324,
"line_display": "1318-1324",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "mở Co4EAgentDialog modal, co4e.save_custom_agent ghi đĩa",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._delete_agent",
"kind": "method",
"line_start": 1326,
"line_end": 1333,
"line_display": "1326-1333",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "co4e.delete_custom_agent ghi đĩa",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._manage_skills",
"kind": "method",
"line_start": 1335,
"line_end": 1339,
"line_display": "1335-1339",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "mở SkillsDialog modal",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._skill_map",
"kind": "method",
"line_start": 1342,
"line_end": 1348,
"line_display": "1342-1348",
"needs_qt_widget": false,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "logic thuần Python, đọc skills_mod.skill_prefix_for(name) — có khả năng đọc file skill từ đĩa",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._current_mode",
"kind": "method",
"line_start": 1350,
"line_end": 1351,
"line_display": "1350-1351",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọc self.mode_combo.currentData()",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._on_mode_changed",
"kind": "method",
"line_start": 1353,
"line_end": 1359,
"line_display": "1353-1359",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "reset self._manual_active/_manual_order/_manual_idx — trạng thái run-mode chia sẻ",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._on_run_clicked",
"kind": "method",
"line_start": 1361,
"line_end": 1371,
"line_display": "1361-1371",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "gọi self.manager.stop/self._start_canvas_run — thuộc nhóm run control",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._start_canvas_run",
"kind": "method",
"line_start": 1373,
"line_end": 1390,
"line_display": "1373-1390",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "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)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_single",
"kind": "method",
"line_start": 1392,
"line_end": 1397,
"line_display": "1392-1397",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "gọi _start_canvas_run",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_from",
"kind": "method",
"line_start": 1399,
"line_end": 1403,
"line_display": "1399-1403",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "[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.",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._downstream",
"kind": "method",
"line_start": 1405,
"line_end": 1416,
"line_display": "1405-1416",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọc self.canvas.edges() — thuần logic đồ thị, test được không cần Qt nếu canvas là fake",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._manual_run_or_advance",
"kind": "method",
"line_start": 1419,
"line_end": 1432,
"line_display": "1419-1432",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọ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()",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._manual_step",
"kind": "method",
"line_start": 1434,
"line_end": 1450,
"line_display": "1434-1450",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._topo_order",
"kind": "method",
"line_start": 1452,
"line_end": 1457,
"line_display": "1452-1457",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._on_manager_event",
"kind": "method",
"line_start": 1460,
"line_end": 1516,
"line_display": "1460-1516",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._notify_run_finished",
"kind": "method",
"line_start": 1518,
"line_end": 1539,
"line_display": "1518-1539",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "dựng QMessageBox không chặn — cần QApplication sống",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_popups",
"kind": "attribute",
"line_start": 1526,
"line_end": 1527,
"line_display": "1526-1527",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._refresh_runs",
"kind": "method",
"line_start": 1541,
"line_end": 1582,
"line_display": "1541-1582",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "cập nhật self.runs_table, self.flow_bar, self._sections — chạm nhiều widget cùng lúc",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._stop_selected_run",
"kind": "method",
"line_start": 1584,
"line_end": 1590,
"line_display": "1584-1590",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọc self.runs_table.currentRow()",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._delete_selected_run",
"kind": "method",
"line_start": 1592,
"line_end": 1605,
"line_display": "1592-1605",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "ghi self._flow_runs, self._run_logs — trạng thái chia sẻ per-flow",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._runs_context_menu",
"kind": "method",
"line_start": 1607,
"line_end": 1621,
"line_display": "1607-1621",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "dựng QMenu tại vị trí chuột — cần widget sống",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.set_project",
"kind": "method",
"line_start": 1624,
"line_end": 1640,
"line_display": "1624-1640",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._flow_output_root",
"kind": "method",
"line_start": 1642,
"line_end": 1652,
"line_display": "1642-1652",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọ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)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._refresh_ws_folder_btn",
"kind": "method",
"line_start": 1654,
"line_end": 1659,
"line_display": "1654-1659",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "self.ws_folder_btn.setText/setToolTip",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._open_workspace_folder",
"kind": "method",
"line_start": 1661,
"line_end": 1668,
"line_display": "1661-1668",
"needs_qt_widget": false,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "mkdir + open_location (mở file explorer hệ điều hành, spawn process)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._open_run_output_folder",
"kind": "method",
"line_start": 1670,
"line_end": 1681,
"line_display": "1670-1681",
"needs_qt_widget": false,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "kiểm tra path.exists()/mkdir + open_location",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._rename_selected_run",
"kind": "method",
"line_start": 1683,
"line_end": 1714,
"line_display": "1683-1714",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_selected_in_background",
"kind": "method",
"line_start": 1716,
"line_end": 1726,
"line_display": "1716-1726",
"needs_qt_widget": false,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "self.manager.start khởi chạy agent nền (ghi output ra đĩa)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._wf_by_id",
"kind": "method",
"line_start": 1728,
"line_end": 1736,
"line_display": "1728-1736",
"needs_qt_widget": false,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "co4e.get_workflow đọc workflow đã lưu từ đĩa; đọc self._wf",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._rerun_run_item",
"kind": "method",
"line_start": 1738,
"line_end": 1749,
"line_display": "1738-1749",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "item là QTableWidgetItem; manager.start khởi chạy agent nền",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._open_run_from_table",
"kind": "method",
"line_start": 1751,
"line_end": 1770,
"line_display": "1751-1770",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "gọi self._open_flow(wf), self.canvas.update_node_status — chạm canvas widget và self._wf",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab.showEvent",
"kind": "method",
"line_start": 1772,
"line_end": 1775,
"line_display": "1772-1775",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "override Qt event",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._out_dir",
"kind": "method",
"line_start": 1777,
"line_end": 1783,
"line_display": "1777-1783",
"needs_qt_widget": false,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "mkdir(parents=True); đọc self._wf.name",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "Co4ETab._chat_send",
"kind": "method",
"line_start": 1786,
"line_end": 1812,
"line_display": "1786-1812",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._apply_co4e_routing",
"kind": "method",
"line_start": 1814,
"line_end": 1849,
"line_display": "1814-1849",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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 đó",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._co4e_routed_provider",
"kind": "attribute",
"line_start": 1819,
"line_end": 1819,
"line_display": "1819",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._extract_agent_directive",
"kind": "method",
"line_start": 1851,
"line_end": 1857,
"line_display": "1851-1857",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "logic regex thuần, dễ test độc lập",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._resolve_agent",
"kind": "method",
"line_start": 1859,
"line_end": 1867,
"line_display": "1859-1867",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_chat_turn",
"kind": "method",
"line_start": 1869,
"line_end": 1940,
"line_display": "1869-1940",
"needs_qt_widget": true,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "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ẻ)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_chat_turn.job",
"kind": "function",
"line_start": 1883,
"line_end": 1912,
"line_display": "1883-1912",
"needs_qt_widget": false,
"touches_disk_or_network": true,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_chat_turn.job._emit",
"kind": "function",
"line_start": 1894,
"line_end": 1901,
"line_display": "1894-1901",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "helper lồng bên trong job(), chuyển tiếp event streaming sang worker.emit_event",
"merge_note": null,
"in_old_table": "chua",
"old_table_mismatch": "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)."
},
{
"symbol": "Co4ETab._run_chat_turn.on_event",
"kind": "function",
"line_start": 1914,
"line_end": 1920,
"line_display": "1914-1920",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "closure cập nhật assistant.set_markdown/log.scroll_to_bottom — cần widget sống; gọi self._append_plan",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_chat_turn.done",
"kind": "function",
"line_start": 1922,
"line_end": 1928,
"line_display": "1922-1928",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "ghi self._chat_worker=None, gọi self._apply_usage — chạm self._flow_usage",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._run_chat_turn.failed",
"kind": "function",
"line_start": 1930,
"line_end": 1933,
"line_display": "1930-1933",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "ghi self._chat_worker=None, gọi self._append_chat",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._append_chat",
"kind": "method",
"line_start": 1942,
"line_end": 1957,
"line_display": "1942-1957",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._fmt_usage",
"kind": "method",
"line_start": 1960,
"line_end": 1967,
"line_display": "1960-1967",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "logic thuần định dạng chuỗi + tra bảng giá từ self.ctx.config.data — test được không cần Qt",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._apply_usage",
"kind": "method",
"line_start": 1969,
"line_end": 1986,
"line_display": "1969-1986",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._refresh_usage_total",
"kind": "method",
"line_start": 1988,
"line_end": 2003,
"line_display": "1988-2003",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "đọ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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._append_diff",
"kind": "method",
"line_start": 2005,
"line_end": 2009,
"line_display": "2005-2009",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "theo yêu cầu KHÔNG thuộc co4e_chat_view.py — ở lại Co4ETab",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._append_plan",
"kind": "method",
"line_start": 2011,
"line_end": 2022,
"line_display": "2011-2022",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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)",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "Co4ETab._retranslate",
"kind": "method",
"line_start": 2025,
"line_end": 2045,
"line_display": "2025-2045",
"needs_qt_widget": true,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "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",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "-"
},
{
"symbol": "_html_escape",
"kind": "function",
"line_start": 2048,
"line_end": 2049,
"line_display": "2048-2049",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "hàm module-level, tiện ích thuần chuỗi, không thuộc riêng chat_view",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
},
{
"symbol": "_qcolor",
"kind": "function",
"line_start": 2052,
"line_end": 2054,
"line_display": "2052-2054",
"needs_qt_widget": false,
"touches_disk_or_network": false,
"target_file": "ui/co4e_tab.py",
"note": "QColor dùng như kiểu giá trị, không cần QApplication sống",
"merge_note": null,
"in_old_table": "co",
"old_table_mismatch": "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`."
}
]
}