@iaforged/context-code 2.3.7 → 2.3.9
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.
- package/dist/src/cli/handlers/auth.js +1 -1
- package/dist/src/commands/agent-spawn/agentSpawn.js +1 -0
- package/dist/src/commands/agent-spawn/index.js +1 -0
- package/dist/src/commands/login/login.js +1 -1
- package/dist/src/commands/skills/skills.js +1 -1
- package/dist/src/commands/swarm-init/index.js +1 -1
- package/dist/src/commands/swarm-init/swarmInit.js +1 -1
- package/dist/src/commands/swarm-list-teams/index.js +1 -0
- package/dist/src/commands/swarm-list-teams/swarmListTeams.js +1 -0
- package/dist/src/commands.js +1 -1
- package/dist/src/components/ConsoleOAuthFlow.js +1 -1
- package/dist/src/components/agents/agentFileUtils.js +1 -1
- package/dist/src/components/agents/new-agent-creation/wizard-steps/LocationStep.js +1 -1
- package/dist/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.js +1 -1
- package/dist/src/constants/oauth.js +1 -1
- package/dist/src/core/agents/blueprints.js +1 -1
- package/dist/src/core/agents/teams.js +1 -0
- package/dist/src/projectOnboardingState.js +1 -1
- package/dist/src/screens/Doctor.js +1 -1
- package/dist/src/services/api/openai.js +1 -1
- package/dist/src/services/oauth/copilotDevice.js +1 -0
- package/dist/src/skills/loadSkillsDir.js +1 -1
- package/dist/src/tools/AgentTool/agentMemory.js +1 -1
- package/dist/src/utils/auth.js +1 -1
- package/dist/src/utils/claudemd.js +1 -1
- package/dist/src/utils/cronTasks.js +1 -1
- package/dist/src/utils/cronTasksLock.js +1 -1
- package/dist/src/utils/doctorDiagnostic.js +1 -1
- package/dist/src/utils/envUtils.js +1 -1
- package/dist/src/utils/hooks/skillImprovement.js +1 -1
- package/dist/src/utils/markdownConfigLoader.js +1 -1
- package/dist/src/utils/metaMcp/common.js +1 -0
- package/dist/src/utils/metaMcp/mcpServer.js +1 -0
- package/dist/src/utils/metaMcp/server/index.js +1 -0
- package/dist/src/utils/metaMcp/setup.js +1 -0
- package/dist/src/utils/model/model.js +1 -1
- package/dist/src/utils/model/modelOptions.js +1 -1
- package/dist/src/utils/model/providerCatalog.js +1 -1
- package/dist/src/utils/model/providerModels.js +1 -1
- package/dist/src/utils/model/providerProfiles.js +1 -1
- package/dist/src/utils/model/providerProfilesDb.js +1 -1
- package/dist/src/utils/model/providers.js +1 -1
- package/dist/src/utils/nativeInstaller/installer.js +1 -1
- package/dist/src/utils/permissions/filesystem.js +1 -1
- package/dist/src/utils/plugins/addDirPluginSettings.js +1 -1
- package/dist/src/utils/sandbox/sandbox-adapter.js +1 -1
- package/dist/src/utils/settings/settings.js +1 -1
- package/dist/src/utils/skills/skillChangeDetector.js +1 -1
- package/dist/src/utils/worktree.js +1 -1
- package/dist/src/whatsapp/config.js +1 -1
- package/dist/webapp/chunk-VAB2VXFI.js +1 -1
- package/dist/webapp/main-MTQLKGXD.js +1 -1
- package/dist/webapp/polyfills-7R4CRVNH.js +1 -1
- package/package.json +41 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
import{clearAuthRelatedCaches as e,performLogout as o}from"../../commands/logout/logout.js";import{setMainLoopModelOverride as i}from"../../bootstrap/state.js";import{getSecureStorage as t}from"../../utils/secureStorage/index.js";import{logEvent as r}from"../../services/analytics/index.js";import{getSSLErrorHint as s}from"../../services/api/errorUtils.js";import{fetchAndStoreClaudeCodeFirstTokenDate as a}from"../../services/api/firstTokenDate.js";import{createAndStoreApiKey as n,fetchAndStoreUserRoles as c,refreshOAuthToken as l,shouldUseClaudeAIAuth as p,storeOAuthAccountInfo as u}from"../../services/oauth/client.js";import{getOauthProfileFromOauthToken as d}from"../../services/oauth/getOauthProfile.js";import{OAuthService as m}from"../../services/oauth/index.js";import{startGeminiCliOAuthFlow as g}from"../../services/oauth/geminiCli.js";import{clearOAuthTokenCache as f,getAnthropicApiKeyWithSource as h,getAuthTokenSource as v,getClaudeAIOAuthTokens as w,getOpenAIOAuthTokens as _,getOauthAccountInfo as x,removeApiKey as A,saveOpenAIOAuthTokens as O,saveGeminiGoogleOAuthTokens as E,saveProviderApiKey as y,getSubscriptionType as C,isUsing3PServices as b,saveOAuthTokensIfNeeded as j,validateForceLoginOrg as T,removeProviderScopedCredentials as P,removeProviderApiKey as k}from"../../utils/auth.js";import{saveGlobalConfig as U}from"../../utils/config.js";import{logForDebugging as S}from"../../utils/debug.js";import{isRunningOnHomespace as $}from"../../utils/envUtils.js";import{errorMessage as I}from"../../utils/errors.js";import{logError as z}from"../../utils/log.js";import{getAPIProvider as H}from"../../utils/model/providers.js";import{setStoredActiveProviderPreference as L}from"../../utils/model/providerProfilesDb.js";import{isProfiledProvider as D,setActiveProfileForProvider as N}from"../../utils/model/providerProfiles.js";import{getLastUsedProviderProfile as R,removeProviderProfile as K}from"../../utils/model/providerProfiles.js";import{clearProviderBaseUrl as W,setProviderBaseUrl as B}from"../../utils/model/providerBaseUrls.js";import{getInitialSettings as F}from"../../utils/settings/settings.js";import{jsonStringify as M}from"../../utils/slowOperations.js";import{buildAccountProperties as X,buildAPIProviderProperties as Y}from"../../utils/status.js";export async function installOAuthTokens(o,s="anthropic",l){if(l||await async function(e){const{flushTelemetry:o}=await import("../../utils/telemetry/instrumentation.js");if(await o(),"openai"===e)return void _.cache?.clear?.();await A();const i=t(),r=i.read();if(r){const e=Object.fromEntries(Object.entries(r.providerProfileOauth??{}).filter(([e])=>!e.startsWith("claude/"))),{claudeAiOauth:o,...t}=r,s={...t,providerProfileOauth:e};Object.keys(s).length>0?i.update(s):i.delete()}w.cache?.clear?.(),U(e=>({...e,oauthAccount:void 0}))}(s),"anthropic"===s){const e=o.profile??await d(o.accessToken);e?u({accountUuid:e.account.uuid,emailAddress:e.account.email,organizationUuid:e.organization.uuid,displayName:e.account.display_name||void 0,hasExtraUsageEnabled:e.organization.has_extra_usage_enabled??void 0,billingType:e.organization.billing_type??void 0,subscriptionCreatedAt:e.organization.subscription_created_at??void 0,accountCreatedAt:e.account.created_at}):o.tokenAccount&&u({accountUuid:o.tokenAccount.uuid,emailAddress:o.tokenAccount.emailAddress,organizationUuid:o.tokenAccount.organizationUuid})}const m="openai"===s?O(o,l):j(o,l);if(f(),m.warning&&r("tengu_oauth_storage_warning",{warning:m.warning}),"anthropic"===s&&await c(o.accessToken).catch(e=>S(String(e),{level:"error"})),"anthropic"===s&&p(o.scopes))await a().catch(e=>S(String(e),{level:"error"}));else if("anthropic"===s){if(!await n(o.accessToken))throw new Error("No se pudo crear la API key. El servidor aceptó la solicitud pero no devolvió una clave.")}L("openai"===s?"openai":"claude"),i(void 0),await e()}export async function authLogin({email:e,sso:o,console:i,claudeai:t,provider:a}){i&&t&&(process.stderr.write("Error: --console and --claudeai cannot be used together.\n"),process.exit(1));const n=F(),c=n.forceLoginMethod?"claudeai"===n.forceLoginMethod:!i,u=n.forceLoginOrgUUID,d=a?.trim().toLowerCase(),f=process.env.CONTEXT_CODE_OAUTH_REFRESH_TOKEN??process.env.CLAUDE_CODE_OAUTH_REFRESH_TOKEN;if(f){const e=process.env.CONTEXT_CODE_OAUTH_SCOPES??process.env.CLAUDE_CODE_OAUTH_SCOPES;e||(process.stderr.write('CONTEXT_CODE_OAUTH_SCOPES (legacy: CLAUDE_CODE_OAUTH_SCOPES) is required when using CONTEXT_CODE_OAUTH_REFRESH_TOKEN.\nSet it to the space-separated scopes the refresh token was issued with\n(e.g. "user:inference" or "user:profile user:inference user:sessions:claude_code user:mcp_servers").\n'),process.exit(1));const o=e.split(/\s+/).filter(Boolean);try{r("tengu_login_from_refresh_token",{});const e=await l(f,{scopes:o});await installOAuthTokens(e);const i=await T();i.valid||(process.stderr.write(i.message+"\n"),process.exit(1)),U(e=>e.hasCompletedOnboarding?e:{...e,hasCompletedOnboarding:!0}),r("tengu_oauth_success",{loginWithClaudeAi:p(e.scopes)}),process.stdout.write("Inicio de sesión exitoso.\n"),process.exit(0)}catch(e){z(e);const o=s(e);process.stderr.write(`Error al iniciar sesión: ${I(e)}\n${o?o+"\n":""}`),process.exit(1)}}const h=o?"sso":void 0,v=new m;try{if(r("tengu_oauth_flow_start",{loginWithClaudeAi:c}),"gemini-google"===d){const e=await g();E(e),L("gemini-google"),process.stdout.write("Inicio de sesión exitoso.\n"),process.exit(0)}const o="openai"===d?"openai":"anthropic",i="openai"!==o&&c,t=await v.startOAuthFlow(async e=>{process.stdout.write("Abriendo el navegador para iniciar sesión…\n"),process.stdout.write(`Si el navegador no se abre, visita: ${e}\n`)},{loginWithClaudeAi:i,provider:o,loginHint:e,loginMethod:h,orgUUID:u});if(await installOAuthTokens(t,o),"anthropic"===o){const e=await T();e.valid||(process.stderr.write(e.message+"\n"),process.exit(1))}r("tengu_oauth_success",{loginWithClaudeAi:i}),process.stdout.write("Inicio de sesión exitoso.\n"),process.exit(0)}catch(e){z(e);const o=s(e);process.stderr.write(`Error al iniciar sesión: ${I(e)}\n${o?o+"\n":""}`),process.exit(1)}finally{v.cleanup()}}export async function authStatus(e){const{source:o,hasToken:i}=v(),{source:t}=h(),r=!!process.env.ANTHROPIC_API_KEY&&!$(),s=H(),a=x(),n=C(),c=b(),l=i||"none"!==t||r||c;let p="none";if("openai"===s?p="openai":c?p="third_party":"claude.ai"===o?p="claude.ai":"apiKeyHelper"===o?p="api_key_helper":"none"!==o?p="oauth_token":"ANTHROPIC_API_KEY"===t||r?p="api_key":"/login managed key"===t&&(p="claude.ai"),e.text){const e=[...X(),...Y()];let o=!1;for(const i of e){const e="string"==typeof i.value?i.value:Array.isArray(i.value)?i.value.join(", "):null;null!==e&&"none"!==e&&(o=!0,i.label?process.stdout.write(`${i.label}: ${e}\n`):process.stdout.write(`${e}\n`))}!o&&r&&process.stdout.write("API key: ANTHROPIC_API_KEY\n"),l||process.stdout.write("openai"===s?"Sesión no iniciada. Ejecuta context auth login para autenticarte con OpenAI / Codex.\n":"Sesión no iniciada. Ejecuta context auth login para autenticarte.\n")}else{const e="none"!==t?t:r?"ANTHROPIC_API_KEY":null,o={loggedIn:l,authMethod:p,apiProvider:s};e&&(o.apiKeySource=e),"claude.ai"===p&&(o.email=a?.emailAddress??null,o.orgId=a?.organizationUuid??null,o.orgName=a?.organizationName??null,o.subscriptionType=n??null),process.stdout.write(M(o,null,2)+"\n")}process.exit(l?0:1)}export async function authLogout(){try{await o({clearOnboarding:!1})}catch{process.stderr.write("Error al cerrar sesión.\n"),process.exit(1)}process.stdout.write(`Sesión cerrada exitosamente de tu cuenta ${function(){const e=H();return"openai"===e?"OpenAI / Codex":"bedrock"===e?"AWS Bedrock":"vertex"===e?"Google Vertex AI":"foundry"===e?"Microsoft Foundry":"Anthropic"}()}.\n`),process.exit(0)}export async function authProviderApiKey(e){const o=e.provider.trim().toLowerCase(),i=["openrouter","ollama-cloud","gemini-api","zai","minimax","nvidia","deepseek","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi","openai"];i.includes(o)||(process.stderr.write(`Provider no soportado para API key: ${o}. Soportados: ${i.join(", ")}\n`),process.exit(1));const t=e.profile?.trim();t&&D(o)&&N(o,t),await y(o,e.apiKey),L(o),process.stdout.write(`API key guardada para ${o}${t?` (perfil ${t})`:""}.\n`),process.exit(0)}export async function authProviderBaseUrl(e){const o=e.provider.trim().toLowerCase(),i=["ollama","ollama-cloud","lmstudio","openrouter","gemini-google","zai","minimax","nvidia","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi"];i.includes(o)||(process.stderr.write(`Provider no soportado para base URL: ${o}. Soportados: ${i.join(", ")}\n`),process.exit(1));const t=e.profile?.trim();t&&D(o)&&N(o,t);const r=B(o,e.baseUrl);L(o),process.stdout.write(`Base URL guardada para ${o}: ${r}${t?` (perfil ${t})`:""}.\n`),process.exit(0)}export async function authSetProviderPreference(e){const o=e.provider.trim().toLowerCase();L(o),process.stdout.write(`Provider activo establecido a ${o}.\n`),process.exit(0)}export async function authProviderRemove(e){const o=e.provider.trim().toLowerCase();o||(process.stderr.write("Debes indicar un provider.\n"),process.exit(1));const i=o,t=e.profile?.trim();let r=null;if(D(i)){const e=t||R(i)?.name;if(e){const o=K(i,e);o&&(await P(o.id),r=`${o.provider}/${o.name}`)}}["openrouter","ollama-cloud","gemini-api","zai","minimax","nvidia","deepseek","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi","openai"].includes(o)&&await k(o);["ollama","ollama-cloud","lmstudio","openrouter","gemini-google","zai","minimax","nvidia","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi"].includes(o)&&W(o),process.stdout.write(r?`Proveedor eliminado: ${r}.\n`:`Credenciales/base URL limpiadas para ${o}.\n`),process.exit(0)}
|
|
1
|
+
import{clearAuthRelatedCaches as e,performLogout as o}from"../../commands/logout/logout.js";import{setMainLoopModelOverride as i}from"../../bootstrap/state.js";import{getSecureStorage as t}from"../../utils/secureStorage/index.js";import{logEvent as r}from"../../services/analytics/index.js";import{getSSLErrorHint as s}from"../../services/api/errorUtils.js";import{fetchAndStoreClaudeCodeFirstTokenDate as a}from"../../services/api/firstTokenDate.js";import{createAndStoreApiKey as n,fetchAndStoreUserRoles as c,refreshOAuthToken as l,shouldUseClaudeAIAuth as p,storeOAuthAccountInfo as u}from"../../services/oauth/client.js";import{getOauthProfileFromOauthToken as d}from"../../services/oauth/getOauthProfile.js";import{OAuthService as m}from"../../services/oauth/index.js";import{startGeminiCliOAuthFlow as g}from"../../services/oauth/geminiCli.js";import{runCopilotDeviceLogin as f}from"../../services/oauth/copilotDevice.js";import{clearOAuthTokenCache as h,getAnthropicApiKeyWithSource as v,getAuthTokenSource as w,getClaudeAIOAuthTokens as _,getOpenAIOAuthTokens as x,getOauthAccountInfo as A,removeApiKey as O,saveOpenAIOAuthTokens as E,saveGeminiGoogleOAuthTokens as y,saveProviderApiKey as C,getSubscriptionType as b,isUsing3PServices as j,saveOAuthTokensIfNeeded as P,validateForceLoginOrg as T,removeProviderScopedCredentials as k,removeProviderApiKey as U}from"../../utils/auth.js";import{saveGlobalConfig as $}from"../../utils/config.js";import{logForDebugging as S}from"../../utils/debug.js";import{isRunningOnHomespace as I}from"../../utils/envUtils.js";import{errorMessage as z}from"../../utils/errors.js";import{logError as H}from"../../utils/log.js";import{getAPIProvider as D}from"../../utils/model/providers.js";import{setStoredActiveProviderPreference as L}from"../../utils/model/providerProfilesDb.js";import{isProfiledProvider as N,setActiveProfileForProvider as R}from"../../utils/model/providerProfiles.js";import{getLastUsedProviderProfile as K,removeProviderProfile as W}from"../../utils/model/providerProfiles.js";import{clearProviderBaseUrl as B,setProviderBaseUrl as F}from"../../utils/model/providerBaseUrls.js";import{getInitialSettings as M}from"../../utils/settings/settings.js";import{jsonStringify as X}from"../../utils/slowOperations.js";import{buildAccountProperties as Y,buildAPIProviderProperties as G}from"../../utils/status.js";export async function installOAuthTokens(o,s="anthropic",l){if(l||await async function(e){const{flushTelemetry:o}=await import("../../utils/telemetry/instrumentation.js");if(await o(),"openai"===e)return void x.cache?.clear?.();await O();const i=t(),r=i.read();if(r){const e=Object.fromEntries(Object.entries(r.providerProfileOauth??{}).filter(([e])=>!e.startsWith("claude/"))),{claudeAiOauth:o,...t}=r,s={...t,providerProfileOauth:e};Object.keys(s).length>0?i.update(s):i.delete()}_.cache?.clear?.(),$(e=>({...e,oauthAccount:void 0}))}(s),"anthropic"===s){const e=o.profile??await d(o.accessToken);e?u({accountUuid:e.account.uuid,emailAddress:e.account.email,organizationUuid:e.organization.uuid,displayName:e.account.display_name||void 0,hasExtraUsageEnabled:e.organization.has_extra_usage_enabled??void 0,billingType:e.organization.billing_type??void 0,subscriptionCreatedAt:e.organization.subscription_created_at??void 0,accountCreatedAt:e.account.created_at}):o.tokenAccount&&u({accountUuid:o.tokenAccount.uuid,emailAddress:o.tokenAccount.emailAddress,organizationUuid:o.tokenAccount.organizationUuid})}const m="openai"===s?E(o,l):P(o,l);if(h(),m.warning&&r("tengu_oauth_storage_warning",{warning:m.warning}),"anthropic"===s&&await c(o.accessToken).catch(e=>S(String(e),{level:"error"})),"anthropic"===s&&p(o.scopes))await a().catch(e=>S(String(e),{level:"error"}));else if("anthropic"===s){if(!await n(o.accessToken))throw new Error("No se pudo crear la API key. El servidor aceptó la solicitud pero no devolvió una clave.")}L("openai"===s?"openai":"claude"),i(void 0),await e()}export async function authLogin({email:e,sso:o,console:i,claudeai:t,provider:a}){i&&t&&(process.stderr.write("Error: --console and --claudeai cannot be used together.\n"),process.exit(1));const n=M(),c=n.forceLoginMethod?"claudeai"===n.forceLoginMethod:!i,u=n.forceLoginOrgUUID,d=a?.trim().toLowerCase(),h=process.env.CONTEXT_CODE_OAUTH_REFRESH_TOKEN??process.env.CLAUDE_CODE_OAUTH_REFRESH_TOKEN;if(h){const e=process.env.CONTEXT_CODE_OAUTH_SCOPES??process.env.CLAUDE_CODE_OAUTH_SCOPES;e||(process.stderr.write('CONTEXT_CODE_OAUTH_SCOPES (legacy: CLAUDE_CODE_OAUTH_SCOPES) is required when using CONTEXT_CODE_OAUTH_REFRESH_TOKEN.\nSet it to the space-separated scopes the refresh token was issued with\n(e.g. "user:inference" or "user:profile user:inference user:sessions:claude_code user:mcp_servers").\n'),process.exit(1));const o=e.split(/\s+/).filter(Boolean);try{r("tengu_login_from_refresh_token",{});const e=await l(h,{scopes:o});await installOAuthTokens(e);const i=await T();i.valid||(process.stderr.write(i.message+"\n"),process.exit(1)),$(e=>e.hasCompletedOnboarding?e:{...e,hasCompletedOnboarding:!0}),r("tengu_oauth_success",{loginWithClaudeAi:p(e.scopes)}),process.stdout.write("Inicio de sesión exitoso.\n"),process.exit(0)}catch(e){H(e);const o=s(e);process.stderr.write(`Error al iniciar sesión: ${z(e)}\n${o?o+"\n":""}`),process.exit(1)}}const v=o?"sso":void 0,w=new m;try{if(r("tengu_oauth_flow_start",{loginWithClaudeAi:c}),"gemini-google"===d){const e=await g();y(e),L("gemini-google"),process.stdout.write("Inicio de sesión exitoso.\n"),process.exit(0)}"copilot"===d&&(await f(e=>{process.stdout.write(`\nPara conectar GitHub Copilot:\n 1. Abre: ${e.verificationUri}\n 2. Escribe el código: ${e.userCode}\n\nEsperando autorización…\n`)}),L("copilot"),process.stdout.write("Inicio de sesión exitoso.\n"),process.exit(0));const o="openai"===d?"openai":"anthropic",i="openai"!==o&&c,t=await w.startOAuthFlow(async e=>{process.stdout.write("Abriendo el navegador para iniciar sesión…\n"),process.stdout.write(`Si el navegador no se abre, visita: ${e}\n`)},{loginWithClaudeAi:i,provider:o,loginHint:e,loginMethod:v,orgUUID:u});if(await installOAuthTokens(t,o),"anthropic"===o){const e=await T();e.valid||(process.stderr.write(e.message+"\n"),process.exit(1))}r("tengu_oauth_success",{loginWithClaudeAi:i}),process.stdout.write("Inicio de sesión exitoso.\n"),process.exit(0)}catch(e){H(e);const o=s(e);process.stderr.write(`Error al iniciar sesión: ${z(e)}\n${o?o+"\n":""}`),process.exit(1)}finally{w.cleanup()}}export async function authStatus(e){const{source:o,hasToken:i}=w(),{source:t}=v(),r=!!process.env.ANTHROPIC_API_KEY&&!I(),s=D(),a=A(),n=b(),c=j(),l=i||"none"!==t||r||c;let p="none";if("openai"===s?p="openai":c?p="third_party":"claude.ai"===o?p="claude.ai":"apiKeyHelper"===o?p="api_key_helper":"none"!==o?p="oauth_token":"ANTHROPIC_API_KEY"===t||r?p="api_key":"/login managed key"===t&&(p="claude.ai"),e.text){const e=[...Y(),...G()];let o=!1;for(const i of e){const e="string"==typeof i.value?i.value:Array.isArray(i.value)?i.value.join(", "):null;null!==e&&"none"!==e&&(o=!0,i.label?process.stdout.write(`${i.label}: ${e}\n`):process.stdout.write(`${e}\n`))}!o&&r&&process.stdout.write("API key: ANTHROPIC_API_KEY\n"),l||process.stdout.write("openai"===s?"Sesión no iniciada. Ejecuta context auth login para autenticarte con OpenAI / Codex.\n":"Sesión no iniciada. Ejecuta context auth login para autenticarte.\n")}else{const e="none"!==t?t:r?"ANTHROPIC_API_KEY":null,o={loggedIn:l,authMethod:p,apiProvider:s};e&&(o.apiKeySource=e),"claude.ai"===p&&(o.email=a?.emailAddress??null,o.orgId=a?.organizationUuid??null,o.orgName=a?.organizationName??null,o.subscriptionType=n??null),process.stdout.write(X(o,null,2)+"\n")}process.exit(l?0:1)}export async function authLogout(){try{await o({clearOnboarding:!1})}catch{process.stderr.write("Error al cerrar sesión.\n"),process.exit(1)}process.stdout.write(`Sesión cerrada exitosamente de tu cuenta ${function(){const e=D();return"openai"===e?"OpenAI / Codex":"bedrock"===e?"AWS Bedrock":"vertex"===e?"Google Vertex AI":"foundry"===e?"Microsoft Foundry":"Anthropic"}()}.\n`),process.exit(0)}export async function authProviderApiKey(e){const o=e.provider.trim().toLowerCase(),i=["openrouter","ollama-cloud","gemini-api","zai","minimax","nvidia","deepseek","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi","openai"];i.includes(o)||(process.stderr.write(`Provider no soportado para API key: ${o}. Soportados: ${i.join(", ")}\n`),process.exit(1));const t=e.profile?.trim();t&&N(o)&&R(o,t),await C(o,e.apiKey),L(o),process.stdout.write(`API key guardada para ${o}${t?` (perfil ${t})`:""}.\n`),process.exit(0)}export async function authProviderBaseUrl(e){const o=e.provider.trim().toLowerCase(),i=["ollama","ollama-cloud","lmstudio","openrouter","gemini-google","zai","minimax","nvidia","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi"];i.includes(o)||(process.stderr.write(`Provider no soportado para base URL: ${o}. Soportados: ${i.join(", ")}\n`),process.exit(1));const t=e.profile?.trim();t&&N(o)&&R(o,t);const r=F(o,e.baseUrl);L(o),process.stdout.write(`Base URL guardada para ${o}: ${r}${t?` (perfil ${t})`:""}.\n`),process.exit(0)}export async function authSetProviderPreference(e){const o=e.provider.trim().toLowerCase();L(o),process.stdout.write(`Provider activo establecido a ${o}.\n`),process.exit(0)}export async function authProviderRemove(e){const o=e.provider.trim().toLowerCase();o||(process.stderr.write("Debes indicar un provider.\n"),process.exit(1));const i=o,t=e.profile?.trim();let r=null;if(N(i)){const e=t||K(i)?.name;if(e){const o=W(i,e);o&&(await k(o.id),r=`${o.provider}/${o.name}`)}}["openrouter","ollama-cloud","gemini-api","zai","minimax","nvidia","deepseek","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi","openai"].includes(o)&&await U(o);["ollama","ollama-cloud","lmstudio","openrouter","gemini-google","zai","minimax","nvidia","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi"].includes(o)&&B(o),process.stdout.write(r?`Proveedor eliminado: ${r}.\n`:`Credenciales/base URL limpiadas para ${o}.\n`),process.exit(0)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as e,jsxs as n}from"react/jsx-runtime";import{Box as r,Text as o}from"../../ink.js";import{resolveTeamByName as i,resolveAgentByName as a,getTeamBlueprints as s,provisionSwarm as t,listAgentAliases as c,AGENT_TEAMS as l}from"../../core/agents/teams.js";import{OPEN_SWARM_BLUEPRINTS as m}from"../../core/agents/blueprints.js";import{addMcpConfig as d}from"../../services/mcp/config.js";import{SWARM_MCP_BLUEPRINTS as g}from"../../core/mcp/blueprints.js";export const call=async(p,h,j)=>{const u=(j??"").trim();if(!u)return n(r,{flexDirection:"column",children:[n(o,{bold:!0,color:"cyan",children:["Uso: ",e(o,{color:"green",children:"/agent <nombre> [mensaje]"})]}),e(o,{children:" "}),e(o,{children:"Aliases disponibles:"}),e(o,{children:c()}),e(o,{children:" "}),e(o,{dimColor:!0,children:"También puedes usar el id largo (ej. /agent engineering-senior) o el nombre de un agente individual (ej. /agent architect)."})]});const $=u.search(/\s/),f=-1===$?u:u.slice(0,$),b=-1===$?"":u.slice($+1).trim(),v=i(f),x=v?void 0:a(f);if(!v&&!x)return p(`No se encontró "${f}". Aliases disponibles: ${l.map(e=>e.aliases[0]??e.id).join(", ")}. Agentes individuales: ${m.length} disponibles.`),null;const y=v?s(v.id):[x],A=(v?.id??x.id).replace(/[^a-z0-9-]/gi,"-").toLowerCase(),N=v?`equipo "${v.name}"`:`agente "${x.name}"`;try{const e=await t(A,y,e=>p(e));for(const e of g)try{await d(e.name,{command:e.command,args:e.args,env:e.env},"project")}catch{}p(`¡${N} listo! Team "${e.teamName}" con ${e.createdAgents.length} agente(s).`),p(b?`Mensaje para ${N}: "${b}" (lánzalo con /orchestrate ${e.teamName})`:`Lánzalo con: /orchestrate ${e.teamName} <objetivo>`)}catch(e){p(`Error: ${e.message??String(e)}`)}return n(o,{color:"green",children:["@agent ",f," → ",N]})};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={type:"local-jsx",name:"agent",aliases:["@agent","a","spawn"],description:"Crea un agente o equipo pre-armado. Uso: /agent <nombre> [mensaje]. Acepta alias (ingenieria, marketing, datos, devops, contenido, ventas) o nombre de agente individual (architect, coder, verifier, etc.).",argumentHint:"<nombre> [mensaje]",load:()=>import("./agentSpawn.js")};export default e;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{feature as e}from"../../recovery/bunBundleShim.js";import{jsx as r}from"react/jsx-runtime";import{resetCostState as o}from"../../bootstrap/state.js";import{clearTrustedDeviceToken as t,enrollTrustedDevice as i}from"../../bridge/trustedDevice.js";import{ConsoleOAuthFlow as n}from"../../components/ConsoleOAuthFlow.js";import{useKeybinding as a}from"../../keybindings/useKeybinding.js";import{useMainLoopModel as s}from"../../hooks/useMainLoopModel.js";import{Box as m}from"../../ink.js";import{refreshGrowthBookAfterAuthChange as l}from"../../services/analytics/growthbook.js";import{refreshPolicyLimits as d}from"../../services/policyLimits/index.js";import{refreshRemoteManagedSettings as c}from"../../services/remoteManagedSettings/index.js";import{stripSignatureBlocks as u}from"../../utils/messages.js";import{checkAndDisableAutoModeIfNeeded as p,checkAndDisableBypassPermissionsIfNeeded as g,resetAutoModeGateCheck as P,resetBypassPermissionsCheck as f}from"../../utils/permissions/bypassPermissionsKillswitch.js";import{getAPIProvider as v}from"../../utils/model/providers.js";import{switchProviderPreference as M}from"../../utils/model/providerSwitch.js";import{resetUserCache as N}from"../../utils/user.js";import{applySuccessfulLogin as x,isCoreAuthEnabled as j,parseLoginProfileName as h}from"../../core/auth/loginCore.js";export async function call(n,a,s){const m=h(s);return r(Login,{profileName:m,onDone:async(r,s,v,h)=>{if(a.onChangeAPIKey(),a.setMessages(u),r){if(j()){const r=x({context:a,profileName:m,previousModel:s,previousProvider:v,targetProvider:h,transcriptClassifierEnabled:e("TRANSCRIPT_CLASSIFIER")});return r.shouldOpenModelPicker?void n(r.message,{nextInput:"/model",submitNextInput:!0}):void n(r.message)}const r="openai"===h?M({currentModel:s,currentProvider:v,targetProvider:"openai",targetProfileName:m}):"openrouter"===h?M({currentModel:s,currentProvider:v,targetProvider:"openrouter",targetProfileName:m}):"ollama"===h?M({currentModel:s,currentProvider:v,targetProvider:"ollama",targetProfileName:m}):"ollama-cloud"===h?M({currentModel:s,currentProvider:v,targetProvider:"ollama-cloud",targetProfileName:m}):"lmstudio"===h?M({currentModel:s,currentProvider:v,targetProvider:"lmstudio",targetProfileName:m}):"gemini-api"===h?M({currentModel:s,currentProvider:v,targetProvider:"gemini-api",targetProfileName:m}):"gemini-google"===h?M({currentModel:s,currentProvider:v,targetProvider:"gemini-google",targetProfileName:m}):"zai"===h?M({currentModel:s,currentProvider:v,targetProvider:"zai",targetProfileName:m}):"minimax"===h?M({currentModel:s,currentProvider:v,targetProvider:"minimax",targetProfileName:m}):"nvidia"===h?M({currentModel:s,currentProvider:v,targetProvider:"nvidia",targetProfileName:m}):"deepseek"===h?M({currentModel:s,currentProvider:v,targetProvider:"deepseek",targetProfileName:m}):"custom-openai"===h?M({currentModel:s,currentProvider:v,targetProvider:"custom-openai",targetProfileName:m}):"custom-anthropic"===h?M({currentModel:s,currentProvider:v,targetProvider:"custom-anthropic",targetProfileName:m}):h&&["xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi"].includes(h)?M({currentModel:s,currentProvider:v,targetProvider:h,targetProfileName:m}):M({currentModel:s,currentProvider:v,targetProvider:"claude",targetProfileName:m});o(),c(),d(),N(),l(),t(),i(),f();const u=a.getAppState();if(g(u.toolPermissionContext,a.setAppState),e("TRANSCRIPT_CLASSIFIER")&&(P(),p(u.toolPermissionContext,a.setAppState,u.fastMode)),a.setAppState(e=>({...e,mainLoopModel:r,mainLoopModelForSession:r,authVersion:e.authVersion+1})),!r)return void n(m?`Inicio de sesion exitoso en el perfil "${m}". Selecciona ahora el modelo para este perfil.`:"Inicio de sesion exitoso. Selecciona ahora el modelo para este perfil.",{nextInput:"/model",submitNextInput:!0})}n(r?"Inicio de sesión exitoso":"Acceso interrumpido")}})}export function Login(e){const o=s(),t=v();return a("confirm:no",()=>e.onDone(!1,o,t),{context:"Confirmation"}),r(m,{flexDirection:"column",gap:1,children:r(n,{onDone:r=>e.onDone(!0,o,t,r),startingMessage:e.startingMessage,profileName:e.profileName})})}
|
|
1
|
+
import{feature as e}from"../../recovery/bunBundleShim.js";import{jsx as r}from"react/jsx-runtime";import{resetCostState as o}from"../../bootstrap/state.js";import{clearTrustedDeviceToken as t,enrollTrustedDevice as i}from"../../bridge/trustedDevice.js";import{ConsoleOAuthFlow as n}from"../../components/ConsoleOAuthFlow.js";import{useKeybinding as a}from"../../keybindings/useKeybinding.js";import{useMainLoopModel as s}from"../../hooks/useMainLoopModel.js";import{Box as m}from"../../ink.js";import{refreshGrowthBookAfterAuthChange as l}from"../../services/analytics/growthbook.js";import{refreshPolicyLimits as d}from"../../services/policyLimits/index.js";import{refreshRemoteManagedSettings as c}from"../../services/remoteManagedSettings/index.js";import{stripSignatureBlocks as u}from"../../utils/messages.js";import{checkAndDisableAutoModeIfNeeded as p,checkAndDisableBypassPermissionsIfNeeded as g,resetAutoModeGateCheck as P,resetBypassPermissionsCheck as f}from"../../utils/permissions/bypassPermissionsKillswitch.js";import{getAPIProvider as v}from"../../utils/model/providers.js";import{switchProviderPreference as M}from"../../utils/model/providerSwitch.js";import{resetUserCache as N}from"../../utils/user.js";import{applySuccessfulLogin as x,isCoreAuthEnabled as j,parseLoginProfileName as h}from"../../core/auth/loginCore.js";export async function call(n,a,s){const m=h(s);return r(Login,{profileName:m,onDone:async(r,s,v,h)=>{if(a.onChangeAPIKey(),a.setMessages(u),r){if(j()){const r=x({context:a,profileName:m,previousModel:s,previousProvider:v,targetProvider:h,transcriptClassifierEnabled:e("TRANSCRIPT_CLASSIFIER")});return r.shouldOpenModelPicker?void n(r.message,{nextInput:"/model",submitNextInput:!0}):void n(r.message)}const r="openai"===h?M({currentModel:s,currentProvider:v,targetProvider:"openai",targetProfileName:m}):"openrouter"===h?M({currentModel:s,currentProvider:v,targetProvider:"openrouter",targetProfileName:m}):"ollama"===h?M({currentModel:s,currentProvider:v,targetProvider:"ollama",targetProfileName:m}):"ollama-cloud"===h?M({currentModel:s,currentProvider:v,targetProvider:"ollama-cloud",targetProfileName:m}):"lmstudio"===h?M({currentModel:s,currentProvider:v,targetProvider:"lmstudio",targetProfileName:m}):"gemini-api"===h?M({currentModel:s,currentProvider:v,targetProvider:"gemini-api",targetProfileName:m}):"gemini-google"===h?M({currentModel:s,currentProvider:v,targetProvider:"gemini-google",targetProfileName:m}):"copilot"===h?M({currentModel:s,currentProvider:v,targetProvider:"copilot",targetProfileName:m}):"zai"===h?M({currentModel:s,currentProvider:v,targetProvider:"zai",targetProfileName:m}):"minimax"===h?M({currentModel:s,currentProvider:v,targetProvider:"minimax",targetProfileName:m}):"nvidia"===h?M({currentModel:s,currentProvider:v,targetProvider:"nvidia",targetProfileName:m}):"deepseek"===h?M({currentModel:s,currentProvider:v,targetProvider:"deepseek",targetProfileName:m}):"custom-openai"===h?M({currentModel:s,currentProvider:v,targetProvider:"custom-openai",targetProfileName:m}):"custom-anthropic"===h?M({currentModel:s,currentProvider:v,targetProvider:"custom-anthropic",targetProfileName:m}):h&&["xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi"].includes(h)?M({currentModel:s,currentProvider:v,targetProvider:h,targetProfileName:m}):M({currentModel:s,currentProvider:v,targetProvider:"claude",targetProfileName:m});o(),c(),d(),N(),l(),t(),i(),f();const u=a.getAppState();if(g(u.toolPermissionContext,a.setAppState),e("TRANSCRIPT_CLASSIFIER")&&(P(),p(u.toolPermissionContext,a.setAppState,u.fastMode)),a.setAppState(e=>({...e,mainLoopModel:r,mainLoopModelForSession:r,authVersion:e.authVersion+1})),!r)return void n(m?`Inicio de sesion exitoso en el perfil "${m}". Selecciona ahora el modelo para este perfil.`:"Inicio de sesion exitoso. Selecciona ahora el modelo para este perfil.",{nextInput:"/model",submitNextInput:!0})}n(r?"Inicio de sesión exitoso":"Acceso interrumpido")}})}export function Login(e){const o=s(),t=v();return a("confirm:no",()=>e.onDone(!1,o,t),{context:"Confirmation"}),r(m,{flexDirection:"column",gap:1,children:r(n,{onDone:r=>e.onDone(!0,o,t,r),startingMessage:e.startingMessage,profileName:e.profileName})})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as t}from"react/jsx-runtime";import{cp as s,mkdir as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{cp as s,mkdir as i,readdir as o,stat as n}from"fs/promises";import{basename as r,join as a,resolve as e}from"path";import{SkillsMenu as c}from"../../components/skills/SkillsMenu.js";import{getCwd as l}from"../../utils/cwd.js";import{clearCommandsCache as m}from"../../commands.js";import{clearSkillCaches as p}from"../../skills/loadSkillsDir.js";const u=[".claude",".contextcli",".codex",".agents"];async function pathExists(t){try{return await n(t),!0}catch{return!1}}async function importSkills(t){const n=e(l(),".contextcli","skills"),c=function(t){let s=t.trim();return s.toLowerCase().startsWith("import")&&(s=s.substring(6).trim()),s?[e(l(),s)]:u.map(t=>e(l(),t))}(t),f=[],h=[];await i(n,{recursive:!0});for(const t of c){if(!await pathExists(t)){h.push(`${t} (no existe)`);continue}const i=[t,a(t,"skills")];for(const t of i){if(!await pathExists(t))continue;const i=await o(t,{withFileTypes:!0});for(const o of i){if(!o.isDirectory()&&!o.isSymbolicLink())continue;const i=a(t,o.name),e=a(i,"SKILL.md");if(!await pathExists(e))continue;const c=a(n,r(o.name));await pathExists(c)?f.some(t=>t.startsWith(o.name))||h.push(`${o.name} (ya existe en .contextcli/skills)`):(await s(i,c,{recursive:!0}),f.push(`${o.name} <- ${t}`))}}}0===f.length&&0===h.length&&h.push("No se encontraron skills válidas en las fuentes proporcionadas."),p(),m();const x=["Importacion de skills finalizada.",`Destino: ${n}`];x.push(`Importados: ${f.length}`);for(const t of f)x.push(`- ${t}`);if(h.length>0){x.push(`Omitidos: ${h.length}`);for(const t of h)x.push(`- ${t}`)}return x.join("\n")}export async function call(s,i,o){return o?.trim().toLowerCase().startsWith("import")?(s(await importSkills(o)),null):t(c,{onExit:s,commands:i.options.commands})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const a={type:"local-jsx",name:"swarm-init",aliases:["swarminit","swarm init","iniciar-enjambre"],description:"Inicializa un enjambre de agentes. Acepta --team=<id> para cargar un equipo pre-armado (engineering-senior, marketing-fb, data-ml, devops-cloud, content-seo, sales). Sin flag carga el enjambre completo.",argumentHint:"[nombre-equipo] [--team=<teamId>]",load:()=>import("./swarmInit.js")};export default a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{Text as r}from"../../ink.js";import{OPEN_SWARM_BLUEPRINTS as o}from"../../core/agents/blueprints.js";import{
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{Text as r}from"../../ink.js";import{OPEN_SWARM_BLUEPRINTS as o}from"../../core/agents/blueprints.js";import{AGENT_TEAMS as i,getTeamById as a,getTeamBlueprints as t}from"../../core/agents/teams.js";import{createTeam as n,createTeamUnit as s,upsertProviderWorkspace as m,updateTeam as d}from"../../utils/orchestration/store/index.js";import{createAgent as c,setAgentRoleByName as l,setAgentOrchestratorByName as p}from"../agent/agentStore.js";import{getActiveProviderProfile as f,listProviderProfiles as u}from"../../utils/model/providerProfiles.js";import{addMcpConfig as g}from"../../services/mcp/config.js";import{SWARM_MCP_BLUEPRINTS as j}from"../../core/mcp/blueprints.js";export const call=async(h,v,$)=>{const w=$?.trim()||"swarm-team",b=$?.match(/--team=([\w-]+)/),x=b?b[1]:null,y=x?t(x):o;if(x&&0===y.length){return h(`Equipo "${x}" no existe. Disponibles: ${i.map(e=>e.id).join(", ")}`),null}const I=u();if(0===I.length)return h("No hay perfiles configurados. Usa /provider login primero."),null;const E=f()??I[0],P=x?`equipo "${a(x)?.name??x}"`:`enjambre completo de ${o.length} agentes`;h(`Iniciando ${P} para "${w}" usando ${E.provider}...`);try{const e=await n({name:w,isEnabled:!0}),r=await m({provider:E.provider,isEnabled:!0});for(const o of y){const i=await c({provider:E.provider,name:`${w}-${o.id}`,profileName:E.name});await l(E.provider,i.name,o.id),("orchestrator"===o.id||o.id===y.find(e=>"orchestrator"!==e.id)?.id&&!y.some(e=>"orchestrator"===e.id))&&(await p(E.provider,i.name,!0),await d(e.id,{globalOrchestratorAgentId:i.id})),await s({teamId:e.id,unitName:o.id,workspaceId:r.id,leadAgentId:i.id,selectionMode:"manual",required:!0})}for(const e of j)try{await g(e.name,{command:e.command,args:e.args,env:e.env},"project"),h(`Servidor MCP "${e.name}" configurado en el proyecto.`)}catch(e){}h(`¡${P} creado con exito! Puedes lanzarlo con: /orchestrate ${w} <objetivo>`)}catch(e){h(`Error creando el enjambre: ${e.message}`)}return e(r,{color:"green",children:"Proceso de inicializacion de enjambre completado."})};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const s={type:"local-jsx",name:"swarm-list-teams",aliases:["swarm teams","equipos","listar-equipos"],description:"Lista los equipos de agentes pre-configurados (engineering-senior, marketing-fb, data-ml, devops-cloud, content-seo, sales).",load:()=>import("./swarmListTeams.js")};export default s;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as r,jsxs as e}from"react/jsx-runtime";import{Box as o,Text as i}from"../../ink.js";import{AGENT_TEAMS as n,getTeamBlueprints as l}from"../../core/agents/teams.js";export const call=async(c,d,a)=>e(o,{flexDirection:"column",children:[r(i,{bold:!0,color:"cyan",children:"Equipos de agentes pre-configurados"}),e(i,{dimColor:!0,children:["Carga uno con: ",r(i,{color:"green",children:"/swarm-init <nombre> --team=<id>"})]}),r(i,{children:" "}),n.map(n=>{const c=l(n.id);return e(o,{flexDirection:"column",marginBottom:1,children:[e(i,{children:[r(i,{color:"yellow",children:n.name}),e(i,{dimColor:!0,children:[" (",n.id,", ",c.length," agentes)"]})]}),e(i,{dimColor:!0,children:[" ",n.description]}),e(i,{children:[" Lead: ",r(i,{color:"magenta",children:n.leadBlueprintId})," · Miembros: ",c.map(r=>r.id).join(", ")]})]},n.id)})]});
|
package/dist/src/commands.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{feature as o}from"./recovery/bunBundleShim.js";import{createRequire as m}from"module";const n=m(import.meta.url);import i from"./commands/add-dir/index.js";import e from"./commands/autofix-pr/index.js";import s from"./commands/backfill-sessions/index.js";import r from"./commands/btw/index.js";import t from"./commands/good-claude/index.js";import a from"./commands/issue/index.js";import d from"./commands/feedback/index.js";import l from"./commands/clear/index.js";import c from"./commands/color/index.js";import p from"./commands/commit.js";import f from"./commands/copy/index.js";import u from"./commands/desktop/index.js";import j from"./commands/commit-push-pr.js";import x from"./commands/compact/index.js";import g from"./commands/config/index.js";import{context as S,contextNonInteractive as h}from"./commands/context/index.js";import k from"./commands/cost/index.js";import C from"./commands/diff/index.js";import b from"./commands/ctx_viz/index.js";import w from"./commands/doctor/index.js";import y from"./commands/memory/index.js";import E from"./commands/heartbeat/index.js";import v from"./commands/help/index.js";import R from"./commands/ide/index.js";import _ from"./commands/init.js";import M from"./commands/init-verifiers.js";import O from"./commands/keybindings/index.js";import I from"./commands/login/index.js";import T from"./commands/logout/index.js";import A from"./commands/install-github-app/index.js";import D from"./commands/install-slack-app/index.js";import N from"./commands/break-cache/index.js";import P from"./commands/mcp/index.js";import L from"./commands/mobile/index.js";import B from"./commands/agent/index.js";import F from"./commands/onboarding/index.js";import $ from"./commands/pr_comments/index.js";import U from"./commands/release-notes/index.js";import K from"./commands/rename/index.js";import W from"./commands/resume/index.js";import G,{ultrareview as Y}from"./commands/review.js";import H from"./commands/session/index.js";import z from"./commands/share/index.js";import q from"./commands/skills/index.js";import X from"./commands/status/index.js";import V from"./commands/teleport/index.js";import J from"./commands/telegram/index.js";import Q from"./commands/whatsapp/index.js";import Z from"./commands/canal-global/index.js";import oo from"./commands/playwright/index.js";import mo from"./commands/webapp/index.js";const no="ant"===process.env.USER_TYPE?n("./commands/agents-platform/index.js").default:null;import io from"./commands/security-review.js";import eo from"./commands/bughunter/index.js";import so from"./commands/terminalSetup/index.js";import ro from"./commands/theme/index.js";import to from"./commands/timeline/index.js";import ao from"./commands/vim/index.js";const lo=o("PROACTIVE")||o("KAIROS")?n("./commands/proactive.js").default:null,co=o("KAIROS")||o("KAIROS_BRIEF")?n("./commands/brief.js").default:null,po=o("KAIROS")?n("./commands/assistant/index.js").default:null,fo=o("BRIDGE_MODE")?n("./commands/bridge/index.js").default:null,uo=o("DAEMON")&&o("BRIDGE_MODE")?n("./commands/remoteControlServer/index.js").default:null,jo=n("./commands/voice/index.js").default,xo=o("HISTORY_SNIP")?n("./commands/force-snip.js").default:null,go=o("WORKFLOW_SCRIPTS")?n("./commands/workflows/index.js").default:null,So=o("CCR_REMOTE_SETUP")?n("./commands/remote-setup/index.js").default:null,ho=o("EXPERIMENTAL_SKILL_SEARCH")?n("./services/skillSearch/localSearch.js").clearSkillIndexCache:null,ko=o("KAIROS_GITHUB_WEBHOOKS")?n("./commands/subscribe-pr.js").default:null,Co=o("ULTRAPLAN")?n("./commands/ultraplan.js").default:null,bo=o("TORCH")?n("./commands/torch.js").default:null,wo=o("UDS_INBOX")?n("./commands/peers/index.js").default:null,yo=o("FORK_SUBAGENT")?n("./commands/fork/index.js").default:null,Eo=o("BUDDY")?n("./commands/buddy/index.js").default:null;import vo from"./commands/thinkback/index.js";import Ro from"./commands/thinkback-play/index.js";import _o from"./commands/permissions/index.js";import Mo from"./commands/plan/index.js";import Oo from"./commands/fast/index.js";import Io from"./commands/passes/index.js";import To from"./commands/privacy-settings/index.js";import Ao from"./commands/hooks/index.js";import Do from"./commands/files/index.js";import No from"./commands/branch/index.js";import Po from"./commands/agents/index.js";import Lo from"./commands/plugin/index.js";import Bo from"./commands/reload-plugins/index.js";import Fo from"./commands/rewind/index.js";import $o from"./commands/heapdump/index.js";import Uo from"./commands/mock-limits/index.js";import Ko from"./commands/bridge-kick.js";import Wo from"./commands/version.js";import Go from"./commands/summary/index.js";import{resetLimits as Yo,resetLimitsNonInteractive as Ho}from"./commands/reset-limits/index.js";import zo from"./commands/ant-trace/index.js";import qo from"./commands/perf-issue/index.js";import Xo from"./commands/sandbox-toggle/index.js";import Vo from"./commands/stickers/index.js";import Jo from"./commands/advisor.js";import{logError as Qo}from"./utils/log.js";import{MalformedCommandError as Zo,toError as om}from"./utils/errors.js";import{logForDebugging as mm}from"./utils/debug.js";import{getSkillDirCommands as nm,clearSkillCaches as im,getDynamicSkills as em}from"./skills/loadSkillsDir.js";import{getBundledSkills as sm}from"./skills/bundledSkills.js";import{getBuiltinPluginSkillCommands as rm}from"./plugins/builtinPlugins.js";import{getPluginCommands as tm,clearPluginCommandCache as am,getPluginSkills as dm,clearPluginSkillsCache as lm}from"./utils/plugins/loadPluginCommands.js";import{isCoreSkillsEnabled as cm,loadCoreSkillCommandSources as pm}from"./core/skills/index.js";import fm from"lodash-es/memoize.js";import{isUsing3PServices as um,isClaudeAISubscriber as jm}from"./utils/auth.js";import{isFirstPartyAnthropicBaseUrl as xm}from"./utils/model/providers.js";import gm from"./commands/env/index.js";import Sm from"./commands/exit/index.js";import hm from"./commands/export/index.js";import km from"./commands/model/index.js";import Cm from"./commands/profile/index.js";import bm from"./commands/policy/index.js";import wm from"./commands/run/index.js";import ym from"./commands/workspace/index.js";import Em from"./commands/provider/index.js";import vm from"./commands/tag/index.js";import Rm from"./commands/team-auto/index.js";import _m from"./commands/orchestrate/index.js";import Mm from"./commands/swarm-auto/index.js";import Om from"./commands/swarm-init/index.js";import Im from"./commands/team/index.js";import Tm from"./commands/limites/index.js";import Am from"./commands/objetivo/index.js";import Dm from"./commands/resumen/index.js";import Nm from"./commands/output-style/index.js";import Pm from"./commands/remote-env/index.js";import Lm from"./commands/upgrade/index.js";import Bm from"./commands/rate-limit-options/index.js";import Fm from"./commands/statusline.js";import $m from"./commands/effort/index.js";import Um from"./commands/stats/index.js";import Km from"./commands/oauth-refresh/index.js";import Wm from"./commands/debug-tool-call/index.js";import{getSettingSourceName as Gm}from"./utils/settings/constants.js";import{isCommandEnabled as Ym}from"./types/command.js";export{getCommandName,isCommandEnabled}from"./types/command.js";export const INTERNAL_ONLY_COMMANDS=[s,N,eo,p,j,b,t,a,M,...xo?[xo]:[],Uo,Ko,Wo,...Co?[Co]:[],...ko?[ko]:[],Yo,Ho,F,z,Go,V,zo,qo,gm,Km,Wm,no,e].filter(Boolean);const Hm=fm(()=>[i,Jo,Po,No,r,l,c,x,g,f,u,S,h,k,C,w,$m,Sm,Oo,Do,$o,E,v,R,_,O,A,D,P,y,L,Am,B,km,Cm,bm,wm,ym,Em,Nm,Pm,Lo,$,Dm,U,Bo,K,W,H,q,Um,X,Fm,Vo,vm,Rm,_m,Mm,Om,Im,Tm,ro,to,d,G,Y,Fo,io,so,Lm,Bm,ao,...So?[So]:[],...yo?[yo]:[],...Eo?[Eo]:[],...lo?[lo]:[],...co?[co]:[],...po?[po]:[],...fo?[fo]:[],...uo?[uo]:[],...jo?[jo]:[],vo,Ro,_o,Mo,To,Ao,hm,Xo,T,I(),Io,...wo?[wo]:[],J,Q,Z,oo,mo,...go?[go]:[],...bo?[bo]:[],..."ant"!==process.env.USER_TYPE||process.env.IS_DEMO?[]:INTERNAL_ONLY_COMMANDS]);export const builtInCommandNames=fm(()=>new Set(Hm().flatMap(o=>[o.name||"",...o.aliases?.filter(Boolean)??[]].map(o=>o.toLowerCase()))));async function withTimeout(o,m,n,i){let e;try{let s=!1;return await Promise.race([n(),new Promise(o=>{e=setTimeout(()=>{s=!0,o(i)},m)})]).finally(()=>{s&&mm(`${o} timed out after ${m}ms while loading commands. Continuing with fallback.`)})}catch(m){return mm(`${o} failed while loading commands: ${m instanceof Error?m.message:String(m)}`),i}finally{e&&clearTimeout(e)}}async function getSkills(o){try{if(cm())return await pm(o);const[m,n]=await Promise.all([nm(o).catch(o=>(Qo(om(o)),mm("Skill directory commands failed to load, continuing without them"),[])),dm().catch(o=>(Qo(om(o)),mm("Plugin skills failed to load, continuing without them"),[]))]),i=sm(),e=rm();return mm(`getSkills returning: ${m.length} skill dir commands, ${n.length} plugin skills, ${i.length} bundled skills, ${e.length} builtin plugin skills`),{skillDirCommands:m,pluginSkills:n,bundledSkills:i,builtinPluginSkills:e}}catch(o){return Qo(om(o)),mm("Unexpected error in getSkills, returning empty"),{skillDirCommands:[],pluginSkills:[],bundledSkills:[],builtinPluginSkills:[]}}}const zm=o("WORKFLOW_SCRIPTS")?n("./tools/WorkflowTool/createWorkflowCommand.js").getWorkflowCommands:null;export function meetsAvailabilityRequirement(o){if(!o.availability)return!0;for(const m of o.availability)switch(m){case"claude-ai":if(jm())return!0;break;case"console":if(!jm()&&!um()&&xm())return!0;break;default:break}return!1}const qm=fm(async o=>{const[{skillDirCommands:m,pluginSkills:n,bundledSkills:i,builtinPluginSkills:e},s,r]=await Promise.all([getSkills(o),withTimeout("getPluginCommands",1e4,()=>tm(),[]),withTimeout("getWorkflowCommands",1e4,()=>zm?zm(o):Promise.resolve([]),[])]);return[...i,...e,...m,...r,...s,...n,...Hm()]});export async function getCommands(o){const m=await qm(o),n=em(),i=m.filter(o=>meetsAvailabilityRequirement(o)&&Ym(o));if(0===n.length)return i;const e=new Set(i.map(o=>o.name)),s=n.filter(o=>!e.has(o.name)&&meetsAvailabilityRequirement(o)&&Ym(o));if(0===s.length)return preferNativeBridgeCommands(i);const r=new Set(Hm().map(o=>o.name)),t=i.findIndex(o=>r.has(o.name));return preferNativeBridgeCommands(-1===t?[...i,...s]:[...i.slice(0,t),...s,...i.slice(t)])}function preferNativeBridgeCommands(o){const m=new Set(["whatsapp","telegram","canal-global"]),n=new Map;for(const i of o){const o=i.name.toLowerCase();if(!m.has(o)){n.has(o)||n.set(o,i);continue}const e=n.get(o);if(!e){n.set(o,i);continue}const s="local-jsx"===e.type&&void 0===e.source,r="local-jsx"===i.type&&void 0===i.source;!s&&r&&n.set(o,i)}return o.filter(o=>n.get(o.name.toLowerCase())===o)}export function clearCommandMemoizationCaches(){qm.cache?.clear?.(),getSkillToolCommands.cache?.clear?.(),getSlashCommandToolSkills.cache?.clear?.(),ho?.()}export function clearCommandsCache(){clearCommandMemoizationCaches(),am(),lm(),im()}export function getMcpSkillCommands(m){return o("MCP_SKILLS")?m.filter(o=>"prompt"===o.type&&"mcp"===o.loadedFrom&&!o.disableModelInvocation):[]}export const getSkillToolCommands=fm(async o=>(await getCommands(o)).filter(o=>"prompt"===o.type&&!o.disableModelInvocation&&"builtin"!==o.source&&("bundled"===o.loadedFrom||"skills"===o.loadedFrom||"commands_DEPRECATED"===o.loadedFrom||o.hasUserSpecifiedDescription||o.whenToUse)));export const getSlashCommandToolSkills=fm(async o=>{try{return(await getCommands(o)).filter(o=>"prompt"===o.type&&"builtin"!==o.source&&(o.hasUserSpecifiedDescription||o.whenToUse)&&("skills"===o.loadedFrom||"plugin"===o.loadedFrom||"bundled"===o.loadedFrom||o.disableModelInvocation))}catch(o){return Qo(om(o)),mm("Returning empty skills array due to load failure"),[]}});export const REMOTE_SAFE_COMMANDS=new Set([H,Sm,l,v,ro,c,ao,k,f,r,d,Mo,O,Fm,Vo,L]);export const BRIDGE_SAFE_COMMANDS=new Set([x,l,k,Go,U,Do].filter(o=>null!==o));export function isBridgeSafeCommand(o){return"local-jsx"!==o.type&&("prompt"===o.type||BRIDGE_SAFE_COMMANDS.has(o))}export function filterCommandsForRemoteMode(o){return o.filter(o=>REMOTE_SAFE_COMMANDS.has(o))}export function findCommand(o,m){if(!o)return;const n=o.toLowerCase();return m.find(o=>o?.name?.toLowerCase()===n||o?.aliases?.some(o=>o?.toLowerCase()===n))}export function hasCommand(o,m){return void 0!==findCommand(o,m)}export function getCommand(o,m){if(!o)throw new Error("El nombre del comando no puede estar vacío");const n=findCommand(o,m);if(!n)throw new Zo(`Comando /${o} no encontrado. Usa /help para ver los comandos disponibles.`);return n}export function formatDescriptionWithSource(o){if("prompt"!==o.type)return o.description;if("workflow"===o.kind)return`${o.description} (flujo)`;if("plugin"===o.source){const m=o.pluginInfo?.pluginManifest.name;return m?`(${m}) ${o.description}`:`${o.description} (complemento)`}return"builtin"===o.source||"mcp"===o.source?o.description:"bundled"===o.source?`${o.description} (incluido)`:`${o.description} (${Gm(o.source)})`}
|
|
1
|
+
import{feature as o}from"./recovery/bunBundleShim.js";import{createRequire as m}from"module";const n=m(import.meta.url);import i from"./commands/add-dir/index.js";import e from"./commands/autofix-pr/index.js";import s from"./commands/backfill-sessions/index.js";import r from"./commands/btw/index.js";import t from"./commands/good-claude/index.js";import a from"./commands/issue/index.js";import d from"./commands/feedback/index.js";import l from"./commands/clear/index.js";import c from"./commands/color/index.js";import p from"./commands/commit.js";import f from"./commands/copy/index.js";import u from"./commands/desktop/index.js";import j from"./commands/commit-push-pr.js";import x from"./commands/compact/index.js";import g from"./commands/config/index.js";import{context as S,contextNonInteractive as h}from"./commands/context/index.js";import k from"./commands/cost/index.js";import C from"./commands/diff/index.js";import b from"./commands/ctx_viz/index.js";import w from"./commands/doctor/index.js";import y from"./commands/memory/index.js";import E from"./commands/heartbeat/index.js";import v from"./commands/help/index.js";import R from"./commands/ide/index.js";import _ from"./commands/init.js";import M from"./commands/init-verifiers.js";import O from"./commands/keybindings/index.js";import I from"./commands/login/index.js";import T from"./commands/logout/index.js";import A from"./commands/install-github-app/index.js";import D from"./commands/install-slack-app/index.js";import N from"./commands/break-cache/index.js";import P from"./commands/mcp/index.js";import L from"./commands/mobile/index.js";import B from"./commands/agent/index.js";import F from"./commands/onboarding/index.js";import $ from"./commands/pr_comments/index.js";import U from"./commands/release-notes/index.js";import K from"./commands/rename/index.js";import W from"./commands/resume/index.js";import G,{ultrareview as Y}from"./commands/review.js";import H from"./commands/session/index.js";import z from"./commands/share/index.js";import q from"./commands/skills/index.js";import X from"./commands/status/index.js";import V from"./commands/teleport/index.js";import J from"./commands/telegram/index.js";import Q from"./commands/whatsapp/index.js";import Z from"./commands/canal-global/index.js";import oo from"./commands/playwright/index.js";import mo from"./commands/webapp/index.js";const no="ant"===process.env.USER_TYPE?n("./commands/agents-platform/index.js").default:null;import io from"./commands/security-review.js";import eo from"./commands/bughunter/index.js";import so from"./commands/terminalSetup/index.js";import ro from"./commands/theme/index.js";import to from"./commands/timeline/index.js";import ao from"./commands/vim/index.js";const lo=o("PROACTIVE")||o("KAIROS")?n("./commands/proactive.js").default:null,co=o("KAIROS")||o("KAIROS_BRIEF")?n("./commands/brief.js").default:null,po=o("KAIROS")?n("./commands/assistant/index.js").default:null,fo=o("BRIDGE_MODE")?n("./commands/bridge/index.js").default:null,uo=o("DAEMON")&&o("BRIDGE_MODE")?n("./commands/remoteControlServer/index.js").default:null,jo=n("./commands/voice/index.js").default,xo=o("HISTORY_SNIP")?n("./commands/force-snip.js").default:null,go=o("WORKFLOW_SCRIPTS")?n("./commands/workflows/index.js").default:null,So=o("CCR_REMOTE_SETUP")?n("./commands/remote-setup/index.js").default:null,ho=o("EXPERIMENTAL_SKILL_SEARCH")?n("./services/skillSearch/localSearch.js").clearSkillIndexCache:null,ko=o("KAIROS_GITHUB_WEBHOOKS")?n("./commands/subscribe-pr.js").default:null,Co=o("ULTRAPLAN")?n("./commands/ultraplan.js").default:null,bo=o("TORCH")?n("./commands/torch.js").default:null,wo=o("UDS_INBOX")?n("./commands/peers/index.js").default:null,yo=o("FORK_SUBAGENT")?n("./commands/fork/index.js").default:null,Eo=o("BUDDY")?n("./commands/buddy/index.js").default:null;import vo from"./commands/thinkback/index.js";import Ro from"./commands/thinkback-play/index.js";import _o from"./commands/permissions/index.js";import Mo from"./commands/plan/index.js";import Oo from"./commands/fast/index.js";import Io from"./commands/passes/index.js";import To from"./commands/privacy-settings/index.js";import Ao from"./commands/hooks/index.js";import Do from"./commands/files/index.js";import No from"./commands/branch/index.js";import Po from"./commands/agents/index.js";import Lo from"./commands/plugin/index.js";import Bo from"./commands/reload-plugins/index.js";import Fo from"./commands/rewind/index.js";import $o from"./commands/heapdump/index.js";import Uo from"./commands/mock-limits/index.js";import Ko from"./commands/bridge-kick.js";import Wo from"./commands/version.js";import Go from"./commands/summary/index.js";import{resetLimits as Yo,resetLimitsNonInteractive as Ho}from"./commands/reset-limits/index.js";import zo from"./commands/ant-trace/index.js";import qo from"./commands/perf-issue/index.js";import Xo from"./commands/sandbox-toggle/index.js";import Vo from"./commands/stickers/index.js";import Jo from"./commands/advisor.js";import{logError as Qo}from"./utils/log.js";import{MalformedCommandError as Zo,toError as om}from"./utils/errors.js";import{logForDebugging as mm}from"./utils/debug.js";import{getSkillDirCommands as nm,clearSkillCaches as im,getDynamicSkills as em}from"./skills/loadSkillsDir.js";import{getBundledSkills as sm}from"./skills/bundledSkills.js";import{getBuiltinPluginSkillCommands as rm}from"./plugins/builtinPlugins.js";import{getPluginCommands as tm,clearPluginCommandCache as am,getPluginSkills as dm,clearPluginSkillsCache as lm}from"./utils/plugins/loadPluginCommands.js";import{isCoreSkillsEnabled as cm,loadCoreSkillCommandSources as pm}from"./core/skills/index.js";import fm from"lodash-es/memoize.js";import{isUsing3PServices as um,isClaudeAISubscriber as jm}from"./utils/auth.js";import{isFirstPartyAnthropicBaseUrl as xm}from"./utils/model/providers.js";import gm from"./commands/env/index.js";import Sm from"./commands/exit/index.js";import hm from"./commands/export/index.js";import km from"./commands/model/index.js";import Cm from"./commands/profile/index.js";import bm from"./commands/policy/index.js";import wm from"./commands/run/index.js";import ym from"./commands/workspace/index.js";import Em from"./commands/provider/index.js";import vm from"./commands/tag/index.js";import Rm from"./commands/team-auto/index.js";import _m from"./commands/orchestrate/index.js";import Mm from"./commands/swarm-auto/index.js";import Om from"./commands/swarm-init/index.js";import Im from"./commands/agent-spawn/index.js";import Tm from"./commands/swarm-list-teams/index.js";import Am from"./commands/team/index.js";import Dm from"./commands/limites/index.js";import Nm from"./commands/objetivo/index.js";import Pm from"./commands/resumen/index.js";import Lm from"./commands/output-style/index.js";import Bm from"./commands/remote-env/index.js";import Fm from"./commands/upgrade/index.js";import $m from"./commands/rate-limit-options/index.js";import Um from"./commands/statusline.js";import Km from"./commands/effort/index.js";import Wm from"./commands/stats/index.js";import Gm from"./commands/oauth-refresh/index.js";import Ym from"./commands/debug-tool-call/index.js";import{getSettingSourceName as Hm}from"./utils/settings/constants.js";import{isCommandEnabled as zm}from"./types/command.js";export{getCommandName,isCommandEnabled}from"./types/command.js";export const INTERNAL_ONLY_COMMANDS=[s,N,eo,p,j,b,t,a,M,...xo?[xo]:[],Uo,Ko,Wo,...Co?[Co]:[],...ko?[ko]:[],Yo,Ho,F,z,Go,V,zo,qo,gm,Gm,Ym,no,e].filter(Boolean);const qm=fm(()=>[i,Jo,Po,No,r,l,c,x,g,f,u,S,h,k,C,w,Km,Sm,Oo,Do,$o,E,v,R,_,O,A,D,P,y,L,Nm,B,km,Cm,bm,wm,ym,Em,Lm,Bm,Lo,$,Pm,U,Bo,K,W,H,q,Wm,X,Um,Vo,vm,Rm,_m,Mm,Om,Tm,Im,Am,Dm,ro,to,d,G,Y,Fo,io,so,Fm,$m,ao,...So?[So]:[],...yo?[yo]:[],...Eo?[Eo]:[],...lo?[lo]:[],...co?[co]:[],...po?[po]:[],...fo?[fo]:[],...uo?[uo]:[],...jo?[jo]:[],vo,Ro,_o,Mo,To,Ao,hm,Xo,T,I(),Io,...wo?[wo]:[],J,Q,Z,oo,mo,...go?[go]:[],...bo?[bo]:[],..."ant"!==process.env.USER_TYPE||process.env.IS_DEMO?[]:INTERNAL_ONLY_COMMANDS]);export const builtInCommandNames=fm(()=>new Set(qm().flatMap(o=>[o.name||"",...o.aliases?.filter(Boolean)??[]].map(o=>o.toLowerCase()))));async function withTimeout(o,m,n,i){let e;try{let s=!1;return await Promise.race([n(),new Promise(o=>{e=setTimeout(()=>{s=!0,o(i)},m)})]).finally(()=>{s&&mm(`${o} timed out after ${m}ms while loading commands. Continuing with fallback.`)})}catch(m){return mm(`${o} failed while loading commands: ${m instanceof Error?m.message:String(m)}`),i}finally{e&&clearTimeout(e)}}async function getSkills(o){try{if(cm())return await pm(o);const[m,n]=await Promise.all([nm(o).catch(o=>(Qo(om(o)),mm("Skill directory commands failed to load, continuing without them"),[])),dm().catch(o=>(Qo(om(o)),mm("Plugin skills failed to load, continuing without them"),[]))]),i=sm(),e=rm();return mm(`getSkills returning: ${m.length} skill dir commands, ${n.length} plugin skills, ${i.length} bundled skills, ${e.length} builtin plugin skills`),{skillDirCommands:m,pluginSkills:n,bundledSkills:i,builtinPluginSkills:e}}catch(o){return Qo(om(o)),mm("Unexpected error in getSkills, returning empty"),{skillDirCommands:[],pluginSkills:[],bundledSkills:[],builtinPluginSkills:[]}}}const Xm=o("WORKFLOW_SCRIPTS")?n("./tools/WorkflowTool/createWorkflowCommand.js").getWorkflowCommands:null;export function meetsAvailabilityRequirement(o){if(!o.availability)return!0;for(const m of o.availability)switch(m){case"claude-ai":if(jm())return!0;break;case"console":if(!jm()&&!um()&&xm())return!0;break;default:break}return!1}const Vm=fm(async o=>{const[{skillDirCommands:m,pluginSkills:n,bundledSkills:i,builtinPluginSkills:e},s,r]=await Promise.all([getSkills(o),withTimeout("getPluginCommands",1e4,()=>tm(),[]),withTimeout("getWorkflowCommands",1e4,()=>Xm?Xm(o):Promise.resolve([]),[])]);return[...i,...e,...m,...r,...s,...n,...qm()]});export async function getCommands(o){const m=await Vm(o),n=em(),i=m.filter(o=>meetsAvailabilityRequirement(o)&&zm(o));if(0===n.length)return i;const e=new Set(i.map(o=>o.name)),s=n.filter(o=>!e.has(o.name)&&meetsAvailabilityRequirement(o)&&zm(o));if(0===s.length)return preferNativeBridgeCommands(i);const r=new Set(qm().map(o=>o.name)),t=i.findIndex(o=>r.has(o.name));return preferNativeBridgeCommands(-1===t?[...i,...s]:[...i.slice(0,t),...s,...i.slice(t)])}function preferNativeBridgeCommands(o){const m=new Set(["whatsapp","telegram","canal-global"]),n=new Map;for(const i of o){const o=i.name.toLowerCase();if(!m.has(o)){n.has(o)||n.set(o,i);continue}const e=n.get(o);if(!e){n.set(o,i);continue}const s="local-jsx"===e.type&&void 0===e.source,r="local-jsx"===i.type&&void 0===i.source;!s&&r&&n.set(o,i)}return o.filter(o=>n.get(o.name.toLowerCase())===o)}export function clearCommandMemoizationCaches(){Vm.cache?.clear?.(),getSkillToolCommands.cache?.clear?.(),getSlashCommandToolSkills.cache?.clear?.(),ho?.()}export function clearCommandsCache(){clearCommandMemoizationCaches(),am(),lm(),im()}export function getMcpSkillCommands(m){return o("MCP_SKILLS")?m.filter(o=>"prompt"===o.type&&"mcp"===o.loadedFrom&&!o.disableModelInvocation):[]}export const getSkillToolCommands=fm(async o=>(await getCommands(o)).filter(o=>"prompt"===o.type&&!o.disableModelInvocation&&"builtin"!==o.source&&("bundled"===o.loadedFrom||"skills"===o.loadedFrom||"commands_DEPRECATED"===o.loadedFrom||o.hasUserSpecifiedDescription||o.whenToUse)));export const getSlashCommandToolSkills=fm(async o=>{try{return(await getCommands(o)).filter(o=>"prompt"===o.type&&"builtin"!==o.source&&(o.hasUserSpecifiedDescription||o.whenToUse)&&("skills"===o.loadedFrom||"plugin"===o.loadedFrom||"bundled"===o.loadedFrom||o.disableModelInvocation))}catch(o){return Qo(om(o)),mm("Returning empty skills array due to load failure"),[]}});export const REMOTE_SAFE_COMMANDS=new Set([H,Sm,l,v,ro,c,ao,k,f,r,d,Mo,O,Um,Vo,L]);export const BRIDGE_SAFE_COMMANDS=new Set([x,l,k,Go,U,Do].filter(o=>null!==o));export function isBridgeSafeCommand(o){return"local-jsx"!==o.type&&("prompt"===o.type||BRIDGE_SAFE_COMMANDS.has(o))}export function filterCommandsForRemoteMode(o){return o.filter(o=>REMOTE_SAFE_COMMANDS.has(o))}export function findCommand(o,m){if(!o)return;const n=o.toLowerCase();return m.find(o=>o?.name?.toLowerCase()===n||o?.aliases?.some(o=>o?.toLowerCase()===n))}export function hasCommand(o,m){return void 0!==findCommand(o,m)}export function getCommand(o,m){if(!o)throw new Error("El nombre del comando no puede estar vacío");const n=findCommand(o,m);if(!n)throw new Zo(`Comando /${o} no encontrado. Usa /help para ver los comandos disponibles.`);return n}export function formatDescriptionWithSource(o){if("prompt"!==o.type)return o.description;if("workflow"===o.kind)return`${o.description} (flujo)`;if("plugin"===o.source){const m=o.pluginInfo?.pluginManifest.name;return m?`(${m}) ${o.description}`:`${o.description} (complemento)`}return"builtin"===o.source||"mcp"===o.source?o.description:"bundled"===o.source?`${o.description} (incluido)`:`${o.description} (${Hm(o.source)})`}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsxs as e,jsx as o,Fragment as r}from"react/jsx-runtime";import{c as i}from"react/compiler-runtime";import{useCallback as t,useEffect as n,useRef as a,useState as s}from"react";import{logEvent as l}from"../services/analytics/index.js";import{installOAuthTokens as d}from"../cli/handlers/auth.js";import{useTerminalSize as c}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 I}from"../services/oauth/geminiCli.js";import{ensureProviderProfile as O,isProfiledProvider as S,resolveProviderProfile as z,setActiveProviderProfile as w,setProviderProfileLastModel as D}from"../utils/model/providerProfiles.js";import{setStoredActiveProviderPreference as M,setStoredLastModelForProvider as T}from"../utils/model/providerProfilesDb.js";import{logError as j}from"../utils/log.js";import{getVisibleProvider as E}from"../utils/model/providerCatalog.js";import{getConfiguredProviderBaseUrl as R,setProviderBaseUrl as U}from"../utils/model/providerBaseUrls.js";import{getSettings_DEPRECATED as K}from"../utils/settings/settings.js";import{setCustomProviderModels as W}from"../utils/config.js";import{Select as L}from"./CustomSelect/select.js";import{KeyboardShortcutHint as G}from"./design-system/KeyboardShortcutHint.js";import{Spinner as B}from"./Spinner.js";import N from"./TextInput.js";const F=["deepseek","minimax","openrouter","zai","nvidia","ollama","openai","claudeai","gemini-google","gemini-api","console","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi"];function sortLoginProviderOptions(e){const o=new Map(F.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 $="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:i,mode:y="login",forceLoginMethod:A,profileName:R}){const L=K()||{},B=A??L.forceLoginMethod,N=L.forceLoginOrgUUID,F="claudeai"===B?"Método de acceso preseleccionado: Plan de suscripción (Context Pro/Max)":"console"===B?"Método de acceso preseleccionado: Facturación por uso de API (Anthropic Console)":"openai"===B?"Método de acceso preseleccionado: OpenAI / Codex OAuth":null,$=p(),[H,V]=s(()=>"setup-token"===y||"claudeai"===B||"console"===B||"openai"===B?{state:"ready_to_start"}:{state:"idle"}),[X,Y]=s(""),[q,Z]=s(0),[Q]=s(()=>new C),[J,ee]=s(()=>"openai"===B?"openai":"anthropic"),[oe,re]=s(()=>"setup-token"===y||"claudeai"===B),[ie,te]=s(!1),[ne,ae]=s(!1),se=c().columns-37-1,[le,de]=s(""),[ce,ue]=s(0),[pe,me]=s(""),[he,ge]=s(0),[fe,_e]=s(""),[ve,Ce]=s(""),[ye,be]=s(""),[Ae,ke]=s(0),[Pe,xe]=s(0),[Ie,Oe]=s(0);n(()=>{"claudeai"===B?l("tengu_oauth_claudeai_forced",{}):"console"===B&&l("tengu_oauth_console_forced",{})},[B]),n(()=>{if("about_to_retry"===H.state){const e=setTimeout(V,1e3,H.nextState);return()=>clearTimeout(e)}},[H]),f("confirm:yes",()=>{l("tengu_oauth_success",{loginWithClaudeAi:oe}),r(J)},{context:"Confirmation",isActive:"success"===H.state&&"setup-token"!==y}),n(()=>{if("success"===H.state&&!process.stdin.isTTY){const e=setTimeout(()=>{l("tengu_oauth_success",{loginWithClaudeAi:oe}),r(J)},800);return()=>clearTimeout(e)}},[H.state,J,oe,r]),f("confirm:yes",()=>{V({state:"idle"})},{context:"Confirmation",isActive:"platform_setup"===H.state}),f("confirm:yes",()=>{De()},{context:"Confirmation",isActive:"provider_google_setup"===H.state}),f("confirm:yes",()=>{"error"===H.state&&H.toRetry&&(Y(""),V({state:"about_to_retry",nextState:H.toRetry}))},{context:"Confirmation",isActive:"error"===H.state&&!!H.toRetry}),f("cancel",()=>{V({state:"idle"})},{context:"Confirmation",isActive:"provider_api_key_input"===H.state||"provider_local_setup"===H.state||"provider_google_setup"===H.state||"error"===H.state}),n(()=>{"c"===X&&"waiting_for_login"===H.state&&ie&&!ne&&(u(H.url).then(e=>{e&&process.stdout.write(e),ae(!0),setTimeout(ae,2e3,!1)}),Y(""))},[X,H,ie,ne]);const Se=t(async(e,o)=>{const i=e.trim();if(i)try{await P(o,i),de(""),ue(0);const e=E(o).label;v({message:`API key de ${e} guardada`,notificationType:"auth_success"},$),r(o)}catch(e){j(e),V({state:"error",message:e.message,toRetry:{state:"provider_api_key_input",provider:o}})}else V({state:"error",message:"Debes ingresar una API key.",toRetry:{state:"provider_api_key_input",provider:o}})},[r,$]),ze=t((e,o)=>{const i=e.trim();if(i)try{const e=U(o,i);me(e),ge(0),v({message:`URL de ${E(o).label} guardada`,notificationType:"auth_success"},$),r(o)}catch(e){j(e),V({state:"error",message:e.message,toRetry:{state:"provider_local_setup",provider:o}})}else V({state:"error",message:"Debes ingresar una URL para Ollama.",toRetry:{state:"provider_local_setup",provider:o}})},[r,$]),we=t((e,o,i)=>{const t=H;if("custom_provider_wizard"===t.state&&t.provider)if("endpoint"===e){const e=o.trim();if(e&&!e.startsWith("http"))return void V({state:"error",message:"La URL debe empezar con http:// o https://.",toRetry:t});if(!e)return void V({state:"error",message:"El endpoint es obligatorio. Ejemplo: http://localhost:8001/v1",toRetry:t});V({state:"custom_provider_wizard",provider:t.provider,step:"api_key",apiKey:t.apiKey,endpoint:e,model:t.model})}else if("api_key"===e){const e=o.trim();if(!e)return void V({state:"error",message:"La API key no puede estar vacia.",toRetry:t});V({state:"custom_provider_wizard",provider:t.provider,step:"model_list",apiKey:e,endpoint:t.endpoint,model:"",availableModels:[],modelsLoading:!0});const r=new AbortController,i=setTimeout(()=>r.abort(),3e5);fetch(`${t.endpoint}/models`,{headers:{Authorization:`Bearer ${e}`},signal:r.signal}).then(e=>e.json()).then(e=>{clearTimeout(i);const o=e.data?.map(e=>e.id)||[];V(e=>"custom_provider_wizard"!==e.state||"model_list"!==e.step?e:{...e,availableModels:o,modelsLoading:!1})}).catch(e=>{clearTimeout(i),j(e),V(e=>"custom_provider_wizard"!==e.state||"model_list"!==e.step?e:{...e,availableModels:[],modelsLoading:!1})})}else if("model"===e){const e=i&&i.length>0?i:"model_list"===t.step&&Array.isArray(t.availableModels)?t.availableModels:[];let n=null;try{if(S(t.provider))if(R&&R.trim()){const e=O(t.provider,R.trim());w(e.id),n=e.id}else n=z(t.provider,{createIfMissing:!0})?.id??null}catch(e){j(e)}P(t.provider,t.apiKey).then(()=>{U(t.provider,t.endpoint);try{M(t.provider)}catch(e){j(e)}const i=o?.trim();if(i)try{T(t.provider,i),S(t.provider)&&D(t.provider,i)}catch(e){j(e)}if(e.length>0)try{W(t.provider,e,n)}catch(e){j(e)}v({message:`Configuracion de ${E(t.provider).label} guardada`,notificationType:"auth_success"},$),r(t.provider)}).catch(e=>{j(e),V({state:"error",message:e.message,toRetry:t})})}},[r,$,H,R]),De=t(async()=>{V({state:"provider_google_auth_running"});try{if(await b())return void r("gemini-google");const e=await I();k(e);if(!await b())return v({message:"OAuth de Gemini guardado; Code Assist no valido el proyecto de cuota",notificationType:"auth_success"},$),void r("gemini-google");v({message:"Credenciales de Gemini Google listas",notificationType:"auth_success"},$),r("gemini-google")}catch(e){j(e),V({state:"error",message:e.message,toRetry:{state:"provider_google_setup"}})}},[r,$]),Me=t(async()=>{try{l("tengu_oauth_flow_start",{loginWithClaudeAi:oe,provider:J});const e=await Q.startOAuthFlow(async e=>{V({state:"waiting_for_login",url:e}),setTimeout(te,3e3,!0)},{loginWithClaudeAi:oe,provider:J,inferenceOnly:"setup-token"===y,expiresIn:"setup-token"===y?31536e3:void 0,orgUUID:N}).catch(e=>{const o=e.message.includes("Token exchange failed"),r=_(e),i=Q.getPort(),t="openai"===J&&i?formatOAuthDebugDetails(J,i):"";throw V({state:"error",message:r??(o?"No se pudo intercambiar el codigo de autorizacion por el token de acceso. Intentalo de nuevo."+(t?`\n${t}`:""):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)V({state:"success",token:e.accessToken});else{V({state:"creating_api_key"});const o=R?z("openai"===J?"openai":"anthropic",R):void 0;if(await d(e,J,o?.id),"anthropic"===J){const e=await x();if(!e.valid)throw new Error(e.message)}V({state:"success"}),v({message:"openai"===J?"Inicio de sesión con OpenAI / Codex completado":"Inicio de sesión en Context Code completado",notificationType:"auth_success"},$)}}catch(e){const o=e.message,r=_(e),i=Q.getPort(),t="openai"===J&&i?formatOAuthDebugDetails(J,i):"";V({state:"error",message:r??("openai"===J&&t&&!o.includes("redirect_uri=")?`${o}\n${t}`:o),toRetry:{state:"setup-token"===y?"ready_to_start":"idle"}}),l("tengu_oauth_error",{error:o,ssl_error:null!==r})}},[J,Q,te,oe,y,N,$]),Te=a(!1);return n(()=>{"ready_to_start"!==H.state||Te.current||(Te.current=!0,process.nextTick((e,o)=>{e(),o.current=!1},Me,Te))},[H.state,Me]),n(()=>{if("setup-token"===y&&"success"===H.state){const e=setTimeout((e,o)=>{l("tengu_oauth_success",{loginWithClaudeAi:e}),o(J)},500,oe,r,J);return()=>clearTimeout(e)}},[y,H,oe,r,J]),n(()=>()=>{Q.cleanup()},[Q]),e(m,{flexDirection:"column",gap:1,children:["waiting_for_login"===H.state&&ie&&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,ne?{color:"success",children:"(Copied!)"}:{dimColor:!0,children:o(G,{shortcut:"c",action:"copiar",parens:!0})})]}),o(h,{url:H.url,children:o(g,{dimColor:!0,children:H.url})})]},"urlToCopy"),"setup-token"===y&&"success"===H.state&&H.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:H.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:H,oauthProvider:J,mode:y,startingMessage:i,forcedMethodMessage:F,showPastePrompt:ie,pastedCode:X,setPastedCode:Y,cursorOffset:q,setCursorOffset:Z,textInputColumns:se,handleSubmitCode:async function(e,o){try{const[r,i]=e.split("#");if(!r||!i)return void V({state:"error",message:"Codigo invalido. Asegurate de copiar el codigo completo",toRetry:{state:"waiting_for_login",url:o}});l("tengu_oauth_manual_entry",{}),Q.handleManualAuthCodeInput({authorizationCode:r,state:i})}catch(e){j(e),V({state:"error",message:e.message,toRetry:{state:"waiting_for_login",url:o}})}},setOAuthStatus:V,setLoginWithClaudeAi:re,setOAuthProvider:ee,providerApiKey:le,setProviderApiKey:de,providerApiKeyCursorOffset:ce,setProviderApiKeyCursorOffset:ue,handleProviderApiKeySubmit:Se,providerBaseUrl:pe,setProviderBaseUrlInput:me,providerBaseUrlCursorOffset:he,setProviderBaseUrlCursorOffset:ge,handleProviderBaseUrlSubmit:ze,onDone:r,wizardApiKey:fe,setWizardApiKey:_e,wizardEndpoint:ve,setWizardEndpoint:Ce,wizardModel:ye,setWizardModel:be,wizardApiKeyCursor:Ae,setWizardApiKeyCursor:ke,wizardEndpointCursor:Pe,setWizardEndpointCursor:xe,wizardModelCursor:Ie,setWizardModelCursor:Oe,handleCustomProviderWizardSubmit:we})})]})}function OAuthStatusMessage(t){const n=i(68),{oauthStatus:a,oauthProvider:s,mode:d,startingMessage:c,forcedMethodMessage:u,showPastePrompt:p,pastedCode:f,setPastedCode:_,cursorOffset:v,setCursorOffset:C,textInputColumns:y,handleSubmitCode:b,setOAuthStatus:k,setLoginWithClaudeAi:P,setOAuthProvider:x,providerApiKey:I,setProviderApiKey:O,providerApiKeyCursorOffset:S,setProviderApiKeyCursorOffset:z,handleProviderApiKeySubmit:w,providerBaseUrl:D,setProviderBaseUrlInput:M,providerBaseUrlCursorOffset:T,setProviderBaseUrlCursorOffset:j,handleProviderBaseUrlSubmit:U,onDone:K,wizardApiKey:W,setWizardApiKey:G,wizardEndpoint:F,setWizardEndpoint:H,wizardModel:V,setWizardModel:X,wizardApiKeyCursor:Y,setWizardApiKeyCursor:q,wizardEndpointCursor:Z,setWizardEndpointCursor:Q,wizardModelCursor:J,setWizardModelCursor:ee,handleCustomProviderWizardSubmit:oe}=t;switch(a.state){case"idle":{const r=c||"Context Code puede usarse con tu suscripción de Claude, la facturación de Anthropic Console o OpenAI / Codex OAuth.";let i,t,a,s,d,u,p;return n[0]!==r?(i=o(g,{bold:!0,children:r}),n[0]=r,n[1]=i):i=n[1],n[2]===Symbol.for("react.memo_cache_sentinel")?(t=o(g,{children:"Selecciona el metodo de acceso:"}),n[2]=t):t=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")?(d=[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:["xAI / Grok ·"," ",o(g,{dimColor:!0,children:"API key / api.x.ai"}),"\n"]}),value:"xai"},{label:e(g,{children:["GMI Cloud ·"," ",o(g,{dimColor:!0,children:"API key / api.gmi-serving.com"}),"\n"]}),value:"gmi"},{label:e(g,{children:["NovitaAI ·"," ",o(g,{dimColor:!0,children:"API key / novita.ai"}),"\n"]}),value:"novita"},{label:e(g,{children:["StepFun ·"," ",o(g,{dimColor:!0,children:"API key / stepfun.ai"}),"\n"]}),value:"stepfun"},{label:e(g,{children:["HuggingFace ·"," ",o(g,{dimColor:!0,children:"Token HF / router.huggingface.co"}),"\n"]}),value:"huggingface"},{label:e(g,{children:["OpenCode Zen ·"," ",o(g,{dimColor:!0,children:"API key / opencode.ai/zen"}),"\n"]}),value:"opencode-zen"},{label:e(g,{children:["Arcee AI ·"," ",o(g,{dimColor:!0,children:"API key / api.arcee.ai"}),"\n"]}),value:"arcee"},{label:e(g,{children:["Alibaba / Qwen ·"," ",o(g,{dimColor:!0,children:"API key / DashScope compatible"}),"\n"]}),value:"alibaba"},{label:e(g,{children:["Kimi / Moonshot ·"," ",o(g,{dimColor:!0,children:"API key / api.moonshot.ai"}),"\n"]}),value:"kimi"},{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]=d):d=n[5],n[6]!==P||n[7]!==k||n[8]!==x||n[65]!==K?(u=o(m,{children:o(L,{options:sortLoginProviderOptions(d),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||"xai"===e||"gmi"===e||"novita"===e||"stepfun"===e||"huggingface"===e||"opencode-zen"===e||"arcee"===e||"alibaba"===e||"kimi"===e?k({state:"provider_api_key_input",provider:e}):"gemini-google"===e?k({state:"provider_google_setup"}):"ollama"===e||"ollama-cloud"===e?(M(R(e)),j(0),k({state:"provider_local_setup",provider:e})):"custom-openai"===e||"custom-anthropic"===e?k({state:"custom_provider_wizard",provider:e,step:"endpoint",apiKey:"",endpoint:"",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]=K,n[66]=u):u=n[66],n[10]!==i||n[11]!==u?(p=e(m,{flexDirection:"column",gap:1,marginTop:1,children:[i,t,u]}),n[10]=i,n[11]=u,n[12]=p):p=n[12],p}case"provider_api_key_input":{let r,i,t,s;if(n[50]!==a.provider?(r=e(g,{bold:!0,children:["Ingresa la API key de ",E(a.provider).label]}),n[50]=a.provider,n[51]=r):r=n[51],n[52]!==a.provider){const r=E(a.provider);i=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]=i}else i=n[53];return n[54]!==I||n[55]!==S||n[56]!==O||n[57]!==z||n[58]!==y||n[59]!==w?(t=e(m,{children:[o(g,{children:"API key > "}),o(N,{value:I,onChange:O,onSubmit:e=>w(e,a.provider),cursorOffset:S,onChangeCursorOffset:z,columns:y,mask:"*"})]}),n[54]=I,n[55]=S,n[56]=O,n[57]=z,n[58]=y,n[59]=w,n[60]=t):t=n[60],n[61]!==r||n[62]!==i||n[63]!==t?(s=e(m,{flexDirection:"column",gap:1,children:[r,i,t]}),n[61]=r,n[62]=i,n[63]=t,n[64]=s):s=n[64],s}case"provider_local_setup":{const r=E(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(N,{value:D,onChange:M,onSubmit:e=>U(e,a.provider),cursorOffset:T,onChangeCursorOffset:j,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(B,{}),o(g,{children:"Abriendo Google OAuth para Gemini..."})]});case"custom_provider_wizard":{const r=E(a.provider),i="custom-openai"===a.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1";if("endpoint"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 1/3"]}),o(g,{dimColor:!0,children:"URL del servidor API (ej: http://localhost:8001/v1)"}),o(g,{children:"Endpoint > "}),o(m,{children:o(N,{value:F,onChange:H,onSubmit:oe.bind(null,"endpoint"),cursorOffset:Z,onChangeCursorOffset:Q,columns:y})}),e(g,{dimColor:!0,children:["Default: ",i]}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para continuar."]})]});if("api_key"===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:["Ingresa tu API key para ",r.label,"."]}),o(g,{children:"API key > "}),o(m,{children:o(N,{value:W,onChange:G,onSubmit:oe.bind(null,"api_key"),cursorOffset:Y,onChangeCursorOffset:q,columns:y,mask:"*"})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para obtener modelos disponibles."]})]});if("model_list"===a.step){if(a.modelsLoading)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Cargando modelos..."]}),e(m,{children:[o(B,{}),e(g,{children:[" Obteniendo lista de modelos desde ",a.endpoint,"/models"]})]})]});const i=a.availableModels||[];if(i.length>0){const t=i.map(e=>({label:e,value:e}));return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 3/3"]}),o(g,{dimColor:!0,children:"Selecciona un modelo de la lista:"}),o(m,{children:o(L,{options:t,onChange:e=>{k(o=>({...o,model:e})),oe("model",e,i)}})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la configuracion."]})]})}return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 3/3"]}),o(g,{dimColor:!0,children:"No se pudo obtener la lista de modelos."}),o(g,{dimColor:!0,children:"Ingresa el nombre del modelo manualmente."}),o(g,{dimColor:!0,children:"Podras cambiarlo luego con el comando /model."}),o(g,{children:"Modelo > "}),o(m,{children:o(N,{value:V,onChange:X,onSubmit:oe.bind(null,"model"),cursorOffset:J,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,i,t,a,s,l,d,c;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")?(i=o(g,{children:"Context Code soporta Amazon Bedrock, Microsoft Foundry y Vertex AI. Configura las variables de entorno requeridas y luego reinicia Context Code."}),t=o(g,{children:"Si formas parte de una organización empresarial, contacta a tu administrador para las instrucciones de configuración."}),n[13]=i,n[14]=t):(i=n[13],t=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")?(d=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]=d):d=n[18],n[19]===Symbol.for("react.memo_cache_sentinel")?(c=e(m,{flexDirection:"column",gap:1,marginTop:1,children:[r,e(m,{flexDirection:"column",gap:1,children:[i,t,d,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]=c):c=n[19],c}case"waiting_for_login":{let r,i,t,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?(i=!p&&e(m,{children:[o(B,{}),o(g,{children:"Abriendo el navegador para iniciar sesión…"})]}),n[22]=p,n[23]=i):i=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?(t=p&&e(m,{children:[o(g,{children:$}),o(N,{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]=t):t=n[32],n[33]!==r||n[34]!==i||n[35]!==t?(s=e(m,{flexDirection:"column",gap:1,children:[r,i,t]}),n[33]=r,n[34]=i,n[35]=t,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(B,{}),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 i,t;if(n[39]!==d||n[40]!==a.token){const t="openai"===s?"Inicio de sesión en OpenAI / Codex exitoso. Presiona ":"Inicio de sesión exitoso. Presiona ";i="setup-token"===d&&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:[t,o(g,{bold:!0,children:"Enter"})," para continuar…"]})]}),n[39]=d,n[40]=a.token,n[41]=i}else i=n[41];return n[42]!==i?(t=o(m,{flexDirection:"column",children:i}),n[42]=i,n[43]=t):t=n[43],t}case"error":{let r,i,t;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?(i=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]=i):i=n[47],n[48]!==r||n[49]!==i?(t=e(m,{flexDirection:"column",gap:1,children:[r,i]}),n[48]=r,n[49]=i,n[50]=t):t=n[50],t}default:return null}}
|
|
1
|
+
import{jsxs as e,jsx as o,Fragment as r}from"react/jsx-runtime";import{c as i}from"react/compiler-runtime";import{useCallback as t,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 v}from"../services/api/errorUtils.js";import{sendNotification as _}from"../services/notifier.js";import{OAuthService as C}from"../services/oauth/index.js";import{getOAuthRequestDetails as b}from"../services/oauth/client.js";import{checkGeminiGoogleCredentialsValid as y,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{startCopilotDeviceCode as I,openCopilotVerificationPage as w,pollCopilotDeviceToken as S,exchangeAndSaveCopilotToken as z}from"../services/oauth/copilotDevice.js";import{ensureProviderProfile as D,isProfiledProvider as M,resolveProviderProfile as T,setActiveProviderProfile as j,setProviderProfileLastModel as E}from"../utils/model/providerProfiles.js";import{setStoredActiveProviderPreference as U,setStoredLastModelForProvider as R}from"../utils/model/providerProfilesDb.js";import{logError as K}from"../utils/log.js";import{getVisibleProvider as G}from"../utils/model/providerCatalog.js";import{getConfiguredProviderBaseUrl as L,setProviderBaseUrl as W}from"../utils/model/providerBaseUrls.js";import{getSettings_DEPRECATED as B}from"../utils/settings/settings.js";import{setCustomProviderModels as N}from"../utils/config.js";import{Select as F}from"./CustomSelect/select.js";import{KeyboardShortcutHint as $}from"./design-system/KeyboardShortcutHint.js";import{Spinner as H}from"./Spinner.js";import V from"./TextInput.js";const X=["deepseek","minimax","openrouter","zai","nvidia","ollama","openai","claudeai","gemini-google","gemini-api","console","xai","gmi","novita","stepfun","huggingface","opencode-zen","arcee","alibaba","kimi"];function sortLoginProviderOptions(e){const o=new Map(X.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 Y="Pega aqui el codigo si se solicita > ";function formatOAuthDebugDetails(e,o){if("openai"!==e)return"";const r=b({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:i,mode:b="login",forceLoginMethod:A,profileName:L}){const F=B()||{},H=A??F.forceLoginMethod,V=F.forceLoginOrgUUID,X="claudeai"===H?"Método de acceso preseleccionado: Plan de suscripción (Context Pro/Max)":"console"===H?"Método de acceso preseleccionado: Facturación por uso de API (Anthropic Console)":"openai"===H?"Método de acceso preseleccionado: OpenAI / Codex OAuth":null,Y=p(),[q,Z]=s(()=>"setup-token"===b||"claudeai"===H||"console"===H||"openai"===H?{state:"ready_to_start"}:{state:"idle"}),[Q,J]=s(""),[ee,oe]=s(0),[re]=s(()=>new C),[ie,te]=s(()=>"openai"===H?"openai":"anthropic"),[ne,ae]=s(()=>"setup-token"===b||"claudeai"===H),[se,le]=s(!1),[ce,de]=s(!1),ue=d().columns-37-1,[pe,me]=s(""),[he,ge]=s(0),[fe,ve]=s(""),[_e,Ce]=s(0),[be,ye]=s(""),[Ae,ke]=s(""),[Pe,xe]=s(""),[Oe,Ie]=s(0),[we,Se]=s(0),[ze,De]=s(0);n(()=>{"claudeai"===H?l("tengu_oauth_claudeai_forced",{}):"console"===H&&l("tengu_oauth_console_forced",{})},[H]),n(()=>{if("about_to_retry"===q.state){const e=setTimeout(Z,1e3,q.nextState);return()=>clearTimeout(e)}},[q]),f("confirm:yes",()=>{l("tengu_oauth_success",{loginWithClaudeAi:ne}),r(ie)},{context:"Confirmation",isActive:"success"===q.state&&"setup-token"!==b}),n(()=>{if("success"===q.state&&!process.stdin.isTTY){const e=setTimeout(()=>{l("tengu_oauth_success",{loginWithClaudeAi:ne}),r(ie)},800);return()=>clearTimeout(e)}},[q.state,ie,ne,r]),f("confirm:yes",()=>{Z({state:"idle"})},{context:"Confirmation",isActive:"platform_setup"===q.state}),f("confirm:yes",()=>{Ee()},{context:"Confirmation",isActive:"provider_google_setup"===q.state}),f("confirm:yes",()=>{"error"===q.state&&q.toRetry&&(J(""),Z({state:"about_to_retry",nextState:q.toRetry}))},{context:"Confirmation",isActive:"error"===q.state&&!!q.toRetry}),f("cancel",()=>{Z({state:"idle"})},{context:"Confirmation",isActive:"provider_api_key_input"===q.state||"provider_local_setup"===q.state||"provider_google_setup"===q.state||"error"===q.state}),n(()=>{"c"===Q&&"waiting_for_login"===q.state&&se&&!ce&&(u(q.url).then(e=>{e&&process.stdout.write(e),de(!0),setTimeout(de,2e3,!1)}),J(""))},[Q,q,se,ce]);const Me=t(async(e,o)=>{const i=e.trim();if(i)try{await P(o,i),me(""),ge(0);const e=G(o).label;_({message:`API key de ${e} guardada`,notificationType:"auth_success"},Y),r(o)}catch(e){K(e),Z({state:"error",message:e.message,toRetry:{state:"provider_api_key_input",provider:o}})}else Z({state:"error",message:"Debes ingresar una API key.",toRetry:{state:"provider_api_key_input",provider:o}})},[r,Y]),Te=t((e,o)=>{const i=e.trim();if(i)try{const e=W(o,i);ve(e),Ce(0),_({message:`URL de ${G(o).label} guardada`,notificationType:"auth_success"},Y),r(o)}catch(e){K(e),Z({state:"error",message:e.message,toRetry:{state:"provider_local_setup",provider:o}})}else Z({state:"error",message:"Debes ingresar una URL para Ollama.",toRetry:{state:"provider_local_setup",provider:o}})},[r,Y]),je=t((e,o,i)=>{const t=q;if("custom_provider_wizard"===t.state&&t.provider)if("endpoint"===e){const e=o.trim();if(e&&!e.startsWith("http"))return void Z({state:"error",message:"La URL debe empezar con http:// o https://.",toRetry:t});if(!e)return void Z({state:"error",message:"El endpoint es obligatorio. Ejemplo: http://localhost:8001/v1",toRetry:t});Z({state:"custom_provider_wizard",provider:t.provider,step:"api_key",apiKey:t.apiKey,endpoint:e,model:t.model})}else if("api_key"===e){const e=o.trim();if(!e)return void Z({state:"error",message:"La API key no puede estar vacia.",toRetry:t});Z({state:"custom_provider_wizard",provider:t.provider,step:"model_list",apiKey:e,endpoint:t.endpoint,model:"",availableModels:[],modelsLoading:!0});const r=new AbortController,i=setTimeout(()=>r.abort(),3e5);fetch(`${t.endpoint}/models`,{headers:{Authorization:`Bearer ${e}`},signal:r.signal}).then(e=>e.json()).then(e=>{clearTimeout(i);const o=e.data?.map(e=>e.id)||[];Z(e=>"custom_provider_wizard"!==e.state||"model_list"!==e.step?e:{...e,availableModels:o,modelsLoading:!1})}).catch(e=>{clearTimeout(i),K(e),Z(e=>"custom_provider_wizard"!==e.state||"model_list"!==e.step?e:{...e,availableModels:[],modelsLoading:!1})})}else if("model"===e){const e=i&&i.length>0?i:"model_list"===t.step&&Array.isArray(t.availableModels)?t.availableModels:[];let n=null;try{if(M(t.provider))if(L&&L.trim()){const e=D(t.provider,L.trim());j(e.id),n=e.id}else n=T(t.provider,{createIfMissing:!0})?.id??null}catch(e){K(e)}P(t.provider,t.apiKey).then(()=>{W(t.provider,t.endpoint);try{U(t.provider)}catch(e){K(e)}const i=o?.trim();if(i)try{R(t.provider,i),M(t.provider)&&E(t.provider,i)}catch(e){K(e)}if(e.length>0)try{N(t.provider,e,n)}catch(e){K(e)}_({message:`Configuracion de ${G(t.provider).label} guardada`,notificationType:"auth_success"},Y),r(t.provider)}).catch(e=>{K(e),Z({state:"error",message:e.message,toRetry:t})})}},[r,Y,q,L]),Ee=t(async()=>{Z({state:"provider_google_auth_running"});try{if(await y())return void r("gemini-google");const e=await O();k(e);if(!await y())return _({message:"OAuth de Gemini guardado; Code Assist no valido el proyecto de cuota",notificationType:"auth_success"},Y),void r("gemini-google");_({message:"Credenciales de Gemini Google listas",notificationType:"auth_success"},Y),r("gemini-google")}catch(e){K(e),Z({state:"error",message:e.message,toRetry:{state:"provider_google_setup"}})}},[r,Y]),Ue=(t(async()=>{try{const e=await I();Z({state:"provider_device_code",userCode:e.userCode,verificationUri:e.verificationUri}),await w(e.verificationUri);const o=await S(e);await z(o),_({message:"GitHub Copilot conectado",notificationType:"auth_success"},Y),r("copilot")}catch(e){K(e),Z({state:"error",message:e.message})}},[r,Y]),t(async()=>{try{l("tengu_oauth_flow_start",{loginWithClaudeAi:ne,provider:ie});const e=await re.startOAuthFlow(async e=>{Z({state:"waiting_for_login",url:e}),setTimeout(le,3e3,!0)},{loginWithClaudeAi:ne,provider:ie,inferenceOnly:"setup-token"===b,expiresIn:"setup-token"===b?31536e3:void 0,orgUUID:V}).catch(e=>{const o=e.message.includes("Token exchange failed"),r=v(e),i=re.getPort(),t="openai"===ie&&i?formatOAuthDebugDetails(ie,i):"";throw Z({state:"error",message:r??(o?"No se pudo intercambiar el codigo de autorizacion por el token de acceso. Intentalo de nuevo."+(t?`\n${t}`:""):e.message),toRetry:"setup-token"===b?{state:"ready_to_start"}:{state:"idle"}}),l("tengu_oauth_token_exchange_error",{error:e.message,ssl_error:null!==r}),e});if("setup-token"===b)Z({state:"success",token:e.accessToken});else{Z({state:"creating_api_key"});const o=L?T("openai"===ie?"openai":"anthropic",L):void 0;if(await c(e,ie,o?.id),"anthropic"===ie){const e=await x();if(!e.valid)throw new Error(e.message)}Z({state:"success"}),_({message:"openai"===ie?"Inicio de sesión con OpenAI / Codex completado":"Inicio de sesión en Context Code completado",notificationType:"auth_success"},Y)}}catch(e){const o=e.message,r=v(e),i=re.getPort(),t="openai"===ie&&i?formatOAuthDebugDetails(ie,i):"";Z({state:"error",message:r??("openai"===ie&&t&&!o.includes("redirect_uri=")?`${o}\n${t}`:o),toRetry:{state:"setup-token"===b?"ready_to_start":"idle"}}),l("tengu_oauth_error",{error:o,ssl_error:null!==r})}},[ie,re,le,ne,b,V,Y])),Re=a(!1);return n(()=>{"ready_to_start"!==q.state||Re.current||(Re.current=!0,process.nextTick((e,o)=>{e(),o.current=!1},Ue,Re))},[q.state,Ue]),n(()=>{if("setup-token"===b&&"success"===q.state){const e=setTimeout((e,o)=>{l("tengu_oauth_success",{loginWithClaudeAi:e}),o(ie)},500,ne,r,ie);return()=>clearTimeout(e)}},[b,q,ne,r,ie]),n(()=>()=>{re.cleanup()},[re]),e(m,{flexDirection:"column",gap:1,children:["waiting_for_login"===q.state&&se&&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,ce?{color:"success",children:"(Copied!)"}:{dimColor:!0,children:o($,{shortcut:"c",action:"copiar",parens:!0})})]}),o(h,{url:q.url,children:o(g,{dimColor:!0,children:q.url})})]},"urlToCopy"),"setup-token"===b&&"success"===q.state&&q.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:q.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:q,oauthProvider:ie,mode:b,startingMessage:i,forcedMethodMessage:X,showPastePrompt:se,pastedCode:Q,setPastedCode:J,cursorOffset:ee,setCursorOffset:oe,textInputColumns:ue,handleSubmitCode:async function(e,o){try{const[r,i]=e.split("#");if(!r||!i)return void Z({state:"error",message:"Codigo invalido. Asegurate de copiar el codigo completo",toRetry:{state:"waiting_for_login",url:o}});l("tengu_oauth_manual_entry",{}),re.handleManualAuthCodeInput({authorizationCode:r,state:i})}catch(e){K(e),Z({state:"error",message:e.message,toRetry:{state:"waiting_for_login",url:o}})}},setOAuthStatus:Z,setLoginWithClaudeAi:ae,setOAuthProvider:te,providerApiKey:pe,setProviderApiKey:me,providerApiKeyCursorOffset:he,setProviderApiKeyCursorOffset:ge,handleProviderApiKeySubmit:Me,providerBaseUrl:fe,setProviderBaseUrlInput:ve,providerBaseUrlCursorOffset:_e,setProviderBaseUrlCursorOffset:Ce,handleProviderBaseUrlSubmit:Te,onDone:r,wizardApiKey:be,setWizardApiKey:ye,wizardEndpoint:Ae,setWizardEndpoint:ke,wizardModel:Pe,setWizardModel:xe,wizardApiKeyCursor:Oe,setWizardApiKeyCursor:Ie,wizardEndpointCursor:we,setWizardEndpointCursor:Se,wizardModelCursor:ze,setWizardModelCursor:De,handleCustomProviderWizardSubmit:je})})]})}function OAuthStatusMessage(t){const n=i(68),{oauthStatus:a,oauthProvider:s,mode:c,startingMessage:d,forcedMethodMessage:u,showPastePrompt:p,pastedCode:f,setPastedCode:v,cursorOffset:_,setCursorOffset:C,textInputColumns:b,handleSubmitCode:y,setOAuthStatus:k,setLoginWithClaudeAi:P,setOAuthProvider:x,providerApiKey:O,setProviderApiKey:I,providerApiKeyCursorOffset:w,setProviderApiKeyCursorOffset:S,handleProviderApiKeySubmit:z,providerBaseUrl:D,setProviderBaseUrlInput:M,providerBaseUrlCursorOffset:T,setProviderBaseUrlCursorOffset:j,handleProviderBaseUrlSubmit:E,onDone:U,wizardApiKey:R,setWizardApiKey:K,wizardEndpoint:W,setWizardEndpoint:B,wizardModel:N,setWizardModel:$,wizardApiKeyCursor:X,setWizardApiKeyCursor:q,wizardEndpointCursor:Z,setWizardEndpointCursor:Q,wizardModelCursor:J,setWizardModelCursor:ee,handleCustomProviderWizardSubmit:oe}=t;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 i,t,a,s,c,u,p;return n[0]!==r?(i=o(g,{bold:!0,children:r}),n[0]=r,n[1]=i):i=n[1],n[2]===Symbol.for("react.memo_cache_sentinel")?(t=o(g,{children:"Selecciona el metodo de acceso:"}),n[2]=t):t=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:["GitHub Copilot ·"," ",o(g,{dimColor:!0,children:"OAuth device-code"}),"\n"]}),value:"copilot"},{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:["xAI / Grok ·"," ",o(g,{dimColor:!0,children:"API key / api.x.ai"}),"\n"]}),value:"xai"},{label:e(g,{children:["GMI Cloud ·"," ",o(g,{dimColor:!0,children:"API key / api.gmi-serving.com"}),"\n"]}),value:"gmi"},{label:e(g,{children:["NovitaAI ·"," ",o(g,{dimColor:!0,children:"API key / novita.ai"}),"\n"]}),value:"novita"},{label:e(g,{children:["StepFun ·"," ",o(g,{dimColor:!0,children:"API key / stepfun.ai"}),"\n"]}),value:"stepfun"},{label:e(g,{children:["HuggingFace ·"," ",o(g,{dimColor:!0,children:"Token HF / router.huggingface.co"}),"\n"]}),value:"huggingface"},{label:e(g,{children:["OpenCode Zen ·"," ",o(g,{dimColor:!0,children:"API key / opencode.ai/zen"}),"\n"]}),value:"opencode-zen"},{label:e(g,{children:["Arcee AI ·"," ",o(g,{dimColor:!0,children:"API key / api.arcee.ai"}),"\n"]}),value:"arcee"},{label:e(g,{children:["Alibaba / Qwen ·"," ",o(g,{dimColor:!0,children:"API key / DashScope compatible"}),"\n"]}),value:"alibaba"},{label:e(g,{children:["Kimi / Moonshot ·"," ",o(g,{dimColor:!0,children:"API key / api.moonshot.ai"}),"\n"]}),value:"kimi"},{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]!==U?(u=o(m,{children:o(F,{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||"xai"===e||"gmi"===e||"novita"===e||"stepfun"===e||"huggingface"===e||"opencode-zen"===e||"arcee"===e||"alibaba"===e||"kimi"===e?k({state:"provider_api_key_input",provider:e}):"gemini-google"===e?k({state:"provider_google_setup"}):"copilot"===e?handleCopilotDeviceLogin():"ollama"===e||"ollama-cloud"===e?(M(L(e)),j(0),k({state:"provider_local_setup",provider:e})):"custom-openai"===e||"custom-anthropic"===e?k({state:"custom_provider_wizard",provider:e,step:"endpoint",apiKey:"",endpoint:"",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]=U,n[66]=u):u=n[66],n[10]!==i||n[11]!==u?(p=e(m,{flexDirection:"column",gap:1,marginTop:1,children:[i,t,u]}),n[10]=i,n[11]=u,n[12]=p):p=n[12],p}case"provider_api_key_input":{let r,i,t,s;if(n[50]!==a.provider?(r=e(g,{bold:!0,children:["Ingresa la API key de ",G(a.provider).label]}),n[50]=a.provider,n[51]=r):r=n[51],n[52]!==a.provider){const r=G(a.provider);i=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]=i}else i=n[53];return n[54]!==O||n[55]!==w||n[56]!==I||n[57]!==S||n[58]!==b||n[59]!==z?(t=e(m,{children:[o(g,{children:"API key > "}),o(V,{value:O,onChange:I,onSubmit:e=>z(e,a.provider),cursorOffset:w,onChangeCursorOffset:S,columns:b,mask:"*"})]}),n[54]=O,n[55]=w,n[56]=I,n[57]=S,n[58]=b,n[59]=z,n[60]=t):t=n[60],n[61]!==r||n[62]!==i||n[63]!==t?(s=e(m,{flexDirection:"column",gap:1,children:[r,i,t]}),n[61]=r,n[62]=i,n[63]=t,n[64]=s):s=n[64],s}case"provider_local_setup":{const r=G(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(V,{value:D,onChange:M,onSubmit:e=>E(e,a.provider),cursorOffset:T,onChangeCursorOffset:j,columns:b})}),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(H,{}),o(g,{children:"Abriendo Google OAuth para Gemini..."})]});case"provider_device_code":return e(m,{flexDirection:"column",gap:1,children:[o(g,{bold:!0,children:"GitHub Copilot"}),e(g,{dimColor:!0,children:["1. Abre en tu navegador: ",o(g,{color:"success",children:a.verificationUri})]}),o(g,{dimColor:!0,children:"2. Escribe este código:"}),e(g,{bold:!0,color:"permission",children:[" ",a.userCode]}),e(m,{children:[o(H,{}),o(g,{children:" Esperando autorización en GitHub..."})]})]});case"custom_provider_wizard":{const r=G(a.provider),i="custom-openai"===a.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1";if("endpoint"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 1/3"]}),o(g,{dimColor:!0,children:"URL del servidor API (ej: http://localhost:8001/v1)"}),o(g,{children:"Endpoint > "}),o(m,{children:o(V,{value:W,onChange:B,onSubmit:oe.bind(null,"endpoint"),cursorOffset:Z,onChangeCursorOffset:Q,columns:b})}),e(g,{dimColor:!0,children:["Default: ",i]}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para continuar."]})]});if("api_key"===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:["Ingresa tu API key para ",r.label,"."]}),o(g,{children:"API key > "}),o(m,{children:o(V,{value:R,onChange:K,onSubmit:oe.bind(null,"api_key"),cursorOffset:X,onChangeCursorOffset:q,columns:b,mask:"*"})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para obtener modelos disponibles."]})]});if("model_list"===a.step){if(a.modelsLoading)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Cargando modelos..."]}),e(m,{children:[o(H,{}),e(g,{children:[" Obteniendo lista de modelos desde ",a.endpoint,"/models"]})]})]});const i=a.availableModels||[];if(i.length>0){const t=i.map(e=>({label:e,value:e}));return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 3/3"]}),o(g,{dimColor:!0,children:"Selecciona un modelo de la lista:"}),o(m,{children:o(F,{options:t,onChange:e=>{k(o=>({...o,model:e})),oe("model",e,i)}})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la configuracion."]})]})}return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 3/3"]}),o(g,{dimColor:!0,children:"No se pudo obtener la lista de modelos."}),o(g,{dimColor:!0,children:"Ingresa el nombre del modelo manualmente."}),o(g,{dimColor:!0,children:"Podras cambiarlo luego con el comando /model."}),o(g,{children:"Modelo > "}),o(m,{children:o(V,{value:N,onChange:$,onSubmit:oe.bind(null,"model"),cursorOffset:J,onChangeCursorOffset:ee,columns:b})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la configuracion."]})]})}break}case"platform_setup":{let r,i,t,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")?(i=o(g,{children:"Context Code soporta Amazon Bedrock, Microsoft Foundry y Vertex AI. Configura las variables de entorno requeridas y luego reinicia Context Code."}),t=o(g,{children:"Si formas parte de una organización empresarial, contacta a tu administrador para las instrucciones de configuración."}),n[13]=i,n[14]=t):(i=n[13],t=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:[i,t,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,i,t,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?(i=!p&&e(m,{children:[o(H,{}),o(g,{children:"Abriendo el navegador para iniciar sesión…"})]}),n[22]=p,n[23]=i):i=n[23],n[24]!==_||n[25]!==y||n[26]!==a.url||n[27]!==f||n[28]!==C||n[29]!==v||n[30]!==p||n[31]!==b?(t=p&&e(m,{children:[o(g,{children:Y}),o(V,{value:f,onChange:v,onSubmit:e=>y(e,a.url),cursorOffset:_,onChangeCursorOffset:C,columns:b,mask:"*"})]}),n[24]=_,n[25]=y,n[26]=a.url,n[27]=f,n[28]=C,n[29]=v,n[30]=p,n[31]=b,n[32]=t):t=n[32],n[33]!==r||n[34]!==i||n[35]!==t?(s=e(m,{flexDirection:"column",gap:1,children:[r,i,t]}),n[33]=r,n[34]=i,n[35]=t,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(H,{}),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 i,t;if(n[39]!==c||n[40]!==a.token){const t="openai"===s?"Inicio de sesión en OpenAI / Codex exitoso. Presiona ":"Inicio de sesión exitoso. Presiona ";i="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:[t,o(g,{bold:!0,children:"Enter"})," para continuar…"]})]}),n[39]=c,n[40]=a.token,n[41]=i}else i=n[41];return n[42]!==i?(t=o(m,{flexDirection:"column",children:i}),n[42]=i,n[43]=t):t=n[43],t}case"error":{let r,i,t;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?(i=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]=i):i=n[47],n[48]!==r||n[49]!==i?(t=e(m,{flexDirection:"column",gap:1,children:[r,i]}),n[48]=r,n[49]=i,n[50]=t):t=n[50],t}default:return null}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{mkdir as t,open as e,unlink as n}from"fs/promises";import{join as r}from"path";import{getManagedFilePath as o}from"../../utils/settings/managedPath.js";import{isBuiltInAgent as i,isPluginAgent as a}from"../../tools/AgentTool/loadAgentsDir.js";import{getCwd as
|
|
1
|
+
import{mkdir as t,open as e,unlink as n}from"fs/promises";import{join as r}from"path";import{getManagedFilePath as o}from"../../utils/settings/managedPath.js";import{isBuiltInAgent as i,isPluginAgent as a}from"../../tools/AgentTool/loadAgentsDir.js";import{getCwd as c}from"../../utils/cwd.js";import{getClaudeConfigHomeDir as s}from"../../utils/envUtils.js";import{getErrnoCode as g}from"../../utils/errors.js";import{AGENT_PATHS as l}from"./types.js";export function formatAgentAsMarkdown(t,e,n,r,o,i,a,c,s){return`---\nname: ${t}\ndescription: "${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\\\n")}"${void 0===n||1===n.length&&"*"===n[0]?"":`\ntools: ${n.join(", ")}`}${i?`\nmodel: ${i}`:""}${a?`\nprovider: ${a}`:""}${void 0!==s?`\neffort: ${s}`:""}${o?`\ncolor: ${o}`:""}${c?`\nmemory: ${c}`:""}\n---\n\n${r}\n`}function getAgentDirectoryPath(t){switch(t){case"flagSettings":throw new Error(`Cannot get directory path for ${t} agents`);case"userSettings":return r(s(),l.AGENTS_DIR);case"projectSettings":case"localSettings":return r(c(),".contextcli",l.AGENTS_DIR);case"policySettings":return r(o(),l.FOLDER_NAME,l.AGENTS_DIR)}}function getRelativeAgentDirectoryPath(t){return"projectSettings"===t?r(".",".contextcli",l.AGENTS_DIR):getAgentDirectoryPath(t)}export function getNewAgentFilePath(t){const e=getAgentDirectoryPath(t.source);return r(e,`${t.agentType}.md`)}export function getActualAgentFilePath(t){if("built-in"===t.source)return"Integrado";if("plugin"===t.source)throw new Error("Cannot get file path for plugin agents");const e=getAgentDirectoryPath(t.source),n=t.filename||t.agentType;return r(e,`${n}.md`)}export function getNewRelativeAgentFilePath(t){if("built-in"===t.source)return"Integrado";const e=getRelativeAgentDirectoryPath(t.source);return r(e,`${t.agentType}.md`)}export function getActualRelativeAgentFilePath(t){if(i(t))return"Integrado";if(a(t))return`Plugin: ${t.plugin||"Desconocido"}`;if("flagSettings"===t.source)return"Argumento de CLI";const e=getRelativeAgentDirectoryPath(t.source),n=t.filename||t.agentType;return r(e,`${n}.md`)}export async function saveAgentToFile(e,n,r,o,i,a=!0,c,s,l,u,f){if("built-in"===e)throw new Error("Cannot save built-in agents");await async function(e){const n=getAgentDirectoryPath(e);return await t(n,{recursive:!0}),n}(e);const p=getNewAgentFilePath({source:e,agentType:n}),A=formatAgentAsMarkdown(n,r,o,i,c,s,l,u,f);try{await writeFileAndFlush(p,A,a?"wx":"w")}catch(t){if("EEXIST"===g(t))throw new Error(`Agent file already exists: ${p}`);throw t}}export async function updateAgentFile(t,e,n,r,o,i,a,c,s){if("built-in"===t.source)throw new Error("Cannot update built-in agents");const g=getActualAgentFilePath(t),l=formatAgentAsMarkdown(t.agentType,e,n,r,o,i,a,c,s);await writeFileAndFlush(g,l)}export async function deleteAgentFromFile(t){if("built-in"===t.source)throw new Error("Cannot delete built-in agents");const e=getActualAgentFilePath(t);try{await n(e)}catch(t){if("ENOENT"!==g(t))throw t}}async function writeFileAndFlush(t,n,r="w"){const o=await e(t,r);try{await o.writeFile(n,{encoding:"utf-8"}),await o.datasync()}finally{await o.close()}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as t,jsxs as e}from"react/jsx-runtime";import{existsSync as o}from"fs";import{join as r}from"path";import{c as n}from"react/compiler-runtime";import{Box as c}from"../../../../ink.js";import{getCwd as i}from"../../../../utils/cwd.js";import{ConfigurableShortcutHint as a}from"../../../ConfigurableShortcutHint.js";import{Select as s}from"../../../CustomSelect/select.js";import{Byline as l}from"../../../design-system/Byline.js";import{KeyboardShortcutHint as m}from"../../../design-system/KeyboardShortcutHint.js";import{useWizard as f}from"../../../wizard/index.js";import{WizardDialogLayout as u}from"../../../wizard/WizardDialogLayout.js";function getProjectAgentFolderLabel(){const t=i();return o(r(t,".
|
|
1
|
+
import{jsx as t,jsxs as e}from"react/jsx-runtime";import{existsSync as o}from"fs";import{join as r}from"path";import{c as n}from"react/compiler-runtime";import{Box as c}from"../../../../ink.js";import{getCwd as i}from"../../../../utils/cwd.js";import{ConfigurableShortcutHint as a}from"../../../ConfigurableShortcutHint.js";import{Select as s}from"../../../CustomSelect/select.js";import{Byline as l}from"../../../design-system/Byline.js";import{KeyboardShortcutHint as m}from"../../../design-system/KeyboardShortcutHint.js";import{useWizard as f}from"../../../wizard/index.js";import{WizardDialogLayout as u}from"../../../wizard/WizardDialogLayout.js";function getProjectAgentFolderLabel(){const t=i();return o(r(t,".contextcli","agents"))?".contextcli":o(r(t,".claude","agents"))?".claude":".contextcli"}export function LocationStep(){const o=n(11),{goNext:r,updateWizardData:i,cancel:p}=f();let d,g;o[0]===Symbol.for("react.memo_cache_sentinel")?(d={label:`Proyecto (${getProjectAgentFolderLabel()}/agents/)`,value:"projectSettings"},o[0]=d):d=o[0],o[1]===Symbol.for("react.memo_cache_sentinel")?(g=[d,{label:"Personal (~/.contextcli/agents/)",value:"userSettings"}],o[1]=g):g=o[1];const j=g;let b,h,x,y;return o[2]===Symbol.for("react.memo_cache_sentinel")?(b=e(l,{children:[t(m,{shortcut:"↑↓",action:"navegar"}),t(m,{shortcut:"Enter",action:"seleccionar"}),t(a,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancelar"})]}),o[2]=b):b=o[2],o[3]!==r||o[4]!==i?(h=t=>{i({location:t}),r()},o[3]=r,o[4]=i,o[5]=h):h=o[5],o[6]!==p?(x=()=>p(),o[6]=p,o[7]=x):x=o[7],o[8]!==h||o[9]!==x?(y=t(u,{subtitle:"Elegir ubicacion",footerText:b,children:t(c,{children:t(s,{options:j,onChange:h,onCancel:x},"location-select")})}),o[8]=h,o[9]=x,o[10]=y):y=o[10],y}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e,jsxs as o}from"react/jsx-runtime";import{existsSync as t}from"fs";import{join as n}from"path";import{c as r}from"react/compiler-runtime";import{Box as a}from"../../../../ink.js";import{useKeybinding as m}from"../../../../keybindings/useKeybinding.js";import{isAutoMemoryEnabled as l}from"../../../../memdir/paths.js";import{loadAgentMemoryPrompt as i}from"../../../../tools/AgentTool/agentMemory.js";import{getCwd as c}from"../../../../utils/cwd.js";import{ConfigurableShortcutHint as s}from"../../../ConfigurableShortcutHint.js";import{Select as u}from"../../../CustomSelect/select.js";import{Byline as f}from"../../../design-system/Byline.js";import{KeyboardShortcutHint as g}from"../../../design-system/KeyboardShortcutHint.js";import{useWizard as p}from"../../../wizard/index.js";import{WizardDialogLayout as d}from"../../../wizard/WizardDialogLayout.js";export function MemoryStep(){const y=r(13),{goNext:b,goBack:j,updateWizardData:x,wizardData:v}=p();let A;y[0]===Symbol.for("react.memo_cache_sentinel")?(A={context:"Confirmation"},y[0]=A):A=y[0],m("confirm:no",j,A);const h="userSettings"===v.location;let S;if(y[1]!==h){const e=function(){const e=c();return t(n(e,".
|
|
1
|
+
import{jsx as e,jsxs as o}from"react/jsx-runtime";import{existsSync as t}from"fs";import{join as n}from"path";import{c as r}from"react/compiler-runtime";import{Box as a}from"../../../../ink.js";import{useKeybinding as m}from"../../../../keybindings/useKeybinding.js";import{isAutoMemoryEnabled as l}from"../../../../memdir/paths.js";import{loadAgentMemoryPrompt as i}from"../../../../tools/AgentTool/agentMemory.js";import{getCwd as c}from"../../../../utils/cwd.js";import{ConfigurableShortcutHint as s}from"../../../ConfigurableShortcutHint.js";import{Select as u}from"../../../CustomSelect/select.js";import{Byline as f}from"../../../design-system/Byline.js";import{KeyboardShortcutHint as g}from"../../../design-system/KeyboardShortcutHint.js";import{useWizard as p}from"../../../wizard/index.js";import{WizardDialogLayout as d}from"../../../wizard/WizardDialogLayout.js";export function MemoryStep(){const y=r(13),{goNext:b,goBack:j,updateWizardData:x,wizardData:v}=p();let A;y[0]===Symbol.for("react.memo_cache_sentinel")?(A={context:"Confirmation"},y[0]=A):A=y[0],m("confirm:no",j,A);const h="userSettings"===v.location;let S;if(y[1]!==h){const e=function(){const e=c();return t(n(e,".contextcli","agent-memory"))||t(n(e,".contextcli","agent-memory-local"))?".contextcli":t(n(e,".claude","agent-memory"))||t(n(e,".claude","agent-memory-local"))?".claude":".contextcli"}();S=h?[{label:"Alcance de usuario (~/.contextcli/agent-memory/) (Recomendado)",value:"user"},{label:"Ninguna (sin memoria persistente)",value:"none"},{label:`Alcance de proyecto (${e}/agent-memory/)`,value:"project"},{label:`Alcance local (${e}/agent-memory-local/)`,value:"local"}]:[{label:`Alcance de proyecto (${e}/agent-memory/) (Recomendado)`,value:"project"},{label:"Ninguna (sin memoria persistente)",value:"none"},{label:"Alcance de usuario (~/.contextcli/agent-memory/)",value:"user"},{label:`Alcance local (${e}/agent-memory-local/)`,value:"local"}],y[1]=h,y[2]=S}else S=y[2];const C=S;let z;y[3]!==b||y[4]!==x||y[5]!==v.finalAgent||y[6]!==v.systemPrompt?(z=e=>{const o="none"===e?void 0:e,t=v.finalAgent?.agentType;x({selectedMemory:o,finalAgent:v.finalAgent?{...v.finalAgent,memory:o,getSystemPrompt:l()&&o&&t?()=>v.systemPrompt+"\n\n"+i(t,o):()=>v.systemPrompt}:void 0}),b()},y[3]=b,y[4]=x,y[5]=v.finalAgent,y[6]=v.systemPrompt,y[7]=z):z=y[7];const P=z;let k,w;return y[8]===Symbol.for("react.memo_cache_sentinel")?(k=o(f,{children:[e(g,{shortcut:"↑↓",action:"navegar"}),e(g,{shortcut:"Enter",action:"seleccionar"}),e(s,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"volver"})]}),y[8]=k):k=y[8],y[9]!==j||y[10]!==P||y[11]!==C?(w=e(d,{subtitle:"Configurar memoria del agente",footerText:k,children:e(a,{children:e(u,{options:C,onChange:P,onCancel:j},"memory-select")})}),y[9]=j,y[10]=P,y[11]=C,y[12]=w):w=y[12],w}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isEnvTruthy as e}from"../utils/envUtils.js";function getOauthConfigType(){if("ant"===process.env.USER_TYPE){if(e(process.env.USE_LOCAL_OAUTH))return"local";if(e(process.env.USE_STAGING_OAUTH))return"staging"}return"prod"}export function fileSuffixForOauthConfig(){if(process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL||process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL)return"-custom-oauth";switch(getOauthConfigType()){case"local":return"-local-oauth";case"staging":return"-staging-oauth";case"prod":return""}}function parseSpaceSeparatedList(e){return e?.split(/\s+/).filter(Boolean)??[]}export function getOpenAIOriginator(){return process.env.OPENAI_OAUTH_ORIGINATOR?.trim()||"codex_cli_rs"}const t="/auth/callback",_=`http://localhost:1455${t}`,o=["openid","profile","email","offline_access"];export const CLAUDE_AI_INFERENCE_SCOPE="user:inference";export const CLAUDE_AI_PROFILE_SCOPE="user:profile";export const OAUTH_BETA_HEADER="oauth-2025-04-20";export const CONSOLE_OAUTH_SCOPES=["org:create_api_key","user:profile"];export const CLAUDE_AI_OAUTH_SCOPES=["user:profile","user:inference","user:sessions:claude_code","user:mcp_servers","user:file_upload"];export const ALL_OAUTH_SCOPES=Array.from(new Set([...CONSOLE_OAUTH_SCOPES,...CLAUDE_AI_OAUTH_SCOPES]));const a={BASE_API_URL:"https://api.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.claude.com/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude.com/cai/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude.ai",TOKEN_URL:"https://platform.claude.com/v1/oauth/token",API_KEY_URL:"https://api.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.claude.com/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.claude.com/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.claude.com/oauth/code/callback",CLIENT_ID:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",OAUTH_FILE_SUFFIX:"",MCP_PROXY_URL:"https://mcp-proxy.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"};export const MCP_CLIENT_METADATA_URL="https://claude.ai/oauth/claude-code-client-metadata";const c="ant"===process.env.USER_TYPE?{BASE_API_URL:"https://api-staging.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.staging.ant.dev/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude-ai.staging.ant.dev/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude-ai.staging.ant.dev",TOKEN_URL:"https://platform.staging.ant.dev/v1/oauth/token",API_KEY_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.staging.ant.dev/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.staging.ant.dev/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.staging.ant.dev/oauth/code/callback",CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-staging-oauth",MCP_PROXY_URL:"https://mcp-proxy-staging.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"}:void 0;const s=["https://beacon.claude-ai.staging.ant.dev","https://claude.fedstart.com","https://claude-staging.fedstart.com"];export function getOauthConfig(){let e=(()=>{switch(getOauthConfigType()){case"local":return function(){const e=(process.env.CONTEXT_LOCAL_OAUTH_API_BASE??process.env.CLAUDE_LOCAL_OAUTH_API_BASE)?.replace(/\/$/,"")??"http://localhost:8000",t=(process.env.CONTEXT_LOCAL_OAUTH_APPS_BASE??process.env.CLAUDE_LOCAL_OAUTH_APPS_BASE)?.replace(/\/$/,"")??"http://localhost:4000",_=(process.env.CONTEXT_LOCAL_OAUTH_CONSOLE_BASE??process.env.CLAUDE_LOCAL_OAUTH_CONSOLE_BASE)?.replace(/\/$/,"")??"http://localhost:3000";return{BASE_API_URL:e,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${t}/oauth/authorize`,CLAUDE_AI_ORIGIN:t,TOKEN_URL:`${e}/v1/oauth/token`,API_KEY_URL:`${e}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${e}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-local-oauth",MCP_PROXY_URL:"http://localhost:8205",MCP_PROXY_PATH:"/v1/toolbox/shttp/mcp/{server_id}"}}();case"staging":return c??a;case"prod":return a}})();const t=process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL??process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL;if(t){const _=t.replace(/\/$/,"");if(!s.includes(_)){const e=void 0!==process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL?"CONTEXT_CODE_CUSTOM_OAUTH_URL":"CLAUDE_CODE_CUSTOM_OAUTH_URL";throw new Error(`${e} is not an approved endpoint.`)}e={...e,BASE_API_URL:_,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_ORIGIN:_,TOKEN_URL:`${_}/v1/oauth/token`,API_KEY_URL:`${_}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${_}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,OAUTH_FILE_SUFFIX:"-custom-oauth"}}const _=process.env.CONTEXT_CODE_OAUTH_CLIENT_ID??process.env.CLAUDE_CODE_OAUTH_CLIENT_ID;return _&&(e={...e,CLIENT_ID:_}),e}export function getOpenAIOAuthConfig(){const e=process.env.OPENAI_OAUTH_BASE_URL?.replace(/\/$/,"")??process.env.OPENAI_OAUTH_ENDPOINT_BASE?.replace(/\/$/,"")??"https://auth.openai.com";return{AUTHORIZE_URL:process.env.OPENAI_OAUTH_AUTHORIZE_URL??`${e}/oauth/authorize`,TOKEN_URL:process.env.OPENAI_OAUTH_TOKEN_URL??`${e}/oauth/token`,CLIENT_ID:process.env.OPENAI_OAUTH_CLIENT_ID??"app_EMoamEEZ73f0CkXaXp7hrann",MANUAL_REDIRECT_URL:process.env.OPENAI_OAUTH_MANUAL_REDIRECT_URL??process.env.OPENAI_OAUTH_REDIRECT_URL??_,LOCAL_REDIRECT_URL:process.env.OPENAI_OAUTH_LOCAL_REDIRECT_URL??_,CALLBACK_PATH:process.env.OPENAI_OAUTH_CALLBACK_PATH??t,CALLBACK_PORT:parseInt(process.env.OPENAI_OAUTH_CALLBACK_PORT||String(1455),10),SUCCESS_URL:process.env.OPENAI_OAUTH_SUCCESS_URL??(e?`${e}/oauth/code/success?app=codex`:void 0),FILE_SUFFIX:"-openai-oauth",BASE_API_URL:e,PROFILE_URL:process.env.OPENAI_OAUTH_PROFILE_URL??(e?`${e}/api/oauth/profile`:void 0),SCOPES:parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES).length>0?parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES):[...o]}}
|
|
1
|
+
import{isEnvTruthy as e}from"../utils/envUtils.js";function getOauthConfigType(){if("ant"===process.env.USER_TYPE){if(e(process.env.USE_LOCAL_OAUTH))return"local";if(e(process.env.USE_STAGING_OAUTH))return"staging"}return"prod"}export function fileSuffixForOauthConfig(){if(process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL||process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL)return"-custom-oauth";switch(getOauthConfigType()){case"local":return"-local-oauth";case"staging":return"-staging-oauth";case"prod":return""}}function parseSpaceSeparatedList(e){return e?.split(/\s+/).filter(Boolean)??[]}export function getOpenAIOriginator(){return process.env.OPENAI_OAUTH_ORIGINATOR?.trim()||"codex_cli_rs"}const t="/auth/callback",_=`http://localhost:1455${t}`,o=["openid","profile","email","offline_access"];export const CLAUDE_AI_INFERENCE_SCOPE="user:inference";export const CLAUDE_AI_PROFILE_SCOPE="user:profile";export const OAUTH_BETA_HEADER="oauth-2025-04-20";export const CONSOLE_OAUTH_SCOPES=["org:create_api_key","user:profile"];export const CLAUDE_AI_OAUTH_SCOPES=["user:profile","user:inference","user:sessions:claude_code","user:mcp_servers","user:file_upload"];export const ALL_OAUTH_SCOPES=Array.from(new Set([...CONSOLE_OAUTH_SCOPES,...CLAUDE_AI_OAUTH_SCOPES]));const a={BASE_API_URL:"https://api.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.claude.com/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude.com/cai/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude.ai",TOKEN_URL:"https://platform.claude.com/v1/oauth/token",API_KEY_URL:"https://api.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.claude.com/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.claude.com/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.claude.com/oauth/code/callback",CLIENT_ID:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",OAUTH_FILE_SUFFIX:"",MCP_PROXY_URL:"https://mcp-proxy.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"};export const MCP_CLIENT_METADATA_URL="https://claude.ai/oauth/claude-code-client-metadata";const c="ant"===process.env.USER_TYPE?{BASE_API_URL:"https://api-staging.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.staging.ant.dev/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude-ai.staging.ant.dev/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude-ai.staging.ant.dev",TOKEN_URL:"https://platform.staging.ant.dev/v1/oauth/token",API_KEY_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.staging.ant.dev/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.staging.ant.dev/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.staging.ant.dev/oauth/code/callback",CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-staging-oauth",MCP_PROXY_URL:"https://mcp-proxy-staging.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"}:void 0;const s=["https://beacon.claude-ai.staging.ant.dev","https://claude.fedstart.com","https://claude-staging.fedstart.com"];export function getOauthConfig(){let e=(()=>{switch(getOauthConfigType()){case"local":return function(){const e=(process.env.CONTEXT_LOCAL_OAUTH_API_BASE??process.env.CLAUDE_LOCAL_OAUTH_API_BASE)?.replace(/\/$/,"")??"http://localhost:8000",t=(process.env.CONTEXT_LOCAL_OAUTH_APPS_BASE??process.env.CLAUDE_LOCAL_OAUTH_APPS_BASE)?.replace(/\/$/,"")??"http://localhost:4000",_=(process.env.CONTEXT_LOCAL_OAUTH_CONSOLE_BASE??process.env.CLAUDE_LOCAL_OAUTH_CONSOLE_BASE)?.replace(/\/$/,"")??"http://localhost:3000";return{BASE_API_URL:e,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${t}/oauth/authorize`,CLAUDE_AI_ORIGIN:t,TOKEN_URL:`${e}/v1/oauth/token`,API_KEY_URL:`${e}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${e}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-local-oauth",MCP_PROXY_URL:"http://localhost:8205",MCP_PROXY_PATH:"/v1/toolbox/shttp/mcp/{server_id}"}}();case"staging":return c??a;case"prod":return a}})();const t=process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL??process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL;if(t){const _=t.replace(/\/$/,"");if(!s.includes(_)){const e=void 0!==process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL?"CONTEXT_CODE_CUSTOM_OAUTH_URL":"CLAUDE_CODE_CUSTOM_OAUTH_URL";throw new Error(`${e} is not an approved endpoint.`)}e={...e,BASE_API_URL:_,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_ORIGIN:_,TOKEN_URL:`${_}/v1/oauth/token`,API_KEY_URL:`${_}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${_}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,OAUTH_FILE_SUFFIX:"-custom-oauth"}}const _=process.env.CONTEXT_CODE_OAUTH_CLIENT_ID??process.env.CLAUDE_CODE_OAUTH_CLIENT_ID;return _&&(e={...e,CLIENT_ID:_}),e}export function getCopilotOAuthConfig(){return{CLIENT_ID:process.env.COPILOT_OAUTH_CLIENT_ID?.trim()||"Iv1.b507a08c87ecfe98",DEVICE_CODE_URL:"https://github.com/login/device/code",TOKEN_URL:"https://github.com/login/oauth/access_token",SESSION_TOKEN_URL:"https://api.github.com/copilot_internal/v2/token",SCOPES:["read:user"]}}export function getOpenAIOAuthConfig(){const e=process.env.OPENAI_OAUTH_BASE_URL?.replace(/\/$/,"")??process.env.OPENAI_OAUTH_ENDPOINT_BASE?.replace(/\/$/,"")??"https://auth.openai.com";return{AUTHORIZE_URL:process.env.OPENAI_OAUTH_AUTHORIZE_URL??`${e}/oauth/authorize`,TOKEN_URL:process.env.OPENAI_OAUTH_TOKEN_URL??`${e}/oauth/token`,CLIENT_ID:process.env.OPENAI_OAUTH_CLIENT_ID??"app_EMoamEEZ73f0CkXaXp7hrann",MANUAL_REDIRECT_URL:process.env.OPENAI_OAUTH_MANUAL_REDIRECT_URL??process.env.OPENAI_OAUTH_REDIRECT_URL??_,LOCAL_REDIRECT_URL:process.env.OPENAI_OAUTH_LOCAL_REDIRECT_URL??_,CALLBACK_PATH:process.env.OPENAI_OAUTH_CALLBACK_PATH??t,CALLBACK_PORT:parseInt(process.env.OPENAI_OAUTH_CALLBACK_PORT||String(1455),10),SUCCESS_URL:process.env.OPENAI_OAUTH_SUCCESS_URL??(e?`${e}/oauth/code/success?app=codex`:void 0),FILE_SUFFIX:"-openai-oauth",BASE_API_URL:e,PROFILE_URL:process.env.OPENAI_OAUTH_PROFILE_URL??(e?`${e}/api/oauth/profile`:void 0),SCOPES:parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES).length>0?parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES):[...o]}}
|