Spaces:
Running
Running
Commit History
-
fix(api): 7 màn còn lại dùng chung lớp đọc JSON an toàn
Administrator +1: Claude Opus 5Nốt các trang gọi fetch trần rồi r.json(): Listing ảnh, Listing free, Flux2, Tạo video, Lịch sử cá nhân, Đăng nhập, Quản trị người dùng (+ tab Thời lượng). Space trả trang HTML lúc bận là các trang này vẫn văng "Unexpected token '<'". - api.js mở ra `request/jget/jpost` cho các trang dùng chung; AbortError đi xuyên qua nguyên vẹn để Listing ảnh còn nhận ra "quá thời gian chờ 2 phút". - Flux2: vòng hỏi trạng thái chịu đựng 90s mất liên lạc thay vì bỏ mẻ ảnh đang vẽ dở ngay lần hỏng đầu — cùng cách đã làm cho pollJob. - Đăng nhập: tách "chưa được cấp quyền" (máy chủ trả lời rành mạch) khỏi "máy chủ trục trặc". Trước đây Space bận là báo oan người dùng chưa có quyền rồi gửi luôn yêu cầu cấp quyền cho người vốn đã có. - Quản trị: chỉ 403 mới là sai mật khẩu; lỗi khác không còn đá người quản trị ra khỏi phiên đang mở. - Lịch sử cá nhân: bỏ bản jpost chép tay, và xoá/liên kết Drive lỗi thì báo thay vì nuốt thành unhandled rejection. - Hai nút tải .zip: 200-mà-HTML không còn lưu …d94104e
-
fix(báo cáo): ô "Số tài khoản được cấp" đếm nhầm bảng; buộc tải video qua relay trên Space
Ô "Số tài khoản được cấp" hiện 4 trong khi thực tế đã cấp hơn 80. Nó đang đếm bảng mã U00N, mà mã chỉ sinh khi người đó ĐĂNG NHẬP lần đầu hoặc khi quản trị tự tay thêm — duyệt từ hàng chờ thì không cấp mã. Đổi sang đếm bảng tài khoản đã duyệt, đúng bằng số dòng tab "Quản lý người dùng". Kèm nhóm sửa relay/HF đang làm dở: - Trên Space, tikwm/iesdouyin/Piped BẮT BUỘC đi qua TIKTOK_RELAY_URL; thiếu relay thì nêu lỗi rõ ràng thay vì gọi thẳng từ IP datacenter (hay bị chặn). Dev local vẫn gọi trực tiếp như cũ. - Worker relay đặt Referer theo đúng nguồn: CDN Douyin chống hotlink, sai Referer là 403. - CI loại thư mục deploy/ khỏi bản đẩy lên Space (commit tạm trong runner, main trên GitHub giữ nguyên). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>9dbe21e
-
feat(báo cáo): gộp bộ lọc ngày thành 1 ô, thêm 2 ô tool đóng góp nhiều/ít nhất
Bộ lọc ngày: bỏ cặp "Từ ngày / Đến ngày" luôn hiện, thay bằng MỘT ô chọn có sẵn Hôm nay / Hôm qua / 7-30-90 ngày qua / Tuần này / Tuần trước / Tháng này / Tháng trước. Quản trị hầu hết chỉ muốn "7 ngày qua" chứ không muốn gõ hai cái ngày; chọn "Tùy chọn khoảng ngày…" mới mở lịch ra cho ai cần mốc chính xác. Tuần tính từ THỨ HAI theo lịch VN. Không có mốc tương lai (ngày mai, 7 ngày tới…) vì đây là báo cáo đọc log đã ghi, khoảng tương lai luôn rỗng. Nhóm "Năng suất" thêm hai ô "Tool đóng góp nhiều nhất / ít nhất" — cùng bảng xếp hạng với card 🏆 bên dưới, kéo lên đầu để nhìn phát thấy ngay. Giá trị của hai ô này là TÊN TOOL nên dùng cỡ chữ nhỏ hơn ô số (.val.text), kẻo tên dài như "Chèn chữ vào video" tràn khỏi thẻ. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>cc970b0 -
fix(báo cáo): ô Hài lòng hiện "3.3/5" — thang điểm cỡ nhỏ cạnh con số
Bỏ "/5" khỏi dòng phụ, đưa lên ngay cạnh điểm dưới dạng chữ nhỏ màu mờ: con số đứng một mình thì không biết là thang mấy, mà để dưới dòng phụ thì đọc rời rạc. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>146a9ed -
fix(báo cáo): ô Hài lòng bỏ chữ "/5" ở dòng phụ
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>09a5805 -
fix(báo cáo): commit trước lỡ đẩy bản JSX nháp, lệch hẳn với CSS
Commit 4ffa05a đẩy nhầm bản dashboard NHÁP: lệnh ghi file bản cuối bị hỏng (chuỗi lệnh quá dài, shell không chạy tới heredoc) nên JSX vẫn dùng lớp .rep-hero/.rep-seg/.kpi trong khi theme.css đã thay bằng .grp/.metric/ .rep-filters. Class không khớp -> trang báo cáo mất sạch định dạng, chữ tràn ra như văn bản thô. Nay đưa đúng bản cuối vào, và bỏ component Kpi đã chết trong UsageCharts (dashboard tự dựng ô Metric riêng). Bảng "Chi tiết theo tool": thêm cột "Việc xong" và chú thích cho ô rỗng. Tool mở ra rồi bỏ dở thì các cột thời gian/hài lòng KHÔNG có số thật để in — trước chỉ hiện trơ dấu "—", nhìn cứ như báo cáo mất dữ liệu. Nay rê chuột vào dấu — là biết vì sao trống, và cột "Việc xong" nói thẳng chưa việc nào chạy tới đích. Bỏ luôn tiêu đề "Quản trị thời lượng" trong component: trang AdminUsers đã in sẵn tiêu đề đổi theo tab, để cả hai thì lặp hai lần trên màn hình. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>16d58d0 -
feat(báo cáo): dựng lại tab thời lượng theo mẫu, CSV đọc được bằng tiếng Việt
Bảng nhân sự: cột "Xong" chỉ in SỐ việc xong, bỏ phần trăm đi kèm — cột này đứng cạnh cột "Số task" nên tỷ lệ tự đọc ra được, in thêm % chỉ làm ô chật. Thêm cột Team/BU tách từ tên đăng nhập kiểu "họ tên - team - bu". Giao diện dựng theo hai file mẫu đã chốt form: tiêu đề + thanh lọc (người dùng / công cụ / từ ngày / đến ngày) + ba nhóm ô chỉ số có gạch phân cách, rồi tới các card nội dung. Bật lại bảng "Tốc độ máy mỗi bước (B2)". Chỉ số mới trong ETL: số user đã dùng thật (không tính người chỉ ngó trang), dùng hàng tuần/hàng ngày — đếm theo mốc MỚI NHẤT trong khoảng lọc chứ không so với hôm nay, để xem lại báo cáo cũ vẫn đúng. CSV tải về: mỗi cột là một câu tiếng Việt, cục properties_json được bung thành "Bước máy: Bóc lời & dịch · Lần bấm chạy thứ: 1". Cột mã và JSON gốc dồn về cuối để vẫn dò ngược được. `?raw=1` giữ nguyên 11 cột schema v2 cho bên nào cần nạp vào công cụ khác. Bảng dịch để một chỗ ở labels.py, màn "Nhật ký chi tiết" đọc chung nên không lệch với file tải về; khoá …4ffa05a
-
style(analytics): bỏ chú thích "ít càng tốt" ở tiêu đề cột lần bấm/việc
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>31777af -
fix(analytics): thanh trong bảng đóng góp vẽ theo số thật, không theo điểm
Cột "lần bấm/việc" nhìn ngược đời: 0.5 lần/việc thanh DÀI hơn 0.8 lần/việc, vì thanh vẽ theo điểm quy đổi (ít bấm = điểm cao). Bảng này chủ yếu để nhìn cho nhanh nên đổi luật vẽ: thanh tỷ lệ với ĐÚNG CON SỐ hiện bên cạnh (so với tool cao nhất cùng cột) — số to là thanh dài, không ngoại lệ. Cột nào "ít càng tốt" thì ghi thẳng ở tiêu đề. Tool mở ra chưa bấm chạy lần nào vẽ thanh gạch mờ (không có số để vẽ) để khỏi đọc nhầm thành "0 lần bấm = giỏi nhất". Điểm quy đổi chuyển vào tooltip khi rê chuột. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>121ae3e -
fix(analytics): bảng đóng góp hiện số thật; tool chưa chạy hết được 100đ "ít chạy lại"
Ảnh chụp thực tế cho thấy cột "Ít chạy lại" TOOL NÀO CŨNG 100 -> thành phần 20% mất tác dụng. Nguyên nhân: điểm kẹp sàn attempts_avg = 1.0, nên tool mở ra rồi bỏ (attempts_avg = 0) cũng hoá "ít chạy lại nhất". Bỏ kẹp sàn: chỉ so nghịch đảo giữa các tool THẬT SỰ có bấm chạy; chưa chạy lần nào = 0 điểm. Giao diện: 3 cột nhu cầu / ít chạy lại / sản phẩm giờ hiện SỐ THẬT (33 việc, 0.8 lần/việc, 26 sản phẩm) thay vì điểm quy đổi — thanh tỷ lệ vẫn vẽ theo điểm, rê chuột vào thanh mới hiện điểm. Tool chưa chạy ghi rõ "chưa chạy". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>4b0cace -
feat(analytics): xếp hạng tool đóng góp nhiều/ít nhất; tạm ẩn bảng B2
Điểm đóng góp mỗi tool (etl.score_contribution), trọng số nghiệp vụ chốt: 40% nhu cầu người dùng — số việc người giao cho tool 20% ít phải bấm chạy lại — A4 nghịch đảo, làm 1 phát ăn ngay = điểm cao 40% sản phẩm đầu ra — B1 Mỗi thành phần quy về thang 100 theo tool cao nhất TRONG KỲ ĐANG LỌC, nên điểm chỉ so được giữa các tool cùng khoảng thời gian. Tool chưa chạy việc nào = 0 điểm. Giao diện: thẻ "🏆 Tool đóng góp nhiều nhất / ít nhất" — 2 ô nổi bật + bảng đủ 3 điểm thành phần (có thanh tỷ lệ) để đối chiếu vì sao ra thứ hạng đó. Tạm ẩn (comment) bảng "Tốc độ máy mỗi bước (B2)" theo yêu cầu; backend vẫn tính và trả data.jobs như cũ, muốn hiện lại chỉ cần bỏ comment. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>392e31c
-
feat(analytics): mã người dùng U00N + task_id/session_id đọc-được + source/parent_task
Theo góp ý chốt với team về 2 cột task_id/session_id trong bản log: - user_id đổi từ tên tự do sang mã U00N cấp tuần tự khi tạo tài khoản. Mã lưu bảng/file RIÊNG (user_codes), KHÔNG đụng bảng phân quyền: cấp mã lỗi thì đăng nhập vẫn chạy (lùi về username). login trả code; admin thêm user cấp mã ngay. - task_id = <tool>_<user>_<YYYYMMDD>_<HHMMSS>_<rand4>, session_id = s_<user>_<YYYYMMDD>_<HHMMSS>_<rand4> — đọc được, tự sắp theo thời gian, dùng giờ+random thay số thứ tự trong ngày nên mở 2 tab/2 máy không đụng ID. - task mới sinh từ task cũ ghi source + parent_task: rerun (nút Làm mới) và forward (chuyển sang tool khác, mang "cha" qua sessionStorage). - dashboard hiện TÊN cạnh mã (map U00N -> username) để quản trị vẫn biết ai. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>5edb87f -
feat(analytics): tab "Quản lý thời lượng" theo dõi người dùng cho quản trị
Ghi log thô raw_events rồi suy ra 9 chỉ số (A1-A5, B1-B4) bằng ETL, không lưu sẵn chỉ số. Lưu Postgres nếu có DATABASE_URL, không thì SQLite trong STORAGE_DIR (giữ 90 ngày, tự dọn). - backend: services/analytics (storage + etl + track), api/analytics (POST /api/events + các endpoint quản trị), middleware reqctx đọc header X-TNT-* để dòng log máy chạy gắn đúng task; JobManager tự phát job_queued/started/done kèm latency_ms (đã trừ thời gian chờ hàng đợi). - frontend: lib/track.js (đồng hồ người), nút 👍/👎 (ThumbsFeedback) cho B3, dashboard SVG thuần trong tab Quản lý thời lượng; gắn điểm đo vào 8 tool. Kèm sửa lỗi phát hiện khi test: - khôi phục core.files.rel_path() + gom mọi đường dẫn phiên ở cut/dub/shuffle/ download về "/" (trước nối "\" của Windows làm hỏng URL). - get_file trả 404 khi trỏ vào thư mục (thay vì 500). - run_tests.py cô lập STORAGE_DIR sang temp (trước dọn nhầm phiên thật). - cập nhật test_cut/test_dub theo API hiện hành + thêm test_analytics (14 test). …00d2c12