Files
AgentHub/client/src/i18n/locales/vi/workflows.json
T
nntrivi2001 876c6de6d2 fix(lanes): count every pipeline run, not one per lane
Lane Pipeline Pass Rates read `lanes.stages`, which is a snapshot of the
pass in flight: re-entering a node overwrites its record, and moving
backwards deletes every record ahead of the new stage. The report treated
one lane row as one run, so shipping ten features through a lane still
counted as one, and no node could ever exceed 1/1. History survived only
via `lane_features`, which is written when a feature is activated — a
path most users never take. The panel was not wrong, it was structurally
incapable of counting.

Add `lane_stage_events`, an append-only log written by every declaration
and every accepted detection, and aggregate from that. A run is one pass
through the template: the log starts a new one when the lane moves
backwards or leaves the template's last node. Existing snapshots are
seeded as one run each on first boot, so upgrading does not read as
"never run". Templates a lane is configured with are still listed at
zero — a pipeline going unused has to be visible as such.

Count inferred reaches too, in their own column and their own colour.
Detection stays out of the pass rate ("inference is never evidence"), but
reporting a stage the hooks demonstrably saw as "never reached" is what
made the panel look broken to anyone who works without running the
pipeline commands.

Also reject a stage naming no node of the lane's pipeline (400 EBADSTAGE,
listing the ones that exist) instead of storing it with a warning nobody
reads. A real lane had accumulated five such keys, one of them `test` on
a ship-feature lane whose CI node is `gates` — which is why that row read
never-reached while the stage had in fact been declared. Aliases still
resolve, so shorthand is unaffected.
2026-09-09 15:32:09 +07:00

321 lines
21 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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."
},
"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ự."
},
"lanes": {
"what": "Toàn bộ bản ghi giai đoạn của mọi lane và feature đã lưu trữ, đếm theo từng node pipeline: số lần vào giai đoạn, số lần pass, và bao nhiêu lần pass có kèm bằng chứng.",
"howToRead": "Mỗi node một dòng. Thanh bar so tỉ lệ với node bận nhất, chia ba màu: xanh lá (pass có bằng chứng), vàng (pass nhưng chỉ khai báo), đỏ (thất bại). Số bên phải là pass / số lần vào và tỉ lệ pass.",
"why": "Node có dải vàng dài là giai đoạn ai cũng khai báo nhưng không ai chứng minh; node chưa bao giờ tới là giai đoạn pipeline của bạn thực tế không dùng."
},
"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."
},
"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."
},
"skillUsage": {
"what": "Số lần gọi skill đếm từ event tool Skill, gom theo skill và theo plugin sở hữu. Tổng của một plugin còn tính cả lần gọi các tool MCP mà plugin đó cung cấp.",
"howToRead": "Các chip phía trên là plugin kèm tổng số lần gọi; danh sách bên dưới xếp hạng từng skill theo số lần gọi, kèm số phiên khác nhau đã dùng skill đó.",
"why": "Cho thấy phần nào trong bộ cài đặt thực sự đáng giữ. Skill cài mà không bao giờ gọi sẽ không xuất hiện ở đây — bảng này báo mức dùng, không phải danh mục."
}
},
"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."
}
}
},
"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)"
},
"lanes": {
"title": "Tỉ lệ pass các node pipeline",
"subtitle": "Mỗi giai đoạn trong pipeline của bạn thực sự pass bao nhiêu lần",
"pipelineLabel": "Mẫu pipeline",
"laneLabel": "Lane",
"allLanes": "Tất cả lane",
"runs_one": "{{count}} lượt chạy được ghi nhận",
"runs_other": "{{count}} lượt chạy được ghi nhận",
"legendEvidence": "pass kèm bằng chứng",
"legendClaimed": "pass, không bằng chứng",
"legendFailed": "thất bại",
"never": "chưa từng tới",
"copyCommand": "Sao chép: {{command}}",
"empty": "Chưa lane nào ghi nhận giai đoạn. Tạo lane bằng",
"emptyLane": "Lane này chưa ghi nhận giai đoạn nào.",
"legendDetected": "đã chạm, chưa khai báo",
"detectedOnly": "suy đoán ×{{count}}"
},
"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+)"
}
},
"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"
},
"skillUsage": {
"title": "Mức dùng skill & plugin",
"subtitle": "Các phiên làm việc thực sự dùng skill nào",
"plugins": "Plugin",
"skills": "Skill",
"empty": "Chưa ghi nhận lần gọi skill nào.",
"calls_one": "{{count}} lần gọi",
"calls_other": "{{count}} lần gọi",
"sessions_one": "{{count}} phiên",
"sessions_other": "{{count}} phiên",
"pluginBreakdown": "{{skills}} skill được dùng · {{skillCalls}} lần gọi skill · {{mcpCalls}} lần gọi tool MCP"
}
}