mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-10-29 18:52:45 +08:00
110 lines
3.8 KiB
TypeScript
110 lines
3.8 KiB
TypeScript
import { createOpenRouter } from "@openrouter/ai-sdk-provider"
|
|
import type { Provider as SDK } from "ai"
|
|
import type { KiloProviderOptions } from "./types"
|
|
import { getKiloUrlFromToken, getApiKey } from "./auth"
|
|
import { buildKiloHeaders, DEFAULT_HEADERS } from "./headers"
|
|
import { KILO_API_BASE, ANONYMOUS_API_KEY } from "./constants"
|
|
|
|
/**
|
|
* Debug version of createKilo with extensive logging
|
|
*/
|
|
export function createKiloDebug(options: KiloProviderOptions = {}): SDK {
|
|
console.log("\n🔍 [KILO DEBUG] Creating Kilo Provider")
|
|
console.log("📋 [KILO DEBUG] Options received:", JSON.stringify(options, null, 2))
|
|
|
|
// Get API key from options or environment
|
|
const apiKey = getApiKey(options)
|
|
console.log("🔑 [KILO DEBUG] API Key extracted:")
|
|
console.log(" - Source:", options.kilocodeToken ? "kilocodeToken" : options.apiKey ? "apiKey" : "none")
|
|
console.log(" - Value:", apiKey ? `${apiKey.substring(0, 8)}...${apiKey.substring(apiKey.length - 8)}` : "MISSING!")
|
|
|
|
// Determine base URL
|
|
const baseApiUrl = getKiloUrlFromToken(options.baseURL ?? KILO_API_BASE, apiKey ?? "")
|
|
console.log("🌐 [KILO DEBUG] Base URL resolved:", baseApiUrl)
|
|
|
|
// Build OpenRouter URL - only append /openrouter/ if not already present
|
|
const openRouterUrl = baseApiUrl.includes("/openrouter")
|
|
? baseApiUrl
|
|
: baseApiUrl.endsWith("/")
|
|
? `${baseApiUrl}openrouter/`
|
|
: `${baseApiUrl}/openrouter/`
|
|
console.log("🔗 [KILO DEBUG] OpenRouter URL:", openRouterUrl)
|
|
|
|
// Merge custom headers with defaults
|
|
const customHeaders = {
|
|
...DEFAULT_HEADERS,
|
|
...buildKiloHeaders(undefined, {
|
|
kilocodeOrganizationId: options.kilocodeOrganizationId,
|
|
kilocodeTesterWarningsDisabledUntil: undefined,
|
|
}),
|
|
...options.headers,
|
|
}
|
|
console.log("📝 [KILO DEBUG] Custom headers:", JSON.stringify(customHeaders, null, 2))
|
|
|
|
// Create custom fetch wrapper to add dynamic headers
|
|
const originalFetch = options.fetch ?? fetch
|
|
const wrappedFetch: typeof fetch = async (input, init) => {
|
|
console.log("\n🚀 [KILO DEBUG] Making request:")
|
|
console.log(" - URL:", String(input))
|
|
console.log(" - Method:", init?.method || "GET")
|
|
|
|
const headers = new Headers(init?.headers)
|
|
|
|
// Add custom headers
|
|
Object.entries(customHeaders).forEach(([key, value]) => {
|
|
headers.set(key, value)
|
|
})
|
|
|
|
// Add authorization if API key exists
|
|
if (apiKey) {
|
|
const authValue = `Bearer ${apiKey}`
|
|
headers.set("Authorization", authValue)
|
|
console.log(
|
|
" - Authorization header set:",
|
|
`Bearer ${apiKey.substring(0, 8)}...${apiKey.substring(apiKey.length - 8)}`,
|
|
)
|
|
} else {
|
|
console.log(" ⚠️ - NO AUTHORIZATION HEADER! API key is missing")
|
|
}
|
|
|
|
console.log(" - Headers being sent:")
|
|
headers.forEach((value, key) => {
|
|
if (key.toLowerCase() === "authorization") {
|
|
console.log(` ${key}: ${value.substring(0, 20)}...`)
|
|
} else {
|
|
console.log(` ${key}: ${value}`)
|
|
}
|
|
})
|
|
|
|
const response = await originalFetch(input, {
|
|
...init,
|
|
headers,
|
|
})
|
|
|
|
console.log(" - Response status:", response.status, response.statusText)
|
|
|
|
if (!response.ok) {
|
|
const responseText = await response.text()
|
|
console.log(" ❌ - Error response:", responseText)
|
|
// Re-create response since we consumed the body
|
|
return new Response(responseText, {
|
|
status: response.status,
|
|
statusText: response.statusText,
|
|
headers: response.headers,
|
|
})
|
|
}
|
|
|
|
return response
|
|
}
|
|
|
|
console.log("✅ [KILO DEBUG] Creating OpenRouter provider with configuration\n")
|
|
|
|
// Create OpenRouter provider with KiloCode configuration
|
|
return createOpenRouter({
|
|
baseURL: openRouterUrl,
|
|
apiKey: apiKey ?? ANONYMOUS_API_KEY,
|
|
headers: customHeaders,
|
|
fetch: wrappedFetch,
|
|
})
|
|
}
|