import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import type { RefreshModelsContext } from "@earendil-works/pi-ai"; import { fetchModels, type PiModelConfig } from "./models.ts"; import { login, refreshToken, getApiKey } from "./auth.ts"; const API_BASE_URL = "https://api.cline.bot/api/v1"; async function getModels(): Promise { try { return await fetchModels(); } catch (error) { console.warn( `[cline-pi] ${error instanceof Error ? error.message : String(error)}`, ); return []; } } export default async function (pi: ExtensionAPI) { pi.registerProvider("cline", { name: "Cline", baseUrl: API_BASE_URL, apiKey: "$CLINE_API_KEY", authHeader: true, api: "openai-completions", models: await getModels(), oauth: { name: "Cline", login, refreshToken, getApiKey, }, refreshModels: async (context: RefreshModelsContext) => { if (!context.allowNetwork) return; return await getModels(); }, }); }