feat: Integrate 4 bars for Antigravity via RetrieveUserQuotaSummary API
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
a84e62b2e0
commit
5d93d9f798
6 files changed
+160
-46
No files matched your search
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"response": {
|
||||
"groups": [
|
||||
{
|
||||
"displayName": "Gemini Models",
|
||||
"description": "Models within this group: Gemini Flash, Gemini Pro",
|
||||
"buckets": [
|
||||
{
|
||||
"bucketId": "gemini-weekly",
|
||||
"displayName": "Weekly Limit Remaining",
|
||||
"description": "You have used some of your weekly limit, it will fully refresh in 12 hours, 30 minutes.",
|
||||
"window": "weekly",
|
||||
"remainingFraction": 0.21547645,
|
||||
"resetTime": "2026-08-29T09:20:06Z"
|
||||
},
|
||||
{
|
||||
"bucketId": "gemini-5h",
|
||||
"displayName": "Five Hour Limit Remaining",
|
||||
"description": "You have used some of your 5-hour limit, it will fully refresh in 2 hours, 21 minutes.",
|
||||
"window": "5h",
|
||||
"remainingFraction": 0.5744839,
|
||||
"resetTime": "2026-08-28T23:11:19Z"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"displayName": "Claude and GPT models",
|
||||
"description": "Models within this group: Claude Opus, Claude Sonnet, GPT-OSS",
|
||||
"buckets": [
|
||||
{
|
||||
"bucketId": "3p-weekly",
|
||||
"displayName": "Weekly Limit Remaining",
|
||||
"window": "weekly",
|
||||
"remainingFraction": 1,
|
||||
"resetTime": "2026-09-04T20:49:50Z"
|
||||
},
|
||||
{
|
||||
"bucketId": "3p-5h",
|
||||
"displayName": "Five Hour Limit Remaining",
|
||||
"window": "5h",
|
||||
"remainingFraction": 1,
|
||||
"resetTime": "2026-08-29T01:49:50Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"description": "Within each group, models share a weekly limit and a 5-hour limit. Quota is consumed proportionally to the cost of the tokens. Thus, limits will last longer with shorter tasks or using more cost-effective models. The 5-hour limit smooths out aggregate demand to fairly distribute global capacity across all users, while your weekly limit is tied directly to your individual tier."
|
||||
}
|
||||
}
|
||||
Vendored
+4
-4
@@ -28,28 +28,28 @@ function updateAntigravityQuota(data) {
|
||||
used: gemini5hUsed,
|
||||
total: 100,
|
||||
percentage: gemini5hUsed,
|
||||
meta: { resetStr: data.gemini_reset || 'Unknown' }
|
||||
meta: { resetStr: data.gemini_5h_reset || 'Unknown' }
|
||||
},
|
||||
{
|
||||
provider: 'AG Gemini (Weekly)',
|
||||
used: geminiWeeklyUsed,
|
||||
total: 100,
|
||||
percentage: geminiWeeklyUsed,
|
||||
meta: { resetStr: data.gemini_reset || 'Unknown' }
|
||||
meta: { resetStr: data.gemini_weekly_reset || 'Unknown' }
|
||||
},
|
||||
{
|
||||
provider: 'AG Claude (5h)',
|
||||
used: claude5hUsed,
|
||||
total: 100,
|
||||
percentage: claude5hUsed,
|
||||
meta: { resetStr: data.claude_reset || 'Unknown' }
|
||||
meta: { resetStr: data.claude_5h_reset || 'Unknown' }
|
||||
},
|
||||
{
|
||||
provider: 'AG Claude (Weekly)',
|
||||
used: claudeWeeklyUsed,
|
||||
total: 100,
|
||||
percentage: claudeWeeklyUsed,
|
||||
meta: { resetStr: data.claude_reset || 'Unknown' }
|
||||
meta: { resetStr: data.claude_weekly_reset || 'Unknown' }
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
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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"}
|
||||
@@ -23,28 +23,28 @@ export function updateAntigravityQuota(data: any) {
|
||||
used: gemini5hUsed,
|
||||
total: 100,
|
||||
percentage: gemini5hUsed,
|
||||
meta: { resetStr: data.gemini_reset || 'Unknown' }
|
||||
meta: { resetStr: data.gemini_5h_reset || 'Unknown' }
|
||||
},
|
||||
{
|
||||
provider: 'AG Gemini (Weekly)',
|
||||
used: geminiWeeklyUsed,
|
||||
total: 100,
|
||||
percentage: geminiWeeklyUsed,
|
||||
meta: { resetStr: data.gemini_reset || 'Unknown' }
|
||||
meta: { resetStr: data.gemini_weekly_reset || 'Unknown' }
|
||||
},
|
||||
{
|
||||
provider: 'AG Claude (5h)',
|
||||
used: claude5hUsed,
|
||||
total: 100,
|
||||
percentage: claude5hUsed,
|
||||
meta: { resetStr: data.claude_reset || 'Unknown' }
|
||||
meta: { resetStr: data.claude_5h_reset || 'Unknown' }
|
||||
},
|
||||
{
|
||||
provider: 'AG Claude (Weekly)',
|
||||
used: claudeWeeklyUsed,
|
||||
total: 100,
|
||||
percentage: claudeWeeklyUsed,
|
||||
meta: { resetStr: data.claude_reset || 'Unknown' }
|
||||
meta: { resetStr: data.claude_weekly_reset || 'Unknown' }
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
const fs = require('fs');
|
||||
const http = require('http');
|
||||
const https = require('https');
|
||||
const { execSync } = require('child_process');
|
||||
|
||||
function extractArgument(commandLine, argumentName) {
|
||||
const escapedName = argumentName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||
const pattern = new RegExp(`--${escapedName}(?:=|\\s+)(?:"([^"]*)"|'([^']*)'|([^\\s]+))`, 'i');
|
||||
const match = commandLine.match(pattern);
|
||||
return match ? (match[1] ?? match[2] ?? match[3] ?? null) : null;
|
||||
}
|
||||
|
||||
try {
|
||||
const stdout = execSync('powershell -NoProfile -Command "Get-CimInstance Win32_Process -Filter \\"name like \'language_server%\'\\" | Select-Object ProcessId,CommandLine | ConvertTo-Json -Depth 2"').toString();
|
||||
const processes = JSON.parse(stdout);
|
||||
const processInfo = Array.isArray(processes) ? processes.find(p => extractArgument(p.CommandLine, 'csrf_token')) : processes;
|
||||
if (!processInfo) { console.log('No LS found'); process.exit(0); }
|
||||
|
||||
const csrfToken = extractArgument(processInfo.CommandLine, 'csrf_token');
|
||||
const pid = processInfo.ProcessId;
|
||||
|
||||
const netstat = execSync('netstat -ano').toString();
|
||||
const ports = [];
|
||||
for (const line of netstat.split(/\r?\n/)) {
|
||||
if (!/(LISTEN|ABH)/i.test(line) || !new RegExp(`\\s${pid}\\s*$`).test(line)) continue;
|
||||
for (const match of line.matchAll(/(?:127\.0\.0\.1|\[?::1\]?):(\d{2,5})/g)) {
|
||||
ports.push(Number(match[1]));
|
||||
}
|
||||
}
|
||||
|
||||
const requestBody = JSON.stringify({ metadata: { ideName: 'antigravity', extensionName: 'ag-usage', locale: 'en' } });
|
||||
|
||||
for (const port of [...new Set(ports)]) {
|
||||
['http', 'https'].forEach(protocol => {
|
||||
const client = protocol === 'https' ? https : http;
|
||||
const req = client.request({
|
||||
hostname: '127.0.0.1', port, path: '/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary', method: 'POST',
|
||||
...(protocol === 'https' ? { rejectUnauthorized: false } : {}),
|
||||
headers: {
|
||||
'X-Codeium-Csrf-Token': csrfToken,
|
||||
'Connect-Protocol-Version': '1',
|
||||
'Content-Type': 'application/json',
|
||||
'Content-Length': Buffer.byteLength(requestBody)
|
||||
}
|
||||
}, res => {
|
||||
let body = '';
|
||||
res.on('data', chunk => body += chunk);
|
||||
res.on('end', () => {
|
||||
console.log('Port', port, protocol, res.statusCode);
|
||||
if (res.statusCode === 200) {
|
||||
try {
|
||||
fs.writeFileSync('ag-debug.json', JSON.stringify(JSON.parse(body), null, 2));
|
||||
} catch(e) {}
|
||||
}
|
||||
});
|
||||
});
|
||||
req.on('error', () => {});
|
||||
req.write(requestBody);
|
||||
req.end();
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
+38
-37
@@ -49,8 +49,8 @@ function extractArgument(commandLine, argumentName) {
|
||||
return match ? (match[1] ?? match[2] ?? match[3] ?? null) : null;
|
||||
}
|
||||
|
||||
const API_PATH = '/exa.language_server_pb.LanguageServerService/GetUserStatus';
|
||||
const requestBody = JSON.stringify({ metadata: { ideName: 'antigravity', extensionName: 'antigravity', locale: 'en' } });
|
||||
const API_PATH = '/exa.language_server_pb.LanguageServerService/RetrieveUserQuotaSummary';
|
||||
const requestBody = JSON.stringify({ metadata: { ideName: 'antigravity', extensionName: 'ag-usage', locale: 'en' } });
|
||||
|
||||
function tryPort(port, csrfToken, protocol) {
|
||||
return new Promise(resolve => {
|
||||
@@ -152,52 +152,53 @@ async function main() {
|
||||
}
|
||||
|
||||
const actualData = Array.isArray(rawData) ? rawData[0] : rawData;
|
||||
const modelConfigs = actualData?.userStatus?.cascadeModelConfigData?.clientModelConfigs || actualData?.userStatus?.modelConfigs;
|
||||
const groups = actualData?.response?.groups;
|
||||
|
||||
if (!modelConfigs) {
|
||||
console.error('Fehler: Konnte keine JSON-Antwort mit Quota auslesen.');
|
||||
if (!groups) {
|
||||
console.error('Fehler: Konnte keine JSON-Antwort mit Quota auslesen.', rawData);
|
||||
return;
|
||||
}
|
||||
|
||||
// Wir filtern die Gemini und Claude Modelle heraus
|
||||
const geminiModels = modelConfigs.filter(m => m.label && m.label.includes('Gemini'));
|
||||
const claudeModels = modelConfigs.filter(m => m.label && m.label.includes('Claude'));
|
||||
let gemini5h = 1, geminiWeekly = 1, gemini5hReset = 'Unknown', geminiWeeklyReset = 'Unknown';
|
||||
let claude5h = 1, claudeWeekly = 1, claude5hReset = 'Unknown', claudeWeeklyReset = 'Unknown';
|
||||
|
||||
let geminiMinRemaining = 1;
|
||||
let geminiResetTime = 'Unknown';
|
||||
let claudeMinRemaining = 1;
|
||||
let claudeResetTime = 'Unknown';
|
||||
const formatTime = (ts) => {
|
||||
if (!ts) return 'Unknown';
|
||||
return new Date(ts).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
|
||||
};
|
||||
|
||||
for (const m of geminiModels) {
|
||||
if (m.quotaInfo && m.quotaInfo.remainingFraction !== undefined) {
|
||||
if (m.quotaInfo.remainingFraction < geminiMinRemaining) {
|
||||
geminiMinRemaining = m.quotaInfo.remainingFraction;
|
||||
const d = new Date(m.quotaInfo.resetTime);
|
||||
geminiResetTime = d.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
|
||||
for (const group of groups) {
|
||||
const isGemini = group.displayName && group.displayName.toLowerCase().includes('gemini');
|
||||
for (const bucket of group.buckets || []) {
|
||||
if (isGemini) {
|
||||
if (bucket.window === '5h') {
|
||||
gemini5h = bucket.remainingFraction ?? 1;
|
||||
gemini5hReset = formatTime(bucket.resetTime);
|
||||
} else if (bucket.window === 'weekly') {
|
||||
geminiWeekly = bucket.remainingFraction ?? 1;
|
||||
geminiWeeklyReset = formatTime(bucket.resetTime);
|
||||
}
|
||||
} else {
|
||||
if (bucket.window === '5h') {
|
||||
claude5h = bucket.remainingFraction ?? 1;
|
||||
claude5hReset = formatTime(bucket.resetTime);
|
||||
} else if (bucket.window === 'weekly') {
|
||||
claudeWeekly = bucket.remainingFraction ?? 1;
|
||||
claudeWeeklyReset = formatTime(bucket.resetTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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'});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const geminiRemainingPercent = Math.round(geminiMinRemaining * 100);
|
||||
const claudeRemainingPercent = Math.round(claudeMinRemaining * 100);
|
||||
|
||||
const payload = {
|
||||
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}`
|
||||
gemini_5h_remaining: Math.round(gemini5h * 100),
|
||||
gemini_weekly_remaining: Math.round(geminiWeekly * 100),
|
||||
claude_5h_remaining: Math.round(claude5h * 100),
|
||||
claude_weekly_remaining: Math.round(claudeWeekly * 100),
|
||||
gemini_5h_reset: `in ${gemini5hReset}`,
|
||||
gemini_weekly_reset: `in ${geminiWeeklyReset}`,
|
||||
claude_5h_reset: `in ${claude5hReset}`,
|
||||
claude_weekly_reset: `in ${claudeWeeklyReset}`
|
||||
};
|
||||
|
||||
console.log('Gefundene Live-Daten:', payload);
|
||||
|
||||
Reference in new issue
Block a user