feat(workflows): show lane pipelines, drop the deep analytics charts
The Workflows page rendered eleven charts of Claude Code harness internals (collaboration network, subagent effectiveness, patterns, model delegation, error propagation, concurrency, complexity, compaction). Too specialized to read and nothing to act on, so they are gone along with their i18n keys. What is left is what a reader can act on: headline stats, Workflow-tool runs, the spawning DAG, the tool flow and the per-session drill-in — plus a new first section for this dashboard's OWN pipelines. LanePipelinePanel renders a horizontally scrolling lane strip and the selected lane's PipelineMap, reusing the Workspace components so a stage looks identical on both pages. The panel is read-only: the console-never-writes-a-stage boundary applies here too, so every lane action stays on the Workspace page. The workflows API response shape is untouched. Closes #6
This commit is contained in:
@@ -63,50 +63,15 @@
|
||||
"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ự."
|
||||
},
|
||||
"lanes": {
|
||||
"what": "Các lane mà dashboard theo dõi — mỗi thư mục làm việc là một đơn vị công việc song song bền vững — cùng giai đoạn pipeline mỗi lane đã đạt tới.",
|
||||
"howToRead": "Chọn một thẻ lane để xem pipeline bên dưới. Node xanh lá là đã xong kèm bằng chứng, xanh dương đặc là giai đoạn hiện tại, vàng là khai báo nhưng không có bằng chứng, vàng nét đứt là chỉ suy ra từ tool event, đỏ là bị từ chối.",
|
||||
"why": "Đây là pipeline giao việc của chính bạn, không phải nội bộ Claude Code: nó trả lời từng luồng việc song song đang ở đâu. Các thao tác trên lane nằm ở trang Workspace."
|
||||
}
|
||||
},
|
||||
"stats": {
|
||||
@@ -244,201 +209,6 @@
|
||||
"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á",
|
||||
@@ -464,5 +234,10 @@
|
||||
"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": "Pipeline của lane",
|
||||
"subtitle": "Các lane của bạn và giai đoạn mỗi lane đã đạt tới",
|
||||
"openWorkspace": "Mở trong Workspace"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user