@@ -6,12 +6,17 @@ export const APP_VERSION = "0.2.4";
66
77const GITHUB_REPO = "K-Dense-AI/k-dense-byok" ;
88const CACHE_KEY = "kdense-update-check" ;
9+ const CACHE_TTL_MS = 60 * 60 * 1000 ; // re-check at most once per hour
910
1011interface UpdateCheckResult {
1112 updateAvailable : boolean ;
1213 latestVersion : string | null ;
1314}
1415
16+ interface CachedCheck extends UpdateCheckResult {
17+ ts : number ;
18+ }
19+
1520function compareSemver ( current : string , latest : string ) : boolean {
1621 const parse = ( v : string ) => v . split ( "." ) . map ( Number ) ;
1722 const [ cMajor , cMinor , cPatch ] = parse ( current ) ;
@@ -28,14 +33,17 @@ export function useUpdateCheck(): UpdateCheckResult {
2833 } ) ;
2934
3035 useEffect ( ( ) => {
31- const cached = sessionStorage . getItem ( CACHE_KEY ) ;
32- if ( cached ) {
33- try {
34- setResult ( JSON . parse ( cached ) ) ;
35- return ;
36- } catch {
37- sessionStorage . removeItem ( CACHE_KEY ) ;
36+ try {
37+ const raw = localStorage . getItem ( CACHE_KEY ) ;
38+ if ( raw ) {
39+ const cached : CachedCheck = JSON . parse ( raw ) ;
40+ if ( Date . now ( ) - cached . ts < CACHE_TTL_MS ) {
41+ setResult ( { updateAvailable : cached . updateAvailable , latestVersion : cached . latestVersion } ) ;
42+ return ;
43+ }
3844 }
45+ } catch {
46+ localStorage . removeItem ( CACHE_KEY ) ;
3947 }
4048
4149 fetch ( `https://api.github.com/repos/${ GITHUB_REPO } /releases/latest` )
@@ -48,9 +56,9 @@ export function useUpdateCheck(): UpdateCheckResult {
4856 const latestVersion = tag . replace ( / ^ v / , "" ) ;
4957 const updateAvailable =
5058 latestVersion . length > 0 && compareSemver ( APP_VERSION , latestVersion ) ;
51- const value = { updateAvailable, latestVersion } ;
52- sessionStorage . setItem ( CACHE_KEY , JSON . stringify ( value ) ) ;
53- setResult ( value ) ;
59+ const value : CachedCheck = { updateAvailable, latestVersion, ts : Date . now ( ) } ;
60+ localStorage . setItem ( CACHE_KEY , JSON . stringify ( value ) ) ;
61+ setResult ( { updateAvailable , latestVersion } ) ;
5462 } )
5563 . catch ( ( ) => {
5664 // Network error or rate limit — silently ignore
0 commit comments