diff --git a/extensions/ccusage/CHANGELOG.md b/extensions/ccusage/CHANGELOG.md index 876ca182fbe..00257bc16a6 100644 --- a/extensions/ccusage/CHANGELOG.md +++ b/extensions/ccusage/CHANGELOG.md @@ -1,5 +1,11 @@ # Claude Code Usage (ccusage) Changelog +## [v2.3.1] - 2026-04-23 + +### Fixed + +- CLI data (daily, monthly, total, session) now auto-refreshes on the configured interval instead of only updating on manual revalidation + ## [v2.3.0] - 2026-03-23 ### Added diff --git a/extensions/ccusage/src/hooks/useCCUsageBlocksCli.ts b/extensions/ccusage/src/hooks/useCCUsageBlocksCli.ts index 012c6739d2f..72fda6270d8 100644 --- a/extensions/ccusage/src/hooks/useCCUsageBlocksCli.ts +++ b/extensions/ccusage/src/hooks/useCCUsageBlocksCli.ts @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { Cache } from "@raycast/api"; import { useExec } from "@raycast/utils"; import { BlocksCommandResponse, BlocksCommandResponseSchema } from "../types/usage-types"; @@ -50,5 +50,11 @@ export const useCCUsageBlocksCli = () => { }, }); + const intervalMs = parseInt(preferences.usageLimitsRefreshInterval || "60", 10) * 1000; + useEffect(() => { + const id = setInterval(() => result.revalidate(), intervalMs); + return () => clearInterval(id); + }, [intervalMs, result.revalidate]); + return result; }; diff --git a/extensions/ccusage/src/hooks/useCCUsageDailyCli.ts b/extensions/ccusage/src/hooks/useCCUsageDailyCli.ts index 94c98250d01..37e7096c8f0 100644 --- a/extensions/ccusage/src/hooks/useCCUsageDailyCli.ts +++ b/extensions/ccusage/src/hooks/useCCUsageDailyCli.ts @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { Cache } from "@raycast/api"; import { useExec } from "@raycast/utils"; import { DailyUsageCommandResponse, DailyUsageCommandResponseSchema } from "../types/usage-types"; @@ -49,5 +49,11 @@ export const useCCUsageDailyCli = () => { }, }); + const intervalMs = parseInt(preferences.usageLimitsRefreshInterval || "60", 10) * 1000; + useEffect(() => { + const id = setInterval(() => result.revalidate(), intervalMs); + return () => clearInterval(id); + }, [intervalMs, result.revalidate]); + return result; }; diff --git a/extensions/ccusage/src/hooks/useCCUsageMonthlyCli.ts b/extensions/ccusage/src/hooks/useCCUsageMonthlyCli.ts index 7105ed7d5da..336883318a4 100644 --- a/extensions/ccusage/src/hooks/useCCUsageMonthlyCli.ts +++ b/extensions/ccusage/src/hooks/useCCUsageMonthlyCli.ts @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { Cache } from "@raycast/api"; import { useExec } from "@raycast/utils"; import { MonthlyUsageCommandResponse, MonthlyUsageCommandResponseSchema } from "../types/usage-types"; @@ -50,5 +50,11 @@ export const useCCUsageMonthlyCli = () => { }, }); + const intervalMs = parseInt(preferences.usageLimitsRefreshInterval || "60", 10) * 1000; + useEffect(() => { + const id = setInterval(() => result.revalidate(), intervalMs); + return () => clearInterval(id); + }, [intervalMs, result.revalidate]); + return result; }; diff --git a/extensions/ccusage/src/hooks/useCCUsageSessionCli.ts b/extensions/ccusage/src/hooks/useCCUsageSessionCli.ts index 9b6bed43a87..bba42f0eec2 100644 --- a/extensions/ccusage/src/hooks/useCCUsageSessionCli.ts +++ b/extensions/ccusage/src/hooks/useCCUsageSessionCli.ts @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { Cache } from "@raycast/api"; import { useExec } from "@raycast/utils"; import { SessionUsageCommandResponse, SessionUsageCommandResponseSchema } from "../types/usage-types"; @@ -50,5 +50,11 @@ export const useCCUsageSessionCli = () => { }, }); + const intervalMs = parseInt(preferences.usageLimitsRefreshInterval || "60", 10) * 1000; + useEffect(() => { + const id = setInterval(() => result.revalidate(), intervalMs); + return () => clearInterval(id); + }, [intervalMs, result.revalidate]); + return result; }; diff --git a/extensions/ccusage/src/hooks/useCCUsageTotalCli.ts b/extensions/ccusage/src/hooks/useCCUsageTotalCli.ts index 7b1fba7c7b8..9558e4c86b8 100644 --- a/extensions/ccusage/src/hooks/useCCUsageTotalCli.ts +++ b/extensions/ccusage/src/hooks/useCCUsageTotalCli.ts @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { Cache } from "@raycast/api"; import { useExec } from "@raycast/utils"; import { TotalUsageResponse, TotalUsageResponseSchema } from "../types/usage-types"; @@ -50,5 +50,11 @@ export const useCCUsageTotalCli = () => { }, }); + const intervalMs = parseInt(preferences.usageLimitsRefreshInterval || "60", 10) * 1000; + useEffect(() => { + const id = setInterval(() => result.revalidate(), intervalMs); + return () => clearInterval(id); + }, [intervalMs, result.revalidate]); + return result; };