copilot-api-plus 1.0.18 → 1.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/get-models-DqEAMDmN.js +5 -0
- package/dist/{get-models-BArPPQNb.js → get-models-uSazerPk.js} +31 -3
- package/dist/get-models-uSazerPk.js.map +1 -0
- package/dist/main.js +14 -3
- package/dist/main.js.map +1 -1
- package/package.json +1 -1
- package/dist/get-models-BArPPQNb.js.map +0 -1
- package/dist/get-models-E8tLAZPi.js +0 -5
|
@@ -170,7 +170,11 @@ async function fetchModelsFromApi() {
|
|
|
170
170
|
id: modelId,
|
|
171
171
|
object: "model",
|
|
172
172
|
created: 17e8,
|
|
173
|
-
owned_by: isGoogle ? "google" : "anthropic"
|
|
173
|
+
owned_by: isGoogle ? "google" : "anthropic",
|
|
174
|
+
quotaInfo: m.quotaInfo ? {
|
|
175
|
+
remainingFraction: m.quotaInfo.remainingFraction ?? 1,
|
|
176
|
+
resetTime: m.quotaInfo.resetTime ?? ""
|
|
177
|
+
} : void 0
|
|
174
178
|
};
|
|
175
179
|
});
|
|
176
180
|
consola.debug(`Fetched ${models.length} models from Antigravity API`);
|
|
@@ -207,6 +211,30 @@ async function getAntigravityModels() {
|
|
|
207
211
|
};
|
|
208
212
|
}
|
|
209
213
|
/**
|
|
214
|
+
* Get Antigravity usage/quota information
|
|
215
|
+
*/
|
|
216
|
+
async function getAntigravityUsage() {
|
|
217
|
+
cachedModels = null;
|
|
218
|
+
cacheTimestamp = 0;
|
|
219
|
+
const modelsResponse = await getAntigravityModels();
|
|
220
|
+
let earliestResetTime = "";
|
|
221
|
+
const modelsQuota = {};
|
|
222
|
+
for (const model of modelsResponse.data) if (model.quotaInfo) {
|
|
223
|
+
const resetTime = model.quotaInfo.resetTime;
|
|
224
|
+
if (!earliestResetTime || resetTime && resetTime < earliestResetTime) earliestResetTime = resetTime;
|
|
225
|
+
modelsQuota[model.id] = {
|
|
226
|
+
remaining_fraction: model.quotaInfo.remainingFraction,
|
|
227
|
+
reset_time: model.quotaInfo.resetTime,
|
|
228
|
+
percent_remaining: Math.round(model.quotaInfo.remainingFraction * 100)
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
copilot_plan: "antigravity",
|
|
233
|
+
quota_reset_date: earliestResetTime,
|
|
234
|
+
quota_snapshots: { models: modelsQuota }
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
210
238
|
* Check if a model is a thinking/reasoning model
|
|
211
239
|
*/
|
|
212
240
|
function isThinkingModel(modelId) {
|
|
@@ -214,5 +242,5 @@ function isThinkingModel(modelId) {
|
|
|
214
242
|
}
|
|
215
243
|
|
|
216
244
|
//#endregion
|
|
217
|
-
export { getAntigravityModels, isThinkingModel };
|
|
218
|
-
//# sourceMappingURL=get-models-
|
|
245
|
+
export { getAntigravityModels, getAntigravityUsage, isThinkingModel };
|
|
246
|
+
//# sourceMappingURL=get-models-uSazerPk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-models-uSazerPk.js","names":["FALLBACK_MODELS: Array<AntigravityModel>","cachedModels: Array<AntigravityModel> | null","cacheTimestamp: number","models: Array<AntigravityModel>","modelsQuota: Record<string, {\n remaining_fraction: number\n reset_time: string\n percent_remaining: number\n }>"],"sources":["../src/services/antigravity/get-models.ts"],"sourcesContent":["/**\n * Google Antigravity Models\n *\n * Provides list of available models from Antigravity.\n * Based on: https://github.com/liuw1535/antigravity2api-nodejs\n */\n\n/* eslint-disable require-atomic-updates */\n\nimport consola from \"consola\"\n\nimport { getValidAccessToken } from \"./auth\"\n\n// Antigravity API endpoints\nconst ANTIGRAVITY_API_HOST = \"daily-cloudcode-pa.sandbox.googleapis.com\"\nconst ANTIGRAVITY_MODELS_URL = `https://${ANTIGRAVITY_API_HOST}/v1internal:fetchAvailableModels`\nconst ANTIGRAVITY_USER_AGENT = \"antigravity/1.11.3 windows/amd64\"\n\nexport interface AntigravityQuotaInfo {\n remainingFraction: number\n resetTime: string\n}\n\nexport interface AntigravityModel {\n id: string\n object: string\n created: number\n owned_by: string\n quotaInfo?: AntigravityQuotaInfo\n}\n\nexport interface AntigravityModelsResponse {\n object: string\n data: Array<AntigravityModel>\n}\n\n/**\n * Fallback Antigravity models when API is unavailable\n * Based on antigravity2api-nodejs model list\n */\nconst FALLBACK_MODELS: Array<AntigravityModel> = [\n // Gemini models\n {\n id: \"gemini-2.5-pro-exp-03-25\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-2.5-pro-preview-05-06\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-2.0-flash-exp\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-2.0-flash-001\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-2.0-flash-thinking-exp-1219\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-2.0-flash-thinking-exp\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-2.0-flash-thinking-exp-01-21\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-2.0-pro-exp-02-05\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-1.5-pro\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-1.5-flash\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-1.5-flash-8b\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"gemini-exp-1206\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n {\n id: \"learnlm-1.5-pro-experimental\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"google\",\n },\n\n // Claude models (via Antigravity)\n {\n id: \"claude-opus-4-5\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"anthropic\",\n },\n {\n id: \"claude-sonnet-4-5\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"anthropic\",\n },\n {\n id: \"claude-3-5-sonnet-20241022\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"anthropic\",\n },\n {\n id: \"claude-3-5-haiku-20241022\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"anthropic\",\n },\n {\n id: \"claude-3-opus-20240229\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"anthropic\",\n },\n {\n id: \"claude-3-sonnet-20240229\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"anthropic\",\n },\n {\n id: \"claude-3-haiku-20240307\",\n object: \"model\",\n created: 1700000000,\n owned_by: \"anthropic\",\n },\n]\n\n// Cache for fetched models\nlet cachedModels: Array<AntigravityModel> | null = null\nlet cacheTimestamp: number = 0\nconst CACHE_TTL = 5 * 60 * 1000 // 5 minutes\n\n/**\n * Fetch models from Antigravity API\n */\nasync function fetchModelsFromApi(): Promise<Array<AntigravityModel> | null> {\n const accessToken = await getValidAccessToken()\n\n if (!accessToken) {\n consola.debug(\"No access token available, using fallback models\")\n return null\n }\n\n try {\n const response = await fetch(ANTIGRAVITY_MODELS_URL, {\n method: \"POST\",\n headers: {\n Host: ANTIGRAVITY_API_HOST,\n \"User-Agent\": ANTIGRAVITY_USER_AGENT,\n Authorization: `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\",\n \"Accept-Encoding\": \"gzip\",\n },\n body: JSON.stringify({}),\n })\n\n if (!response.ok) {\n consola.warn(`Failed to fetch Antigravity models: ${response.status}`)\n return null\n }\n\n const data = (await response.json()) as {\n models?: Array<{\n name: string\n quotaInfo?: {\n remainingFraction?: number\n resetTime?: string\n }\n }>\n }\n\n if (!data.models || !Array.isArray(data.models)) {\n return null\n }\n\n // Convert to OpenAI format\n const models: Array<AntigravityModel> = data.models\n .filter((m) => {\n // Filter out models with no remaining quota\n const remaining = m.quotaInfo?.remainingFraction ?? 1\n return remaining > 0\n })\n .map((m) => {\n // Extract model ID from name (e.g., \"models/gemini-2.0-flash\" -> \"gemini-2.0-flash\")\n const modelId = m.name.replace(\"models/\", \"\")\n const isGoogle =\n modelId.startsWith(\"gemini\") || modelId.startsWith(\"learnlm\")\n\n return {\n id: modelId,\n object: \"model\",\n created: 1700000000,\n owned_by: isGoogle ? \"google\" : \"anthropic\",\n quotaInfo: m.quotaInfo ? {\n remainingFraction: m.quotaInfo.remainingFraction ?? 1,\n resetTime: m.quotaInfo.resetTime ?? \"\",\n } : undefined,\n }\n })\n\n consola.debug(`Fetched ${models.length} models from Antigravity API`)\n return models\n } catch (error) {\n consola.warn(\"Error fetching Antigravity models:\", error)\n return null\n }\n}\n\n/**\n * Get available Antigravity models\n */\nexport async function getAntigravityModels(): Promise<AntigravityModelsResponse> {\n // Check cache\n if (cachedModels && Date.now() - cacheTimestamp < CACHE_TTL) {\n consola.debug(`Returning ${cachedModels.length} cached Antigravity models`)\n return {\n object: \"list\",\n data: cachedModels,\n }\n }\n\n // Try to fetch from API\n const apiModels = await fetchModelsFromApi()\n\n if (apiModels && apiModels.length > 0) {\n cachedModels = apiModels\n cacheTimestamp = Date.now()\n\n return {\n object: \"list\",\n data: apiModels,\n }\n }\n\n // Use fallback models\n consola.debug(\n `Returning ${FALLBACK_MODELS.length} fallback Antigravity models`,\n )\n\n return {\n object: \"list\",\n data: FALLBACK_MODELS,\n }\n}\n\n/**\n * Antigravity usage response format (compatible with Copilot usage viewer)\n */\nexport interface AntigravityUsageResponse {\n copilot_plan: string\n quota_reset_date: string\n quota_snapshots: {\n models: Record<string, {\n remaining_fraction: number\n reset_time: string\n percent_remaining: number\n }>\n }\n}\n\n/**\n * Get Antigravity usage/quota information\n */\nexport async function getAntigravityUsage(): Promise<AntigravityUsageResponse> {\n // Force refresh models to get latest quota\n cachedModels = null\n cacheTimestamp = 0\n\n const modelsResponse = await getAntigravityModels()\n\n // Find earliest reset time\n let earliestResetTime = \"\"\n const modelsQuota: Record<string, {\n remaining_fraction: number\n reset_time: string\n percent_remaining: number\n }> = {}\n\n for (const model of modelsResponse.data) {\n if (model.quotaInfo) {\n const resetTime = model.quotaInfo.resetTime\n if (!earliestResetTime || (resetTime && resetTime < earliestResetTime)) {\n earliestResetTime = resetTime\n }\n\n modelsQuota[model.id] = {\n remaining_fraction: model.quotaInfo.remainingFraction,\n reset_time: model.quotaInfo.resetTime,\n percent_remaining: Math.round(model.quotaInfo.remainingFraction * 100),\n }\n }\n }\n\n return {\n copilot_plan: \"antigravity\",\n quota_reset_date: earliestResetTime,\n quota_snapshots: {\n models: modelsQuota,\n },\n }\n}\n\n/**\n * Check if a model is a Claude model\n */\nexport function isClaudeModel(modelId: string): boolean {\n return modelId.startsWith(\"claude-\")\n}\n\n/**\n * Check if a model is a thinking/reasoning model\n */\nexport function isThinkingModel(modelId: string): boolean {\n return modelId.includes(\"thinking\")\n}\n\n/**\n * Check if a model is an image generation model\n */\nexport function isImageModel(modelId: string): boolean {\n return modelId.includes(\"image\")\n}\n"],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -6,7 +6,7 @@ import { HTTPError, forwardError } from "./error-CvU5otz-.js";
|
|
|
6
6
|
import { cacheModels, cacheVSCodeVersion, clearGithubToken, isNullish, setupCopilotToken, setupGitHubToken, sleep } from "./token-BUmQ_BcM.js";
|
|
7
7
|
import { clearAntigravityAuth, disableCurrentAccount, getAntigravityAuthPath, getApiKey, getValidAccessToken, rotateAccount } from "./auth-y23hLerx.js";
|
|
8
8
|
import { clearZenAuth, getZenAuthPath } from "./auth-OZNLGzjK.js";
|
|
9
|
-
import { getAntigravityModels, isThinkingModel } from "./get-models-
|
|
9
|
+
import { getAntigravityModels, getAntigravityUsage, isThinkingModel } from "./get-models-uSazerPk.js";
|
|
10
10
|
import { createRequire } from "node:module";
|
|
11
11
|
import { defineCommand, runMain } from "citty";
|
|
12
12
|
import consola from "consola";
|
|
@@ -2869,10 +2869,21 @@ tokenRoute.get("/", (c) => {
|
|
|
2869
2869
|
const usageRoute = new Hono();
|
|
2870
2870
|
usageRoute.get("/", async (c) => {
|
|
2871
2871
|
try {
|
|
2872
|
+
if (state.antigravityMode) {
|
|
2873
|
+
const usage$1 = await getAntigravityUsage();
|
|
2874
|
+
return c.json(usage$1);
|
|
2875
|
+
}
|
|
2876
|
+
if (state.zenMode) return c.json({
|
|
2877
|
+
error: "Usage statistics not available for Zen mode",
|
|
2878
|
+
message: "Please check your usage at https://console.opencode.ai",
|
|
2879
|
+
mode: "zen"
|
|
2880
|
+
}, 200);
|
|
2872
2881
|
const usage = await getCopilotUsage();
|
|
2873
2882
|
return c.json(usage);
|
|
2874
2883
|
} catch (error) {
|
|
2875
|
-
consola.error("Error fetching
|
|
2884
|
+
consola.error("Error fetching usage:", error);
|
|
2885
|
+
if (state.antigravityMode) return c.json({ error: "Failed to fetch Antigravity usage" }, 500);
|
|
2886
|
+
if (state.zenMode) return c.json({ error: "Failed to fetch Zen usage" }, 500);
|
|
2876
2887
|
return c.json({ error: "Failed to fetch Copilot usage" }, 500);
|
|
2877
2888
|
}
|
|
2878
2889
|
});
|
|
@@ -3190,7 +3201,7 @@ async function runServer(options$1) {
|
|
|
3190
3201
|
}
|
|
3191
3202
|
if (!await getCurrentAccount() && !hasApiKey()) throw new Error("No enabled Antigravity accounts available");
|
|
3192
3203
|
}
|
|
3193
|
-
const { getAntigravityModels: getAntigravityModels$1 } = await import("./get-models-
|
|
3204
|
+
const { getAntigravityModels: getAntigravityModels$1 } = await import("./get-models-DqEAMDmN.js");
|
|
3194
3205
|
const models = await getAntigravityModels$1();
|
|
3195
3206
|
state.antigravityModels = models;
|
|
3196
3207
|
consola.info(`Available Antigravity models: \n${models.data.map((model) => `- ${model.id}`).join("\n")}`);
|