feat: split antigravity into 4 separate quota bars
Build and Push Docker Image / build-and-push (push) Canceled after 0s

This commit is contained in:
Jannik committed 2026-08-28 22:22:24 +02:00
1 parent 996221aa92
commit 44e88f7793
7 files changed
+129 -75

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
import { QuotaEntry } from './db';
export declare function updateAntigravityQuota(data: any): void;
export declare function fetchAntigravityQuota(): Promise<QuotaEntry>;
export declare function fetchAntigravityQuota(): QuotaEntry[];
export declare function fetchPoeQuota(): Promise<QuotaEntry>;
export declare function fetchMinimaxQuota(): Promise<QuotaEntry>;
export declare function fetchAllQuotas(): Promise<QuotaEntry[]>;
+1 -1
View File
@@ -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"}
{"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"}
+44 -22
View File
@@ -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
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/services/providers.ts"],"names":[],"mappings":"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"}
+9 -14
View File
@@ -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 = `
<div><span>5h Limit:</span> <strong style="color: ${intervalUsed > 80 ? 'var(--danger)' : '#fff'}">${intervalUsed}% verbraucht</strong></div>
<div><span>Weekly Limit:</span> <strong style="color: ${weeklyUsed > 80 ? 'var(--danger)' : '#fff'}">${weeklyUsed}% verbraucht</strong></div>
<div><span>5h Reset:</span> <strong style="color: var(--success)">${reset5h}</strong></div>
<div style="font-size: 0.9em; color: var(--text-muted); width: 100%; text-align: right; margin-top: 4px;">
Weekly Reset: ${resetWeekly}
</div>
<div><span>Reset:</span> <strong style="color: var(--success)">${resetStr}</strong></div>
`;
}
} else if (quota.provider.toLowerCase() === 'poe' && quota.meta) {
+45 -23
View File
@@ -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<QuotaEntry> {
export function fetchAntigravityQuota(): QuotaEntry[] {
return antigravityCache;
}
@@ -93,10 +116,9 @@ export async function fetchMinimaxQuota(): Promise<QuotaEntry> {
}
export async function fetchAllQuotas(): Promise<QuotaEntry[]> {
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];
}
+28 -13
View File
@@ -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);