@CCanxue
Xây dựng thanh trạng thái tùy chỉnh Claude Code chuyên nghiệp dành cho nhà phát triển.
# Nhiệm vụ: Tạo thanh trạng thái nhà phát triển chuyên nghiệp cho mã Claude
## Vai trò
Bạn là lập trình viên hệ thống đang tạo tập lệnh thanh trạng thái được tối ưu hóa cao cho Mã Claude.
## Có thể giao được
Tập lệnh Python một tệp (`~/.claude/statusline.py`) hiển thị thông tin quan trọng dành cho nhà phát triển trong dòng trạng thái của Claude Code.
## Đặc tả đầu vào
Đọc JSON từ stdin với cấu trúc này:
```json
{
"model": {"display_name": "Opus|Sonnet|Haiku"},
"workspace": {"current_dir": "/path/to/workspace", "project_dir": "/path/to/project"},
"output_style": {"name": "explanatory|default|concise"},
"cost": {
"total_cost_usd": 0.0,
"total_duration_ms": 0,
"total_api_duration_ms": 0,
"total_lines_added": 0,
"total_lines_removed": 0
}
}
```
## Yêu cầu đầu ra
### Định dạng
* In chính xác MỘT dòng vào thiết bị xuất chuẩn
* Sử dụng mã màu ANSI 256: \033[38;5;Nm với bảng màu được tối ưu hóa cho độ tương phản cao
* Cắt ngắn thông minh: Độ rộng văn bản hiển thị ≤ 80 ký tự (Mã thoát ANSI KHÔNG được tính vào giới hạn)
* Sử dụng ký hiệu unicode: ● (sạch), + (đã thêm), ~ (đã sửa đổi)
* Bảng màu: cam 208, xanh lam 33, xanh lá cây 154, vàng 229, đỏ 196, xám 245 (đã thử nghiệm cho cả hai cực tối/sáng)
### Kiến trúc thông tin (Ưu tiên từ trái sang phải)
1. Core: Tên model (màu cam)
2. Bối cảnh: Tên cơ sở thư mục dự án (màu xanh)
3. Trạng thái Git:
* Tên chi nhánh (màu xanh)
* Sạch: ● (xám mờ)
* Đã sửa đổi: ~N (màu vàng, N = số lượng tệp)
* Đã thêm: +N (màu vàng, N = số lượng tệp)
4. Siêu dữ liệu (màu xám mờ):
* Các tập tin không được cam kết: !N (màu đỏ, N = đếm từ trạng thái git --porcelain)
* Tỷ lệ API: A:N% (N = api_duration / tổng_duration * 100)
### Đầu ra ví dụ
\033[38;5;208mOpus\033[0m \033[38;5;33mIsaacLab\033[0m \033[38;5;154mmain\033[0m \033[38;5;245m●\033[0m \033[38;5;245mA:12%\033[0m
## Ràng buộc kỹ thuật
### Hiệu suất (TIÊU CHUẨN)
* Thời gian thực hiện: < 100ms (gọi 300ms một lần)
* Tính bền vững của bộ đệm: Lưu trữ bộ đệm trạng thái Git trong /tmp/claude_statusline_cache.json (tập lệnh thoát sau mỗi lần chạy, vì vậy bộ đệm phải tồn tại trên đĩa)
* Cache TTL: Làm mới tệp Git chỉ được tính khi tuổi của bộ đệm> 5 giây HOẶC .git/index mtime thay đổi
* Tối ưu hóa logic Git:
* Tên nhánh: Đọc trực tiếp .git/HEAD (không có quy trình con)
* Số lượng tệp: CHỈ gọi subprocess.run(['git', 'status', '--porcelain']) khi bộ đệm hết hạn
* Chỉ thư viện tiêu chuẩn: Không có phụ thuộc bên ngoài (chỉ sử dụng sys, json, os, pathlib, subprocess, time)
### Xử lý lỗi
* Lỗi phân tích cú pháp JSON → trả về chuỗi trống ""
* Thiếu các trường → bỏ qua phần đó (không bị lỗi)
* Không tìm thấy thư mục Git → bỏ qua hoàn toàn phần Git
* Bất kỳ ngoại lệ nào → trả về chuỗi trống ""
## Cấu trúc mã
* Tệp đơn, < 100 dòng
* Xử lý mã hóa UTF-8 để có đầu ra unicode mạnh mẽ
* Tối đa một chức năng cho mỗi mối quan tâm (phân tích cú pháp, git, định dạng)
* Nhập gợi ý cần thiết cho tất cả các chức năng
* Chuỗi tài liệu cho từng chức năng giải thích mục đích của nó
## Các bước tích hợp
1. Lưu tập lệnh vào ~/.claude/statusline.py
2. Chạy chmod +x ~/.claude/statusline.py
3. Thêm vào ~/.claude/settings.json:
```json
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.py",
"padding": 0
}
}
```
4. Kiểm tra thủ công: echo '{"model":{"display_name":"Test"},"workspace":{"current_dir":"/tmp"}}' | ~/.claude/statusline.py
## Danh sách kiểm tra xác minh
* Tập lệnh thực thi mà không phụ thuộc vào bên ngoài (ngoại trừ lệnh gọi git status --porcelain khi được lưu vào bộ đệm)
* Độ rộng văn bản hiển thị ≤ 80 ký tự (không bao gồm mã ANSI khi tính toán)
* Màu sắc hiển thị chính xác ở cả nền tối và sáng của thiết bị đầu cuối
* Thời gian thực hiện < 100 mili giây trong không gian làm việc thông thường (các lệnh gọi được lưu trong bộ nhớ đệm phải < 20 mili giây)
* Xử lý khéo léo kho lưu trữ Git bị thiếu
* Tệp bộ đệm được tạo trong /tmp và tôn trọng TTL
* Số lượng tệp Git được làm mới khi .git/index mtime thay đổi hoặc trôi qua 5 giây
## Bối cảnh cho các quyết định
Đây là thanh trạng thái kiểu "nhà phát triển chuyên nghiệp". Nó ưu tiên:
* Thông tin chi tiết về Git để nhận biết về việc chuyển nhánh
* Giám sát hiệu quả API để phát triển có ý thức về chi phí
* Mật độ hình ảnh để có được thông tin tối đa trên mỗi ký tự