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
8 lines • 8.88 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{a as l}from"./chunk-ZHE2BGWL.js";import{a as u}from"./chunk-R3ZOCB6H.js";import{a as v}from"./chunk-XGV3I4XU.js";import{a as y}from"./chunk-PTY25BFJ.js";import{a as w}from"./chunk-47WZZKSY.js";import{b as g}from"./chunk-U7K37PAJ.js";import{e as p,f,g as d}from"./chunk-3JCRW7ET.js";import n from"chalk";var h=class extends l{interactive=new v;providerConfig=new w;display=new u;validator=new y;async interactiveConfigure(r={}){console.log(n.bold.blue("\\n\u{1F527} Configuring Rawi")),console.log(n.gray("Please provide your AI service configuration:\\n"));try{let t=await this.interactive.getProfile(r.profile);g.start("config-load","Loading existing configuration...");let e=this.getCredentials(t);e?g.succeed("config-load",`Found existing configuration for profile '${t}'`):g.succeed("config-load","Creating new configuration profile");try{let i=await this.interactive.selectProvider(r.provider||e?.provider);g.start("provider-validation",`Validating ${i} provider configuration...`),await new Promise(c=>setTimeout(c,500)),g.succeed("provider-validation",`${i} provider validated`);let a=await this.interactive.selectModel(i,r.model||e?.model),o={provider:i,model:a,temperature:await this.interactive.getTemperature(r.temperature??e?.temperature??.7),maxTokens:await this.interactive.getMaxTokens(r.maxTokens??e?.maxTokens??2048),language:await this.interactive.getLanguage(r.language??e?.language??d)};await this.configureProviderSettings(o,i,r,e);let s=this.validator.validateCredentials(o);if(!s.isValid)throw this.display.displayError("Configuration validation failed:",s.errors.join(", ")),new Error("Invalid configuration");if(s.warnings.length>0)for(let c of s.warnings)this.display.displayWarning(c);this.setCredentials(o,t),g.start("config-save","Saving configuration...");try{g.succeed("config-save","Configuration saved successfully!"),console.log(n.gray(`Profile: ${t}`)),this.display.displayConfigurationSummary(o),console.log(n.gray(`\\nConfig file: ${this.configFile}`)),this.display.displaySuccess("Configuration completed successfully!")}catch(c){throw g.fail("config-save","Failed to save configuration"),c}}catch(i){if(i instanceof Error&&i.name==="ExitPromptError"){console.log(n.yellow("\\n\u{1F44B} Configuration cancelled. Exiting..."));return}throw i}}catch(t){if(t===""){console.log(n.yellow("\\n\u274C Configuration cancelled."));return}let e=t instanceof Error?t.message:String(t);throw this.display.displayError("Configuration failed",e),t}}async configureProviderSettings(r,t,e,i){switch(t){case"ollama":await this.configureOllama(r,e,i);break;case"lmstudio":await this.configureLMStudio(r,e,i);break;case"azure":await this.configureAzure(r,e,i);break;case"bedrock":await this.configureBedrock(r,e,i);break;case"qwen":await this.configureQwen(r,e,i);break;case"xai":await this.configureXAI(r,e,i);break;case"deepseek":await this.configureDeepSeek(r,e,i);break;case"mistral":await this.configureMistral(r,e,i);break;case"cerebras":await this.configureCerebras(r,e,i);break;case"openai":await this.configureOpenAI(r,e,i);break;case"anthropic":await this.configureAnthropic(r,e,i);break;case"google":await this.configureGoogle(r,e,i);break;default:r.apiKey=await this.interactive.getApiKey(e.apiKey||i?.apiKey,t);break}}async configureOllama(r,t,e){let i=await this.providerConfig.getBaseURL(t.baseURL||(e?.providerSettings&&"baseURL"in e.providerSettings?e.providerSettings.baseURL:void 0));i&&(r.providerSettings={baseURL:i})}async configureLMStudio(r,t,e){let i=await this.providerConfig.getBaseURL(t.baseURL||(e?.providerSettings&&"baseURL"in e.providerSettings?e.providerSettings.baseURL:void 0));i&&(r.providerSettings={baseURL:i})}async configureAzure(r,t,e){let i=await this.interactive.getApiKey(t.apiKey||e?.apiKey,"azure"),a=await this.providerConfig.getAPIEndpoint(t.resourceName||(e?.providerSettings&&"resourceName"in e.providerSettings?e.providerSettings.resourceName:void 0));if(r.apiKey=i,a){let o={resourceName:a};r.providerSettings=o}}async configureBedrock(r,t,e){let i=await this.providerConfig.getAccessKey(t.accessKeyId||(e?.providerSettings&&"accessKeyId"in e.providerSettings?e.providerSettings.accessKeyId:void 0)),a=await this.providerConfig.getSecretAccessKey(t.secretAccessKey||(e?.providerSettings&&"secretAccessKey"in e.providerSettings?e.providerSettings.secretAccessKey:void 0)),o=await this.providerConfig.getRegion(t.region||(e?.providerSettings&&"region"in e.providerSettings?e.providerSettings.region:void 0)),s=await this.providerConfig.getSessionToken(t.sessionToken||(e?.providerSettings&&"sessionToken"in e.providerSettings?e.providerSettings.sessionToken:void 0)),c={};i&&(c.accessKeyId=i),a&&(c.secretAccessKey=a),o&&(c.region=o),s&&(c.sessionToken=s),r.providerSettings=c}async configureQwen(r,t,e){let i=await this.interactive.getApiKey(t.apiKey||e?.apiKey,"qwen"),a={apiKey:i};r.apiKey=i,r.providerSettings=a}async configureXAI(r,t,e){let i=await this.interactive.getApiKey(t.apiKey||e?.apiKey,"xai"),a={apiKey:i};r.apiKey=i,r.providerSettings=a}async configureDeepSeek(r,t,e){let i=await this.interactive.getApiKey(t.apiKey||e?.apiKey,"deepseek"),a={apiKey:i};r.apiKey=i,r.providerSettings=a}async configureMistral(r,t,e){let i=t.apiKey||(e?.providerSettings&&"apiKey"in e.providerSettings?e.providerSettings.apiKey:e?.apiKey),a=await this.interactive.getApiKey(i,"mistral"),o=await this.providerConfig.getBaseURL(t.baseURL||(e?.providerSettings&&"baseURL"in e.providerSettings?e.providerSettings.baseURL:void 0)),s={apiKey:a};o&&(s.baseURL=o),r.providerSettings=s}async configureCerebras(r,t,e){let i=t.apiKey||(e?.providerSettings&&"apiKey"in e.providerSettings?e.providerSettings.apiKey:e?.apiKey),a=await this.interactive.getApiKey(i,"cerebras"),o=await this.providerConfig.getBaseURL(t.baseURL||(e?.providerSettings&&"baseURL"in e.providerSettings?e.providerSettings.baseURL:void 0)),s={apiKey:a};o&&(s.baseURL=o),r.providerSettings=s}async configureOpenAI(r,t,e){let i=await this.interactive.getApiKey(t.apiKey||e?.apiKey,"openai"),a={apiKey:i};r.apiKey=i,r.providerSettings=a}async configureAnthropic(r,t,e){let i=await this.interactive.getApiKey(t.apiKey||e?.apiKey,"anthropic"),a={apiKey:i};r.apiKey=i,r.providerSettings=a}async configureGoogle(r,t,e){let i=await this.interactive.getApiKey(t.apiKey||e?.apiKey,"google"),a=await this.providerConfig.getAPIEndpoint(t.baseURL||(e?.providerSettings&&"baseURL"in e.providerSettings?e.providerSettings.baseURL:void 0)),o={apiKey:i};a&&(o.baseURL=a),r.apiKey=i,r.providerSettings=o}showConfig(r,t=!1){this.showConfiguration(r,t).catch(e=>{let i=e instanceof Error?e.message:String(e);this.display.displayError("Error showing configuration",i)})}async showConfiguration(r,t=!1){g.start("config-show","Loading configuration...");try{let e=this.readConfig(),i=Object.keys(e);if(i.length===0){g.stop("config-show"),console.log(n.yellow("No configuration profiles found.")),console.log(n.gray('Use "rawi configure" to create your first profile.'));return}if(g.succeed("config-show","Configuration loaded"),r){if(!(r in e)){console.log(n.red(`Profile '${r}' not found.`)),console.log(n.gray("Available profiles:")),this.display.displayProfiles(i);return}console.log(n.blue(`
Profile: ${r}`)),this.display.displayCredentials(e[r])}else{console.log(n.blue(`
All Profiles:`));for(let a of i)console.log(n.white(`
\u2022 Profile: ${a}`)),this.display.displayCredentials(e[a])}}catch(e){g.fail("config-show","Failed to load configuration");let i=e instanceof Error?e.message:String(e);this.display.displayError("Error reading configuration",i)}}manualConfigure(r,t="default"){try{let e=this.validator.validateCredentials(r);if(!e.isValid)throw this.display.displayError("Configuration validation failed:",e.errors.join(", ")),new Error("Invalid configuration");if(e.warnings.length>0)for(let i of e.warnings)this.display.displayWarning(i);this.setCredentials(r,t),this.display.displaySuccess("Configuration saved successfully!"),console.log(n.gray(`Profile: ${t}`)),this.display.displayConfigurationSummary(r),console.log(n.gray(`
Config file: ${this.configFile}`))}catch(e){let i=e instanceof Error?e.message:String(e);throw this.display.displayError("Manual configuration failed",i),e}}};export{h as 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-ZNEVPN2P.js.map