desktop reads everything by itself: one background read scheduler (4 per store, starts spaced per account, App Store Connect X-Rate-Limit slows it below 20 % and pauses at 100 left, backoff with jitter on 429 / RESOURCE_EXHAUSTED, visible app first, one read per key), per-method TTLs over the saved reads, Settings auto-read (on) and interval (15 min, paused while hidden), Refresh all, a refresh icon and 'read 3 min ago' / 'couldn't refresh' per card, writes invalidate, status line with progress and quota; quota reaches the window through ToolResult.quota (cli/lib/quota.ts); Health top issues open with versions, sample stack (health --issue / --signature, read health_issue), Open in Play Console, Copy for AI and likely-cause hints (cli/lib/crash-hints.ts); tests/scheduler.test.ts, tests/quota-crash-hints.test.ts, boot check auto-read case

This commit is contained in:
CRTkafa 2026-10-13 23:36:30 +08:00
parent 89256f1e80
commit 0fb4ce0001
46 changed files with 1531 additions and 141 deletions

View file

@ -753,6 +753,39 @@ export const en = {
'set.refreshSub': 'Reads use each account\'s API quota: they run when you ask, or on the schedule here',
'set.autoRefresh': 'Read the stores automatically',
'set.autoHint': 'While the app is open. Off by default.',
'health.likelyCause': 'Likely cause:',
'health.suggestedFix': 'Fix:',
'health.copied': "Copied for AI: paste it into your agent",
'health.copyFailed': "Could not copy to the clipboard",
'health.issueType': "Type",
'health.issueWhere': "Location",
'health.issueShare': "Share of reports",
'health.issueVersions': "versionCode",
'health.issueBuild': "Build",
'health.issueOs': "Android API",
'health.issueLastSeen': "Last report",
'health.sample': "Sample stack trace",
'health.noSample': "No sample report in the last 28 days.",
'health.copyForAi': "Copy for AI",
'health.openConsole': "Open in Play Console",
'health.issuesUnread': "Top issues not read: {error}",
'set.autoRead': "Read everything automatically",
'set.autoReadHint': "Status, releases, catalog, prices, listings, TestFlight, health, reviews and checks of every app, in the background, inside the stores' limits",
'set.everyMinutes': "While the app is open, read again every",
'set.onlyOnStart': "Only on start",
'set.everyHint': "Only reads past their age limit run (status 5 min, reviews 15 min, catalog and prices 30 min, health and analytics 6 h). Paused while the window is hidden.",
'action.refreshAll': "Refresh all",
'action.refreshAllHint': "Read everything of every app again now (read-only, inside the stores' limits)",
'read.ago': "read {when}",
'read.refreshing': "Refreshing…",
'read.couldNotRefresh': "couldn't refresh: {reason}",
'read.refresh': "Refresh",
'read.waiting': "Reading…",
'reader.progress': "Reading {done} of {total}",
'reader.upToDate': "Everything read",
'reader.off': "Auto-read is off",
'reader.appleQuota': "App Store limit {left}/{limit} left this hour",
'reader.backoff': "The store asked to slow down: waiting",
'set.off': 'Off',
'set.min': '{n} min',
'set.hour': '{n} h',

View file

@ -755,6 +755,39 @@ export const tr: Record<keyof typeof en, string> = {
'set.refreshSub': 'Okumalar her hesabın API kotasını kullanır: siz istediğinizde ya da buradaki zamanlamayla çalışır',
'set.autoRefresh': 'Mağazaları otomatik oku',
'set.autoHint': 'Uygulama açıkken. Varsayılan olarak kapalı.',
'health.likelyCause': 'Olası neden:',
'health.suggestedFix': 'Çözüm:',
'health.copied': "Yapay zekâ için kopyalandı: ajanınıza yapıştırın",
'health.copyFailed': "Panoya kopyalanamadı",
'health.issueType': "Tür",
'health.issueWhere': "Konum",
'health.issueShare': "Raporlardaki payı",
'health.issueVersions': "versionCode",
'health.issueBuild': "Derleme",
'health.issueOs': "Android API",
'health.issueLastSeen': "Son rapor",
'health.sample': "Örnek yığın izi",
'health.noSample': "Son 28 günde örnek rapor yok.",
'health.copyForAi': "Yapay zekâ için kopyala",
'health.openConsole': "Play Console'da aç",
'health.issuesUnread': "Öne çıkan hatalar okunamadı: {error}",
'set.autoRead': "Her şeyi otomatik oku",
'set.autoReadHint': "Her uygulamanın durumu, sürümleri, kataloğu, fiyatları, mağaza metinleri, TestFlight, sağlık, yorumlar ve kontrolleri arka planda, mağaza limitlerinin içinde okunur",
'set.everyMinutes': "Uygulama açıkken yeniden okuma aralığı",
'set.onlyOnStart': "Sadece açılışta",
'set.everyHint': "Yalnızca süresi dolan okumalar çalışır (durum 5 dk, yorumlar 15 dk, katalog ve fiyatlar 30 dk, sağlık ve analiz 6 sa). Pencere gizliyken durur.",
'action.refreshAll': "Hepsini yenile",
'action.refreshAllHint': "Her uygulamanın her şeyini şimdi yeniden oku (salt okunur, mağaza limitlerinin içinde)",
'read.ago': "{when} okundu",
'read.refreshing': "Yenileniyor…",
'read.couldNotRefresh': "yenilenemedi: {reason}",
'read.refresh': "Yenile",
'read.waiting': "Okunuyor…",
'reader.progress': "{total} okumadan {done} tamam",
'reader.upToDate': "Her şey okundu",
'reader.off': "Otomatik okuma kapalı",
'reader.appleQuota': "App Store limiti: bu saat {left}/{limit} kaldı",
'reader.backoff': "Mağaza yavaşlamamızı istedi: bekleniyor",
'set.off': 'Kapalı',
'set.min': '{n} dk',
'set.hour': '{n} sa',