Files
kilocode/packages/kilo-provider/src/provider-debug.ts
T

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,
})
}