quotacap 0.0.38 → 0.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,7 +18,7 @@ QuotaCap helps you get more from the AI coding subscriptions you already pay for
18
18
 
19
19
  | Provider | Mechanism | Source |
20
20
  |---|---|---|
21
- | Claude Code | `exec` — `claude -p /usage --output-format json` | Live |
21
+ | Claude Code | `exec` — `claude -p /usage --output-format json --strict-mcp-config` | Live |
22
22
  | Antigravity | `exec` — `agy -p /usage --output-format json` (two rows: Antigravity for Gemini, Antigravity 3P for third-party models) | Live |
23
23
  | Codex | `pty` — `codex --no-alt-screen` then `/status`, parse `Weekly/5h limit: X% left` | Live |
24
24
  | Kimi Code | `pty` — `kimi` then `/usage`, parse `Weekly/5h limit: Y% used` | Live |
@@ -23,7 +23,10 @@ export const claudeAdapter = {
23
23
  execPath: "claude",
24
24
  async poll(execPath) {
25
25
  const bin = execPath ?? claudeAdapter.execPath ?? "claude";
26
- const { stdout } = await trackedExecFile("claude", bin, ["-p", "/usage", "--output-format", "json"], { timeout: 8000 });
26
+ // --strict-mcp-config: a usage read needs no MCP servers. Without it every
27
+ // poll boots the user's servers under the daemon's PATH, and their failures
28
+ // are cached and hide those servers from the user's own sessions.
29
+ const { stdout } = await trackedExecFile("claude", bin, ["-p", "/usage", "--output-format", "json", "--strict-mcp-config"], { timeout: 8000 });
27
30
  const parsed = JSON.parse(stdout);
28
31
  const result = parsed.result ?? stdout;
29
32
  return parseClaudeUsage(result);
@@ -56,7 +56,8 @@ export const claudeCatalogFetcher = {
56
56
  // Reuse the pinned claude path the daemon resolves (claudeAdapter.execPath).
57
57
  const bin = claudeAdapter.execPath ?? "claude";
58
58
  // Per-fetch catalog-owned signal: never the usage poll's shared controller.
59
- const { stdout } = await trackedExecFile("claude", bin, ["-p", "/model", "--output-format", "json"], {
59
+ // No MCP servers for a model listing; see the usage adapter for why.
60
+ const { stdout } = await trackedExecFile("claude", bin, ["-p", "/model", "--output-format", "json", "--strict-mcp-config"], {
60
61
  timeout: EXEC_TIMEOUT_MS,
61
62
  signal: new AbortController().signal,
62
63
  });
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // generated by scripts/build-embed.mjs — do not edit
2
- export const VERSION = "0.0.38";
2
+ export const VERSION = "0.0.39";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quotacap",
3
- "version": "0.0.38",
3
+ "version": "0.0.39",
4
4
  "description": "Local quota tracker for AI coding plans with a dashboard, CLI, MCP server, and next-plan recommendations.",
5
5
  "license": "MIT",
6
6
  "keywords": [