Files
AgentHub/client/src/i18n/locales/vi/splash.json
T
nntrivi2001 cc85e35439 feat(updates): detect the newest release and self-apply it, including plugin installs
Update detection was a commit count against the default branch, which says nothing about whether a *version* shipped and is pure noise on the plugin cache (a depth-1 clone, where every distance is a graft artefact). It now reads the forge's own releases API and compares the published tag to this install's package.json version, falling back to the commit count only when no release can be read — with the reason in release_check, so "up to date" never silently means "we could not look".

Two states a commit count cannot express: dev_build (ahead of the newest release, missing nothing from it) now reads "Dev build - N ahead" instead of a false "Up to date"; and on a shallow clone every commits_*_release field is null and dev_build is never asserted, because the numbers would be meaningless.

POST /api/updates/apply gains a second mode, chosen by install kind and never by the request body. A checkout still fast-forwards onto the release tag, rebuilds and self-restarts. A ~/.claude/plugins/cache/ install is refused by applyUpdate (that directory is Claude Code's to replace) and handed instead to a detached chain: claude plugin marketplace update -> claude plugin update -y -> plugin-bootstrap.js --force from the NEW cache dir, which retires this server and starts its replacement. Both write the HTTP response before anything stops the process.

The chain records every outcome to plugin-update.json in the runtime dir, outside the cache the update replaces, so the next server reports it as last_plugin_update: a failed chain is otherwise indistinguishable from a slow one, and the tab would poll a server that never returns. /reload-plugins is deliberately not in the chain - it is REPL-scoped to the session that runs it, so no background process can perform it, and plugin-bootstrap derives PLUGIN_ROOT from its own __dirname, which is what makes it unnecessary for the dashboard.

Also rebrands the sidebar subtitle, splash and page title to SmartGift Solution, and corrects three ARCHITECTURE.md statements that claimed /apply did not exist.

Verified: server 1683/1683, client 486/486, build, prettier, file-header audit, openapi.yaml regenerated.
2026-09-10 16:03:07 +07:00

86 lines
3.7 KiB
JSON

{
"greeting": {
"morning": "Chào buổi sáng",
"afternoon": "Chào buổi chiều",
"evening": "Chào buổi tối",
"night": "Đêm đã khuya"
},
"tagline": "Mọi điều agent của bạn làm đều không ẩn trong bóng tối.",
"sub1": "Khả năng quan sát thời gian thực cho mọi phiên Claude Code.",
"sub2": "Token, công cụ, chi phí và workflow, tất cả trực tiếp.",
"brand": "SmartGift Solution",
"taglines": [
"Mọi điều agent của bạn làm đều không ẩn trong bóng tối.",
"Thấy rõ từng bước đi của agent.",
"Agent của bạn, hoàn toàn trong tầm quan sát.",
"Từng token, công cụ và lượt xử lý — hiện rõ trước mắt.",
"Nhìn cả đội agent của bạn suy nghĩ.",
"Nơi mọi phiên Claude Code trở nên rõ ràng.",
"Đôi mắt thời gian thực dõi theo từng agent.",
"Từ prompt đến kết quả, tất cả đều được ghi lại.",
"Phòng điều khiển cho các AI agent của bạn.",
"Từng subagent đều được nắm rõ.",
"Biết chính xác agent của bạn tốn bao nhiêu.",
"Workflow agentic của bạn, trở nên dễ đọc.",
"Quan sát. Đo lường. Tối ưu.",
"Trung tâm điều hành cho Claude Code.",
"Biến mớ hỗn loạn của agent thành bức tranh rõ ràng.",
"Bằng chứng cho mọi lần chạy."
],
"subs": [
[
"Khả năng quan sát thời gian thực cho mọi phiên Claude Code.",
"Token, công cụ, chi phí và workflow, tất cả trực tiếp."
],
[
"Phiên, agent và sự kiện trực tiếp ngay khi diễn ra.",
"Phân tích token và chi phí theo từng model, không phải đoán mò."
],
[
"Truy vết mọi lời gọi công cụ trên khắp cây agent của bạn.",
"Phát hiện lượt chậm, model tốn kém, lỗi âm thầm."
],
["Hook truyền thẳng tới một dashboard cục bộ.", "Dữ liệu của bạn không bao giờ rời khỏi máy."],
[
"Nhìn các orchestrator giao việc cho subagent.",
"DAG, xử lý đồng thời và lan truyền lỗi, được trực quan hóa."
],
[
"Theo dõi chi phí đến từng token cache.",
"Giá theo từng model với mốc cơ sở nhận biết compaction."
],
[
"Mọi phiên, agent và sự kiện gom về một nơi.",
"Tìm kiếm, phát lại và kiểm tra mà không cần rời khỏi phòng."
],
[
"Từ SessionStart đến SessionEnd, được ghi lại trọn vẹn.",
"Bao gồm cả compaction, lỗi API và thời lượng từng lượt."
],
[
"Biết model nào đã làm gì, và tốn bao nhiêu.",
"Subagent được tính theo giá riêng, không phải giá của orchestrator."
],
[
"Đội workflow và các agent bên trong, được phơi bày.",
"Kể cả những lần chạy chẳng bao giờ kích hoạt một hook nào."
],
[
"Cửa sổ cục bộ ưu tiên nhìn vào agent của bạn.",
"Không cloud, không tài khoản, không telemetry."
],
[
"Đo năng suất, không phải cảm tính.",
"Tốc độ, hiệu quả cache và mức hữu dụng của công cụ, được chấm điểm."
],
[
"Bắt bất thường trước khi hóa đơn bắt được.",
"Chi phí ngoại lệ và đột biến token, được cảnh báo sớm."
],
[
"Cấu hình Claude Code của bạn, được lập bản đồ đầy đủ.",
"Skill, agent, hook, MCP và bộ nhớ chỉ trong một cái nhìn."
]
]
}