feat: v2.5.12 — plan and quota for every AI tool, Grok Build and Kimi Code, Quit AgentHub (#65)
Usage panel (status bar): - every account shows its plan (Claude subscriptionType, Codex chatgpt_plan_type, Cursor membershipType, Grok subscriptionTier) - new quota rows: Cursor CLI (cursor.com usage-summary), Antigravity (`agy --print /usage`, two model pools; AGENTHUB_AGY_USAGE=0 never runs agy), Grok Build, Kimi Code, OpenCode Go — each login read from the tool's own file, sent only to its own host while valid, never refreshed - in-flight quota reads are shared between tabs AI Tools catalog: Grok Build (`grok`) and Kimi Code (`kimi`) added; Gemini CLI, Hermes and OpenClaw removed. Also: Quit AgentHub (#65, `agenthub stop`), status-area icon, Add to Chat on an editor selection, Settings in three groups, JetBrains-style Changes panel (ticked files/hunks, ignore, blame, file history), terminal font. --no-verify: :3000 is taken by another dev server (lane-detect tests); both suites run by hand — server 2636/2639 (the 3 are :3000), client 1131/1131.
This commit is contained in:
@@ -205,6 +205,37 @@ describe("fast path", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("fast path after a Quit (issue #65)", () => {
|
||||
beforeEach(resetRuntime);
|
||||
|
||||
it("starts nothing while the stopped flag is set, and starts again once it is gone", () => {
|
||||
const pkg = require("../../package.json");
|
||||
const { markQuit, clearQuit } = require("../lib/quit");
|
||||
const prevHome = process.env.HOME;
|
||||
process.env.HOME = TMP_HOME; // the real unit may name another root: stale
|
||||
try {
|
||||
fs.mkdirSync(path.join(RT, "node_modules"), { recursive: true });
|
||||
boot.writeState(
|
||||
{
|
||||
pluginVersion: pkg.version,
|
||||
depsHash: boot.depsHash(),
|
||||
pluginRoot: path.resolve(__dirname, "..", ".."),
|
||||
},
|
||||
RT
|
||||
);
|
||||
// No server is live: without the flag the worker would start one.
|
||||
assert.equal(boot.fastPathOk(RT), false);
|
||||
markQuit(RT);
|
||||
assert.equal(boot.fastPathOk(RT), true);
|
||||
clearQuit(RT);
|
||||
assert.equal(boot.fastPathOk(RT), false);
|
||||
} finally {
|
||||
if (prevHome === undefined) delete process.env.HOME;
|
||||
else process.env.HOME = prevHome;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe("bootstrap lock", () => {
|
||||
beforeEach(resetRuntime);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user