Files
2026-07-13 13:39:12 +08:00

189 lines
6.6 KiB
TypeScript

import { antigravityUserAgent } from "../services/antigravityHeaders.ts";
export const GITHUB_COPILOT_API_VERSION = "2026-06-01";
export const GITHUB_COPILOT_EDITOR_VERSION = "vscode/1.126.0";
export const GITHUB_COPILOT_CHAT_PLUGIN_VERSION = "copilot-chat/0.54.0";
export const GITHUB_COPILOT_CHAT_USER_AGENT = "GitHubCopilotChat/0.54.0";
export const GITHUB_COPILOT_REFRESH_PLUGIN_VERSION = "copilot/1.388.0";
export const GITHUB_COPILOT_REFRESH_USER_AGENT = "GithubCopilot/1.0";
export const GITHUB_COPILOT_INTEGRATION_ID = "vscode-chat";
export const GITHUB_COPILOT_OPENAI_INTENT = "conversation-panel";
export const GITHUB_COPILOT_DEFAULT_INITIATOR = "user";
export const GITHUB_COPILOT_USER_AGENT_LIBRARY = "electron-fetch";
export const QWEN_CLI_VERSION = "0.19.3";
export const QWEN_STAINLESS_LANG = "js";
export const QWEN_STAINLESS_PACKAGE_VERSION = "5.11.0";
export const QWEN_STAINLESS_RETRY_COUNT = "1";
export const QWEN_STAINLESS_RUNTIME = "node";
export const QWEN_ACCEPT_LANGUAGE = "*";
export const QWEN_SEC_FETCH_MODE = "cors";
export const QODER_DEFAULT_USER_AGENT = "Qoder-Cli";
export const KIRO_SDK_USER_AGENT = "AWS-SDK-JS/3.0.0 kiro-ide/1.0.0";
export const KIRO_AMZ_USER_AGENT = "aws-sdk-js/3.0.0 kiro-ide/1.0.0";
export const KIRO_STREAMING_TARGET =
"AmazonCodeWhispererStreamingService.GenerateAssistantResponse";
export const CURSOR_REGISTRY_VERSION = "3.9";
export function getGitHubCopilotChatHeaders(
accept = "application/json",
initiator = GITHUB_COPILOT_DEFAULT_INITIATOR
): Record<string, string> {
return {
"copilot-integration-id": GITHUB_COPILOT_INTEGRATION_ID,
"editor-version": GITHUB_COPILOT_EDITOR_VERSION,
"editor-plugin-version": GITHUB_COPILOT_CHAT_PLUGIN_VERSION,
"user-agent": GITHUB_COPILOT_CHAT_USER_AGENT,
"openai-intent": GITHUB_COPILOT_OPENAI_INTENT,
"x-github-api-version": GITHUB_COPILOT_API_VERSION,
"x-vscode-user-agent-library-version": GITHUB_COPILOT_USER_AGENT_LIBRARY,
"X-Initiator": initiator,
Accept: accept,
"Content-Type": "application/json",
};
}
export function getRuntimePlatform(): string {
return typeof process !== "undefined" && typeof process.platform === "string"
? process.platform
: "unknown";
}
export function getRuntimeArch(): string {
return typeof process !== "undefined" && typeof process.arch === "string"
? process.arch
: "unknown";
}
export function getRuntimeVersion(): string {
return typeof process !== "undefined" && typeof process.version === "string"
? process.version
: "unknown";
}
export function normalizeStainlessPlatform(platform: string = getRuntimePlatform()): string {
const normalized = platform.toLowerCase();
if (normalized.includes("ios")) return "iOS";
if (normalized === "android") return "Android";
if (normalized === "darwin") return "MacOS";
if (normalized === "win32") return "Windows";
if (normalized === "freebsd") return "FreeBSD";
if (normalized === "openbsd") return "OpenBSD";
if (normalized === "linux") return "Linux";
return normalized ? `Other:${normalized}` : "Unknown";
}
export function normalizeStainlessArch(arch: string = getRuntimeArch()): string {
if (arch === "x32") return "x32";
if (arch === "x86_64" || arch === "x64") return "x64";
if (arch === "arm") return "arm";
if (arch === "aarch64" || arch === "arm64") return "arm64";
return arch ? `other:${arch}` : "unknown";
}
export function getQwenCliUserAgent(version = QWEN_CLI_VERSION): string {
// Qwen Code builds this from the runtime process values. Keep it runtime-derived so
// packaged deployments use their own platform/architecture instead of a maintainer's host.
return `QwenCode/${version} (${getRuntimePlatform()}; ${getRuntimeArch()})`;
}
export function getGitHubCopilotInternalUserHeaders(authorization: string): Record<string, string> {
return {
Authorization: authorization,
Accept: "application/json",
"X-GitHub-Api-Version": GITHUB_COPILOT_API_VERSION,
"User-Agent": GITHUB_COPILOT_CHAT_USER_AGENT,
"Editor-Version": GITHUB_COPILOT_EDITOR_VERSION,
"Editor-Plugin-Version": GITHUB_COPILOT_CHAT_PLUGIN_VERSION,
};
}
export function getGitHubCopilotRefreshHeaders(authorization: string): Record<string, string> {
return {
Authorization: authorization,
Accept: "application/json",
"User-Agent": GITHUB_COPILOT_REFRESH_USER_AGENT,
"Editor-Version": GITHUB_COPILOT_EDITOR_VERSION,
"Editor-Plugin-Version": GITHUB_COPILOT_REFRESH_PLUGIN_VERSION,
};
}
export function getQwenOauthHeaders(): Record<string, string> {
const userAgent = getQwenCliUserAgent();
return {
"User-Agent": userAgent,
"X-Dashscope-AuthType": "qwen-oauth",
"X-Dashscope-CacheControl": "enable",
"X-Dashscope-UserAgent": userAgent,
"X-Stainless-Arch": normalizeStainlessArch(),
"X-Stainless-Lang": QWEN_STAINLESS_LANG,
"X-Stainless-Os": normalizeStainlessPlatform(),
"X-Stainless-Package-Version": QWEN_STAINLESS_PACKAGE_VERSION,
"X-Stainless-Retry-Count": QWEN_STAINLESS_RETRY_COUNT,
"X-Stainless-Runtime": QWEN_STAINLESS_RUNTIME,
"X-Stainless-Runtime-Version": getRuntimeVersion(),
Connection: "keep-alive",
"Accept-Language": QWEN_ACCEPT_LANGUAGE,
"Sec-Fetch-Mode": QWEN_SEC_FETCH_MODE,
};
}
export function getQoderDefaultHeaders(): Record<string, string> {
return {
"User-Agent": QODER_DEFAULT_USER_AGENT,
};
}
export function getQoderDashscopeCompatHeaders(): Record<string, string> {
const userAgent = getQwenCliUserAgent();
return {
"x-dashscope-authtype": "qwen-oauth",
"x-dashscope-cachecontrol": "enable",
"user-agent": userAgent,
"x-dashscope-useragent": userAgent,
"x-stainless-arch": normalizeStainlessArch(),
"x-stainless-lang": QWEN_STAINLESS_LANG,
"x-stainless-os": normalizeStainlessPlatform(),
};
}
export function getAntigravityUserAgent(): string {
return antigravityUserAgent();
}
export function getAntigravityProviderHeaders(): Record<string, string> {
return {
"User-Agent": getAntigravityUserAgent(),
};
}
export function getKiroServiceHeaders(
accept = "application/vnd.amazon.eventstream"
): Record<string, string> {
return {
"Content-Type": "application/json",
Accept: accept,
"X-Amz-Target": KIRO_STREAMING_TARGET,
"User-Agent": KIRO_SDK_USER_AGENT,
"X-Amz-User-Agent": KIRO_AMZ_USER_AGENT,
};
}
export function getCursorUserAgent(version: string): string {
return `Cursor/${version}`;
}
export function getCursorRegistryHeaders(
version = CURSOR_REGISTRY_VERSION
): Record<string, string> {
return {
"connect-accept-encoding": "gzip",
"connect-protocol-version": "1",
"Content-Type": "application/connect+proto",
"User-Agent": getCursorUserAgent(version),
};
}