diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b54413..1586e77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.3.14 + +### Config +- **Default language is English** (`en`). Switch to 简体中文 / 繁體 via + `grok-hud settings` or `grok-hud lang zh` / `lang tw`. + ## 0.3.13 ### Fixes diff --git a/README.en.md b/README.en.md index c2c09c6..016201f 100644 --- a/README.en.md +++ b/README.en.md @@ -20,7 +20,7 @@ ctx ██████░░░░ 50% (252k/500k) · i … o … c 99% · use 2 | Activity | Tools, agents, todos | | Theme | Follows Grok `[ui].theme` (not locked) | | Multi-terminal | Independent session per tab | -| Language | Default **简体中文**; English / 繁體 available | +| Language | Default **English**; 简体中文 / 繁體 available | Repo: http://172.238.15.154:3000/Redredchen01/grok-build-hud Plugin id: `grok-build-hud` · version in [`plugin.json`](./plugin.json) @@ -154,7 +154,7 @@ scripts/install.sh # one-shot installer | **essential** | 2 | Model/git + context/usage + activity | | **minimal** | 1 | Dense single row | -`language`: `zh-Hans` (default) / `en` / `zh-Hant` +`language`: `en` (default) / `zh-Hans` / `zh-Hant` Theme always tracks Grok `/theme` unless `GROK_HUD_LOCK=1`. diff --git a/README.md b/README.md index 7a501cb..6d9708f 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Grok 4.5 · AI FILM SPACE/0717 · ● | 活动 | 工具、agent、todos | | 主题 | 跟随 Grok `[ui].theme`,不锁死 | | 多终端 | 每个标签页**独立** session,互不串线 | -| 语言 | 默认**简体中文**,可切英文 / 繁體 | +| 语言 | 默认 **English**,可切简体中文 / 繁體 | 仓库:http://172.238.15.154:3000/Redredchen01/grok-build-hud 插件名:`grok-build-hud` · 版本见 [`plugin.json`](./plugin.json) @@ -216,8 +216,8 @@ grok-hud stop grok-hud settings # 快捷切语言 -grok-hud lang zh # 简体中文(默认) -grok-hud lang en # English +grok-hud lang en # English(默认) +grok-hud lang zh # 简体中文 grok-hud lang tw # 繁體中文 ``` @@ -257,7 +257,7 @@ tmux source-file ~/.grok/hud/tmux.conf && tmux refresh-client -S 常用字段: -- `language`:`zh-Hans`(默认)/ `en` / `zh-Hant` +- `language`:`en`(默认)/ `zh-Hans` / `zh-Hant` - `bold: true` — 粗体数值 - `barWidth: 14` — 进度条宽度 diff --git a/commands/settings.md b/commands/settings.md index fcf5625..5471233 100644 --- a/commands/settings.md +++ b/commands/settings.md @@ -13,8 +13,8 @@ grok-build-hud --settings ## Language shortcuts ```bash -grok-hud lang zh # 简体中文 (default) -grok-hud lang en # English +grok-hud lang en # English (default) +grok-hud lang zh # 简体中文 grok-hud lang tw # 繁體中文 ``` diff --git a/package.json b/package.json index 44e8ec9..634f730 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grok-build-hud", - "version": "0.3.13", + "version": "0.3.14", "description": "第三方 Grok Build 状态条(非 xAI 官方):同窗口上下文/配额/token/工具;plugin + CLI + tmux HUD", "type": "module", "main": "dist/src/index.js", diff --git a/plugin.json b/plugin.json index 9b0742a..46a500e 100644 --- a/plugin.json +++ b/plugin.json @@ -1,6 +1,6 @@ { "name": "grok-build-hud", - "version": "0.3.13", + "version": "0.3.14", "description": "第三方 Grok Build 状态条(非官方):同窗口上下文/配额/token/工具/待办;tmux HUD + 会话斜杠命令", "author": { "name": "Redredchen01" diff --git a/skills/grok-build-hud/SKILL.md b/skills/grok-build-hud/SKILL.md index 97c736c..92d6a28 100644 --- a/skills/grok-build-hud/SKILL.md +++ b/skills/grok-build-hud/SKILL.md @@ -35,8 +35,8 @@ One-shot: build CLI → install tmux dashboard → `grok plugin install . --trus ```bash grok # wrapped: Grok + bottom HUD (same tab) grok-hud status # one-shot print -grok-hud settings # language (中/英), preset, rows -grok-hud lang zh|en|tw +grok-hud settings # language (default en; 中文可选), preset, rows +grok-hud lang en|zh|tw # en default grok-build-hud --preset full|essential|minimal grok-build-hud --theme auto # follow Grok [ui].theme grok-hud stop # stop dashboard daemon diff --git a/src/hud-config.ts b/src/hud-config.ts index e7f26e5..82c4423 100644 --- a/src/hud-config.ts +++ b/src/hud-config.ts @@ -58,8 +58,8 @@ export const PRESET_FULL: HudDisplayConfig = { preset: "full", lineLayout: "expanded", pathLevels: 2, - /** Default UI language: 简体中文 (switch to en in settings) */ - language: "zh-Hans", + /** Default UI language: English (switch to 中文 in settings) */ + language: "en", statusLines: 3, bold: true, barWidth: 14, @@ -150,7 +150,7 @@ export function loadHudConfig( if (!fs.existsSync(p)) { return { ...PRESET_FULL, - language: "zh-Hans", + language: "en", display: { ...PRESET_FULL.display }, }; } @@ -164,8 +164,8 @@ export function loadHudConfig( return { ...base, ...raw, - // Prefer saved language; default 中文 when missing - language: raw.language ?? base.language ?? "zh-Hans", + // Prefer saved language; default English when missing + language: raw.language ?? base.language ?? "en", bold: raw.bold ?? base.bold ?? true, barWidth: raw.barWidth ?? base.barWidth ?? 14, statusLines: raw.statusLines ?? base.statusLines ?? 3, @@ -174,13 +174,13 @@ export function loadHudConfig( } catch { return { ...PRESET_FULL, - language: "zh-Hans", + language: "en", display: { ...PRESET_FULL.display }, }; } } -/** Ensure config exists with Chinese default (idempotent). */ +/** Ensure config exists with English default (idempotent). */ export function ensureDefaultConfig( grokHome = path.join(os.homedir(), ".grok"), ): HudDisplayConfig { @@ -188,7 +188,7 @@ export function ensureDefaultConfig( if (!fs.existsSync(p)) { const cfg = { ...PRESET_FULL, - language: "zh-Hans" as const, + language: "en" as const, display: { ...PRESET_FULL.display }, }; saveHudConfig(cfg, grokHome); diff --git a/src/i18n.ts b/src/i18n.ts index 858bb05..1a2a285 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -1,6 +1,6 @@ /** * HUD + settings UI strings. - * Default language: zh-Hans (简体中文). Switch via settings → English. + * Default language: en (English). Switch via settings → 中文 / 繁體. */ import type { HudDisplayConfig } from "./hud-config.js"; @@ -190,7 +190,7 @@ const EN: HudStrings = { export function normalizeLang(raw?: string | null): HudLang { const s = (raw || "").trim().toLowerCase(); - if (!s) return "zh-Hans"; + if (!s) return "en"; if (s === "en" || s === "english" || s === "eng") return "en"; if ( s === "zh-hant" || @@ -216,7 +216,7 @@ export function normalizeLang(raw?: string | null): HudLang { ) { return "zh-Hans"; } - return "zh-Hans"; + return "en"; } export function t(lang?: string | null): HudStrings { diff --git a/src/index.ts b/src/index.ts index a71f60a..3f148c5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -269,13 +269,14 @@ Also: grok-build-hud --theme auto # follow Grok /theme (default, not locked) grok-build-hud --preset full|essential|minimal grok-hud settings # 设定界面(语言 中/英、预设、行数) - grok-hud lang zh # 快捷:简体中文 - grok-hud lang en # 快捷:English + grok-hud lang en # English (default) + grok-hud lang zh # 简体中文 + grok-hud lang tw # 繁體中文 Theme: always tracks Grok [ui].theme (auto → OS light/dark maps). Change inside Grok with /theme — HUD re-paints in ~1s. -Language: default 简体中文; switch in settings or: grok-hud lang en +Language: default English; switch in settings or: grok-hud lang zh Lifecycle: Terminal open → ready (not machine boot). 文档: README.md(中文)· README.en.md(English) @@ -391,7 +392,7 @@ export async function runCli( // keep readability defaults + user language cfg.bold = true; cfg.barWidth = Math.max(cfg.barWidth ?? 12, 12); - cfg.language = prev.language ?? "zh-Hans"; + cfg.language = prev.language ?? "en"; const saved = saveHudConfig(cfg, grokHome); writeTmuxConfFile(opts.grokHome); applyTmuxStatusBar({ grokHome: opts.grokHome }); @@ -485,7 +486,7 @@ export async function runCli( out(` (plain command — auto HUD; no extra flags)`); out(` theme: follows Grok /theme (not locked)`); out( - ` language: ${hudCfg.language} (设定: grok-hud settings · 切英文: grok-hud lang en)`, + ` language: ${hudCfg.language} (settings: grok-hud settings · 中文: grok-hud lang zh)`, ); if (r.grokWrap) { out(` wrap: ${r.grokWrap.wrapperPath}`); diff --git a/src/install-dashboard.ts b/src/install-dashboard.ts index 7d6a7c0..f075c28 100644 --- a/src/install-dashboard.ts +++ b/src/install-dashboard.ts @@ -182,7 +182,7 @@ if-shell '[ -f "$HOME/.grok/hud/tmux.conf" ]' 'source-file ~/.grok/hud/tmux.conf // Theme: always follow Grok [ui].theme (clear legacy locks) ensureFollowMode(grokHome); - // Default language 简体中文 (user can switch in settings) + // Default language English (user can switch to 中文 in settings) ensureDefaultConfig(grokHome); // Terminal-open hook (primary lifecycle): interactive zsh → ensure daemon diff --git a/src/settings-ui.ts b/src/settings-ui.ts index 7010858..d8488a0 100644 --- a/src/settings-ui.ts +++ b/src/settings-ui.ts @@ -1,6 +1,6 @@ /** * Interactive settings UI for language / preset / rows. - * Default language: 简体中文; switchable to English / 繁體. + * Default language: English; switchable to 简体中文 / 繁體. */ import * as readline from "node:readline"; import { @@ -77,14 +77,14 @@ async function pickLanguage( out: (s: string) => void, ): Promise { const s = t(cfg.language); - out(` 1) ${s.langZh}`); - out(` 2) ${s.langZhHant}`); - out(` 3) ${s.langEn}`); + out(` 1) ${s.langEn} (default)`); + out(` 2) ${s.langZh}`); + out(` 3) ${s.langZhHant}`); out(` b) ${s.back}`); const ans = await ask(rl, ` ${s.choose}: `); - if (ans === "1" || ans === "zh" || ans === "cn") return "zh-Hans"; - if (ans === "2" || ans === "tw" || ans === "hant") return "zh-Hant"; - if (ans === "3" || ans === "en") return "en"; + if (ans === "1" || ans === "en") return "en"; + if (ans === "2" || ans === "zh" || ans === "cn") return "zh-Hans"; + if (ans === "3" || ans === "tw" || ans === "hant") return "zh-Hant"; return normalizeLang(cfg.language); } @@ -152,7 +152,7 @@ export async function runSettingsUi( // Default to Chinese if somehow empty if (!cfg.language) { - cfg = { ...cfg, language: "zh-Hans" }; + cfg = { ...cfg, language: "en" }; } const rl = readline.createInterface({ diff --git a/src/tmux-hud.ts b/src/tmux-hud.ts index a3ea5a6..c3add98 100644 --- a/src/tmux-hud.ts +++ b/src/tmux-hud.ts @@ -22,12 +22,9 @@ import { /** Brand-new Terminal status: ctx 0%, no leakage from previous windows. */ export function seedIdleTmuxStatus(instDir: string): void { fs.mkdirSync(instDir, { recursive: true }); - const idleSingle = "窗 ░░░░░░░░░░ 0% · —\n"; - const idleLines = [ - "— · —", - "窗 ░░░░░░░░░░ 0% · —", - "", - ].join("\n") + "\n"; + // English labels (default UI language); live dashboard rewrites with user lang + const idleSingle = "ctx ░░░░░░░░░░ 0% · —\n"; + const idleLines = ["— · —", "ctx ░░░░░░░░░░ 0% · —", ""].join("\n") + "\n"; fs.writeFileSync(path.join(instDir, "tmux-status.txt"), idleSingle, "utf8"); fs.writeFileSync(path.join(instDir, "tmux-lines.txt"), idleLines, "utf8"); fs.writeFileSync(path.join(instDir, "status-line.txt"), "[hud] ctx 0%\n", "utf8"); @@ -83,7 +80,7 @@ export function tmuxStatusCommands(grokHome = defaultGrokHome()): string[][] { const scopedSingle = `${instRoot}/#{session_name}/tmux-status.txt`; // NEVER fall back to global ~/.grok/hud/tmux-*.txt — that leaked the previous // Terminal's high ctx% into brand-new windows (should show 0% / idle). - const idleSingle = "窗 ░░░░░░░░░░ 0% · —"; + const idleSingle = "ctx ░░░░░░░░░░ 0% · —"; // Up to 3 status rows in the SAME terminal window const statusLines = Math.max( 1, diff --git a/tests/i18n.test.ts b/tests/i18n.test.ts index 4f814a7..815c346 100644 --- a/tests/i18n.test.ts +++ b/tests/i18n.test.ts @@ -13,7 +13,8 @@ import type { SessionSnapshot } from "../src/types.js"; describe("i18n + settings language", () => { it("defaults and normalizes languages", () => { - assert.equal(normalizeLang(undefined), "zh-Hans"); + assert.equal(normalizeLang(undefined), "en"); + assert.equal(normalizeLang(""), "en"); assert.equal(normalizeLang("zh"), "zh-Hans"); assert.equal(normalizeLang("en"), "en"); assert.equal(normalizeLang("tw"), "zh-Hant"); diff --git a/tests/layout.test.ts b/tests/layout.test.ts index 5f327d9..2ec8aff 100644 --- a/tests/layout.test.ts +++ b/tests/layout.test.ts @@ -106,9 +106,9 @@ describe("layout", () => { for (const ln of narrow) { assert.ok(visibleLen(ln) <= 50, `line too long: ${visibleLen(ln)} ${stripTmuxStyles(ln)}`); } - // hierarchy styles present on wide (default language 中文 labels) + // hierarchy styles present on wide (default language English labels) const joined = wide.join("\n"); assert.match(joined, /italics|dim|bold/); - assert.match(joined, /入 |出 |缓 |窗 /); + assert.match(joined, /\bi |\bo |\bc |ctx /); }); });