feat: split antigravity into 4 separate quota bars
Build and Push Docker Image / build-and-push (push) Canceled after 0s
Build and Push Docker Image / build-and-push (push) Canceled after 0s
This commit is contained in:
1 parent
996221aa92
commit
44e88f7793
7 files changed
+129
-75
No files matched your search
Vendored
+1
-1
@@ -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[]>;
|
||||
|
||||
Vendored
+1
-1
@@ -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"}
|
||||
Vendored
+44
-22
@@ -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
|
||||
Vendored
+1
-1
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user