import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs"; import { homedir } from "os"; import { join } from "path"; export interface CliConfig { token: string; registryUrl: string; savedAt: string; } const CONFIG_DIR = join(homedir(), ".paperclip-skills"); const CONFIG_FILE = join(CONFIG_DIR, "config.json"); const DEFAULT_REGISTRY_URL = "https://www.paperclipskills.com"; export function readConfig(): Partial { if (!existsSync(CONFIG_FILE)) return {}; try { const raw = readFileSync(CONFIG_FILE, "utf-8"); return JSON.parse(raw) as Partial; } catch { return {}; } } export function writeConfig(config: Partial): void { if (!existsSync(CONFIG_DIR)) { mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 }); } const current = readConfig(); const merged: Partial = { ...current, ...config }; writeFileSync(CONFIG_FILE, JSON.stringify(merged, null, 2), { encoding: "utf-8", mode: 0o600, }); } export function getToken(): string | undefined { return process.env.PAPERCLIP_SKILLS_TOKEN ?? readConfig().token; } export function getRegistryUrl(): string { return ( process.env.PAPERCLIP_REGISTRY_URL ?? readConfig().registryUrl ?? DEFAULT_REGISTRY_URL ); } export function requireToken(): string { const token = getToken(); if (!token) { throw new Error( "No auth token found. Run `npx paperclip-skills login` to authenticate, " + "or set PAPERCLIP_SKILLS_TOKEN in your environment." ); } return token; }