mirror of
http://192.168.0.88:13333/lywsvip/openclaw-zero-token.git
synced 2026-05-08 08:08:33 +08:00
Major upgrade from e26988a38 to upstream v2026.3.28 (f9b107928).
Key changes:
- Upstream src/, ui/, extensions/ (89 bundled extensions)
- Zero-token web providers preserved in src/zero-token/
- AskOnce plugin restored and registered as CLI command
- Added missing packages: @anthropic-ai/vertex-sdk, @modelcontextprotocol/sdk
- Fixed tsconfig rootDir, skipLibCheck for plugin-sdk DTS build
- Added askonce to bundled plugin metadata and package.json exports
- Fixed AskOnce CLI command registration (missing commands metadata)
- Restored AskOnce adapter imports (correct 5-level relative paths)
- Removed stale migration artifacts from root directory
70 lines
1.7 KiB
TypeScript
70 lines
1.7 KiB
TypeScript
import {
|
|
buildUsageHttpErrorSnapshot,
|
|
fetchJson,
|
|
clampPercent,
|
|
PROVIDER_LABELS,
|
|
type ProviderUsageSnapshot,
|
|
type UsageWindow,
|
|
} from "openclaw/plugin-sdk/provider-usage";
|
|
|
|
type CopilotUsageResponse = {
|
|
quota_snapshots?: {
|
|
premium_interactions?: { percent_remaining?: number | null };
|
|
chat?: { percent_remaining?: number | null };
|
|
};
|
|
copilot_plan?: string;
|
|
};
|
|
|
|
export async function fetchCopilotUsage(
|
|
token: string,
|
|
timeoutMs: number,
|
|
fetchFn: typeof fetch,
|
|
): Promise<ProviderUsageSnapshot> {
|
|
const res = await fetchJson(
|
|
"https://api.github.com/copilot_internal/user",
|
|
{
|
|
headers: {
|
|
Authorization: `token ${token}`,
|
|
"Editor-Version": "vscode/1.96.2",
|
|
"User-Agent": "GitHubCopilotChat/0.26.7",
|
|
"X-Github-Api-Version": "2025-04-01",
|
|
},
|
|
},
|
|
timeoutMs,
|
|
fetchFn,
|
|
);
|
|
|
|
if (!res.ok) {
|
|
return buildUsageHttpErrorSnapshot({
|
|
provider: "github-copilot",
|
|
status: res.status,
|
|
});
|
|
}
|
|
|
|
const data = (await res.json()) as CopilotUsageResponse;
|
|
const windows: UsageWindow[] = [];
|
|
|
|
if (data.quota_snapshots?.premium_interactions) {
|
|
const remaining = data.quota_snapshots.premium_interactions.percent_remaining;
|
|
windows.push({
|
|
label: "Premium",
|
|
usedPercent: clampPercent(100 - (remaining ?? 0)),
|
|
});
|
|
}
|
|
|
|
if (data.quota_snapshots?.chat) {
|
|
const remaining = data.quota_snapshots.chat.percent_remaining;
|
|
windows.push({
|
|
label: "Chat",
|
|
usedPercent: clampPercent(100 - (remaining ?? 0)),
|
|
});
|
|
}
|
|
|
|
return {
|
|
provider: "github-copilot",
|
|
displayName: PROVIDER_LABELS["github-copilot"],
|
|
windows,
|
|
plan: data.copilot_plan,
|
|
};
|
|
}
|