@iaforged/context-code 2.3.1 → 2.3.3
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/QueryEngine.js +1 -1
- package/dist/src/cli/handlers/auth.js +1 -1
- package/dist/src/cli/handlers/modelList.js +1 -1
- package/dist/src/cli/structuredIO.js +1 -1
- package/dist/src/commands/branch/index.js +1 -1
- package/dist/src/commands/login/login.js +1 -1
- package/dist/src/commands/profile/index.js +1 -1
- package/dist/src/commands/profile/profile.js +1 -1
- package/dist/src/commands/provider/index.js +1 -1
- package/dist/src/commands/provider/provider.js +1 -1
- package/dist/src/components/ConsoleOAuthFlow.js +1 -1
- package/dist/src/components/LogoV2/Opus1mMergeNotice.js +1 -1
- package/dist/src/components/ModelPicker.js +1 -1
- package/dist/src/components/SessionTokenFooter.js +1 -0
- package/dist/src/constants/oauth.js +1 -1
- package/dist/src/core/providers/providerCore.js +1 -1
- package/dist/src/hooks/useTypeahead.js +1 -1
- package/dist/src/main.js +1 -1
- package/dist/src/screens/REPL.js +1 -1
- package/dist/src/services/api/openai.js +1 -1
- package/dist/src/services/oauth/auth-code-listener.js +1 -1
- package/dist/src/services/oauth/client.js +1 -1
- package/dist/src/services/oauth/geminiCli.js +1 -1
- package/dist/src/utils/auth.js +1 -1
- package/dist/src/utils/claudeInChrome/setup.js +1 -1
- package/dist/src/utils/envUtils.js +1 -1
- package/dist/src/utils/git.js +1 -1
- package/dist/src/utils/localInstaller.js +1 -1
- package/dist/src/utils/model/configs.js +1 -1
- package/dist/src/utils/model/model.js +1 -1
- package/dist/src/utils/model/modelAllowlist.js +1 -1
- package/dist/src/utils/model/modelOptions.js +1 -1
- package/dist/src/utils/model/providerBaseUrls.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/model/validateModel.js +1 -1
- package/dist/src/utils/ripgrep.js +1 -1
- package/dist/webapp/chunk-VAB2VXFI.js +1 -1
- package/dist/webapp/main-MTQLKGXD.js +1 -1
- package/dist/webapp/ngsw.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isEnvTruthy as e}from"../envUtils.js";import{getSecureStorage as r}from"../secureStorage/index.js";import{isProviderBaseUrlCustomized as
|
|
1
|
+
import{isEnvTruthy as e}from"../envUtils.js";import{getSecureStorage as r}from"../secureStorage/index.js";import{isProviderBaseUrlCustomized as i}from"./providerBaseUrls.js";import{getProviderOverride as o}from"./providerOverrideContext.js";import{getStoredActiveProviderPreference as n}from"./providerProfilesDb.js";import{listProviderProfiles as t}from"./providerProfiles.js";export function providerPreferenceToApiProvider(e){if(e)return"claude"===e?"firstParty":e}export function isOpenAIProviderConfigured(){return e(process.env.CLAUDE_CODE_USE_OPENAI)||Boolean(process.env.OPENAI_API_KEY)||Boolean(process.env.OPENAI_API_TOKEN)||Boolean(process.env.OPENAI_OAUTH_TOKEN)||function(){try{const e=r().read(),i=Object.entries(e?.providerProfileOauth??{}).some(([e,r])=>e.startsWith("openai/")&&"object"==typeof r&&null!==r&&"string"==typeof r.accessToken&&r.accessToken.trim());return Boolean(i||e?.openAiOauth?.accessToken)}catch{return!1}}()}export function isOpenRouterProviderConfigured(){try{const e=r().read(),i=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("openrouter/")&&"string"==typeof r&&r.trim());return Boolean(process.env.OPENROUTER_API_KEY||process.env.OPENROUTER_API_TOKEN||e?.providerApiKeys?.openrouter||i)}catch{return Boolean(process.env.OPENROUTER_API_KEY||process.env.OPENROUTER_API_TOKEN)}}export function isOllamaProviderConfigured(){try{const e=n();return Boolean(process.env.OLLAMA_BASE_URL||i("ollama")||t("ollama").length>0||"ollama"===e)}catch{return Boolean(process.env.OLLAMA_BASE_URL)}}export function isOllamaCloudProviderConfigured(){if(isOllamaProviderConfigured())return!0;try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("ollama-cloud/")&&"string"==typeof r&&r.trim()),t=n();return Boolean(process.env.OLLAMA_CLOUD_BASE_URL||process.env.OLLAMA_BASE_URL||process.env.OLLAMA_API_KEY||e?.providerApiKeys?.["ollama-cloud"]||o||i("ollama-cloud")||"ollama-cloud"===t||"ollama"===t)}catch{return Boolean(process.env.OLLAMA_CLOUD_BASE_URL||process.env.OLLAMA_BASE_URL||process.env.OLLAMA_API_KEY)}}export function isGeminiApiProviderConfigured(){try{const e=r().read(),i=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("gemini-api/")&&"string"==typeof r&&r.trim());return Boolean(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY||e?.providerApiKeys?.["gemini-api"]||i)}catch{return Boolean(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY)}}export function isGeminiGoogleProviderConfigured(){try{const e=r().read(),i=n();return Boolean(process.env.GEMINI_OAUTH_TOKEN||process.env.GOOGLE_OAUTH_ACCESS_TOKEN||process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.GEMINI_GOOGLE_PROJECT_ID||process.env.GOOGLE_CLOUD_PROJECT||process.env.GCLOUD_PROJECT||Object.entries(e?.providerProfileOauth??{}).some(([e,r])=>e.startsWith("gemini-google/")&&"object"==typeof r&&null!==r&&"string"==typeof r.accessToken&&r.accessToken.trim())||"gemini-google"===i)}catch{return Boolean(process.env.GEMINI_OAUTH_TOKEN||process.env.GOOGLE_OAUTH_ACCESS_TOKEN||process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.GEMINI_GOOGLE_PROJECT_ID||process.env.GOOGLE_CLOUD_PROJECT||process.env.GCLOUD_PROJECT)}}export function isZAIProviderConfigured(){try{const e=r().read(),i=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("zai/")&&"string"==typeof r&&r.trim());return Boolean(process.env.ZAI_API_KEY||e?.providerApiKeys?.zai||i)}catch{return Boolean(process.env.ZAI_API_KEY)}}export function isMiniMaxProviderConfigured(){try{const e=r().read(),i=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("minimax/")&&"string"==typeof r&&r.trim());return Boolean(process.env.MINIMAX_API_KEY||e?.providerApiKeys?.minimax||i)}catch{return Boolean(process.env.MINIMAX_API_KEY)}}export function isNvidiaProviderConfigured(){try{const e=r().read(),i=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("nvidia/")&&"string"==typeof r&&r.trim());return Boolean(process.env.NVIDIA_API_KEY||e?.providerApiKeys?.nvidia||i)}catch{return Boolean(process.env.NVIDIA_API_KEY)}}export function isDeepSeekProviderConfigured(){try{const e=r().read(),i=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("deepseek/")&&"string"==typeof r&&r.trim());return Boolean(process.env.DEEPSEEK_API_KEY||e?.providerApiKeys?.deepseek||i)}catch{return Boolean(process.env.DEEPSEEK_API_KEY)}}export function isXaiProviderConfigured(){return isApiKeyProviderConfigured("xai","XAI_API_KEY")}export const OPENAI_COMPAT_API_KEY_PROVIDERS=[{id:"gmi",envVar:"GMI_API_KEY"},{id:"novita",envVar:"NOVITA_API_KEY"},{id:"stepfun",envVar:"STEPFUN_API_KEY"},{id:"huggingface",envVar:"HF_TOKEN"},{id:"opencode-zen",envVar:"OPENCODE_ZEN_API_KEY"},{id:"arcee",envVar:"ARCEEAI_API_KEY"},{id:"alibaba",envVar:"DASHSCOPE_API_KEY"},{id:"kimi",envVar:"KIMI_API_KEY"}];const s=new Set(OPENAI_COMPAT_API_KEY_PROVIDERS.map(e=>e.id));export function isApiKeyProviderConfigured(e,i){try{const o=r().read(),n=Object.entries(o?.providerProfileApiKeys??{}).some(([r,i])=>r.startsWith(`${e}/`)&&"string"==typeof i&&i.trim());return Boolean(i&&process.env[i]||o?.providerApiKeys?.[e]||n)}catch{return Boolean(i&&process.env[i])}}export function isOpenAICompatibleProvider(e){return"openai"===e||"openrouter"===e||"ollama"===e||"ollama-cloud"===e||"gemini-api"===e||"gemini-google"===e||"zai"===e||"minimax"===e||"nvidia"===e||"deepseek"===e||"xai"===e||s.has(e)||"custom-openai"===e}export function usesOpenAIBackend(e){return isOpenAICompatibleProvider(e)&&"minimax"!==e}export function hasDualProviderSessions(){return(isOpenAIProviderConfigured()||isOpenRouterProviderConfigured()||isOllamaProviderConfigured()||isOllamaCloudProviderConfigured()||isGeminiApiProviderConfigured()||isGeminiGoogleProviderConfigured()||isZAIProviderConfigured()||isMiniMaxProviderConfigured()||isNvidiaProviderConfigured()||isDeepSeekProviderConfigured()||isXaiProviderConfigured()||OPENAI_COMPAT_API_KEY_PROVIDERS.some(e=>isApiKeyProviderConfigured(e.id,e.envVar)))&&function(){try{const e=r().read(),i=Object.entries(e?.providerProfileOauth??{}).some(([e,r])=>e.startsWith("claude/")&&"object"==typeof r&&null!==r&&"string"==typeof r.accessToken&&r.accessToken.trim());return Boolean(i)}catch{return!1}}()}export function getAPIProvider(){const r=o();if(r)return r;const i=process.env.CONTEXT_ACTIVE_PROVIDER||process.env.CLAUDE_PROVIDER;if(i)return i;if(e(process.env.CLAUDE_CODE_USE_BEDROCK))return"bedrock";if(e(process.env.CLAUDE_CODE_USE_VERTEX))return"vertex";if(e(process.env.CLAUDE_CODE_USE_FOUNDRY))return"foundry";try{const e=n();if("claude"===e)return"firstParty";if("openai"===e)return"openai";if("openrouter"===e)return"openrouter";if("ollama"===e)return"ollama";if("ollama-cloud"===e)return"ollama-cloud";if("gemini-api"===e)return"gemini-api";if("gemini-google"===e)return"gemini-google";if("zai"===e)return"zai";if("minimax"===e)return"minimax";if("nvidia"===e)return"nvidia";if("deepseek"===e)return"deepseek";if("xai"===e)return"xai";if(e&&s.has(e))return e;if("custom-openai"===e)return"custom-openai";if("custom-anthropic"===e)return"custom-anthropic"}catch{}const t=isOpenAIProviderConfigured(),a=isOpenRouterProviderConfigured(),p=isOllamaProviderConfigured(),c=isOllamaCloudProviderConfigured(),u=isGeminiApiProviderConfigured(),d=isGeminiGoogleProviderConfigured(),v=isZAIProviderConfigured(),P=isMiniMaxProviderConfigured(),A=isNvidiaProviderConfigured(),_=isDeepSeekProviderConfigured(),f=isXaiProviderConfigured();if(t)return"openai";if(a)return"openrouter";if(v)return"zai";if(P)return"minimax";if(A)return"nvidia";if(_)return"deepseek";if(f)return"xai";for(const{id:e,envVar:r}of OPENAI_COMPAT_API_KEY_PROVIDERS)if(isApiKeyProviderConfigured(e,r))return e;return u?"gemini-api":d?"gemini-google":c?"ollama-cloud":p?"ollama":"firstParty"}export function getAPIProviderForStatsig(){return getAPIProvider()}export function isFirstPartyAnthropicBaseUrl(){const e=process.env.ANTHROPIC_BASE_URL;if(!e)return!0;try{const r=new URL(e).host,i=["api.anthropic.com"];return"ant"===process.env.USER_TYPE&&i.push("api-staging.anthropic.com"),i.includes(r)}catch{return!1}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MODEL_ALIASES as e}from"./aliases.js";import{isModelAllowed as r}from"./modelAllowlist.js";import{getAPIProvider as n}from"./providers.js";import{sideQuery as o}from"../sideQuery.js";import{NotFoundError as t,APIError as i,APIConnectionError as a,AuthenticationError as
|
|
1
|
+
import{MODEL_ALIASES as e}from"./aliases.js";import{isModelAllowed as r}from"./modelAllowlist.js";import{getAPIProvider as n}from"./providers.js";import{sideQuery as o}from"../sideQuery.js";import{NotFoundError as t,APIError as i,APIConnectionError as a,AuthenticationError as s}from"@anthropic-ai/sdk/index.js";import{getModelStrings as l}from"./modelStrings.js";import{fetchProviderModels as u}from"./providerModels.js";const d=new Map;export async function validateModel(l){const c=l.trim(),f=n(),m=`${f}:${c}`;if(!c)return{valid:!1,error:"Model name cannot be empty"};if(!r(c))return{valid:!1,error:`Model '${c}' is not in the list of available models`};const p=c.toLowerCase();if(e.includes(p))return{valid:!0};if(c===process.env.ANTHROPIC_CUSTOM_MODEL_OPTION)return{valid:!0};if(d.has(m))return{valid:!0};const v=await async function(e,r){if("openrouter"!==r&&"ollama"!==r&&"zai"!==r&&"minimax"!==r&&"nvidia"!==r&&"deepseek"!==r)return null;const n=await u(r);if(0===n.length)return null;const o=e?.toLowerCase()??"";if(!o)return null;if(n.some(e=>e.value?.toLowerCase()===o||e.label?.toLowerCase()===o))return"ollama"===r?null:{valid:!0};return{valid:!1,error:`Model '${e}' is not available for ${getProviderLabel(r)}.`}}(c,f);if(null!==v)return v.valid&&d.set(m,!0),v;try{return await o({model:c,max_tokens:1,maxRetries:0,querySource:"model_validation",messages:[{role:"user",content:[{type:"text",text:"Hi",cache_control:{type:"ephemeral"}}]}]}),d.set(m,!0),{valid:!0}}catch(e){return function(e,r,n){if(e instanceof t){const e=get3PFallbackSuggestion(r);return{valid:!1,error:`Model '${r}' not found${e?`. Try '${e}' instead`:""}`}}if(e instanceof i){if(e instanceof s)return{valid:!1,error:"Authentication failed. Please check your API credentials."};if(e instanceof a)return{valid:!1,error:"Network error. Please check your internet connection."};const n=e.error;return n&&"object"==typeof n&&"type"in n&&"not_found_error"===n.type&&"message"in n&&"string"==typeof n.message&&n.message.includes("model:")?{valid:!1,error:`Model '${r}' not found`}:{valid:!1,error:`API error: ${e.message}`}}const o=function(e,r,n){const o=e instanceof Error?e.message:String(e),t=o.replace(/\s+/g," ").trim(),i=t.toLowerCase(),a=t.match(/\b(4\d\d|5\d\d)\b/),s=a?Number(a[1]):void 0,l=getProviderLabel(n),u=get3PFallbackSuggestion(r),d=u?` Try '${u}' instead.`:"";if(i.includes("no credentials were found")||401===s||403===s){if("openrouter"===n||"zai"===n||"minimax"===n||"nvidia"===n||"deepseek"===n)return{valid:!1,error:`${l} credentials are missing or invalid. Use /login and configure ${l}.`};if("openai"===n)return{valid:!1,error:"OpenAI authentication failed. Please log in again or check your API key."}}if(404===s||i.includes("not found"))return{valid:!1,error:`Model '${r}' not found for ${l}.${d}`};if(429===s||i.includes("rate-limit")||i.includes("rate limited"))return{valid:!1,error:`${l} rejected the validation request due to rate limits. Try again shortly or choose a different model.`};if("ollama"===n){if(i.includes("requires a subscription")||i.includes("/upgrade")||r.toLowerCase().endsWith(":cloud"))return{valid:!1,error:`Model '${r}' requires an Ollama cloud subscription. Choose a local Ollama model or upgrade your Ollama account.`};if(i.includes("fetch failed")||i.includes("econnrefused")||i.includes("localhost:11434"))return{valid:!1,error:"Ollama is not reachable. Start the local Ollama server or verify OLLAMA_BASE_URL."}}if(void 0!==s&&s>=500)return{valid:!1,error:`${l} returned a server error while validating '${r}'.`};return null}(e,r,n);if(o)return o;const l=e instanceof Error?e.message:String(e);return{valid:!1,error:`Unable to validate model: ${l}`}}(e,c,f)}}function get3PFallbackSuggestion(e){if("firstParty"===n())return;if("string"!=typeof e||0===e.trim().length)return;const r=e.toLowerCase();return r.includes("opus-4-7")||r.includes("opus_4_7")?l().opus46:r.includes("opus-4-6")||r.includes("opus_4_6")?l().opus41:r.includes("sonnet-4-6")||r.includes("sonnet_4_6")?l().sonnet45:r.includes("sonnet-4-5")||r.includes("sonnet_4_5")?l().sonnet40:void 0}function getProviderLabel(e){switch(e){case"openai":return"OpenAI";case"openrouter":return"OpenRouter";case"ollama":return"Ollama";case"zai":return"Z.AI";case"minimax":return"MiniMax";case"nvidia":return"NVIDIA NIM";case"deepseek":return"DeepSeek";case"xai":return"xAI";case"gmi":return"GMI Cloud";case"novita":return"NovitaAI";case"stepfun":return"StepFun";case"huggingface":return"HuggingFace";case"opencode-zen":return"OpenCode Zen";case"arcee":return"Arcee AI";case"alibaba":return"Alibaba (Qwen)";case"kimi":return"Kimi (Moonshot)";default:return"Context"}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{execFile as
|
|
1
|
+
import{execFile as e,spawn as r}from"child_process";import{existsSync as o}from"fs";import t from"lodash-es/memoize.js";import{homedir as s}from"os";import*as n from"path";import{logEvent as i}from"../services/analytics/index.js";import{fileURLToPath as a}from"url";import{isInBundledMode as c}from"./bundledMode.js";import{logForDebugging as p}from"./debug.js";import{isEnvDefinedFalsy as d}from"./envUtils.js";import{execFileNoThrow as l}from"./execFileNoThrow.js";import{findExecutable as g}from"./findExecutable.js";import{logError as m}from"./log.js";import{getPlatform as u}from"./platform.js";import{countCharInString as f}from"./stringUtils.js";const v=a(import.meta.url),w=n.join(v,"test"===process.env.NODE_ENV?"../../../":"../");const h=t(()=>{if(d(process.env.USE_BUILTIN_RIPGREP)){const{cmd:e}=g("rg",[]);if("rg"!==e)return{mode:"system",command:"rg",args:[]}}if(c())return{mode:"embedded",command:process.execPath,args:["--no-config"],argv0:"rg"};const e=function(){const e=[n.resolve(w,"vendor","ripgrep"),n.resolve(w,"..","vendor","ripgrep"),n.resolve(w,"..","..","vendor","ripgrep"),n.resolve(w,"..","..","..","vendor","ripgrep"),n.resolve(w,"..","..","..","node_modules","@anthropic-ai","claude-agent-sdk","vendor","ripgrep")],r="win32"===process.platform?"rg.exe":"rg",t=`${process.arch}-${"win32"===process.platform?"win32":process.platform}`;for(const s of e){const e=n.resolve(s,t,r);if(o(e))return s}return e[0]}(),r="win32"===process.platform?n.resolve(e,`${process.arch}-win32`,"rg.exe"):n.resolve(e,`${process.arch}-${process.platform}`,"rg");if("win32"===process.platform&&!o(r)){const e=function(){if("win32"!==process.platform)return null;const e=s(),r=process.env.ProgramFiles||"C:\\Program Files",t=process.env["ProgramFiles(x86)"]||"C:\\Program Files (x86)",i=process.env.LocalAppData||n.join(e,"AppData","Local"),a=[n.join(i,"Programs","Microsoft VS Code","resources","app","node_modules.asar.unpacked","@vscode","ripgrep","bin","rg.exe"),n.join(i,"Programs","Microsoft VS Code Insiders","resources","app","node_modules.asar.unpacked","@vscode","ripgrep","bin","rg.exe"),n.join(r,"Microsoft VS Code","resources","app","node_modules.asar.unpacked","@vscode","ripgrep","bin","rg.exe"),n.join(r,"Microsoft VS Code Insiders","resources","app","node_modules.asar.unpacked","@vscode","ripgrep","bin","rg.exe"),n.join(t,"Microsoft VS Code","resources","app","node_modules.asar.unpacked","@vscode","ripgrep","bin","rg.exe"),n.join(i,"Programs","Microsoft VS Code","resources","app","node_modules","@vscode","ripgrep","bin","rg.exe"),n.join(r,"Microsoft VS Code","resources","app","node_modules","@vscode","ripgrep","bin","rg.exe")];for(const e of a)if(o(e))return e;return null}();if(e)return{mode:"builtin",command:e,args:[]}}return{mode:"builtin",command:r,args:[]}});export function ripgrepCommand(){const e=h();return{rgPath:e.command,rgArgs:e.args,argv0:e.argv0}}const E=2e7;export class RipgrepTimeoutError extends Error{partialResults;constructor(e,r){super(e),this.partialResults=r,this.name="RipgrepTimeoutError"}}function ripGrepRaw(o,t,s,n,i=!1){const{rgPath:a,rgArgs:c,argv0:p}=ripgrepCommand(),d=[...c,...i?["-j","1"]:[],...o,t],l="wsl"===u()?6e4:2e4,g=parseInt(process.env.CONTEXT_CODE_GLOB_TIMEOUT_SECONDS||process.env.CLAUDE_CODE_GLOB_TIMEOUT_SECONDS||"",10)||0,m=g>0?1e3*g:l;if(p){const e=r(a,d,{argv0:p,signal:s,windowsHide:!0});let o,t="",i="",c=!1,l=!1;e.stdout?.on("data",e=>{c||(t+=e.toString(),t.length>E&&(t=t.slice(0,E),c=!0))}),e.stderr?.on("data",e=>{l||(i+=e.toString(),i.length>E&&(i=i.slice(0,E),l=!0))});const g=setTimeout(()=>{"win32"===process.platform?e.kill():(e.kill("SIGTERM"),o=setTimeout(e=>e.kill("SIGKILL"),5e3,e))},m);let u=!1;return e.on("close",(e,r)=>{if(!u)if(u=!0,clearTimeout(g),clearTimeout(o),0===e||1===e)n(null,t,i);else{const o=new Error(`ripgrep exited with code ${e}`);o.code=e??void 0,o.signal=r??void 0,n(o,t,i)}}),e.on("error",e=>{if(u)return;u=!0,clearTimeout(g),clearTimeout(o);n(e,t,i)}),e}return e(a,d,{maxBuffer:E,signal:s,timeout:m,killSignal:"win32"===process.platform?void 0:"SIGKILL"},n)}export async function ripGrepStream(e,o,t,s){await codesignRipgrepIfNecessary();const{rgPath:n,rgArgs:i,argv0:a}=ripgrepCommand();return new Promise((c,p)=>{const d=r(n,[...i,...e,o],{argv0:a,signal:t,windowsHide:!0,stdio:["ignore","pipe","ignore"]}),stripCR=e=>e.endsWith("\r")?e.slice(0,-1):e;let l="";d.stdout?.on("data",e=>{const r=(l+e.toString()).split("\n");l=r.pop()??"",r.length&&s(r.map(stripCR))});let g=!1;d.on("close",e=>{g||t.aborted||(g=!0,0===e||1===e?(l&&s([stripCR(l)]),c()):p(new Error(`ripgrep exited with code ${e}`)))}),d.on("error",e=>{g||(g=!0,p(e))})})}export async function ripGrep(e,r,o){return await codesignRipgrepIfNecessary(),_().catch(e=>{m(e)}),new Promise((t,s)=>{const handleResult=(n,a,c,d)=>{if(!n)return void t(a.trim().split("\n").map(e=>e.replace(/\r$/,"")).filter(Boolean));if(1===n.code)return void t([]);if(["ENOENT","EACCES","EPERM"].includes(n.code))return void s(n);if(!d&&function(e){return e.includes("os error 11")||e.includes("Resource temporarily unavailable")}(c))return p("rg EAGAIN error detected, retrying with single-threaded mode (-j 1)"),i("tengu_ripgrep_eagain_retry",{}),void ripGrepRaw(e,r,o,(e,r,o)=>{handleResult(e,r,o,!0)},!0);const l=a&&a.trim().length>0,g="SIGTERM"===n.signal||"SIGKILL"===n.signal||"ABORT_ERR"===n.code,f="ERR_CHILD_PROCESS_STDIO_MAXBUFFER"===n.code;let v=[];l&&(v=a.trim().split("\n").map(e=>e.replace(/\r$/,"")).filter(Boolean),v.length>0&&(g||f)&&(v=v.slice(0,-1))),p(`rg error (signal=${n.signal}, code=${n.code}, stderr: ${c}), ${v.length} results`),2!==n.code&&"ABORT_ERR"!==n.code&&m(n),g&&0===v.length?s(new RipgrepTimeoutError(`Ripgrep search timed out after ${"wsl"===u()?60:20} seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.`,v)):t(v)};ripGrepRaw(e,r,o,(e,r,o)=>{handleResult(e,r,o,!1)})})}export const countFilesRoundedRg=t(async(e,o,t=[])=>{if(n.resolve(e)!==n.resolve(s()))try{const s=["--files","--hidden"];t.forEach(e=>{s.push("--glob",`!${e}`)});const n=await async function(e,o,t){await codesignRipgrepIfNecessary();const{rgPath:s,rgArgs:n,argv0:i}=ripgrepCommand();return new Promise((a,c)=>{const p=r(s,[...n,...e,o],{argv0:i,signal:t,windowsHide:!0,stdio:["ignore","pipe","ignore"]});let d=0;p.stdout?.on("data",e=>{d+=f(e,"\n")});let l=!1;p.on("close",e=>{l||(l=!0,0===e||1===e?a(d):c(new Error(`rg --files exited ${e}`)))}),p.on("error",e=>{l||(l=!0,c(e))})})}(s,e,o);if(0===n)return 0;const i=Math.floor(Math.log10(n)),a=Math.pow(10,i);return Math.round(n/a)*a}catch(e){"AbortError"!==e?.name&&m(e)}},(e,r,o=[])=>`${e}|${o.join(",")}`);let R=null;export function getRipgrepStatus(){const e=h();return{mode:e.mode,path:e.command,working:R?.working??null}}const _=t(async()=>{if(null!==R)return;const e=h();try{let r;if(e.argv0){const o=Bun.spawn([e.command,"--version"],{argv0:e.argv0,stderr:"ignore",stdout:"pipe"}),[t,s]=await Promise.all([o.stdout.text(),o.exited]);r={code:s,stdout:t}}else r=await l(e.command,[...e.args,"--version"],{timeout:5e3});const o=0===r.code&&!!r.stdout&&r.stdout.startsWith("ripgrep ");R={working:o,lastTested:Date.now(),config:e},p(`Ripgrep first use test: ${o?"PASSED":"FAILED"} (mode=${e.mode}, path=${e.command})`),i("tengu_ripgrep_availability",{working:o?1:0,using_system:"system"===e.mode?1:0})}catch(r){R={working:!1,lastTested:Date.now(),config:e},m(r)}});let x=!1;async function codesignRipgrepIfNecessary(){if("darwin"!==process.platform||x)return;x=!0;const e=h();if("builtin"!==e.mode)return;const r=e.command;if((await l("codesign",["-vv","-d",r],{preserveOutputOnError:!1})).stdout.split("\n").find(e=>e.includes("linker-signed")))try{const e=await l("codesign",["--sign","-","--force","--preserve-metadata=entitlements,requirements,flags,runtime",r]);0!==e.code&&m(new Error(`Failed to sign ripgrep: ${e.stdout} ${e.stderr}`));const o=await l("xattr",["-d","com.apple.quarantine",r]);0!==o.code&&m(new Error(`Failed to remove quarantine: ${o.stdout} ${o.stderr}`))}catch(e){m(e)}}
|