@iaforged/context-code 2.2.4 → 2.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ import{jsx as e,jsxs as o}from"react/jsx-runtime";import*as t from"react";import{Box as n,Text as i}from"../../ink.js";import{Spinner as r}from"../../components/Spinner.js";import{execSync as c}from"child_process";import{logError as s}from"../../utils/log.js";export default async function actualizarVersion(t){return o(n,{flexDirection:"column",gap:1,children:[e(i,{bold:!0,children:"🔄 Actualizando Context Code..."}),o(n,{marginY:1,children:[e(r,{}),e(i,{children:" Ejecutando npm update -g @iaforged/context-code"})]}),e(ActualizarVersionLogic,{onDone:t})]})}function ActualizarVersionLogic({onDone:o}){return t.useEffect(()=>{let e=!0;return(async()=>{try{const{execSync:t}=await import("child_process");let n="desconocida";try{const e=c("npm list -g @iaforged/context-code --depth=0 --json 2>/dev/null",{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),o=JSON.parse(e);n=o.dependencies?.["@iaforged/context-code"]?.version||"desconocida"}catch{}if(t("npm update -g @iaforged/context-code",{stdio:"inherit",windowsHide:!0}),!e)return;let i="desconocida";try{const e=c("npm list -g @iaforged/context-code --depth=0 --json 2>/dev/null",{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),o=JSON.parse(e);i=o.dependencies?.["@iaforged/context-code"]?.version||"desconocida"}catch{}if(!e)return;n!==i?(o(`✅ Context Code actualizado de ${n} a ${i}. Reiniciando...`),setTimeout(()=>{try{const e=process.argv[1]||"context";t(`start "" "${e}"`,{windowsHide:!0,stdio:"ignore"}),process.exit(0)}catch{process.exit(0)}},2e3)):o("ℹ️ Ya tienes la última versión de Context Code instalada.",{nextInput:"/version",submitNextInput:!0})}catch(e){s(e);const t=e instanceof Error?e.message:"Error desconocido";o(`❌ Error al actualizar: ${t}`,{nextInput:"/status",submitNextInput:!0})}})(),()=>{e=!1}},[o]),e(n,{flexDirection:"column",gap:0,children:e(i,{dimColor:!0,children:"Por favor espera, esto puede tomar unos segundos..."})})}
@@ -0,0 +1 @@
1
+ const a={type:"local-jsx",name:"actualizar-version",aliases:["update-version","actualizar","upgrade-cli"],description:"Actualiza Context Code a la última versión disponible en npm",load:()=>import("./actualizar-version.js")};export default a;
@@ -1 +1 @@
1
- import{jsxs as e,jsx as o,Fragment as r}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{useCallback as i,useEffect as n,useRef as a,useState as s}from"react";import{logEvent as l}from"../services/analytics/index.js";import{installOAuthTokens as c}from"../cli/handlers/auth.js";import{useTerminalSize as d}from"../hooks/useTerminalSize.js";import{setClipboard as u}from"../ink/termio/osc.js";import{useTerminalNotification as p}from"../ink/useTerminalNotification.js";import{Box as m,Link as h,Text as g}from"../ink.js";import{useKeybinding as f}from"../keybindings/useKeybinding.js";import{getSSLErrorHint as _}from"../services/api/errorUtils.js";import{sendNotification as v}from"../services/notifier.js";import{OAuthService as C}from"../services/oauth/index.js";import{getOAuthRequestDetails as y}from"../services/oauth/client.js";import{checkGeminiGoogleCredentialsValid as b,getOauthAccountInfo as A,saveGeminiGoogleOAuthTokens as k,saveProviderApiKey as P,validateForceLoginOrg as x}from"../utils/auth.js";import{startGeminiCliOAuthFlow as O}from"../services/oauth/geminiCli.js";import{resolveProviderProfile as I}from"../utils/model/providerProfiles.js";import{logError as S}from"../utils/log.js";import{getVisibleProvider as w}from"../utils/model/providerCatalog.js";import{getConfiguredProviderBaseUrl as D,setProviderBaseUrl as T}from"../utils/model/providerBaseUrls.js";import{getSettings_DEPRECATED as z}from"../utils/settings/settings.js";import{Select as M}from"./CustomSelect/select.js";import{KeyboardShortcutHint as j}from"./design-system/KeyboardShortcutHint.js";import{Spinner as R}from"./Spinner.js";import U from"./TextInput.js";const E=["deepseek","minimax","openrouter","zai","nvidia","ollama","openai","claudeai","gemini-google","gemini-api","console"];function sortLoginProviderOptions(e){const o=new Map(E.map((e,o)=>[e,o]));return[...e].sort((e,r)=>(o.get(e.value)??Number.MAX_SAFE_INTEGER)-(o.get(r.value)??Number.MAX_SAFE_INTEGER))}const K="Pega aqui el codigo si se solicita > ";function formatOAuthDebugDetails(e,o){if("openai"!==e)return"";const r=y({provider:e,port:o,isManual:!1});return[`authorize=${r.authorizeUrl}`,`redirect_uri=${r.redirectUri}`,`scope=${r.scopes.join(" ")}`].join("\n")}export function ConsoleOAuthFlow({onDone:r,startingMessage:t,mode:y="login",forceLoginMethod:A,profileName:D}){const M=z()||{},R=A??M.forceLoginMethod,U=M.forceLoginOrgUUID,E="claudeai"===R?"Método de acceso preseleccionado: Plan de suscripción (Context Pro/Max)":"console"===R?"Método de acceso preseleccionado: Facturación por uso de API (Anthropic Console)":"openai"===R?"Método de acceso preseleccionado: OpenAI / Codex OAuth":null,K=p(),[L,W]=s(()=>"setup-token"===y||"claudeai"===R||"console"===R||"openai"===R?{state:"ready_to_start"}:{state:"idle"}),[G,B]=s(""),[N,$]=s(0),[F]=s(()=>new C),[V,X]=s(()=>"openai"===R?"openai":"anthropic"),[Y,q]=s(()=>"setup-token"===y||"claudeai"===R),[H,Z]=s(!1),[J,Q]=s(!1),ee=d().columns-37-1,[oe,re]=s(""),[te,ie]=s(0),[ne,ae]=s(""),[se,le]=s(0),[ce,de]=s(""),[ue,pe]=s(""),[me,he]=s(""),[ge,fe]=s(0),[_e,ve]=s(0),[Ce,ye]=s(0);n(()=>{"claudeai"===R?l("tengu_oauth_claudeai_forced",{}):"console"===R&&l("tengu_oauth_console_forced",{})},[R]),n(()=>{if("about_to_retry"===L.state){const e=setTimeout(W,1e3,L.nextState);return()=>clearTimeout(e)}},[L]),f("confirm:yes",()=>{l("tengu_oauth_success",{loginWithClaudeAi:Y}),r(V)},{context:"Confirmation",isActive:"success"===L.state&&"setup-token"!==y}),n(()=>{if("success"===L.state&&!process.stdin.isTTY){const e=setTimeout(()=>{l("tengu_oauth_success",{loginWithClaudeAi:Y}),r(V)},800);return()=>clearTimeout(e)}},[L.state,V,Y,r]),f("confirm:yes",()=>{W({state:"idle"})},{context:"Confirmation",isActive:"platform_setup"===L.state}),f("confirm:yes",()=>{ke()},{context:"Confirmation",isActive:"provider_google_setup"===L.state}),f("confirm:yes",()=>{"error"===L.state&&L.toRetry&&(B(""),W({state:"about_to_retry",nextState:L.toRetry}))},{context:"Confirmation",isActive:"error"===L.state&&!!L.toRetry}),f("cancel",()=>{W({state:"idle"})},{context:"Confirmation",isActive:"provider_api_key_input"===L.state||"provider_local_setup"===L.state||"provider_google_setup"===L.state||"error"===L.state}),n(()=>{"c"===G&&"waiting_for_login"===L.state&&H&&!J&&(u(L.url).then(e=>{e&&process.stdout.write(e),Q(!0),setTimeout(Q,2e3,!1)}),B(""))},[G,L,H,J]);const be=i(async(e,o)=>{const t=e.trim();if(t)try{await P(o,t),re(""),ie(0);const e=w(o).label;v({message:`API key de ${e} guardada`,notificationType:"auth_success"},K),r(o)}catch(e){S(e),W({state:"error",message:e.message,toRetry:{state:"provider_api_key_input",provider:o}})}else W({state:"error",message:"Debes ingresar una API key.",toRetry:{state:"provider_api_key_input",provider:o}})},[r,K]),Ae=i((e,o)=>{const t=e.trim();if(t)try{const e=T(o,t);ae(e),le(0),v({message:`URL de ${w(o).label} guardada`,notificationType:"auth_success"},K),r(o)}catch(e){S(e),W({state:"error",message:e.message,toRetry:{state:"provider_local_setup",provider:o}})}else W({state:"error",message:"Debes ingresar una URL para Ollama.",toRetry:{state:"provider_local_setup",provider:o}})},[r,K]),ke=(i((e,o)=>{if("custom_provider_wizard"===L.state)if("api_key"===e){if(!o.trim())return void W({state:"error",message:"La API key no puede estar vacia.",toRetry:L});W({...L,apiKey:o.trim(),step:"endpoint"})}else if("endpoint"===e){const e=o.trim();if(e&&!e.startsWith("http"))return void W({state:"error",message:"La URL debe empezar con http:// o https://.",toRetry:L});W({...L,endpoint:e||("custom-openai"===L.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1"),step:"model"})}else if("model"===e){o.trim();const e=L.endpoint||("custom-openai"===L.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1");P(L.provider,L.apiKey).then(()=>{T(L.provider,e),v({message:`Configuracion de ${w(L.provider).label} guardada`,notificationType:"auth_success"},K),r(L.provider)}).catch(e=>{S(e),W({state:"error",message:e.message,toRetry:L})})}},[r,L,K]),i(async()=>{W({state:"provider_google_auth_running"});try{if(await b())return void r("gemini-google");const e=await O();k(e);if(!await b())return v({message:"OAuth de Gemini guardado; Code Assist no valido el proyecto de cuota",notificationType:"auth_success"},K),void r("gemini-google");v({message:"Credenciales de Gemini Google listas",notificationType:"auth_success"},K),r("gemini-google")}catch(e){S(e),W({state:"error",message:e.message,toRetry:{state:"provider_google_setup"}})}},[r,K])),Pe=i(async()=>{try{l("tengu_oauth_flow_start",{loginWithClaudeAi:Y,provider:V});const e=await F.startOAuthFlow(async e=>{W({state:"waiting_for_login",url:e}),setTimeout(Z,3e3,!0)},{loginWithClaudeAi:Y,provider:V,inferenceOnly:"setup-token"===y,expiresIn:"setup-token"===y?31536e3:void 0,orgUUID:U}).catch(e=>{const o=e.message.includes("Token exchange failed"),r=_(e),t=F.getPort(),i="openai"===V&&t?formatOAuthDebugDetails(V,t):"";throw W({state:"error",message:r??(o?"No se pudo intercambiar el codigo de autorizacion por el token de acceso. Intentalo de nuevo."+(i?`\n${i}`:""):e.message),toRetry:"setup-token"===y?{state:"ready_to_start"}:{state:"idle"}}),l("tengu_oauth_token_exchange_error",{error:e.message,ssl_error:null!==r}),e});if("setup-token"===y)W({state:"success",token:e.accessToken});else{W({state:"creating_api_key"});const o=D?I("openai"===V?"openai":"anthropic",D):void 0;if(await c(e,V,o?.id),"anthropic"===V){const e=await x();if(!e.valid)throw new Error(e.message)}W({state:"success"}),v({message:"openai"===V?"Inicio de sesión con OpenAI / Codex completado":"Inicio de sesión en Context Code completado",notificationType:"auth_success"},K)}}catch(e){const o=e.message,r=_(e),t=F.getPort(),i="openai"===V&&t?formatOAuthDebugDetails(V,t):"";W({state:"error",message:r??("openai"===V&&i&&!o.includes("redirect_uri=")?`${o}\n${i}`:o),toRetry:{state:"setup-token"===y?"ready_to_start":"idle"}}),l("tengu_oauth_error",{error:o,ssl_error:null!==r})}},[V,F,Z,Y,y,U,K]),xe=a(!1);return n(()=>{"ready_to_start"!==L.state||xe.current||(xe.current=!0,process.nextTick((e,o)=>{e(),o.current=!1},Pe,xe))},[L.state,Pe]),n(()=>{if("setup-token"===y&&"success"===L.state){const e=setTimeout((e,o)=>{l("tengu_oauth_success",{loginWithClaudeAi:e}),o(V)},500,Y,r,V);return()=>clearTimeout(e)}},[y,L,Y,r,V]),n(()=>()=>{F.cleanup()},[F]),e(m,{flexDirection:"column",gap:1,children:["waiting_for_login"===L.state&&H&&e(m,{flexDirection:"column",gap:1,paddingBottom:1,children:[e(m,{paddingX:1,children:[e(g,{dimColor:!0,children:["Browser didn't open? Use the url below to sign in"," "]}),o(g,J?{color:"success",children:"(Copied!)"}:{dimColor:!0,children:o(j,{shortcut:"c",action:"copiar",parens:!0})})]}),o(h,{url:L.url,children:o(g,{dimColor:!0,children:L.url})})]},"urlToCopy"),"setup-token"===y&&"success"===L.state&&L.token&&e(m,{flexDirection:"column",gap:1,paddingTop:1,children:[o(g,{color:"success",children:"✓ Long-lived authentication token created successfully!"}),e(m,{flexDirection:"column",gap:1,children:[o(g,{children:"Your OAuth token (valid for 1 year):"}),o(g,{color:"warning",children:L.token}),o(g,{dimColor:!0,children:"Store this token securely. You won't be able to see it again."}),o(g,{dimColor:!0,children:"Use this token by setting: export CONTEXT_CODE_OAUTH_TOKEN=<token>"})]})]},"tokenOutput"),o(m,{paddingLeft:1,flexDirection:"column",gap:1,children:o(OAuthStatusMessage,{oauthStatus:L,oauthProvider:V,mode:y,startingMessage:t,forcedMethodMessage:E,showPastePrompt:H,pastedCode:G,setPastedCode:B,cursorOffset:N,setCursorOffset:$,textInputColumns:ee,handleSubmitCode:async function(e,o){try{const[r,t]=e.split("#");if(!r||!t)return void W({state:"error",message:"Codigo invalido. Asegurate de copiar el codigo completo",toRetry:{state:"waiting_for_login",url:o}});l("tengu_oauth_manual_entry",{}),F.handleManualAuthCodeInput({authorizationCode:r,state:t})}catch(e){S(e),W({state:"error",message:e.message,toRetry:{state:"waiting_for_login",url:o}})}},setOAuthStatus:W,setLoginWithClaudeAi:q,setOAuthProvider:X,providerApiKey:oe,setProviderApiKey:re,providerApiKeyCursorOffset:te,setProviderApiKeyCursorOffset:ie,handleProviderApiKeySubmit:be,providerBaseUrl:ne,setProviderBaseUrlInput:ae,providerBaseUrlCursorOffset:se,setProviderBaseUrlCursorOffset:le,handleProviderBaseUrlSubmit:Ae,onDone:r})})]})}function OAuthStatusMessage(i){const n=t(68),{oauthStatus:a,oauthProvider:s,mode:c,startingMessage:d,forcedMethodMessage:u,showPastePrompt:p,pastedCode:f,setPastedCode:_,cursorOffset:v,setCursorOffset:C,textInputColumns:y,handleSubmitCode:b,setOAuthStatus:k,setLoginWithClaudeAi:P,setOAuthProvider:x,providerApiKey:O,setProviderApiKey:I,providerApiKeyCursorOffset:S,setProviderApiKeyCursorOffset:T,handleProviderApiKeySubmit:z,providerBaseUrl:j,setProviderBaseUrlInput:E,providerBaseUrlCursorOffset:L,setProviderBaseUrlCursorOffset:W,handleProviderBaseUrlSubmit:G,onDone:B}=i;switch(a.state){case"idle":{const r=d||"Context Code puede usarse con tu suscripción de Claude, la facturación de Anthropic Console o OpenAI / Codex OAuth.";let t,i,a,s,c,u,p;return n[0]!==r?(t=o(g,{bold:!0,children:r}),n[0]=r,n[1]=t):t=n[1],n[2]===Symbol.for("react.memo_cache_sentinel")?(i=o(g,{children:"Selecciona el metodo de acceso:"}),n[2]=i):i=n[2],n[3]===Symbol.for("react.memo_cache_sentinel")?(a={label:e(g,{children:["Claude account with subscription ·"," ",o(g,{dimColor:!0,children:"Pro, Max, Team, or Enterprise"}),!1,"\n"]}),value:"claudeai"},n[3]=a):a=n[3],n[4]===Symbol.for("react.memo_cache_sentinel")?(s={label:e(g,{children:["Anthropic Console account ·"," ",o(g,{dimColor:!0,children:"API usage billing"}),"\n"]}),value:"console"},n[4]=s):s=n[4],n[5]===Symbol.for("react.memo_cache_sentinel")?(c=[a,s,{label:e(g,{children:["Cuenta de OpenAI / Codex ·"," ",o(g,{dimColor:!0,children:"Login OAuth"}),"\n"]}),value:"openai"},{label:e(g,{children:["OpenRouter ·"," ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"openrouter"},{label:e(g,{children:["Ollama ·"," ",o(g,{dimColor:!0,children:"Servidor local compatible"}),"\n"]}),value:"ollama"},{label:e(g,{children:["Gemini API - ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"gemini-api"},{label:e(g,{children:["Gemini Google - ",o(g,{dimColor:!0,children:"OAuth/ADC de Google"}),"\n"]}),value:"gemini-google"},{label:e(g,{children:["Z.AI ·"," ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"zai"},{label:e(g,{children:["MiniMax ·"," ",o(g,{dimColor:!0,children:"API key / Anthropic-compatible"}),"\n"]}),value:"minimax"},{label:e(g,{children:["NVIDIA API ·"," ",o(g,{dimColor:!0,children:"API key / build.nvidia.com"}),"\n"]}),value:"nvidia"},{label:e(g,{children:["DeepSeek ·"," ",o(g,{dimColor:!0,children:"API key / contexto 1M (V4)"}),"\n"]}),value:"deepseek"},{label:e(g,{children:["Custom OpenAI ·"," ",o(g,{dimColor:!0,children:"Wizard API key + endpoint"}),"\n"]}),value:"custom-openai"},{label:e(g,{children:["Custom Anthropic ·"," ",o(g,{dimColor:!0,children:"Wizard API key + endpoint"}),"\n"]}),value:"custom-anthropic"}],n[5]=c):c=n[5],n[6]!==P||n[7]!==k||n[8]!==x||n[65]!==B?(u=o(m,{children:o(M,{options:sortLoginProviderOptions(c),onChange:e=>{"platform"===e?(l("tengu_oauth_platform_selected",{}),k({state:"platform_setup"})):"openai"===e?(l("tengu_oauth_openai_selected",{}),x("openai"),P(!1),k({state:"ready_to_start"})):"openrouter"===e?k({state:"provider_api_key_input",provider:"openrouter"}):"gemini-api"===e||"zai"===e||"minimax"===e||"nvidia"===e||"deepseek"===e?k({state:"provider_api_key_input",provider:e}):"gemini-google"===e?k({state:"provider_google_setup"}):"ollama"===e||"ollama-cloud"===e?(E(D(e)),W(0),k({state:"provider_local_setup",provider:e})):"custom-openai"===e||"custom-anthropic"===e?k({state:"custom_provider_wizard",provider:e,step:"api_key",apiKey:"",endpoint:"custom-openai"===e?"https://api.openai.com/v1":"https://api.anthropic.com/v1",model:""}):(x("anthropic"),k({state:"ready_to_start"}),"claudeai"===e?(l("tengu_oauth_claudeai_selected",{}),P(!0)):(l("tengu_oauth_console_selected",{}),P(!1)))}})}),n[6]=P,n[7]=k,n[8]=x,n[65]=B,n[66]=u):u=n[66],n[10]!==t||n[11]!==u?(p=e(m,{flexDirection:"column",gap:1,marginTop:1,children:[t,i,u]}),n[10]=t,n[11]=u,n[12]=p):p=n[12],p}case"provider_api_key_input":{let r,t,i,s;if(n[50]!==a.provider?(r=e(g,{bold:!0,children:["Ingresa la API key de ",w(a.provider).label]}),n[50]=a.provider,n[51]=r):r=n[51],n[52]!==a.provider){const r=w(a.provider);t=e(m,{flexDirection:"column",gap:0,children:[o(g,{dimColor:!0,children:r.description}),e(g,{dimColor:!0,children:["Siguiente paso: ",r.setup.nextStep]})]}),n[52]=a.provider,n[53]=t}else t=n[53];return n[54]!==O||n[55]!==S||n[56]!==I||n[57]!==T||n[58]!==y||n[59]!==z?(i=e(m,{children:[o(g,{children:"API key > "}),o(U,{value:O,onChange:I,onSubmit:e=>z(e,a.provider),cursorOffset:S,onChangeCursorOffset:T,columns:y,mask:"*"})]}),n[54]=O,n[55]=S,n[56]=I,n[57]=T,n[58]=y,n[59]=z,n[60]=i):i=n[60],n[61]!==r||n[62]!==t||n[63]!==i?(s=e(m,{flexDirection:"column",gap:1,children:[r,t,i]}),n[61]=r,n[62]=t,n[63]=i,n[64]=s):s=n[64],s}case"provider_local_setup":{const r=w(a.provider);return e(m,{flexDirection:"column",gap:1,children:[o(g,{bold:!0,children:r.label}),o(g,{dimColor:!0,children:r.setup.intro}),o(g,{dimColor:!0,children:r.setup.nextStep}),o(g,{children:"URL del servidor > "}),o(m,{children:o(U,{value:j,onChange:E,onSubmit:e=>G(e,a.provider),cursorOffset:L,onChangeCursorOffset:W,columns:y})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la URL y continuar."]})]})}case"provider_google_setup":return e(m,{flexDirection:"column",gap:1,children:[o(g,{bold:!0,children:"Gemini Google OAuth"}),o(g,{dimColor:!0,children:"Context Code usara el flujo OAuth compatible con Gemini CLI y abrira Google en el navegador."}),o(g,{dimColor:!0,children:"Se guardara el access token y refresh token en el perfil activo de Gemini Google."}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para iniciar sesion con tu cuenta de Google."]})]});case"provider_google_auth_running":return e(m,{children:[o(R,{}),o(g,{children:"Abriendo Google OAuth para Gemini..."})]});case"custom_provider_wizard":{const r=w(a.provider),t="custom-openai"===a.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1";if("api_key"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 1/3"]}),e(g,{dimColor:!0,children:["Ingresa tu API key para ",r.label,"."]}),o(g,{children:"API key > "}),o(m,{children:o(U,{value:wizardApiKey,onChange:setWizardApiKey,onSubmit:e=>handleCustomProviderWizardSubmit("api_key",e),cursorOffset:wizardApiKeyCursor,onChangeCursorOffset:setWizardApiKeyCursor,columns:y,mask:"*"})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para continuar al siguiente paso."]})]});if("endpoint"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 2/3"]}),e(g,{dimColor:!0,children:["URL del endpoint (Enter para usar default: ",t,")"]}),o(g,{children:"Endpoint > "}),o(m,{children:o(U,{value:wizardEndpoint,onChange:setWizardEndpoint,onSubmit:e=>handleCustomProviderWizardSubmit("endpoint",e),cursorOffset:wizardEndpointCursor,onChangeCursorOffset:setWizardEndpointCursor,columns:y})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para usar el default o ingresa tu propia URL."]}),o(g,{dimColor:!0,children:"Puedes saltar este paso presionando Enter directamente."})]});if("model"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 3/3"]}),o(g,{dimColor:!0,children:"Modelo a usar (opcional, puedes dejarlo en blanco)."}),o(g,{dimColor:!0,children:"Podras cambiarlo luego con el comando /model."}),o(g,{children:"Modelo > "}),o(m,{children:o(U,{value:wizardModel,onChange:setWizardModel,onSubmit:e=>handleCustomProviderWizardSubmit("model",e),cursorOffset:wizardModelCursor,onChangeCursorOffset:setWizardModelCursor,columns:y})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la configuracion."]})]});break}case"platform_setup":{let r,t,i,a,s,l,c,d;return n[12]===Symbol.for("react.memo_cache_sentinel")?(r=o(g,{bold:!0,children:"Usando plataformas de terceros"}),n[12]=r):r=n[12],n[13]===Symbol.for("react.memo_cache_sentinel")?(t=o(g,{children:"Context Code soporta Amazon Bedrock, Microsoft Foundry y Vertex AI. Configura las variables de entorno requeridas y luego reinicia Context Code."}),i=o(g,{children:"Si formas parte de una organización empresarial, contacta a tu administrador para las instrucciones de configuración."}),n[13]=t,n[14]=i):(t=n[13],i=n[14]),n[15]===Symbol.for("react.memo_cache_sentinel")?(a=o(g,{bold:!0,children:"Documentation:"}),n[15]=a):a=n[15],n[16]===Symbol.for("react.memo_cache_sentinel")?(s=e(g,{children:["· Amazon Bedrock:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]}),n[16]=s):s=n[16],n[17]===Symbol.for("react.memo_cache_sentinel")?(l=e(g,{children:["· Microsoft Foundry:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]}),n[17]=l):l=n[17],n[18]===Symbol.for("react.memo_cache_sentinel")?(c=e(m,{flexDirection:"column",marginTop:1,children:[a,s,l,e(g,{children:["· Vertex AI:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]})]}),n[18]=c):c=n[18],n[19]===Symbol.for("react.memo_cache_sentinel")?(d=e(m,{flexDirection:"column",gap:1,marginTop:1,children:[r,e(m,{flexDirection:"column",gap:1,children:[t,i,c,o(m,{marginTop:1,children:e(g,{dimColor:!0,children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para volver a las opciones de acceso."]})})]})]}),n[19]=d):d=n[19],d}case"waiting_for_login":{let r,t,i,s;return n[20]!==u?(r=u&&o(m,{children:o(g,{dimColor:!0,children:u})}),n[20]=u,n[21]=r):r=n[21],n[22]!==p?(t=!p&&e(m,{children:[o(R,{}),o(g,{children:"Abriendo el navegador para iniciar sesión…"})]}),n[22]=p,n[23]=t):t=n[23],n[24]!==v||n[25]!==b||n[26]!==a.url||n[27]!==f||n[28]!==C||n[29]!==_||n[30]!==p||n[31]!==y?(i=p&&e(m,{children:[o(g,{children:K}),o(U,{value:f,onChange:_,onSubmit:e=>b(e,a.url),cursorOffset:v,onChangeCursorOffset:C,columns:y,mask:"*"})]}),n[24]=v,n[25]=b,n[26]=a.url,n[27]=f,n[28]=C,n[29]=_,n[30]=p,n[31]=y,n[32]=i):i=n[32],n[33]!==r||n[34]!==t||n[35]!==i?(s=e(m,{flexDirection:"column",gap:1,children:[r,t,i]}),n[33]=r,n[34]=t,n[35]=i,n[36]=s):s=n[36],s}case"creating_api_key":{let r;return n[37]===Symbol.for("react.memo_cache_sentinel")?(r=o(m,{flexDirection:"column",gap:1,children:e(m,{children:[o(R,{}),o(g,{children:"Creando API key para Context Code…"})]})}),n[37]=r):r=n[37],r}case"about_to_retry":{let e;return n[38]===Symbol.for("react.memo_cache_sentinel")?(e=o(m,{flexDirection:"column",gap:1,children:o(g,{color:"permission",children:"Reintentando…"})}),n[38]=e):e=n[38],e}case"success":{let t,i;if(n[39]!==c||n[40]!==a.token){const i="openai"===s?"Inicio de sesión en OpenAI / Codex exitoso. Presiona ":"Inicio de sesión exitoso. Presiona ";t="setup-token"===c&&a.token?null:e(r,{children:[A()?.emailAddress?e(g,{dimColor:!0,children:["Sesión iniciada como"," ",o(g,{children:A()?.emailAddress})]}):null,e(g,{color:"success",children:[i,o(g,{bold:!0,children:"Enter"})," para continuar…"]})]}),n[39]=c,n[40]=a.token,n[41]=t}else t=n[41];return n[42]!==t?(i=o(m,{flexDirection:"column",children:t}),n[42]=t,n[43]=i):i=n[43],i}case"error":{let r,t,i;return n[44]!==a.message?(r=e(g,{color:"error",children:["OAuth error: ",a.message]}),n[44]=a.message,n[45]=r):r=n[45],n[46]!==a.toRetry?(t=a.toRetry&&o(m,{marginTop:1,children:e(g,{color:"permission",children:["Press ",o(g,{bold:!0,children:"Enter"})," to retry."]})}),n[46]=a.toRetry,n[47]=t):t=n[47],n[48]!==r||n[49]!==t?(i=e(m,{flexDirection:"column",gap:1,children:[r,t]}),n[48]=r,n[49]=t,n[50]=i):i=n[50],i}default:return null}}
1
+ import{jsxs as e,jsx as o,Fragment as r}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{useCallback as i,useEffect as n,useRef as a,useState as s}from"react";import{logEvent as l}from"../services/analytics/index.js";import{installOAuthTokens as c}from"../cli/handlers/auth.js";import{useTerminalSize as d}from"../hooks/useTerminalSize.js";import{setClipboard as u}from"../ink/termio/osc.js";import{useTerminalNotification as p}from"../ink/useTerminalNotification.js";import{Box as m,Link as h,Text as g}from"../ink.js";import{useKeybinding as f}from"../keybindings/useKeybinding.js";import{getSSLErrorHint as _}from"../services/api/errorUtils.js";import{sendNotification as v}from"../services/notifier.js";import{OAuthService as C}from"../services/oauth/index.js";import{getOAuthRequestDetails as y}from"../services/oauth/client.js";import{checkGeminiGoogleCredentialsValid as A,getOauthAccountInfo as b,saveGeminiGoogleOAuthTokens as k,saveProviderApiKey as x,validateForceLoginOrg as P}from"../utils/auth.js";import{startGeminiCliOAuthFlow as O}from"../services/oauth/geminiCli.js";import{resolveProviderProfile as I}from"../utils/model/providerProfiles.js";import{logError as S}from"../utils/log.js";import{getVisibleProvider as w}from"../utils/model/providerCatalog.js";import{getConfiguredProviderBaseUrl as z,setProviderBaseUrl as D}from"../utils/model/providerBaseUrls.js";import{getSettings_DEPRECATED as M}from"../utils/settings/settings.js";import{Select as T}from"./CustomSelect/select.js";import{KeyboardShortcutHint as E}from"./design-system/KeyboardShortcutHint.js";import{Spinner as j}from"./Spinner.js";import R from"./TextInput.js";const U=["deepseek","minimax","openrouter","zai","nvidia","ollama","openai","claudeai","gemini-google","gemini-api","console"];function sortLoginProviderOptions(e){const o=new Map(U.map((e,o)=>[e,o]));return[...e].sort((e,r)=>(o.get(e.value)??Number.MAX_SAFE_INTEGER)-(o.get(r.value)??Number.MAX_SAFE_INTEGER))}const K="Pega aqui el codigo si se solicita > ";function formatOAuthDebugDetails(e,o){if("openai"!==e)return"";const r=y({provider:e,port:o,isManual:!1});return[`authorize=${r.authorizeUrl}`,`redirect_uri=${r.redirectUri}`,`scope=${r.scopes.join(" ")}`].join("\n")}export function ConsoleOAuthFlow({onDone:r,startingMessage:t,mode:y="login",forceLoginMethod:b,profileName:z}){const T=M()||{},j=b??T.forceLoginMethod,R=T.forceLoginOrgUUID,U="claudeai"===j?"Método de acceso preseleccionado: Plan de suscripción (Context Pro/Max)":"console"===j?"Método de acceso preseleccionado: Facturación por uso de API (Anthropic Console)":"openai"===j?"Método de acceso preseleccionado: OpenAI / Codex OAuth":null,K=p(),[W,L]=s(()=>"setup-token"===y||"claudeai"===j||"console"===j||"openai"===j?{state:"ready_to_start"}:{state:"idle"}),[G,B]=s(""),[N,$]=s(0),[F]=s(()=>new C),[V,X]=s(()=>"openai"===j?"openai":"anthropic"),[Y,q]=s(()=>"setup-token"===y||"claudeai"===j),[H,Z]=s(!1),[J,Q]=s(!1),ee=d().columns-37-1,[oe,re]=s(""),[te,ie]=s(0),[ne,ae]=s(""),[se,le]=s(0),[ce,de]=s(""),[ue,pe]=s(""),[me,he]=s(""),[ge,fe]=s(0),[_e,ve]=s(0),[Ce,ye]=s(0);n(()=>{"claudeai"===j?l("tengu_oauth_claudeai_forced",{}):"console"===j&&l("tengu_oauth_console_forced",{})},[j]),n(()=>{if("about_to_retry"===W.state){const e=setTimeout(L,1e3,W.nextState);return()=>clearTimeout(e)}},[W]),f("confirm:yes",()=>{l("tengu_oauth_success",{loginWithClaudeAi:Y}),r(V)},{context:"Confirmation",isActive:"success"===W.state&&"setup-token"!==y}),n(()=>{if("success"===W.state&&!process.stdin.isTTY){const e=setTimeout(()=>{l("tengu_oauth_success",{loginWithClaudeAi:Y}),r(V)},800);return()=>clearTimeout(e)}},[W.state,V,Y,r]),f("confirm:yes",()=>{L({state:"idle"})},{context:"Confirmation",isActive:"platform_setup"===W.state}),f("confirm:yes",()=>{xe()},{context:"Confirmation",isActive:"provider_google_setup"===W.state}),f("confirm:yes",()=>{"error"===W.state&&W.toRetry&&(B(""),L({state:"about_to_retry",nextState:W.toRetry}))},{context:"Confirmation",isActive:"error"===W.state&&!!W.toRetry}),f("cancel",()=>{L({state:"idle"})},{context:"Confirmation",isActive:"provider_api_key_input"===W.state||"provider_local_setup"===W.state||"provider_google_setup"===W.state||"error"===W.state}),n(()=>{"c"===G&&"waiting_for_login"===W.state&&H&&!J&&(u(W.url).then(e=>{e&&process.stdout.write(e),Q(!0),setTimeout(Q,2e3,!1)}),B(""))},[G,W,H,J]);const Ae=i(async(e,o)=>{const t=e.trim();if(t)try{await x(o,t),re(""),ie(0);const e=w(o).label;v({message:`API key de ${e} guardada`,notificationType:"auth_success"},K),r(o)}catch(e){S(e),L({state:"error",message:e.message,toRetry:{state:"provider_api_key_input",provider:o}})}else L({state:"error",message:"Debes ingresar una API key.",toRetry:{state:"provider_api_key_input",provider:o}})},[r,K]),be=i((e,o)=>{const t=e.trim();if(t)try{const e=D(o,t);ae(e),le(0),v({message:`URL de ${w(o).label} guardada`,notificationType:"auth_success"},K),r(o)}catch(e){S(e),L({state:"error",message:e.message,toRetry:{state:"provider_local_setup",provider:o}})}else L({state:"error",message:"Debes ingresar una URL para Ollama.",toRetry:{state:"provider_local_setup",provider:o}})},[r,K]),ke=i((e,o)=>{if("custom_provider_wizard"===W.state)if("api_key"===e){if(!o.trim())return void L({state:"error",message:"La API key no puede estar vacia.",toRetry:W});L({...W,apiKey:o.trim(),step:"endpoint"})}else if("endpoint"===e){const e=o.trim();if(e&&!e.startsWith("http"))return void L({state:"error",message:"La URL debe empezar con http:// o https://.",toRetry:W});L({...W,endpoint:e||("custom-openai"===W.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1"),step:"model"})}else if("model"===e){o.trim();const e=W.endpoint||("custom-openai"===W.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1");x(W.provider,W.apiKey).then(()=>{D(W.provider,e),v({message:`Configuracion de ${w(W.provider).label} guardada`,notificationType:"auth_success"},K),r(W.provider)}).catch(e=>{S(e),L({state:"error",message:e.message,toRetry:W})})}},[r,W,K]),xe=i(async()=>{L({state:"provider_google_auth_running"});try{if(await A())return void r("gemini-google");const e=await O();k(e);if(!await A())return v({message:"OAuth de Gemini guardado; Code Assist no valido el proyecto de cuota",notificationType:"auth_success"},K),void r("gemini-google");v({message:"Credenciales de Gemini Google listas",notificationType:"auth_success"},K),r("gemini-google")}catch(e){S(e),L({state:"error",message:e.message,toRetry:{state:"provider_google_setup"}})}},[r,K]),Pe=i(async()=>{try{l("tengu_oauth_flow_start",{loginWithClaudeAi:Y,provider:V});const e=await F.startOAuthFlow(async e=>{L({state:"waiting_for_login",url:e}),setTimeout(Z,3e3,!0)},{loginWithClaudeAi:Y,provider:V,inferenceOnly:"setup-token"===y,expiresIn:"setup-token"===y?31536e3:void 0,orgUUID:R}).catch(e=>{const o=e.message.includes("Token exchange failed"),r=_(e),t=F.getPort(),i="openai"===V&&t?formatOAuthDebugDetails(V,t):"";throw L({state:"error",message:r??(o?"No se pudo intercambiar el codigo de autorizacion por el token de acceso. Intentalo de nuevo."+(i?`\n${i}`:""):e.message),toRetry:"setup-token"===y?{state:"ready_to_start"}:{state:"idle"}}),l("tengu_oauth_token_exchange_error",{error:e.message,ssl_error:null!==r}),e});if("setup-token"===y)L({state:"success",token:e.accessToken});else{L({state:"creating_api_key"});const o=z?I("openai"===V?"openai":"anthropic",z):void 0;if(await c(e,V,o?.id),"anthropic"===V){const e=await P();if(!e.valid)throw new Error(e.message)}L({state:"success"}),v({message:"openai"===V?"Inicio de sesión con OpenAI / Codex completado":"Inicio de sesión en Context Code completado",notificationType:"auth_success"},K)}}catch(e){const o=e.message,r=_(e),t=F.getPort(),i="openai"===V&&t?formatOAuthDebugDetails(V,t):"";L({state:"error",message:r??("openai"===V&&i&&!o.includes("redirect_uri=")?`${o}\n${i}`:o),toRetry:{state:"setup-token"===y?"ready_to_start":"idle"}}),l("tengu_oauth_error",{error:o,ssl_error:null!==r})}},[V,F,Z,Y,y,R,K]),Oe=a(!1);return n(()=>{"ready_to_start"!==W.state||Oe.current||(Oe.current=!0,process.nextTick((e,o)=>{e(),o.current=!1},Pe,Oe))},[W.state,Pe]),n(()=>{if("setup-token"===y&&"success"===W.state){const e=setTimeout((e,o)=>{l("tengu_oauth_success",{loginWithClaudeAi:e}),o(V)},500,Y,r,V);return()=>clearTimeout(e)}},[y,W,Y,r,V]),n(()=>()=>{F.cleanup()},[F]),e(m,{flexDirection:"column",gap:1,children:["waiting_for_login"===W.state&&H&&e(m,{flexDirection:"column",gap:1,paddingBottom:1,children:[e(m,{paddingX:1,children:[e(g,{dimColor:!0,children:["Browser didn't open? Use the url below to sign in"," "]}),o(g,J?{color:"success",children:"(Copied!)"}:{dimColor:!0,children:o(E,{shortcut:"c",action:"copiar",parens:!0})})]}),o(h,{url:W.url,children:o(g,{dimColor:!0,children:W.url})})]},"urlToCopy"),"setup-token"===y&&"success"===W.state&&W.token&&e(m,{flexDirection:"column",gap:1,paddingTop:1,children:[o(g,{color:"success",children:"✓ Long-lived authentication token created successfully!"}),e(m,{flexDirection:"column",gap:1,children:[o(g,{children:"Your OAuth token (valid for 1 year):"}),o(g,{color:"warning",children:W.token}),o(g,{dimColor:!0,children:"Store this token securely. You won't be able to see it again."}),o(g,{dimColor:!0,children:"Use this token by setting: export CONTEXT_CODE_OAUTH_TOKEN=<token>"})]})]},"tokenOutput"),o(m,{paddingLeft:1,flexDirection:"column",gap:1,children:o(OAuthStatusMessage,{oauthStatus:W,oauthProvider:V,mode:y,startingMessage:t,forcedMethodMessage:U,showPastePrompt:H,pastedCode:G,setPastedCode:B,cursorOffset:N,setCursorOffset:$,textInputColumns:ee,handleSubmitCode:async function(e,o){try{const[r,t]=e.split("#");if(!r||!t)return void L({state:"error",message:"Codigo invalido. Asegurate de copiar el codigo completo",toRetry:{state:"waiting_for_login",url:o}});l("tengu_oauth_manual_entry",{}),F.handleManualAuthCodeInput({authorizationCode:r,state:t})}catch(e){S(e),L({state:"error",message:e.message,toRetry:{state:"waiting_for_login",url:o}})}},setOAuthStatus:L,setLoginWithClaudeAi:q,setOAuthProvider:X,providerApiKey:oe,setProviderApiKey:re,providerApiKeyCursorOffset:te,setProviderApiKeyCursorOffset:ie,handleProviderApiKeySubmit:Ae,providerBaseUrl:ne,setProviderBaseUrlInput:ae,providerBaseUrlCursorOffset:se,setProviderBaseUrlCursorOffset:le,handleProviderBaseUrlSubmit:be,onDone:r,wizardApiKey:ce,setWizardApiKey:de,wizardEndpoint:ue,setWizardEndpoint:pe,wizardModel:me,setWizardModel:he,wizardApiKeyCursor:ge,setWizardApiKeyCursor:fe,wizardEndpointCursor:_e,setWizardEndpointCursor:ve,wizardModelCursor:Ce,setWizardModelCursor:ye,handleCustomProviderWizardSubmit:ke})})]})}function OAuthStatusMessage(i){const n=t(68),{oauthStatus:a,oauthProvider:s,mode:c,startingMessage:d,forcedMethodMessage:u,showPastePrompt:p,pastedCode:f,setPastedCode:_,cursorOffset:v,setCursorOffset:C,textInputColumns:y,handleSubmitCode:A,setOAuthStatus:k,setLoginWithClaudeAi:x,setOAuthProvider:P,providerApiKey:O,setProviderApiKey:I,providerApiKeyCursorOffset:S,setProviderApiKeyCursorOffset:D,handleProviderApiKeySubmit:M,providerBaseUrl:E,setProviderBaseUrlInput:U,providerBaseUrlCursorOffset:W,setProviderBaseUrlCursorOffset:L,handleProviderBaseUrlSubmit:G,onDone:B,wizardApiKey:N,setWizardApiKey:$,wizardEndpoint:F,setWizardEndpoint:V,wizardModel:X,setWizardModel:Y,wizardApiKeyCursor:q,setWizardApiKeyCursor:H,wizardEndpointCursor:Z,setWizardEndpointCursor:J,wizardModelCursor:Q,setWizardModelCursor:ee,handleCustomProviderWizardSubmit:oe}=i;switch(a.state){case"idle":{const r=d||"Context Code puede usarse con tu suscripción de Claude, la facturación de Anthropic Console o OpenAI / Codex OAuth.";let t,i,a,s,c,u,p;return n[0]!==r?(t=o(g,{bold:!0,children:r}),n[0]=r,n[1]=t):t=n[1],n[2]===Symbol.for("react.memo_cache_sentinel")?(i=o(g,{children:"Selecciona el metodo de acceso:"}),n[2]=i):i=n[2],n[3]===Symbol.for("react.memo_cache_sentinel")?(a={label:e(g,{children:["Claude account with subscription ·"," ",o(g,{dimColor:!0,children:"Pro, Max, Team, or Enterprise"}),!1,"\n"]}),value:"claudeai"},n[3]=a):a=n[3],n[4]===Symbol.for("react.memo_cache_sentinel")?(s={label:e(g,{children:["Anthropic Console account ·"," ",o(g,{dimColor:!0,children:"API usage billing"}),"\n"]}),value:"console"},n[4]=s):s=n[4],n[5]===Symbol.for("react.memo_cache_sentinel")?(c=[a,s,{label:e(g,{children:["Cuenta de OpenAI / Codex ·"," ",o(g,{dimColor:!0,children:"Login OAuth"}),"\n"]}),value:"openai"},{label:e(g,{children:["OpenRouter ·"," ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"openrouter"},{label:e(g,{children:["Ollama ·"," ",o(g,{dimColor:!0,children:"Servidor local compatible"}),"\n"]}),value:"ollama"},{label:e(g,{children:["Gemini API - ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"gemini-api"},{label:e(g,{children:["Gemini Google - ",o(g,{dimColor:!0,children:"OAuth/ADC de Google"}),"\n"]}),value:"gemini-google"},{label:e(g,{children:["Z.AI ·"," ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"zai"},{label:e(g,{children:["MiniMax ·"," ",o(g,{dimColor:!0,children:"API key / Anthropic-compatible"}),"\n"]}),value:"minimax"},{label:e(g,{children:["NVIDIA API ·"," ",o(g,{dimColor:!0,children:"API key / build.nvidia.com"}),"\n"]}),value:"nvidia"},{label:e(g,{children:["DeepSeek ·"," ",o(g,{dimColor:!0,children:"API key / contexto 1M (V4)"}),"\n"]}),value:"deepseek"},{label:e(g,{children:["Custom OpenAI ·"," ",o(g,{dimColor:!0,children:"Wizard API key + endpoint"}),"\n"]}),value:"custom-openai"},{label:e(g,{children:["Custom Anthropic ·"," ",o(g,{dimColor:!0,children:"Wizard API key + endpoint"}),"\n"]}),value:"custom-anthropic"}],n[5]=c):c=n[5],n[6]!==x||n[7]!==k||n[8]!==P||n[65]!==B?(u=o(m,{children:o(T,{options:sortLoginProviderOptions(c),onChange:e=>{"platform"===e?(l("tengu_oauth_platform_selected",{}),k({state:"platform_setup"})):"openai"===e?(l("tengu_oauth_openai_selected",{}),P("openai"),x(!1),k({state:"ready_to_start"})):"openrouter"===e?k({state:"provider_api_key_input",provider:"openrouter"}):"gemini-api"===e||"zai"===e||"minimax"===e||"nvidia"===e||"deepseek"===e?k({state:"provider_api_key_input",provider:e}):"gemini-google"===e?k({state:"provider_google_setup"}):"ollama"===e||"ollama-cloud"===e?(U(z(e)),L(0),k({state:"provider_local_setup",provider:e})):"custom-openai"===e||"custom-anthropic"===e?k({state:"custom_provider_wizard",provider:e,step:"api_key",apiKey:"",endpoint:"custom-openai"===e?"https://api.openai.com/v1":"https://api.anthropic.com/v1",model:""}):(P("anthropic"),k({state:"ready_to_start"}),"claudeai"===e?(l("tengu_oauth_claudeai_selected",{}),x(!0)):(l("tengu_oauth_console_selected",{}),x(!1)))}})}),n[6]=x,n[7]=k,n[8]=P,n[65]=B,n[66]=u):u=n[66],n[10]!==t||n[11]!==u?(p=e(m,{flexDirection:"column",gap:1,marginTop:1,children:[t,i,u]}),n[10]=t,n[11]=u,n[12]=p):p=n[12],p}case"provider_api_key_input":{let r,t,i,s;if(n[50]!==a.provider?(r=e(g,{bold:!0,children:["Ingresa la API key de ",w(a.provider).label]}),n[50]=a.provider,n[51]=r):r=n[51],n[52]!==a.provider){const r=w(a.provider);t=e(m,{flexDirection:"column",gap:0,children:[o(g,{dimColor:!0,children:r.description}),e(g,{dimColor:!0,children:["Siguiente paso: ",r.setup.nextStep]})]}),n[52]=a.provider,n[53]=t}else t=n[53];return n[54]!==O||n[55]!==S||n[56]!==I||n[57]!==D||n[58]!==y||n[59]!==M?(i=e(m,{children:[o(g,{children:"API key > "}),o(R,{value:O,onChange:I,onSubmit:e=>M(e,a.provider),cursorOffset:S,onChangeCursorOffset:D,columns:y,mask:"*"})]}),n[54]=O,n[55]=S,n[56]=I,n[57]=D,n[58]=y,n[59]=M,n[60]=i):i=n[60],n[61]!==r||n[62]!==t||n[63]!==i?(s=e(m,{flexDirection:"column",gap:1,children:[r,t,i]}),n[61]=r,n[62]=t,n[63]=i,n[64]=s):s=n[64],s}case"provider_local_setup":{const r=w(a.provider);return e(m,{flexDirection:"column",gap:1,children:[o(g,{bold:!0,children:r.label}),o(g,{dimColor:!0,children:r.setup.intro}),o(g,{dimColor:!0,children:r.setup.nextStep}),o(g,{children:"URL del servidor > "}),o(m,{children:o(R,{value:E,onChange:U,onSubmit:e=>G(e,a.provider),cursorOffset:W,onChangeCursorOffset:L,columns:y})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la URL y continuar."]})]})}case"provider_google_setup":return e(m,{flexDirection:"column",gap:1,children:[o(g,{bold:!0,children:"Gemini Google OAuth"}),o(g,{dimColor:!0,children:"Context Code usara el flujo OAuth compatible con Gemini CLI y abrira Google en el navegador."}),o(g,{dimColor:!0,children:"Se guardara el access token y refresh token en el perfil activo de Gemini Google."}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para iniciar sesion con tu cuenta de Google."]})]});case"provider_google_auth_running":return e(m,{children:[o(j,{}),o(g,{children:"Abriendo Google OAuth para Gemini..."})]});case"custom_provider_wizard":{const r=w(a.provider),t="custom-openai"===a.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1";if("api_key"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 1/3"]}),e(g,{dimColor:!0,children:["Ingresa tu API key para ",r.label,"."]}),o(g,{children:"API key > "}),o(m,{children:o(R,{value:N,onChange:$,onSubmit:e=>oe("api_key",e),cursorOffset:q,onChangeCursorOffset:H,columns:y,mask:"*"})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para continuar al siguiente paso."]})]});if("endpoint"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 2/3"]}),e(g,{dimColor:!0,children:["URL del endpoint (Enter para usar default: ",t,")"]}),o(g,{children:"Endpoint > "}),o(m,{children:o(R,{value:F,onChange:V,onSubmit:e=>oe("endpoint",e),cursorOffset:Z,onChangeCursorOffset:J,columns:y})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para usar el default o ingresa tu propia URL."]}),o(g,{dimColor:!0,children:"Puedes saltar este paso presionando Enter directamente."})]});if("model"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 3/3"]}),o(g,{dimColor:!0,children:"Modelo a usar (opcional, puedes dejarlo en blanco)."}),o(g,{dimColor:!0,children:"Podras cambiarlo luego con el comando /model."}),o(g,{children:"Modelo > "}),o(m,{children:o(R,{value:X,onChange:Y,onSubmit:e=>oe("model",e),cursorOffset:Q,onChangeCursorOffset:ee,columns:y})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la configuracion."]})]});break}case"platform_setup":{let r,t,i,a,s,l,c,d;return n[12]===Symbol.for("react.memo_cache_sentinel")?(r=o(g,{bold:!0,children:"Usando plataformas de terceros"}),n[12]=r):r=n[12],n[13]===Symbol.for("react.memo_cache_sentinel")?(t=o(g,{children:"Context Code soporta Amazon Bedrock, Microsoft Foundry y Vertex AI. Configura las variables de entorno requeridas y luego reinicia Context Code."}),i=o(g,{children:"Si formas parte de una organización empresarial, contacta a tu administrador para las instrucciones de configuración."}),n[13]=t,n[14]=i):(t=n[13],i=n[14]),n[15]===Symbol.for("react.memo_cache_sentinel")?(a=o(g,{bold:!0,children:"Documentation:"}),n[15]=a):a=n[15],n[16]===Symbol.for("react.memo_cache_sentinel")?(s=e(g,{children:["· Amazon Bedrock:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]}),n[16]=s):s=n[16],n[17]===Symbol.for("react.memo_cache_sentinel")?(l=e(g,{children:["· Microsoft Foundry:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]}),n[17]=l):l=n[17],n[18]===Symbol.for("react.memo_cache_sentinel")?(c=e(m,{flexDirection:"column",marginTop:1,children:[a,s,l,e(g,{children:["· Vertex AI:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]})]}),n[18]=c):c=n[18],n[19]===Symbol.for("react.memo_cache_sentinel")?(d=e(m,{flexDirection:"column",gap:1,marginTop:1,children:[r,e(m,{flexDirection:"column",gap:1,children:[t,i,c,o(m,{marginTop:1,children:e(g,{dimColor:!0,children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para volver a las opciones de acceso."]})})]})]}),n[19]=d):d=n[19],d}case"waiting_for_login":{let r,t,i,s;return n[20]!==u?(r=u&&o(m,{children:o(g,{dimColor:!0,children:u})}),n[20]=u,n[21]=r):r=n[21],n[22]!==p?(t=!p&&e(m,{children:[o(j,{}),o(g,{children:"Abriendo el navegador para iniciar sesión…"})]}),n[22]=p,n[23]=t):t=n[23],n[24]!==v||n[25]!==A||n[26]!==a.url||n[27]!==f||n[28]!==C||n[29]!==_||n[30]!==p||n[31]!==y?(i=p&&e(m,{children:[o(g,{children:K}),o(R,{value:f,onChange:_,onSubmit:e=>A(e,a.url),cursorOffset:v,onChangeCursorOffset:C,columns:y,mask:"*"})]}),n[24]=v,n[25]=A,n[26]=a.url,n[27]=f,n[28]=C,n[29]=_,n[30]=p,n[31]=y,n[32]=i):i=n[32],n[33]!==r||n[34]!==t||n[35]!==i?(s=e(m,{flexDirection:"column",gap:1,children:[r,t,i]}),n[33]=r,n[34]=t,n[35]=i,n[36]=s):s=n[36],s}case"creating_api_key":{let r;return n[37]===Symbol.for("react.memo_cache_sentinel")?(r=o(m,{flexDirection:"column",gap:1,children:e(m,{children:[o(j,{}),o(g,{children:"Creando API key para Context Code…"})]})}),n[37]=r):r=n[37],r}case"about_to_retry":{let e;return n[38]===Symbol.for("react.memo_cache_sentinel")?(e=o(m,{flexDirection:"column",gap:1,children:o(g,{color:"permission",children:"Reintentando…"})}),n[38]=e):e=n[38],e}case"success":{let t,i;if(n[39]!==c||n[40]!==a.token){const i="openai"===s?"Inicio de sesión en OpenAI / Codex exitoso. Presiona ":"Inicio de sesión exitoso. Presiona ";t="setup-token"===c&&a.token?null:e(r,{children:[b()?.emailAddress?e(g,{dimColor:!0,children:["Sesión iniciada como"," ",o(g,{children:b()?.emailAddress})]}):null,e(g,{color:"success",children:[i,o(g,{bold:!0,children:"Enter"})," para continuar…"]})]}),n[39]=c,n[40]=a.token,n[41]=t}else t=n[41];return n[42]!==t?(i=o(m,{flexDirection:"column",children:t}),n[42]=t,n[43]=i):i=n[43],i}case"error":{let r,t,i;return n[44]!==a.message?(r=e(g,{color:"error",children:["OAuth error: ",a.message]}),n[44]=a.message,n[45]=r):r=n[45],n[46]!==a.toRetry?(t=a.toRetry&&o(m,{marginTop:1,children:e(g,{color:"permission",children:["Press ",o(g,{bold:!0,children:"Enter"})," to retry."]})}),n[46]=a.toRetry,n[47]=t):t=n[47],n[48]!==r||n[49]!==t?(i=e(m,{flexDirection:"column",gap:1,children:[r,t]}),n[48]=r,n[49]=t,n[50]=i):i=n[50],i}default:return null}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iaforged/context-code",
3
- "version": "2.2.4",
3
+ "version": "2.2.6",
4
4
  "description": "Context Code es un asistente de desarrollo para la terminal. Puede revisar tu proyecto, editar archivos, ejecutar comandos y apoyarte en tareas reales de programacion.",
5
5
  "author": "Context AI",
6
6
  "license": "MIT",