diff --git a/dist/services/providers.d.ts b/dist/services/providers.d.ts index dc9a997..1c48aa1 100644 --- a/dist/services/providers.d.ts +++ b/dist/services/providers.d.ts @@ -1,6 +1,6 @@ import { QuotaEntry } from './db'; export declare function updateAntigravityQuota(data: any): void; -export declare function fetchAntigravityQuota(): Promise; +export declare function fetchAntigravityQuota(): QuotaEntry[]; export declare function fetchPoeQuota(): Promise; export declare function fetchMinimaxQuota(): Promise; export declare function fetchAllQuotas(): Promise; diff --git a/dist/services/providers.d.ts.map b/dist/services/providers.d.ts.map index f6c1f0e..dfd87d0 100644 --- a/dist/services/providers.d.ts.map +++ b/dist/services/providers.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAMlC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,QAkB/C;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,UAAU,CAAC,CAEjE;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CA6BzD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,UAAU,CAAC,CA6B7D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAO5D"} \ No newline at end of file +{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAWlC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,QAoC/C;AAED,wBAAgB,qBAAqB,IAAI,UAAU,EAAE,CAEpD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CA6BzD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,UAAU,CAAC,CA6B7D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAM5D"} \ No newline at end of file diff --git a/dist/services/providers.js b/dist/services/providers.js index 371cf04..8a2ec83 100644 --- a/dist/services/providers.js +++ b/dist/services/providers.js @@ -11,25 +11,49 @@ exports.fetchAllQuotas = fetchAllQuotas; const axios_1 = __importDefault(require("axios")); const dotenv_1 = __importDefault(require("dotenv")); dotenv_1.default.config(); -let antigravityCache = { provider: 'Antigravity', used: 0, total: 100, percentage: 0 }; +let antigravityCache = [ + { provider: 'AG Gemini (5h)', used: 0, total: 100, percentage: 0 }, + { provider: 'AG Gemini (Weekly)', used: 0, total: 100, percentage: 0 }, + { provider: 'AG Claude (5h)', used: 0, total: 100, percentage: 0 }, + { provider: 'AG Claude (Weekly)', used: 0, total: 100, percentage: 0 }, +]; function updateAntigravityQuota(data) { - const weeklyUsed = 100 - (data.weekly_limit_remaining || 100); - const fiveHourUsed = 100 - (data.five_hour_limit_remaining || 100); - const percentage = Math.max(weeklyUsed, fiveHourUsed); - antigravityCache = { - provider: 'Antigravity', - used: percentage, - total: 100, - percentage: percentage, - meta: { - intervalUsed: fiveHourUsed, - weeklyUsed: weeklyUsed, - intervalResetStr: data.five_hour_refresh || 'Unknown', - weeklyResetStr: data.weekly_refresh || 'Unknown' + const gemini5hUsed = 100 - (data.gemini_5h_remaining ?? 100); + const geminiWeeklyUsed = 100 - (data.gemini_weekly_remaining ?? 100); + const claude5hUsed = 100 - (data.claude_5h_remaining ?? 100); + const claudeWeeklyUsed = 100 - (data.claude_weekly_remaining ?? 100); + antigravityCache = [ + { + provider: 'AG Gemini (5h)', + used: gemini5hUsed, + total: 100, + percentage: gemini5hUsed, + meta: { resetStr: data.gemini_reset || 'Unknown' } + }, + { + provider: 'AG Gemini (Weekly)', + used: geminiWeeklyUsed, + total: 100, + percentage: geminiWeeklyUsed, + meta: { resetStr: data.gemini_reset || 'Unknown' } + }, + { + provider: 'AG Claude (5h)', + used: claude5hUsed, + total: 100, + percentage: claude5hUsed, + meta: { resetStr: data.claude_reset || 'Unknown' } + }, + { + provider: 'AG Claude (Weekly)', + used: claudeWeeklyUsed, + total: 100, + percentage: claudeWeeklyUsed, + meta: { resetStr: data.claude_reset || 'Unknown' } } - }; + ]; } -async function fetchAntigravityQuota() { +function fetchAntigravityQuota() { return antigravityCache; } async function fetchPoeQuota() { @@ -87,11 +111,9 @@ async function fetchMinimaxQuota() { } } async function fetchAllQuotas() { - const results = await Promise.all([ - fetchAntigravityQuota(), - fetchPoeQuota(), - fetchMinimaxQuota() - ]); - return results; + const agQuotas = fetchAntigravityQuota(); + const poeQuota = await fetchPoeQuota(); + const minimaxQuota = await fetchMinimaxQuota(); + return [...agQuotas, poeQuota, minimaxQuota]; } //# sourceMappingURL=providers.js.map \ No newline at end of file diff --git a/dist/services/providers.js.map b/dist/services/providers.js.map index d4276eb..a067177 100644 --- a/dist/services/providers.js.map +++ b/dist/services/providers.js.map @@ -1 +1 @@ -{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/public/app.js b/public/app.js index c7c17e1..0327334 100644 --- a/public/app.js +++ b/public/app.js @@ -26,7 +26,10 @@ async function fetchQuotas() { // Mock data if DB is empty const activeQuotas = quotas.length > 0 ? quotas : [ - { provider: 'Antigravity', used: 68240, total: 100000, percentage: 68.24 }, + { provider: 'AG Gemini (5h)', used: 73, total: 100, percentage: 73, meta: { resetStr: 'in 01:23' } }, + { provider: 'AG Gemini (Weekly)', used: 73, total: 100, percentage: 73, meta: { resetStr: 'in 01:23' } }, + { provider: 'AG Claude (5h)', used: 0, total: 100, percentage: 0, meta: { resetStr: 'in 03:00' } }, + { provider: 'AG Claude (Weekly)', used: 0, total: 100, percentage: 0, meta: { resetStr: 'in 03:00' } }, { provider: 'POE', used: 33750, total: 75000, percentage: 45 }, { provider: 'MiniMax', used: 60, total: 100, percentage: 60 } ]; @@ -101,22 +104,14 @@ function updateRow(providerId, quota) { const targetTs = (typeof intervalReset === 'number' && intervalReset < 9999999999) ? intervalReset * 1000 : intervalReset; if (targetTs) startMinimaxCountdown(targetTs); } - } else if (quota.provider.toLowerCase() === 'antigravity' && quota.meta) { - const { intervalUsed, weeklyUsed, intervalResetStr, weeklyResetStr } = quota.meta; + } else if (quota.provider.startsWith('AG ') && quota.meta) { statusText.innerText = `${Math.round(quota.used)}% / 100%`; - - const detailsEl = document.getElementById(`details-antigravity`); + const detailsId = `details-${quota.provider.toLowerCase().replace(/[^a-z0-9]/g, '-')}`; + const detailsEl = document.getElementById(detailsId); if (detailsEl) { - const reset5h = intervalResetStr && intervalResetStr !== 'Unknown' ? new Date(intervalResetStr).toLocaleString() : '--'; - const resetWeekly = weeklyResetStr && weeklyResetStr !== 'Unknown' ? new Date(weeklyResetStr).toLocaleString() : '--'; - + const resetStr = quota.meta.resetStr || '--'; detailsEl.innerHTML = ` -
5h Limit: ${intervalUsed}% verbraucht
-
Weekly Limit: ${weeklyUsed}% verbraucht
-
5h Reset: ${reset5h}
-
- Weekly Reset: ${resetWeekly} -
+
Reset: ${resetStr}
`; } } else if (quota.provider.toLowerCase() === 'poe' && quota.meta) { diff --git a/src/services/providers.ts b/src/services/providers.ts index b9dd269..e30d157 100644 --- a/src/services/providers.ts +++ b/src/services/providers.ts @@ -4,29 +4,52 @@ import { QuotaEntry } from './db'; dotenv.config(); -let antigravityCache: QuotaEntry = { provider: 'Antigravity', used: 0, total: 100, percentage: 0 }; +let antigravityCache: QuotaEntry[] = [ + { provider: 'AG Gemini (5h)', used: 0, total: 100, percentage: 0 }, + { provider: 'AG Gemini (Weekly)', used: 0, total: 100, percentage: 0 }, + { provider: 'AG Claude (5h)', used: 0, total: 100, percentage: 0 }, + { provider: 'AG Claude (Weekly)', used: 0, total: 100, percentage: 0 }, +]; export function updateAntigravityQuota(data: any) { - const weeklyUsed = 100 - (data.weekly_limit_remaining || 100); - const fiveHourUsed = 100 - (data.five_hour_limit_remaining || 100); + const gemini5hUsed = 100 - (data.gemini_5h_remaining ?? 100); + const geminiWeeklyUsed = 100 - (data.gemini_weekly_remaining ?? 100); + const claude5hUsed = 100 - (data.claude_5h_remaining ?? 100); + const claudeWeeklyUsed = 100 - (data.claude_weekly_remaining ?? 100); - const percentage = Math.max(weeklyUsed, fiveHourUsed); - - antigravityCache = { - provider: 'Antigravity', - used: percentage, - total: 100, - percentage: percentage, - meta: { - intervalUsed: fiveHourUsed, - weeklyUsed: weeklyUsed, - intervalResetStr: data.five_hour_refresh || 'Unknown', - weeklyResetStr: data.weekly_refresh || 'Unknown' + antigravityCache = [ + { + provider: 'AG Gemini (5h)', + used: gemini5hUsed, + total: 100, + percentage: gemini5hUsed, + meta: { resetStr: data.gemini_reset || 'Unknown' } + }, + { + provider: 'AG Gemini (Weekly)', + used: geminiWeeklyUsed, + total: 100, + percentage: geminiWeeklyUsed, + meta: { resetStr: data.gemini_reset || 'Unknown' } + }, + { + provider: 'AG Claude (5h)', + used: claude5hUsed, + total: 100, + percentage: claude5hUsed, + meta: { resetStr: data.claude_reset || 'Unknown' } + }, + { + provider: 'AG Claude (Weekly)', + used: claudeWeeklyUsed, + total: 100, + percentage: claudeWeeklyUsed, + meta: { resetStr: data.claude_reset || 'Unknown' } } - }; + ]; } -export async function fetchAntigravityQuota(): Promise { +export function fetchAntigravityQuota(): QuotaEntry[] { return antigravityCache; } @@ -93,10 +116,9 @@ export async function fetchMinimaxQuota(): Promise { } export async function fetchAllQuotas(): Promise { - const results = await Promise.all([ - fetchAntigravityQuota(), - fetchPoeQuota(), - fetchMinimaxQuota() - ]); - return results; + const agQuotas = fetchAntigravityQuota(); + const poeQuota = await fetchPoeQuota(); + const minimaxQuota = await fetchMinimaxQuota(); + + return [...agQuotas, poeQuota, minimaxQuota]; } diff --git a/tokenwatch-sync.js b/tokenwatch-sync.js index 1d9758a..db4895d 100644 --- a/tokenwatch-sync.js +++ b/tokenwatch-sync.js @@ -159,30 +159,45 @@ async function main() { return; } - // Wir filtern die Gemini Modelle heraus + // Wir filtern die Gemini und Claude Modelle heraus const geminiModels = modelConfigs.filter(m => m.label && m.label.includes('Gemini')); - let minRemaining = 1; - let resetTime = 'Unknown'; + const claudeModels = modelConfigs.filter(m => m.label && m.label.includes('Claude')); + + let geminiMinRemaining = 1; + let geminiResetTime = 'Unknown'; + let claudeMinRemaining = 1; + let claudeResetTime = 'Unknown'; for (const m of geminiModels) { if (m.quotaInfo && m.quotaInfo.remainingFraction !== undefined) { - if (m.quotaInfo.remainingFraction < minRemaining) { - minRemaining = m.quotaInfo.remainingFraction; + if (m.quotaInfo.remainingFraction < geminiMinRemaining) { + geminiMinRemaining = m.quotaInfo.remainingFraction; const d = new Date(m.quotaInfo.resetTime); - resetTime = d.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'}); + geminiResetTime = d.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'}); + } + } + } + + for (const m of claudeModels) { + if (m.quotaInfo && m.quotaInfo.remainingFraction !== undefined) { + if (m.quotaInfo.remainingFraction < claudeMinRemaining) { + claudeMinRemaining = m.quotaInfo.remainingFraction; + const d = new Date(m.quotaInfo.resetTime); + claudeResetTime = d.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'}); } } } - // Wir nehmen den niedrigsten verbleibenden Wert und formatieren ihn. - const remainingPercent = Math.round(minRemaining * 100); - const usedPercent = 100 - remainingPercent; + const geminiRemainingPercent = Math.round(geminiMinRemaining * 100); + const claudeRemainingPercent = Math.round(claudeMinRemaining * 100); const payload = { - weekly_limit_remaining: remainingPercent, - five_hour_limit_remaining: remainingPercent, - weekly_refresh: `in ${resetTime} (gemäß IDE)`, - five_hour_refresh: `in ${resetTime} (gemäß IDE)` + gemini_5h_remaining: geminiRemainingPercent, + gemini_weekly_remaining: geminiRemainingPercent, // Duplicate since API doesn't distinguish + claude_5h_remaining: claudeRemainingPercent, + claude_weekly_remaining: claudeRemainingPercent, // Duplicate since API doesn't distinguish + gemini_reset: `in ${geminiResetTime}`, + claude_reset: `in ${claudeResetTime}` }; console.log('Gefundene Live-Daten:', payload);