summaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua68
1 files changed, 68 insertions, 0 deletions
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..dcc5fbb
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,68 @@
+-- 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,
+}