feat: Claude Code Monitor — lanes, pipelines and a merged workspace

Internal SmartGift build of a Claude Code monitoring dashboard.

Lanes: a durable unit of parallel agent work, one per working directory,
tracked across session restarts. Managed lanes are git worktrees the
dashboard provisions and can reset or remove behind a three-check destroy
guard and a counted preflight; adopted lanes are directories you already
own and are never destroyable.

Pipelines: a lane moves through pipeline stages. A stage the agent declares
with evidence renders green; a stage inferred from the tool-event stream
renders dashed amber and never counts as done. Detection is forward-only
within a 30-minute window, and never writes the declared stage.

Workspace: one page at /run with a lane grid, the selected lane's pipeline,
and a full Claude console behind a disclosure.
This commit is contained in:
2026-07-29 17:07:45 +07:00
commit 57dc91585d
783 changed files with 221743 additions and 0 deletions
+468
View File
@@ -0,0 +1,468 @@
{
"title": "Quy trình",
"subtitle": "Phân tích điều phối Agent",
"failedLoad": "Không thể tải dữ liệu quy trình",
"filteredBy": "Đang lọc theo:",
"clearFilter": "Xóa bộ lọc",
"refreshData": "Làm mới dữ liệu",
"exportJson": "Xuất JSON",
"allSessions": "Tất cả phiên",
"activeOnly": "Chỉ đang hoạt động",
"completed": "Hoàn tất",
"runs": {
"title": "Quy trình động",
"subtitle": "Các nhóm Agent do công cụ Workflow tạo ra, dựng lại từ nhật ký chạy trên đĩa",
"sessionTitle": "Quy trình động",
"loading": "Đang tải quy trình động…",
"empty": "Chưa có quy trình động nào. Các lần chạy của công cụ Workflow hiện ở đây sau khi nhật ký được ghi (khi hoàn tất).",
"noAgents": "Không có Agent con nào được ghi cho lần chạy này.",
"openSession": "Mở phiên gốc",
"filterPhase": "Lọc theo giai đoạn",
"clearFilter": "Xóa",
"resultsLabel": "Kết quả",
"promptLabel": "Lời nhắc",
"resultLabel": "Kết quả",
"loadingFull": "Đang tải toàn bộ nội dung…",
"tokens": "token",
"agents_one": "{{count}} Agent",
"agents_other": "{{count}} Agent",
"tools_one": "{{count}} lệnh gọi công cụ",
"tools_other": "{{count}} lệnh gọi công cụ",
"status": {
"running": "Đang chạy",
"working": "Đang chạy",
"queued": "Đang chờ",
"completed": "Hoàn tất",
"done": "Xong",
"success": "Xong",
"error": "Lỗi",
"failed": "Thất bại"
},
"col": {
"agent": "Agent",
"phase": "Giai đoạn",
"state": "Trạng thái",
"tokens": "Token",
"tools": "Công cụ",
"duration": "Thời lượng"
}
},
"chartInfo": {
"labels": {
"what": "Biểu đồ thể hiện điều gì",
"howToRead": "Cách đọc",
"why": "Vì sao quan trọng"
},
"orchestration": {
"what": "DAG nhiều lớp mô tả cách phiên Claude Code phân nhánh: từ phiên gốc, vào main agent, sang từng loại Subagent, qua các lần nén ngữ cảnh, rồi tới kết quả cuối (hoàn tất / lỗi / bỏ dở).",
"howToRead": "Mỗi cột là một lớp. Khung node có cùng kích thước; con số là số lần. Cạnh đi từ trái sang phải; cạnh càng dày = lượt chuyển càng phổ biến. Hover bất kỳ node để xem thống kê; bấm để lọc phần còn lại của trang theo node đó.",
"why": "Dùng để trả lời 'công việc trong workflow của tôi đi đâu?' - loại Subagent nào chiếm ưu thế, nén ngữ cảnh xảy ra ở đâu, và đường nào kết thúc bằng lỗi so với hoàn tất sạch."
},
"toolFlow": {
"what": "Biểu đồ kiểu Sankey về các lượt chuyển tool gọi liên tiếp trên mọi phiên trong phạm vi. Mỗi băng là một cặp (nguồn → đích) đếm trên toàn bộ phiên.",
"howToRead": "Tool xuất hiện thành các thanh màu ở hai bên. Băng nối chúng: độ dày = số lần nguồn chạy ngay trước đích. Hover một băng để xem tỷ trọng-trong-nguồn và tỷ trọng-trong-đích; hover một node để xem tổng lượt dùng và tỷ trọng trên tổng tool.",
"why": "Phơi bày những chuỗi tool quen thuộc (ví dụ Read → Edit → Bash). Hữu ích để phát hiện vòng lặp, bước thừa, và sự đơn điệu trong cách Agent dùng tool."
},
"pipeline": {
"what": "Đồ thị có hướng về sự đồng xuất hiện của loại Agent: loại nào hay chạy ngay sau loại nào, và bao nhiêu lần.",
"howToRead": "Hình tròn là loại Agent; kích thước mã hóa tổng số spawn. Mũi tên A → B nghĩa là B đã chạy ngay sau A trong cùng phiên, nhãn = số lần. Hover mũi tên để xem tỷ trọng nguồn/đích; hover hình tròn để xem số spawn, số phiên và tỷ lệ thành công. Có thể kéo các node để sắp xếp lại.",
"why": "Phơi bày các pipeline ủy quyền có thực mà bạn có thể chưa cố ý thiết kế - ví dụ một code-review agent gần như luôn chạy sau build agent - để bạn chuẩn hóa hoặc đơn giản hóa."
},
"effectiveness": {
"what": "Mỗi loại Subagent có một thẻ với vòng tròn tỷ lệ thành công, tổng số phiên, thời lượng trung bình và sparkline 7 ngày.",
"howToRead": "Phần tô của vòng tròn là tỷ lệ thành công; số phần trăm ở giữa cũng vậy. Hai ô cho biết số lượng và thời gian thực trung bình. Sparkline là số phiên mỗi ngày của tuần qua - hover một thanh để xem số liệu ngày đó.",
"why": "Kiểm tra sức khỏe nhanh theo Agent: Agent nào đáng tin, Agent nào chậm, và Agent nào đang tăng/giảm sử dụng."
},
"patterns": {
"what": "Danh sách xếp hạng các chuỗi điều phối Agent lặp lại được phát hiện từ trace phiên, kèm thẻ riêng cho phiên đơn lẻ không có Subagent.",
"howToRead": "Mỗi dòng là một chuỗi bước (main → sub → sub …). Bên phải hiển thị số phiên khớp và tỷ lệ trên tổng phiên. Bấm vào một mẫu để làm nổi bật.",
"why": "Cho thấy các 'hình dáng' công việc tiêu chuẩn trong dự án. Mẫu phổ biến là ứng viên tốt để chuẩn hóa thành workflow hoặc skill có tên gọi."
},
"modelDelegation": {
"what": "Sơ đồ luồng hai cột cho thấy mô hình chính nào ủy quyền cho mô hình Subagent nào, kèm số Agent và tổng token theo node.",
"howToRead": "Cột trái = mô hình chính của phiên; cột phải = mô hình dùng bên trong Subagent. Đường nối chỉ các cặp main → Subagent quan sát được. Hover một node để xem tỷ trọng trên tổng Agent, số phiên, tổng token và mô tả họ mô hình (Opus / Sonnet / Haiku).",
"why": "Giúp xác nhận phân tầng chi phí/độ trễ - ví dụ main trên Sonnet, Subagent trên Haiku - và phát hiện các trường hợp bị đẩy lên Opus ngoài ý muốn."
},
"errorPropagation": {
"what": "Lỗi tập trung ở đâu trong phân cấp Agent: theo độ sâu (phiên/main vs Subagent trực tiếp vs lồng nhau), theo loại Agent, và theo nhóm lỗi API / phiên.",
"howToRead": "Banner trên đầu cho biết tỷ lệ lỗi cấp phiên. Các thanh độ sâu cho biết bao nhiêu lỗi xảy ra ở từng cấp lồng. Danh sách 'loại dễ lỗi' xếp Subagent theo số lỗi. Khối dưới hiển thị tóm tắt lỗi API/phiên.",
"why": "Xác định lỗi nằm ở trục điều phối (main agent), ở Subagent cụ thể, hay ở chuỗi lồng sâu - giúp định hướng nơi nên đầu tư retry, kiểm chứng hay viết lại."
},
"concurrency": {
"what": "Thời điểm tổng hợp mà mỗi loại Agent hoạt động so với timeline phiên, kèm số phiên có Agent đó.",
"howToRead": "Mỗi dòng là một loại Agent. Chiều dài thanh tỉ lệ với số phiên. Phần trăm bên phải cho biết vị trí bắt đầu và kết thúc trung bình trong một phiên (0% = đầu phiên, 100% = cuối phiên). Hover để xem mô tả mẫu thời gian (đầu phiên, giữa, cuối, ...).",
"why": "Cho thấy nhịp của phiên - ví dụ lint ở đầu, code-review ở cuối - và phát hiện Agent chiếm trọn cả phiên."
},
"complexity": {
"what": "Biểu đồ phân tán mỗi phiên: x = thời lượng thực, y = tổng số Agent, kích thước bong bóng = tổng token, màu = trạng thái cuối.",
"howToRead": "Bong bóng phía trên-bên phải là phiên dài và nặng Agent. Bong bóng to dùng nhiều token nhất. Đỏ/vàng = kết quả lỗi/bỏ dở. Hover để xem đầy đủ thống kê phiên; bấm để xem chi tiết bên dưới.",
"why": "Cho cái nhìn tổng thể về phân bố chi phí/độ phức tạp. Outlier chính là những phiên đáng điều tra vì hành vi bất thường hoặc đột biến chi phí."
},
"compaction": {
"what": "Tần suất Claude kích hoạt nén ngữ cảnh: tổng số sự kiện, token thu hồi và phân bố theo từng phiên.",
"howToRead": "Hai ô số liệu cho biết tổng số lần nén và tổng token đã thu hồi. Biểu đồ cột liệt kê các phiên có ít nhất một lần nén, sắp xếp giảm dần theo số lần.",
"why": "Nén ngữ cảnh là dấu hiệu áp lực bộ nhớ. Nhiều phiên có số lần nén cao thường có nghĩa workflow nên được chia nhỏ, tóm tắt, hoặc chuyển sang model có ngữ cảnh dài hơn."
},
"drillIn": {
"what": "Khung chi tiết theo phiên: cây Agent đầy đủ, dòng thời gian tool gọi và chuỗi sự kiện thô của phiên bạn chọn.",
"howToRead": "Chọn phiên từ dropdown phía trên hoặc bấm một bong bóng trong biểu đồ phân tán. Các tab cho phép chuyển giữa góc nhìn phân cấp (Agent Tree), thời gian (Tool Timeline) và theo trình tự (Event Sequence) của cùng một phiên.",
"why": "Khi biểu đồ tổng hợp đánh dấu một phiên đáng ngờ, đây là nơi bạn đọc chính xác chuyện gì đã xảy ra, theo đúng thứ tự."
}
},
"stats": {
"avgAgentDepth": "Độ sâu Agent TB",
"avgSubagentsPerSession": "Subagent TB / phiên",
"agentSuccessRate": "Tỷ lệ thành công Agent",
"mostCommonFlow": "Luồng phổ biến nhất",
"avgCompactions": "Số lần nén TB",
"avgDuration": "Thời lượng TB",
"tooltip": {
"howCalc": "Cách tính",
"whatItMeans": "Con số này nghĩa là gì",
"moreInfo": "Giải thích chỉ số này",
"valueMeansFmt": "{{value}} {{phrase}} nghĩa là {{interpretation}}",
"phrase": {
"depth": "độ sâu Agent trung bình",
"subagents": "subagent mỗi phiên",
"success": "tỷ lệ thành công Agent",
"topFlow": "luồng phổ biến nhất",
"compactions": "số lần nén ngữ cảnh mỗi phiên",
"duration": "thời lượng trung bình"
},
"calc": {
"depth": "Với mỗi phiên, ta lấy mức lồng Agent sâu nhất (chính = 0, subagent trực tiếp = 1, subagent của subagent = 2, …) rồi tính trung bình các giá trị tối đa đó trên toàn bộ phiên trong bộ lọc hiện tại.",
"subagents": "Tổng số lượt gọi subagent (mọi cặp Task / SubagentStop) chia cho số phiên trong phạm vi. Tính cả subagent chạy song song hay được spawn lại.",
"success": "Trên toàn bộ lượt chạy main + subagent: lượt hoàn tất ÷ (hoàn tất + lỗi + bỏ dở) × 100. Một lượt được tính hoàn tất khi quan sát được Stop / SubagentStop mà không có sự kiện lỗi xen vào.",
"topFlow": "Mỗi cặp tool gọi liên tiếp trong một phiên được đếm là một lượt chuyển. Cặp xuất hiện thường xuyên nhất trên mọi phiên hiển thị tại đây dạng 'nguồn → đích'.",
"compactions": "Tổng số sự kiện nén ngữ cảnh ghi nhận bởi hook PreCompact / SessionStart(compact), chia cho số phiên trong phạm vi.",
"duration": "Thời gian thực tính từ sự kiện đầu tiên (SessionStart) đến sự kiện cuối (Stop / SessionEnd / hook gần nhất) của mỗi phiên, trung bình trên mọi phiên trong phạm vi."
},
"depth": {
"zero": "chưa quan sát được lồng Agent. Mọi phiên chỉ chạy với main agent - không có ủy quyền cho subagent.",
"rare": "lồng Agent rất hiếm. Hầu hết phiên dừng ở độ sâu 0 (chỉ main agent); chỉ rất ít phiên đi vào subagent.",
"single": "phiên thường ủy quyền cho một lớp subagent (main → subagent), không lồng sâu hơn.",
"multi": "điều phối nhiều lớp khá phổ biến - bản thân subagent cũng spawn thêm subagent (main → sub → sub).",
"deep": "điều phối lồng sâu là chuẩn mực. Phiên thường xuyên có chuỗi 3 lớp Agent trở lên."
},
"subagents": {
"zero": "không có subagent nào kích hoạt. Phiên hoàn tất hoàn toàn bằng main agent.",
"lowFreq": "thực tế: trung bình ~1 subagent mỗi {{count}} phiên. Đa số phiên không spawn subagent nào.",
"moderate": "phiên thường ủy quyền cho 1–3 subagent - mức dùng vừa phải.",
"heavy": "ủy quyền nhiều - phiên thường xuyên fan-out tới nhiều subagent.",
"veryHeavy": "rất nặng về điều phối: phiên trung bình 6+ lượt subagent."
},
"success": {
"perfect": "gần như hoàn hảo. Hầu hết lượt chạy Agent kết thúc bằng Stop sạch - không lỗi, không bỏ dở.",
"healthy": "khỏe mạnh. Phần lớn lượt Agent hoàn tất thành công; chỉ thi thoảng có thất bại.",
"acceptable": "chấp nhận được, nhưng cần theo dõi xu hướng lỗi - khoảng 1 trong 5–20 lượt thất bại hoặc bị bỏ dở.",
"concerning": "đáng lo - một phần đáng kể lượt Agent thất bại. Hãy kiểm tra trang Errors.",
"critical": "nghiêm trọng: phần lớn lượt Agent thất bại hoặc bỏ dở. Hãy kiểm tra ErrorPropagation và các bản triển khai gần đây."
},
"topFlow": {
"none": "chưa có đủ cặp tool gọi liên tiếp để xác định cặp nổi bật.",
"selfLoop": "{{tool}} thường nối tiếp chính nó - điển hình cho lặp đọc/sửa hoặc chuỗi shell.",
"pair": "{{source}} thường chạy ngay trước {{target}}. Hiểu là một thói quen: Agent có xu hướng {{sourceLower}} rồi {{targetLower}} làm bước kế tiếp."
},
"compactions": {
"zero": "chưa có nén ngữ cảnh. Phiên nằm thoải mái trong cửa sổ ngữ cảnh của model.",
"lowFreq": "thực tế: ~1 lần nén mỗi {{count}} phiên. Phiên dài là ngoại lệ.",
"moderate": "phiên thường gặp nén 1–2 lần - có áp lực ngữ cảnh nhưng vẫn xử lý được.",
"high": "tỷ lệ nén cao. Phiên thường chạy đủ lâu để cần nhiều lần nén ngữ cảnh; cân nhắc chia nhỏ công việc."
},
"duration": {
"zero": "chưa có phiên hoàn tất nào - thời lượng là 0.",
"veryShort": "phiên rất ngắn (dưới 1 phút) - thường là tool gọi nhanh hoặc prompt một phát.",
"short": "phiên ngắn, vài phút. Phù hợp cho công việc tập trung, một tính năng.",
"medium": "phiên trung bình (5–30 phút). Nhịp phát triển tiêu chuẩn.",
"long": "phiên dài (30–60 phút). Có thể là quy trình nhiều bước hoặc rà soát dài.",
"veryLong": "phiên rất dài (1–3 giờ). Coi chừng nén ngữ cảnh và áp lực bộ nhớ.",
"marathon": "phiên marathon (3+ giờ). Cân nhắc chia thành nhiều phiên ngắn hơn."
}
}
},
"orchestration": {
"title": "Đồ thị điều phối Agent",
"subtitle": "Mẫu spawn tổng hợp trên mọi phiên - Bấm nút để lọc",
"sessions": "Phiên",
"mainAgent": "Agent chính",
"compactions": "Nén ngữ cảnh",
"noData": "Chưa có dữ liệu điều phối",
"noDataDesc": "Dữ liệu spawn Agent sẽ xuất hiện khi đã ghi nhận phiên có Subagent.",
"legend": "Chú giải",
"edgeWeight": "Trọng số cạnh = tần suất",
"count": "Số lượng",
"otherTypes": "{{count}} loại khác",
"ariaLabel": "Đồ thị có hướng không chu trình điều phối Agent",
"layers": {
"origin": "Nguồn",
"mainAgent": "Agent chính",
"subagentTypes": "Loại Subagent",
"compactions": "Nén ngữ cảnh",
"outcomes": "Kết quả"
},
"tooltip": {
"tipClickToFilter": "Mẹo: bấm để lọc phần còn lại của trang theo node này.",
"layer": {
"session": "Lớp 0 - Nguồn",
"main": "Lớp 1 - Agent chính",
"subagent": "Lớp 2 - Loại Subagent",
"subagentOverflow": "Lớp 2 - Các loại Subagent",
"nested": "Lớp 3 - Nén ngữ cảnh",
"outcome": "Lớp 4 - Kết quả"
},
"desc": {
"session": "Mỗi đơn vị là một phiên Claude Code khớp với bộ lọc trạng thái hiện tại. Cạnh ra trỏ tới các main agent mà các phiên này đã khởi chạy.",
"main": "Lượt chạy Claude cấp cao nhất cho mỗi phiên. Mỗi phiên có đúng một main agent; từ đây đồ thị rẽ nhánh tới các loại Subagent đã được ủy quyền.",
"subagent": "Một Subagent chuyên biệt mà main agent đã ủy quyền (ví dụ qua tool Task).",
"subagentClean": " Mọi lượt chạy của Subagent này đều hoàn tất sạch.",
"subagentAllError": " Mọi lượt chạy của Subagent này đều lỗi - hãy kiểm tra định nghĩa Agent.",
"subagentSomeErrors": " {{count}} lượt bị lỗi - xem Error Propagation bên dưới để biết chi tiết.",
"subagentOverflow": "Tất cả các loại Subagent còn lại được gộp vào một node để đồ thị dễ đọc. Hover bất kỳ Subagent nào khác để xem số liệu riêng.",
"nested": "Sự kiện nén cửa sổ ngữ cảnh. Claude kích hoạt nén khi ngữ cảnh đang chạy gần chạm giới hạn của model; số đếm phản ánh điều đó xảy ra bao nhiêu lần trên các phiên trong phạm vi.",
"outcomeCompleted": "Phiên có hook cuối là Stop sạch. Không có sự kiện lỗi nào trước khi kết thúc.",
"outcomeError": "Phiên có ít nhất một sự kiện lỗi (lỗi tool, lỗi Subagent hoặc lỗi phiên) trước khi kết thúc.",
"outcomeAbandoned": "Phiên dừng mà không có Stop sạch và cũng không có lỗi rõ ràng - thường là đóng giữa chừng.",
"outcomeFallback": "Trạng thái cuối của các phiên trong phạm vi, được tính từ sự kiện hook cuối quan sát được."
}
}
},
"toolFlow": {
"title": "Luồng thực thi công cụ",
"subtitle": "Chuỗi liên kết giữa các công cụ - luồng có hướng kiểu Sankey",
"noData": "Chưa có dữ liệu luồng công cụ",
"transitionCount_one": "{{count}} lượt chuyển",
"transitionCount_other": "{{count}} lượt chuyển",
"tooltip": {
"node": "Node công cụ",
"link": "Lượt chuyển công cụ",
"totalCalls": "Tổng số lượt gọi",
"shareOfAll": "Tỷ trọng trên tổng dùng tool",
"transitionsObserved": "Số lượt chuyển quan sát",
"shareOfSourceFmt": "Tỷ trọng {{source}} → kế tiếp",
"shareOfTargetFmt": "Tỷ trọng trước → {{target}}",
"nodeDescFmt": "Chiều cao thanh thể hiện tần suất {{name}} xuất hiện trên mọi phiên trong phạm vi. Băng đi vào bên trái cho thấy tool chạy trước {{name}}; băng đi ra bên phải cho thấy tool chạy sau.",
"linkDescFmt": "Trên mọi phiên, đây là số lần {{source}} chạy ngay trước {{target}}. Băng càng dày = lượt chuyển càng phổ biến; phần trăm cho biết bước này chiếm tỷ trọng bao nhiêu trong luồng ra/vào của mỗi tool."
}
},
"pipeline": {
"title": "Đồ thị pipeline Agent",
"subtitle": "Quy trình có hướng - loại Agent nào chạy sau loại nào, kèm tần suất",
"noData": "Chưa có dữ liệu pipeline",
"noDataDesc": "Các cạnh quy trình sẽ xuất hiện khi loại Agent chạy tuần tự qua nhiều phiên.",
"legend": "Chú giải",
"legendDesc": "A chạy trước B (kèm số lần)",
"frequency": "Tần suất",
"meaning": "Ý nghĩa",
"times": " lần",
"ranAfter": " chạy sau ",
"spawns": " lần spawn",
"spawned": "Đã spawn",
"inSessions": "Trong các phiên",
"ariaLabel": "Đồ thị pipeline Agent",
"tooltip": {
"agentType": "Loại Agent",
"edge": "Cạnh tuần tự",
"shareOfAllSpawns": "Tỷ trọng trên tổng spawn",
"sequentialPairs": "Cặp tuần tự",
"totalSpawnsFmt": "Tổng spawn {{id}}",
"shareOfSrcFmt": "Tỷ trọng {{source}} → kế tiếp",
"shareOfTgtFmt": "Tỷ trọng trước → {{target}}",
"edgeDescFmt": "{{target}} chạy ngay sau {{source}} {{count}} lần trên toàn bộ phiên. Mũi tên càng dày, hand-off càng thường xuyên. Dùng để phát hiện chuỗi ủy quyền quen thuộc trong quy trình của bạn.",
"nodeDescFmt": "{{id}} đã chạy {{total}} lần trên {{sessions}} phiên; tỷ lệ thành công {{rate}}% ({{health}}). Kích thước hình tròn mã hóa tổng số spawn; mũi tên cho biết loại Agent nào hay chạy trước/sau nó.",
"health": {
"perfect": "gần như hoàn hảo",
"healthy": "khỏe mạnh",
"shaky": "hơi lung lay",
"failing": "thường xuyên thất bại"
}
}
},
"effectiveness": {
"title": "Hiệu quả Subagent",
"subtitle": "Chỉ số hiệu năng theo từng loại Agent",
"success": "Thành công",
"sessions": "Phiên",
"avgDuration": "Thời lượng TB",
"weeklyActivity": "Hoạt động theo tuần",
"noData": "Chưa có dữ liệu Subagent",
"successRateAria": "Tỷ lệ thành công: {{rate}}%",
"weeklyActivityAria": "Biểu đồ tia hoạt động theo tuần",
"sessionCount_one": "{{count}} phiên",
"sessionCount_other": "{{count}} phiên"
},
"patterns": {
"title": "Mẫu quy trình phát hiện được",
"subtitle": "Chuỗi điều phối Agent thường gặp",
"noData": "Chưa phát hiện mẫu nào",
"noDataDesc": "Mẫu sẽ xuất hiện khi nhiều phiên có cùng chuỗi Agent.",
"solo": "đơn lẻ (không có Subagent)",
"label": "Mẫu quy trình",
"detail": {
"clickHint": "Bấm để xem chi tiết",
"stepsHeading": "Chuỗi bước đầy đủ",
"statsHeading": "Thống kê",
"stepsCount_one": "{{count}} bước",
"stepsCount_other": "{{count}} bước",
"uniqueAgents": "Số loại Agent khác nhau",
"occurrences": "Số phiên khớp mẫu này",
"shareOfSessions": "Tỷ trọng trên tổng phiên",
"narrativeHeading": "Ý nghĩa của mẫu này",
"suggestionHeading": "Gợi ý",
"narrative": {
"soloFmt": "Phiên chỉ chạy {{first}} - không ủy quyền cho loại Agent nào khác.",
"twoStepFmt": "Hand-off hai bước: {{first}} ủy quyền thẳng cho {{last}}, không có nhánh nào khác.",
"shortFmt": "Chuỗi {{count}} bước, bắt đầu ở {{first}} và kết thúc ở {{last}}.",
"longFmt": "Chuỗi dài {{count}} bước - bắt đầu ở {{first}}, đi qua nhiều Agent, rồi dừng ở {{last}}.",
"loopHintFmt": " {{agent}} xuất hiện nhiều lần trong chuỗi này - điển hình cho vòng lặp kiểm tra hoặc sửa lại.",
"dominant": " Đây là quy trình chủ đạo trong dự án - hơn một nửa số phiên đi theo.",
"common": " Là quy trình phổ biến, chiếm khoảng một phần tư số phiên.",
"regular": " Là quy trình được nhận diện, nhưng chưa phải đa số.",
"niche": " Là mẫu hiếm, chỉ thi thoảng mới xuất hiện."
},
"suggestion": {
"solo": "Phiên đơn lẻ - liệu thêm code-reviewer hay test-runner Subagent có cải thiện chất lượng không?",
"shortChain": "Chuỗi ngắn. Nếu lặp lại nhiều, hãy đặt tên thành slash command, skill hoặc workflow để dễ tái sử dụng.",
"mediumChain": "Đủ phổ biến để chuẩn hóa. Một workflow/template có tên sẽ giúp tái sử dụng dễ dàng.",
"longChain": "Chuỗi dài - xem xét liệu mọi bước có thực sự cần thiết, hay có thể gộp/bỏ bớt một số Agent.",
"loop": "Phát hiện vòng lặp. Hãy xác nhận bước lặp là kiểm tra có chủ đích, không phải retry âm thầm một lệnh đang lỗi."
}
}
},
"modelDelegation": {
"title": "Luồng ủy quyền mô hình",
"subtitle": "Cách các mô hình đi qua phân cấp Agent",
"mainModels": "MÔ HÌNH CHÍNH",
"subagentModels": "MÔ HÌNH TÁC TỬ PHỤ",
"noData": "Chưa có dữ liệu ủy quyền mô hình",
"agentsCount_one": "{{count}} Agent",
"agentsCount_other": "{{count}} Agent",
"tokensCount": "{{tokens}} token",
"sessionsCount_one": "{{count}} phiên",
"sessionsCount_other": "{{count}} phiên",
"ariaLabel": "Sơ đồ luồng ủy quyền mô hình",
"tooltip": {
"mainModel": "Mô hình chính",
"subagentModel": "Mô hình Subagent",
"agentRuns": "Lượt chạy Agent",
"shareOfAll": "Tỷ trọng trên tổng Agent",
"sessionsOnModel": "Phiên dùng mô hình này",
"totalTokens": "Tổng token",
"family": {
"opus": "Opus - bậc khả năng cao nhất; tốt cho lý luận phức tạp, ngữ cảnh dài nhất, đắt nhất theo token.",
"sonnet": "Sonnet - bậc cân bằng; mặc định tốt cho hầu hết quy trình code và dùng tool.",
"haiku": "Haiku - bậc nhanh nhất, rẻ nhất; phù hợp cho Subagent ngắn, nhạy cảm độ trễ.",
"other": "Mô hình ngoài Anthropic hoặc không nhận dạng được - không thuộc bộ Opus/Sonnet/Haiku tiêu chuẩn."
},
"lines": {
"main": "Các đường bên phải cho thấy mô hình Subagent mà mô hình chính này đã ủy quyền.",
"sub": "Các đường bên trái cho thấy mô hình chính nào đã ủy quyền cho mô hình Subagent này."
}
}
},
"errorPropagation": {
"title": "Bản đồ lan truyền lỗi",
"subtitle": "Điểm tập trung lỗi theo độ sâu phân cấp Agent",
"noErrors": "Không ghi nhận lỗi",
"allSuccess": "Tất cả phiên đã hoàn tất thành công",
"sessionsHadErrors": " phiên gặp lỗi",
"sessionsErrorSummary": "{{errorSessions}} trên {{totalSessions}} phiên gặp lỗi",
"agentErrors": " lỗi cấp Agent trong toàn bộ phân cấp",
"sessionErrorsOnly": "Chỉ có lỗi ở cấp phiên",
"errorsByDepth": "Lỗi theo độ sâu phân cấp",
"errorProneTypes": "Loại Agent dễ lỗi",
"apiSessionErrors": "Lỗi API & phiên",
"depthLabels": {
"sessionMain": "Phiên / Agent chính",
"directSubagent": "Subagent trực tiếp",
"nested": "Lồng nhau (độ sâu 2)",
"deep": "Sâu (độ sâu 3+)"
}
},
"concurrency": {
"title": "Dòng thời gian đồng thời Agent",
"subtitle": "Mẫu thực thi song song - thể hiện mức chồng lấp theo thời gian",
"noData": "Chưa có dữ liệu đồng thời",
"noDataDesc": "Dữ liệu đồng thời sẽ xuất hiện khi đã ghi nhận phiên có Subagent.",
"sessions": "Phiên",
"timing": "Thời gian",
"max": " tối đa",
"sessionInfo_one": "{{count}} phiên - hoạt động từ {{from}}%-{{to}}% thời lượng phiên",
"sessionInfo_other": "{{count}} phiên - hoạt động từ {{from}}%-{{to}}% thời lượng phiên",
"tooltip": {
"lane": "Làn đồng thời",
"sessionsWith": "Phiên có Agent này",
"avgStart": "Bắt đầu TB trong phiên",
"avgEnd": "Kết thúc TB trong phiên",
"barHint": "Chiều dài thanh tỉ lệ với số phiên có loại Agent này. Phần trăm thời gian là trung bình trên các phiên đó.",
"timing": {
"wholeSession": "Hoạt động xuyên gần như cả phiên - chạy từ đầu tới cuối.",
"frontLoadedFmt": "Dồn về đầu: thường hoạt động từ đầu phiên tới khoảng ~{{end}}% chặng đường.",
"backLoadedFmt": "Dồn về cuối: thường khởi động quanh {{start}}% phiên và duy trì tới hết.",
"tightFmt": "Phạm vi hẹp: chạy trong dải hẹp từ {{start}}% đến {{end}}% timeline phiên.",
"midSessionFmt": "Công việc giữa phiên: chạy khoảng từ {{start}}% đến {{end}}% timeline phiên."
}
}
},
"complexity": {
"title": "Biểu đồ phân tán độ phức tạp phiên",
"subtitle": "Thời lượng vs số Agent vs token - kích thước bong bóng = lượng token",
"noData": "Chưa có dữ liệu độ phức tạp phiên",
"noDataDesc": "Phiên sẽ xuất hiện ở đây sau khi hoàn tất với hoạt động Agent.",
"duration": "Thời lượng",
"agentCount": "Số Agent",
"ariaLabel": "Biểu đồ phân tán độ phức tạp phiên",
"tooltip": {
"duration": "Thời lượng:",
"agents": "Agent:",
"subagents": "Subagent:",
"tokens": "Token:",
"model": "Mô hình:"
}
},
"compaction": {
"title": "Phân tích tác động nén ngữ cảnh",
"subtitle": "Cách nén ngữ cảnh phân bố trên các phiên của bạn",
"help": "Khi cửa sổ ngữ cảnh của một phiên đầy, Claude Code nén phần lịch sử cũ thành bản tóm tắt. Mỗi lần nén dưới đây là một sự kiện như vậy.",
"noData": "Chưa ghi nhận nén ngữ cảnh",
"totalCompactions": "Tổng số lần nén",
"sessionsAffected": "Phiên bị ảnh hưởng",
"ofTotal": "trên {{total}}",
"avgPerSession": "TB / phiên bị ảnh hưởng",
"peakSession": "Nhiều nhất trong một phiên",
"tokensRecovered": "Token thu hồi",
"distribution": "Số phiên theo số lần nén",
"xAxis": "Số lần nén mỗi phiên",
"yAxis": "Số phiên",
"summary": "{{affected}} trên {{total}} phiên ({{pct}}%) đã dùng nén ngữ cảnh.",
"tokensFreed": "Nén đã giải phóng ~{{tokens}} token ngữ cảnh.",
"ariaLabel": "Số phiên theo số lần nén",
"tipTitle": "Nén {{count}} lần",
"tipDetail": "{{sessions}} phiên · {{pct}}% số phiên bị ảnh hưởng"
},
"drillIn": {
"title": "Phân tích chi tiết phiên",
"subtitle": "Chọn phiên từ biểu đồ phân tán hoặc dùng danh sách để khám phá",
"searchPlaceholder": "Tìm phiên...",
"noSessionSelected": "Chưa chọn phiên",
"noSessionDesc": "Hãy tìm và chọn phiên phía trên, hoặc bấm vào một bong bóng trong biểu đồ để xem cây Agent, dòng thời gian công cụ và chuỗi sự kiện.",
"failedLoad": "Không thể tải phiên",
"loading": "Đang tải...",
"loadMore": "Tải thêm",
"noMatch": "Không có phiên nào khớp với tìm kiếm.",
"notFound": "Không tìm thấy phiên.",
"unknownModel": "mô hình không xác định",
"closePanel": "Đóng bảng phân tích chi tiết",
"close": "Đóng",
"tabs": {
"agentTree": "Cây Agent",
"toolTimeline": "Dòng thời gian công cụ",
"eventSequence": "Chuỗi sự kiện"
},
"noAgentTree": "Không có dữ liệu cây Agent.",
"noToolEvents": "Không có sự kiện công cụ.",
"noEvents": "Không có sự kiện cho phiên này.",
"showingOf": "Đang hiển thị 100 / {{total}} sự kiện",
"sessionInfo": " phiên - hoạt động {{from}}%-{{to}} thời lượng phiên",
"sortedByCompaction": " phiên (sắp theo số lần nén ngữ cảnh)"
}
}