rawi
Version:
Rawi (راوي) is the developer-friendly AI CLI that brings the power of 12 major AI providers directly to your terminal. With seamless shell integration, persistent conversations, and 200+ specialized prompt templates, Rawi transforms your command line into
4 lines • 3.45 kB
JavaScript
/* Rawi (راوي) is the developer-friendly AI CLI that brings the power of 12 major AI providers directly to your terminal. With seamless shell integration, persistent conversations, and 200+ specialized prompt templates, Rawi transforms your command line into an intelligent development workspace. */
import{c,d as s}from"./chunk-Y7XFV3CR.js";import{d as n}from"./chunk-3JCRW7ET.js";import{copyFileSync as f,existsSync as o,mkdirSync as l,readFileSync as g,writeFileSync as d}from"fs";import{join as u}from"path";import t from"chalk";var a=class{configDir;configFile;backupFile;constructor(){this.configDir=c(),this.configFile=s(),this.backupFile=u(this.configDir,"credentials.backup.json")}ensureConfigDir(){if(!o(this.configDir))try{l(this.configDir,{recursive:!0})}catch(r){throw new Error(`Failed to create config directory: ${r instanceof Error?r.message:String(r)}`)}}configExists(){return o(this.configFile)}readConfig(){if(!o(this.configFile))return{};try{let r=g(this.configFile,"utf-8"),e=JSON.parse(r);if(typeof e!="object"||e===null)throw new Error("Invalid configuration format");return e}catch{if(console.error(t.yellow("Warning: Failed to read config file, using empty config.")),o(this.backupFile)){console.log(t.blue("Attempting to restore from backup..."));try{return this.restoreConfig(),this.readConfig()}catch(r){console.error(t.red(`Failed to restore from backup: ${r}`))}}return{}}}writeConfig(r){if(this.ensureConfigDir(),this.configExists())try{this.backupConfig()}catch(e){console.warn(t.yellow(`Warning: Failed to create backup: ${e}`))}try{let e=JSON.stringify(r,null,2);d(this.configFile,e,"utf-8")}catch(e){throw new Error(`Failed to write config file: ${e instanceof Error?e.message:String(e)}`)}}backupConfig(){if(this.configExists())try{f(this.configFile,this.backupFile)}catch(r){throw new Error(`Failed to backup config file: ${r instanceof Error?r.message:String(r)}`)}}restoreConfig(){if(!o(this.backupFile))throw new Error("No backup file found");try{f(this.backupFile,this.configFile)}catch(r){throw new Error(`Failed to restore config file: ${r instanceof Error?r.message:String(r)}`)}}getCredentials(r=n){try{let i=this.readConfig()[r];return i?typeof i!="object"||!i.provider||!i.model?(console.error(t.red(`Invalid credentials structure for profile '${r}'`)),null):i:null}catch(e){return console.error(t.red(`Error reading credentials: ${e}`)),null}}setCredentials(r,e=n){try{let i=this.readConfig();i[e]=r,this.writeConfig(i)}catch(i){throw new Error(`Failed to save credentials: ${i instanceof Error?i.message:String(i)}`)}}listProfiles(){try{let r=this.readConfig();return Object.keys(r).filter(e=>{let i=r[e];return i&&typeof i=="object"&&i.provider&&i.model})}catch(r){return console.error(t.red(`Error listing profiles: ${r}`)),[]}}deleteProfile(r){try{let e=this.readConfig();return r in e?(this.backupConfig(),delete e[r],this.writeConfig(e),!0):!1}catch(e){return console.error(t.red(`Error deleting profile: ${e}`)),!1}}getConfigFile(){return this.configFile}getConfigDir(){return this.configDir}getBackupFile(){return this.backupFile}};export{a};
/* Rawi (راوي) is the developer-friendly AI CLI that brings the power of 12 major AI providers directly to your terminal. With seamless shell integration, persistent conversations, and 200+ specialized prompt templates, Rawi transforms your command line into an intelligent development workspace. */
//# sourceMappingURL=chunk-ZHE2BGWL.js.map