Bring Grok up to par with Claude and Codex in the agents panel (#13992)
* Let Grok updates through mise take effect Grok's npm launcher runs ~/.grok/bin/grok whenever it exists, and the install script that repoints it at a new release doesn't run under mise, so every machine kept running the release it first unpacked. Updating mise tools now drops a link to an older release and the old binary, and lets the launcher unpack the installed one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Keep several Grok accounts, the way Claude and Codex do Grok honors GROK_HOME, so an added Grok account gets its own home holding only its login and settings cache, with the CLI binary, sessions, skills, plugins, memory, and config linked back to ~/.grok. The account commands, the add flow (a second account signs in through a private window), the launcher, and a grok shell function all take it like the others, and its identity and plan come from the files Grok writes at login. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Show Grok's plan and credits in the agents panel A grok collector reads each account's plan from the settings Grok caches and its credits from the endpoint behind Grok's own /usage view, so Grok gets a section, per-account limits, and autoswitch like Claude and Codex. A signed-in agent with a plan now shows before its first numbers, so a lapsed sign-in has somewhere to say so. Grok's mark joins the assets, and with every agent able to take another account the add screen no longer needs to dim one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Document Grok accounts and limits alongside Claude and Codex Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Read Grok's credits the way xAI actually answers The answer nests under config, names a weekly period with its end, and as protobuf JSON leaves the usage percentage out while it's zero. The collector now reads that shape, so a fresh week shows as 0% until it resets rather than as nothing known. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Count Grok's prompts and sessions from its session summaries Grok keeps a summary beside each session with when it was last active and how many prompts it had, so its section and the hero's summary get today's prompts and sessions and its active days. It records no token counts there, so none are claimed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Give each Grok limits cache write its own temporary file Two overlapping collector runs wrote the same cache through one .tmp path, so one rename could leave the other's failing and its record not updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Read a single Grok account from GROK_HOME when it's set The launcher and the CLI honor GROK_HOME, but the collector always read ~/.grok, so a Grok signed in only in a custom home showed nothing. With one account, the collector now reads the home the CLI would; with several registered, the primary stays ~/.grok. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Drop guesses the real Grok credits answer made unnecessary The collector carried fallbacks for fields and shapes guessed from the binary before xAI's actual answer was seen, a numeric timestamp branch nothing writes, the panel's default for prompt stats, and guards that an empty sign-in already covers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Keep the working Grok release until its update is in place The update dropped the link and older binaries before the new release was unpacked and ignored a failed unpack, which could leave every Grok account without a CLI. The old release now stays until the new one is linked, and its link comes back if it never is. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Count only Grok sessions for today, not prompts A session's summary holds all its prompts and only when it was last active, so a resumed session put its whole history on today. Today now counts the sessions active in it; prompts stay an all-time total. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Reuse the Grok session scan on a limits-only refresh Opening the panel and near-limit checks only need fresh limits, so they reuse a scan up to 15 minutes old, as the Codex collector does; --force still rescans. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c05d90196f
commit
f45461a38f
23 files changed
+636
-105
No files matched your search
@@ -235,12 +235,15 @@ Item {
|
||||
}
|
||||
|
||||
// All-time keeps a quiet day from hiding an agent; today's counts admit a
|
||||
// machine whose only source is history.jsonl, which knows nothing older.
|
||||
// machine whose only source is history.jsonl, which knows nothing older. A
|
||||
// signed-in agent with a plan shows before its first numbers arrive, so a
|
||||
// lapsed sign-in still has somewhere to say so.
|
||||
function providerHasData(p) {
|
||||
return numberValue(p.totalPrompts) > 0 || numberValue(p.totalSessions) > 0
|
||||
|| numberValue(p.activeDays) > 0 || numberValue(p.todayPrompts) > 0
|
||||
|| numberValue(p.todaySessions) > 0 || (p.limits && p.limits.length > 0)
|
||||
|| (p.accounts && p.accounts.length > 0) || !!p.balance
|
||||
|| (p.ready === true && p.tierLabel !== "")
|
||||
}
|
||||
|
||||
// A prepaid agent's credit ledger. Like rate limits, the balance is
|
||||
|
||||
@@ -211,7 +211,7 @@ Panel {
|
||||
|
||||
function chooseAddProvider(id) {
|
||||
var state = addChecks[id] || ""
|
||||
if (state === "unsupported" || state === "") return
|
||||
if (state === "") return
|
||||
addProvider = id
|
||||
if (state === "additional") addStage = "name"
|
||||
else startAdd("")
|
||||
@@ -1004,8 +1004,7 @@ Panel {
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
// Pick: each agent by a large mark over its name, three across. One that
|
||||
// can't be added right now is dimmed, and says why on hover.
|
||||
// Pick: each agent by a large mark over its name, three across.
|
||||
Row {
|
||||
id: choiceRow
|
||||
visible: root.picking
|
||||
@@ -1024,7 +1023,6 @@ Panel {
|
||||
readonly property bool hasCursor: root.hasKey("choice", index)
|
||||
width: (choiceRow.width - choiceRow.spacing * (root.addProviders.length - 1)) / root.addProviders.length
|
||||
implicitHeight: choiceBody.implicitHeight + Style.space(16)
|
||||
opacity: state === "unsupported" ? 0.4 : 1.0
|
||||
onHasCursorChanged: if (hasCursor) root.revealItem(choice)
|
||||
|
||||
Column {
|
||||
@@ -1059,11 +1057,6 @@ Panel {
|
||||
onClicked: root.chooseAddProvider(choice.modelData.providerId)
|
||||
}
|
||||
|
||||
PanelToolTip {
|
||||
visible: choice.state === "unsupported" && choice.hasCursor
|
||||
// Kept short: the tooltip can't grow past the panel's edges.
|
||||
text: "Already signed in. " + choice.modelData.providerName + " takes one account."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,10 +72,12 @@ light surfaces — and the bar glyph stands in when there is none.
|
||||
|---|---|---|
|
||||
| `claude` | Anthropic's OAuth usage endpoint (5-hour session + 7-day weekly) | `~/.claude/projects` transcripts, opencode sessions on an Anthropic provider, plus `stats-cache.json` and `history.jsonl` as fallback |
|
||||
| `codex` | The Codex app-server RPC | native Codex CLI session files (plus pi and opencode sessions) |
|
||||
| `grok` | The credits endpoint behind Grok's `/usage` view (the billing period's included usage) | Prompts and sessions from each session's `summary.json` (Grok records no tokens there) |
|
||||
| `fireworks` | Estimated prepaid balance: configured funding minus rated account costs | Fireworks billing API, grouped by day and model for the last 30 days |
|
||||
|
||||
When `~/.local/state/omarchy/agents/accounts/<claude|codex>.json` registers
|
||||
more than one account, the `claude` and `codex` records also carry
|
||||
When `~/.local/state/omarchy/agents/accounts/<claude|codex|grok>.json`
|
||||
registers more than one account, the `claude`, `codex`, and `grok` records
|
||||
also carry
|
||||
`accounts: [{ id, label, email, plan, active, limits, stale, usageStatusText,
|
||||
authHelpText }]`, each account probed with its own sign-in (Claude caches each
|
||||
account's limits separately; Codex runs one app-server per account home), and
|
||||
@@ -89,7 +91,11 @@ account changed.
|
||||
|
||||
Claude limits need a signed-in CLI; without credentials the panel says so and
|
||||
falls back to local stats only. A non-default Claude directory is honored via
|
||||
`CLAUDE_CONFIG_DIR`, Codex via `CODEX_HOME`. Fireworks reads
|
||||
`CLAUDE_CONFIG_DIR`, Codex via `CODEX_HOME`, Grok via `GROK_HOME`. Grok's
|
||||
plan comes from the settings it caches in its home, and its limit from the
|
||||
credits endpoint its own `/usage` view reads, asked with each account's
|
||||
sign-in; a sign-in left to lapse shows the last credits until Grok runs
|
||||
again. Fireworks reads
|
||||
`FIREWORKS_API_KEY` and `FIREWORKS_ACCOUNT_ID` first, then
|
||||
`~/.fireworks/auth.ini` (which `firectl set-api-key` creates), then the key
|
||||
opencode stores in `~/.local/share/opencode/auth.json` when Fireworks is
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg fill="#111" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Grok</title><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg>
|
||||
|
After Width: | Height: | Size: 748 B |
@@ -0,0 +1 @@
|
||||
<svg fill="#fff" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Grok</title><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg>
|
||||
|
After Width: | Height: | Size: 748 B |
@@ -5,7 +5,7 @@
|
||||
"version": "1.0.0",
|
||||
"author": "Omarchy",
|
||||
"license": "MIT",
|
||||
"description": "Claude Code, Codex, and Fireworks usage, limits, and pace in a native Omarchy bar panel.",
|
||||
"description": "Claude Code, Codex, Grok, and Fireworks usage, limits, and pace in a native Omarchy bar panel.",
|
||||
"kinds": ["bar-widget"],
|
||||
"activation": "on-demand",
|
||||
"entryPoints": {
|
||||
@@ -21,6 +21,7 @@
|
||||
"providers": {
|
||||
"claude": { "enabled": true },
|
||||
"codex": { "enabled": true },
|
||||
"grok": { "enabled": true },
|
||||
"fireworks": { "enabled": true }
|
||||
},
|
||||
"refreshIntervalSec": 900,
|
||||
|
||||
Reference in new issue
Block a user