import type { CreateConfigValues } from "@paperclipai/adapter-utils"; function parseEnvVars(text: string): Record { const env: Record = {}; for (const line of text.split(/\r?\n/)) { const trimmed = line.trim(); if (!trimmed || trimmed.startsWith("#")) continue; const eq = trimmed.indexOf("="); if (eq <= 0) continue; const key = trimmed.slice(0, eq).trim(); const value = trimmed.slice(eq + 1); if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) continue; env[key] = value; } return env; } function parseEnvBindings(bindings: unknown): Record { if (typeof bindings !== "object" || bindings === null || Array.isArray(bindings)) return {}; const env: Record = {}; for (const [key, raw] of Object.entries(bindings)) { if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) continue; if (typeof raw === "string") { env[key] = { type: "plain", value: raw }; continue; } if (typeof raw !== "object" || raw === null || Array.isArray(raw)) continue; const rec = raw as Record; if (rec.type === "plain" && typeof rec.value === "string") { env[key] = { type: "plain", value: rec.value }; continue; } if (rec.type === "secret_ref" && typeof rec.secretId === "string") { env[key] = { type: "secret_ref", secretId: rec.secretId, ...(typeof rec.version === "number" || rec.version === "latest" ? { version: rec.version } : {}), }; } } return env; } export function buildCursorCloudConfig(values: CreateConfigValues): Record { const config: Record = { ...(values.adapterSchemaValues ?? {}), }; if (values.instructionsFilePath) config.instructionsFilePath = values.instructionsFilePath; if (values.promptTemplate) config.promptTemplate = values.promptTemplate; if (values.bootstrapPrompt) config.bootstrapPromptTemplate = values.bootstrapPrompt; if (values.model?.trim()) config.model = values.model.trim(); const env = parseEnvBindings(values.envBindings); const legacy = parseEnvVars(values.envVars); for (const [key, value] of Object.entries(legacy)) { if (!Object.prototype.hasOwnProperty.call(env, key)) { env[key] = { type: "plain", value }; } } if (Object.keys(env).length > 0) { config.env = env; } return config; }