-- GitHub Copilot defaults for panto. No login, networking, or session activation. local auth_defaults = { type = "oauth_device", client_id = "Iv1.b507a08c87ecfe98", device_code_url = "https://github.com/login/device/code", token_url = "https://github.com/login/oauth/access_token", scope = "read:user", exchange_url = "https://api.github.com/copilot_internal/v2/token", exchange_expires_path = "expires_at", exchange_base_url_path = "endpoints.api", } local provider_defaults = { style = "openai_responses", model_catalog_name = "github-copilot", extra_headers = { ["User-Agent"] = "GitHubCopilotChat/0.35.0", ["Editor-Version"] = "vscode/1.107.0", ["Editor-Plugin-Version"] = "copilot-chat/0.35.0", ["Copilot-Integration-Id"] = "vscode-chat", }, } local endpoint_defaults = { openai_chat = { base_url = "https://api.individual.githubcopilot.com" }, openai_responses = { base_url = "https://api.individual.githubcopilot.com" }, anthropic_messages = { base_url = "https://api.individual.githubcopilot.com" }, } -- Fill only missing values; HTTP header names are case-insensitive. local function fill_missing(target, defaults, headers) for key, value in pairs(defaults) do local target_key = key if headers then for existing in pairs(target) do if type(existing) == "string" and existing:lower() == key:lower() then target_key = existing break end end end if target[target_key] == nil then target[target_key] = type(value) == "table" and {} or value end if type(value) == "table" and type(target[target_key]) == "table" then fill_missing(target[target_key], value, key == "extra_headers") end end end return { name = "copilot", configure = function(config) for _, auth in pairs(config.auth or {}) do if type(auth) == "table" and auth.panto_copilot_extension == true then fill_missing(auth, auth_defaults) end end for _, provider in pairs(config.providers or {}) do if type(provider) == "table" and provider.panto_copilot_extension == true then fill_missing(provider, provider_defaults) if provider.base_url == nil then fill_missing(provider, { endpoints = endpoint_defaults }) end end end end, }