@leviyuan/lodestar 0.18.13 → 0.18.14
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/lodestar-agent.js +1 -1
- package/dist/lodestar-setup.js +1 -1
- package/dist/lodestar-update.js +1 -1
- package/dist/lodestar.js +108 -108
- package/package.json +1 -1
package/dist/lodestar-agent.js
CHANGED
|
@@ -114,7 +114,7 @@ try {
|
|
|
114
114
|
if ($pointer -ne [IntPtr]::Zero) { [void][LodestarProxy]::GlobalFree($pointer) }
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
`;async function dS(){if(process.platform==="win32")return mS(JSON.parse(await gD("powershell.exe",["-NoProfile","-NonInteractive","-Command",lS],15000)));if(process.platform==="darwin")return cS(await gD("/usr/sbin/scutil",["--proxy"]));if(process.platform==="linux"){let A=Tw(process.env.XDG_CONFIG_HOME||Tw(vS(),".config"),"kioslaverc");try{let B=pS(await yS(A,"utf8"));if(B&&(!process.env.XDG_CURRENT_DESKTOP||/kde/i.test(process.env.XDG_CURRENT_DESKTOP)))return B}catch(B){if(B?.code!=="ENOENT")throw B}let Q;try{Q=await gD("gsettings",["list-schemas"])}catch(B){if(B?.code==="ENOENT")return{};throw B}if(!Q.split(/\r?\n/).includes("org.gnome.system.proxy"))return{};return uS(await gD("gsettings",["list-recursively","org.gnome.system.proxy"]))}return{}}function iS(A=dS,Q=process.env,B=Date.now){let I;return async(C)=>{if(DD(C)||aY(C,hC(Q,"NO_PROXY"))||hC(Q,C.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY")||hC(Q,"ALL_PROXY"))return _w(C,Q);if(!I||I.until<=B()){let g=A().catch((F)=>{if(I?.value===g)I=void 0;if(F instanceof Error&&F.message.startsWith("network proxy:"))throw F;let Y=F instanceof Error?F.code??F.name:"unknown error";throw Error(`network proxy: failed to read ${process.platform} system proxy settings (${Y})`,{cause:F})});I={until:B()+30000,value:g}}return _w(C,Q,await I.value)}}var Ow=iS();var Wv=new wv({keepAlive:!0}),Zv=new Vv({keepAlive:!0}),j1;function Rv(A,Q){if(!Q)return A.protocol==="https:"?Zv:Wv;return A.protocol==="https:"?new O1.HttpsProxyAgent(Q):new _1.HttpProxyAgent(Q)}async function Lv(A,Q,B){if(typeof Bun<"u"){let F=A.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY";if(!B&&(process.env[F.toLowerCase()]||process.env[F])){let Y=await Promise.resolve().then(() => LC($1(),1));return j1??=new Y.Agent,await Y.fetch(A,{...Q,redirect:"manual",dispatcher:j1})}return globalThis.fetch(A.href,{...Q,redirect:"manual",...B?{proxy:B}:{}})}let I=new Request(A,{...Q,redirect:"manual",duplex:"half"}),C=await mF(A,{method:I.method,headers:Object.fromEntries(I.headers),body:I.body?T1.fromWeb(I.body):void 0,signal:I.signal,agent:Rv(A,B),redirect:"manual"}),g=I.method==="HEAD"||[204,205,304].includes(C.status)||!C.body?null:T1.toWeb(C.body);return new Response(g,{status:C.status,statusText:C.statusText,headers:[...C.headers]})}async function Xv(A,Q,B,I=Ow){let C=new URL(A),g={...Q};for(let F=0;;F++){if(!["http:","https:"].includes(C.protocol))throw Error(`network: unsupported URL protocol ${C.protocol}`);if(B&&!DD(C))throw Error("network: local request must remain on loopback");g.signal?.throwIfAborted();let Y=B?void 0:await I(C),J=await Lv(C,g,Y),N=J.headers.get("location");if(![301,302,303,307,308].includes(J.status)||!N||Q.redirect==="manual")return J;if(await J.body?.cancel(),Q.redirect==="error")throw Error("network: redirect rejected");if(F>=20)throw Error("network: too many redirects");let G=new URL(N,C),M=new Headers(g.headers);if(G.origin!==C.origin)for(let W of["authorization","proxy-authorization","cookie","host"])M.delete(W);let V=(g.method??"GET").toUpperCase();if(J.status===303&&V!=="HEAD"||[301,302].includes(J.status)&&V==="POST"){g={...g,method:"GET",body:void 0};for(let W of["content-type","content-length","content-encoding"])M.delete(W)}else if(g.body instanceof ReadableStream)throw Error("network: cannot replay a streamed body after redirect");g.headers=M,C=G}}function q1(A,Q={}){return Xv(A,Q,!0)}import{realpathSync as x1}from"node:fs";import{fileURLToPath as Kv}from"node:url";function P1(A){if(typeof A!=="string"||!A.trim())throw Error('agent run requires "description" (CLI: --description)');let Q=A.trim();if(/[\r\n\u2028\u2029]/.test(Q))throw Error("agent description must be a single line");if([...Q].length>60)throw Error("agent description exceeds 60 characters");return Q}async function Hv(A=process.argv.slice(2)){let Q=A.shift()??"";if(!Q||Q==="help"||Q==="--help"||Q==="-h"){process.stdout.write(`${k1()}
|
|
117
|
+
`;async function dS(){if(process.platform==="win32")return mS(JSON.parse(await gD("powershell.exe",["-NoProfile","-NonInteractive","-Command",lS],15000)));if(process.platform==="darwin")return cS(await gD("/usr/sbin/scutil",["--proxy"]));if(process.platform==="linux"){let A=Tw(process.env.XDG_CONFIG_HOME||Tw(vS(),".config"),"kioslaverc");try{let B=pS(await yS(A,"utf8"));if(B&&(!process.env.XDG_CURRENT_DESKTOP||/kde/i.test(process.env.XDG_CURRENT_DESKTOP)))return B}catch(B){if(B?.code!=="ENOENT")throw B}let Q;try{Q=await gD("gsettings",["list-schemas"])}catch(B){if(B?.code==="ENOENT")return{};throw B}if(!Q.split(/\r?\n/).includes("org.gnome.system.proxy"))return{};return uS(await gD("gsettings",["list-recursively","org.gnome.system.proxy"]))}return{}}function iS(A=dS,Q=process.env,B=Date.now){let I;return async(C)=>{if(DD(C)||aY(C,hC(Q,"NO_PROXY"))||hC(Q,C.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY")||hC(Q,"ALL_PROXY"))return _w(C,Q);if(!I||I.until<=B()){let g=A().catch((F)=>{if(I?.value===g)I=void 0;if(F instanceof Error&&F.message.startsWith("network proxy:"))throw F;let Y=F instanceof Error?F.code??F.name:"unknown error";throw Error(`network proxy: failed to read ${process.platform} system proxy settings (${Y})`,{cause:F})});I={until:B()+30000,value:g}}return _w(C,Q,await I.value)}}var Ow=iS();var Wv=new wv({keepAlive:!0}),Zv=new Vv({keepAlive:!0}),j1;function Rv(A,Q){if(!Q)return A.protocol==="https:"?Zv:Wv;return A.protocol==="https:"?new O1.HttpsProxyAgent(Q):new _1.HttpProxyAgent(Q)}async function Lv(A,Q,B){if(typeof Bun<"u"){let F=A.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY";if(!B&&(process.env[F.toLowerCase()]||process.env[F])){let Y=await Promise.resolve().then(() => LC($1(),1));return j1??=new Y.Agent,await Y.fetch(A,{...Q,redirect:"manual",dispatcher:j1})}return globalThis.fetch(A.href,{...Q,redirect:"manual",...B?{proxy:B}:{}})}let I=new Request(A,{...Q,redirect:"manual",duplex:"half"});if(I.body&&!I.headers.has("content-length")&&!I.headers.has("transfer-encoding"))I.headers.set("transfer-encoding","chunked");let C=await mF(A,{method:I.method,headers:Object.fromEntries(I.headers),body:I.body?T1.fromWeb(I.body):void 0,signal:I.signal,agent:Rv(A,B),redirect:"manual"}),g=I.method==="HEAD"||[204,205,304].includes(C.status)||!C.body?null:T1.toWeb(C.body);return new Response(g,{status:C.status,statusText:C.statusText,headers:[...C.headers]})}async function Xv(A,Q,B,I=Ow){let C=new URL(A),g={...Q};for(let F=0;;F++){if(!["http:","https:"].includes(C.protocol))throw Error(`network: unsupported URL protocol ${C.protocol}`);if(B&&!DD(C))throw Error("network: local request must remain on loopback");g.signal?.throwIfAborted();let Y=B?void 0:await I(C),J=await Lv(C,g,Y),N=J.headers.get("location");if(![301,302,303,307,308].includes(J.status)||!N||Q.redirect==="manual")return J;if(await J.body?.cancel(),Q.redirect==="error")throw Error("network: redirect rejected");if(F>=20)throw Error("network: too many redirects");let G=new URL(N,C),M=new Headers(g.headers);if(G.origin!==C.origin)for(let W of["authorization","proxy-authorization","cookie","host"])M.delete(W);let V=(g.method??"GET").toUpperCase();if(J.status===303&&V!=="HEAD"||[301,302].includes(J.status)&&V==="POST"){g={...g,method:"GET",body:void 0};for(let W of["content-type","content-length","content-encoding"])M.delete(W)}else if(g.body instanceof ReadableStream)throw Error("network: cannot replay a streamed body after redirect");g.headers=M,C=G}}function q1(A,Q={}){return Xv(A,Q,!0)}import{realpathSync as x1}from"node:fs";import{fileURLToPath as Kv}from"node:url";function P1(A){if(typeof A!=="string"||!A.trim())throw Error('agent run requires "description" (CLI: --description)');let Q=A.trim();if(/[\r\n\u2028\u2029]/.test(Q))throw Error("agent description must be a single line");if([...Q].length>60)throw Error("agent description exceeds 60 characters");return Q}async function Hv(A=process.argv.slice(2)){let Q=A.shift()??"";if(!Q||Q==="help"||Q==="--help"||Q==="-h"){process.stdout.write(`${k1()}
|
|
118
118
|
`);return}let B=Tv();switch(Q){case"identities":{let I=await VI(B,"GET","/agents/identities");process.stdout.write(A.includes("--json")?`${JSON.stringify(I,null,2)}
|
|
119
119
|
`:jv(I));return}case"run":await zv(B,A);return;case"follow-up":case"followup":await Sv(B,A);return;case"answer":await $v(B,A);return;case"status":{let I=qE(A[0],"status requires run_id"),C=await VI(B,"GET",`/agents/runs/${encodeURIComponent(I)}`);if(m1(C,A.includes("--json")),C.status==="failed"||C.status==="cancelled")process.exitCode=1;return}case"cancel":{let I=qE(A[0],"cancel requires run_id"),C=await VI(B,"DELETE",`/agents/runs/${encodeURIComponent(I)}`);process.stdout.write(`${JSON.stringify(C)}
|
|
120
120
|
`);return}default:throw Error(k1())}}async function zv(A,Q){let B=y1(Q,!0),I=await v1(B),C={identity_ids:B.identityIds,description:B.description,prompt:I,...B.effort?{effort:B.effort}:{},...B.sessionId?{session_id:B.sessionId}:{},...B.workDir?{work_dir:B.workDir}:{}},g=await VI(A,"POST","/agents/runs",C);await f1(A,g,B.noWait,B.json)}async function Sv(A,Q){let B=qE(Q.shift(),"follow-up requires run_id"),I=y1(Q,!1),C=await v1(I),g={description:I.description,prompt:C,...I.identityId?{identity_id:I.identityId}:{},...I.effort?{effort:I.effort}:{},...I.workDir?{work_dir:I.workDir}:{}},F=await VI(A,"POST",`/agents/runs/${encodeURIComponent(B)}/follow-up`,g);await f1(A,F,I.noWait,I.json)}async function $v(A,Q){let B=qE(Q.shift(),"answer requires run_id"),I="",C="",g=!1,F={};for(let J=0;J<Q.length;J++){let N=Q[J],G=()=>qE(Q[++J],`${N} requires a value`);switch(N){case"--identity":case"-i":I=G();break;case"--request":C=G();break;case"--answer":{let M=G(),V=M.indexOf("=");if(V<=0)throw Error("--answer must be question-or-id=value");F[M.slice(0,V)]=M.slice(V+1);break}case"--stdin":g=!0;break;default:throw Error(`unknown answer option: ${N}`)}}if(g){let J=(await c1()).trim(),N;try{N=JSON.parse(J)}catch{throw Error("answer stdin must be a JSON object")}if(!N||typeof N!=="object"||Array.isArray(N))throw Error("answer stdin must be a JSON object");for(let[G,M]of Object.entries(N))F[G]=String(M)}if(!C)throw Error("answer requires --request");if(Object.keys(F).length===0)throw Error("answer requires --answer or --stdin");let Y=await VI(A,"POST",`/agents/runs/${encodeURIComponent(B)}/answer`,{request_id:C,answers:F,...I?{identity_id:I}:{}});await b1(A,String(Y.run_id??B))}function y1(A,Q){let B={identityIds:[],identityId:"",sessionId:"",workDir:"",effort:"",description:"",prompt:"",noWait:!1,readStdin:!1,json:!1},I=[];for(let C=0;C<A.length;C++){let g=A[C],F=()=>qE(A[++C],`${g} requires a value`);switch(g){case"--identity":case"-i":if(Q)B.identityIds.push(F());else B.identityId=F();break;case"--effort":B.effort=F();break;case"--description":B.description=F();break;case"--workdir":if(B.workDir)throw Error("--workdir may only be specified once");F(),B.workDir=A[C];break;case"--session":if(!Q)throw Error("--session is only supported by run; follow-up accepts a run_id");if(B.sessionId)throw Error("--session may only be specified once");B.sessionId=F();break;case"--prompt":F(),B.prompt=A[C];break;case"--stdin":B.readStdin=!0;break;case"--no-wait":B.noWait=!0;break;case"--json":B.json=!0;break;default:if(g.startsWith("-"))throw Error(`unknown option: ${g}`);I.push(g)}}if(B.identityIds=[...new Set(B.identityIds)],B.sessionId&&B.identityIds.length>1)throw Error("--session accepts at most one --identity");if(Q&&!B.sessionId&&B.identityIds.length===0)throw Error("run requires at least one --identity");if(B.description=P1(B.description),!B.prompt&&I.length)B.prompt=I.join(" ");if(!B.prompt)B.readStdin=!0;return B}async function v1(A){let Q=A.readStdin?await c1():"",B=A.prompt||Q;if(!B.trim())throw Error("agent prompt is empty");return B}async function f1(A,Q,B,I){let C=String(Q.run_id??"");if(!C)throw Error("agent API returned no run_id");if(B){process.stdout.write(`${JSON.stringify(Q,null,2)}
|
package/dist/lodestar-setup.js
CHANGED
|
@@ -114,7 +114,7 @@ try {
|
|
|
114
114
|
if ($pointer -ne [IntPtr]::Zero) { [void][LodestarProxy]::GlobalFree($pointer) }
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
`;async function P6(){if(process.platform==="win32")return T6(JSON.parse(await R0("powershell.exe",["-NoProfile","-NonInteractive","-Command",q6],15000)));if(process.platform==="darwin")return j6(await R0("/usr/sbin/scutil",["--proxy"]));if(process.platform==="linux"){let A=M2(process.env.XDG_CONFIG_HOME||M2(z6(),".config"),"kioslaverc");try{let B=O6(await H6(A,"utf8"));if(B&&(!process.env.XDG_CURRENT_DESKTOP||/kde/i.test(process.env.XDG_CURRENT_DESKTOP)))return B}catch(B){if(B?.code!=="ENOENT")throw B}let Q;try{Q=await R0("gsettings",["list-schemas"])}catch(B){if(B?.code==="ENOENT")return{};throw B}if(!Q.split(/\r?\n/).includes("org.gnome.system.proxy"))return{};return _6(await R0("gsettings",["list-recursively","org.gnome.system.proxy"]))}return{}}function x6(A=P6,Q=process.env,B=Date.now){let I;return async(E)=>{if(K0(E)||NU(E,mE(Q,"NO_PROXY"))||mE(Q,E.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY")||mE(Q,"ALL_PROXY"))return V2(E,Q);if(!I||I.until<=B()){let g=A().catch((F)=>{if(I?.value===g)I=void 0;if(F instanceof Error&&F.message.startsWith("network proxy:"))throw F;let Y=F instanceof Error?F.code??F.name:"unknown error";throw Error(`network proxy: failed to read ${process.platform} system proxy settings (${Y})`,{cause:F})});I={until:B()+30000,value:g}}return V2(E,Q,await I.value)}}var W2=x6();var Cb=new Ib({keepAlive:!0}),gb=new Eb({keepAlive:!0}),w8;function Fb(A,Q){if(!Q)return A.protocol==="https:"?gb:Cb;return A.protocol==="https:"?new W8.HttpsProxyAgent(Q):new V8.HttpProxyAgent(Q)}async function Db(A,Q,B){if(typeof Bun<"u"){let F=A.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY";if(!B&&(process.env[F.toLowerCase()]||process.env[F])){let Y=await Promise.resolve().then(() => OB(N8(),1));return w8??=new Y.Agent,await Y.fetch(A,{...Q,redirect:"manual",dispatcher:w8})}return globalThis.fetch(A.href,{...Q,redirect:"manual",...B?{proxy:B}:{}})}let I=new Request(A,{...Q,redirect:"manual",duplex:"half"}),E=await A0(A,{method:I.method,headers:Object.fromEntries(I.headers),body:I.body?M8.fromWeb(I.body):void 0,signal:I.signal,agent:Fb(A,B),redirect:"manual"}),g=I.method==="HEAD"||[204,205,304].includes(E.status)||!E.body?null:M8.toWeb(E.body);return new Response(g,{status:E.status,statusText:E.statusText,headers:[...E.headers]})}async function Yb(A,Q,B,I=W2){let E=new URL(A),g={...Q};for(let F=0;;F++){if(!["http:","https:"].includes(E.protocol))throw Error(`network: unsupported URL protocol ${E.protocol}`);if(B&&!K0(E))throw Error("network: local request must remain on loopback");g.signal?.throwIfAborted();let Y=B?void 0:await I(E),U=await Db(E,g,Y),N=U.headers.get("location");if(![301,302,303,307,308].includes(U.status)||!N||Q.redirect==="manual")return U;if(await U.body?.cancel(),Q.redirect==="error")throw Error("network: redirect rejected");if(F>=20)throw Error("network: too many redirects");let G=new URL(N,E),M=new Headers(g.headers);if(G.origin!==E.origin)for(let Z of["authorization","proxy-authorization","cookie","host"])M.delete(Z);let V=(g.method??"GET").toUpperCase();if(U.status===303&&V!=="HEAD"||[301,302].includes(U.status)&&V==="POST"){g={...g,method:"GET",body:void 0};for(let Z of["content-type","content-length","content-encoding"])M.delete(Z)}else if(g.body instanceof ReadableStream)throw Error("network: cannot replay a streamed body after redirect");g.headers=M,E=G}}function vC(A,Q={}){return Yb(A,Q,!1)}function Z8(A,Q=[]){let B=A instanceof Error?A.message:String(A);if(A instanceof Error&&A.cause instanceof Error&&!B.includes(A.cause.message))B+=`;${A.cause.message}`;for(let E of Q)if(E)B=B.replaceAll(E,"[redacted]");let I="";if(/HTTP 401\b|code=(?:401|1000|1001|1003|1005)\b|authentication_error/i.test(B))I="认证失败,请检查 API Key 是否完整、有效,并确认 Key 与接口所属平台一致";else if(/HTTP 403\b|code=(?:403|1220)\b|permission_error/i.test(B))I="访问被拒绝,请检查账号及 API Key 的接口权限";else if(/HTTP 429\b|code=(?:429|1302|1305|1308|1309|1310|1311)\b/i.test(B))I="请求受限,请按接口说明检查套餐、额度或稍后重试";else if(/timeout|timed out|aborted|超时/i.test(B))I="请求超时,请检查网络和代理后重试";else if(/fetch failed|failed to fetch|ECONN|ENOTFOUND|EAI_AGAIN|network|代理/i.test(B))I="连接失败,请检查网络、代理和接口地址后重试";else if(/HTTP 404\b/i.test(B))I="模型接口不存在,请检查 API 地址";else if(/HTTP 5\d\d\b/i.test(B))I="上游服务异常,请稍后重试";else if(/data 数组|有效 JSON|无效条目|模型 id 无效/i.test(B))I="模型接口返回异常,请检查 API 地址;持续出现时请反馈诊断信息";else if(/模型目录为空|catalog is empty/i.test(B))I="账号未返回可用模型,请检查套餐和模型权限";return I&&!B.startsWith(I)?`${I}(${B})`:B}function mG(A){return A!==null&&typeof A==="object"&&!Array.isArray(A)}function L8(A){return typeof A==="string"||typeof A==="number"?String(A):void 0}async function R8(A,Q,B){try{if(!Q.trim())throw Error(`${B}: 请填写 API Key`);return await Ub(A,Q,B)}catch(I){throw Error(Z8(I,[Q]))}}async function Ub(A,Q,B){let I=await vC(A,{headers:{Authorization:`Bearer ${Q}`},signal:AbortSignal.timeout(1e4)}),E=await I.text(),g;try{g=JSON.parse(E)}catch(M){throw Error(`${B} HTTP ${I.status}: 响应不是有效 JSON`,{cause:M})}let F=mG(g)?g:void 0,Y=mG(F?.error)?F.error:void 0,U=L8(Y?.code??Y?.type??F?.code),N=L8(Y?.message??F?.msg??F?.message??F?.error),G=F?.success===!1||F?.error!=null||U!==void 0&&U!=="0"&&U!=="200";if(!I.ok||G){let M=[U!==void 0?`code=${U}`:"",N].filter(Boolean).join(": "),V=`${B} HTTP ${I.status}${M?`: ${M}`:""}`;throw Error(Q?V.replaceAll(Q,"[redacted]"):V)}if(!Array.isArray(F?.data))throw Error(`${B} 缺少 data 数组`);if(!F.data.length)throw Error(`${B} 模型目录为空`);if(!F.data.every(mG))throw Error(`${B} 模型目录包含无效条目`);return F.data}var cG="https://open.bigmodel.cn/api/anthropic";function Jb(A){let Q;try{Q=new URL(A)}catch{throw Error("GLM 接口地址无效,请使用 https://open.bigmodel.cn/api/anthropic 或 https://api.z.ai/api/anthropic")}if(Q.protocol!=="https:"||!["open.bigmodel.cn","dev.bigmodel.cn","api.z.ai"].includes(Q.hostname)||Q.username||Q.password||Q.search||Q.hash||Q.pathname.replace(/\/+$/,"")!=="/api/anthropic")throw Error("GLM Claude Code 需要智谱或 Z.ai 的 /api/anthropic HTTPS 端点;Key 须与平台一致");return Q.toString().replace(/\/+$/,"")}async function X8(A,Q){return(await R8(`${Jb(A)}/v1/models`,Q,"GLM models")).map((I)=>{let E=typeof I.display_name==="string"&&I.display_name?I.display_name:I.id;if(typeof E!=="string"||!E.trim())throw Error("GLM models 模型 id 无效");return E})}var TH=OB(rG(),1);import{execFileSync as Vm,spawn as FY}from"node:child_process";import{existsSync as gN,mkdirSync as jH,readFileSync as Wm}from"node:fs";import{createInterface as Zm}from"node:readline/promises";import{dirname as Lm,join as FN}from"node:path";import{homedir as Rm}from"node:os";import{fileURLToPath as Xm}from"node:url";var EY=OB(GH(),1);import{homedir as ub}from"node:os";import{join as GA}from"node:path";var NH=ub(),pb=process.platform==="win32";function lb(A,Q,B){if(A)return A;if(Q)return GA(Q,"lodestar");return B}function db(){if(pb)return GA(process.env.APPDATA??GA(NH,"AppData","Roaming"),"Lodestar");return GA(NH,".config","lodestar")}var tG=lb(process.env.LODESTAR_CONFIG_DIR,process.env.XDG_CONFIG_HOME,db()),HA=EY.lodestarDataDir(),NF=process.env.LODESTAR_CONFIG??GA(tG,"config.toml"),pl=GA(HA,"daemon.pid"),ll=GA(HA,"daemon.log"),dl=GA(HA,"session-chat-map.json"),il=GA(HA,"session-resume-map.json"),nl=GA(HA,"session-turns-map.json"),al=GA(HA,"session-model-map.json"),ol=GA(HA,"temp-session-leases.json"),sl=GA(HA,"tasklist-map.json"),rl=GA(HA,"agent-runs"),tl=GA(HA,"agent-session-ids.json"),el=EY.managedClaudePluginDir(),Ad=GA(HA,"dsh"),Qd=GA(HA,"codex-accounts"),Bd=GA(HA,"codex-accounts.json"),Id=GA(HA,"codex-quota-blocks.json"),eG=GA(HA,"agent-runtimes"),Ed=GA(HA,"context-window-cache.json"),Cd=GA(HA,"notify-callbacks.json"),gd=GA(HA,"alive-on-shutdown.json"),Fd=GA(HA,"inbox"),Dd=GA(HA,"file-deliveries"),Yd=GA(HA,"file-delivery-groups.json"),Ud=GA(HA,"debug.sock"),Jd=GA(HA,"debug-context.json");import{chmodSync as ib,closeSync as AN,fsyncSync as MH,mkdirSync as nb,openSync as wH,renameSync as ab,unlinkSync as ob,writeFileSync as sb}from"node:fs";import{randomUUID as rb}from"node:crypto";import{dirname as VH}from"node:path";var tb=384;var eb=448;function Am(A){let Q=VH(A);nb(Q,{recursive:!0,mode:eb})}function Qm(A,Q,B){Am(A);let I=`${A}.${process.pid}.${rb()}.tmp`,E=null;try{E=wH(I,"wx",B),sb(E,Q),MH(E),AN(E),E=null,ab(I,A);try{ib(A,B)}catch{}if(process.platform!=="win32"){let g=null;try{g=wH(VH(A),"r"),MH(g)}catch{}finally{if(g!==null)try{AN(g)}catch{}}}}catch(g){if(E!==null)try{AN(E)}catch{}try{ob(I)}catch{}throw g}}function MF(A,Q){Qm(A,Q,tb)}import{createHash as Cm,randomUUID as gm}from"node:crypto";import{existsSync as BN,readFileSync as LH}from"node:fs";import{mkdir as RH,mkdtemp as Fm,readFile as XH,rename as KH,rm as wF,writeFile as HH}from"node:fs/promises";import{join as hQ,isAbsolute as Dm}from"node:path";import{fileURLToPath as Ym,pathToFileURL as Sd}from"node:url";var WH=OB(rG(),1);import{execFile as Bm}from"node:child_process";var Im="https://registry.npmjs.org";class CY extends Error{}function Em(A){if(!Number.isSafeInteger(A)||A<=0)return Promise.reject(Error(`Invalid npm installer PID: ${A}`));return new Promise((Q,B)=>{Bm("taskkill",["/PID",String(A),"/T","/F"],{windowsHide:!0,timeout:1e4},(I,E,g)=>{if(I)B(Error(`taskkill npm installer PID ${A} failed: ${I.message}
|
|
117
|
+
`;async function P6(){if(process.platform==="win32")return T6(JSON.parse(await R0("powershell.exe",["-NoProfile","-NonInteractive","-Command",q6],15000)));if(process.platform==="darwin")return j6(await R0("/usr/sbin/scutil",["--proxy"]));if(process.platform==="linux"){let A=M2(process.env.XDG_CONFIG_HOME||M2(z6(),".config"),"kioslaverc");try{let B=O6(await H6(A,"utf8"));if(B&&(!process.env.XDG_CURRENT_DESKTOP||/kde/i.test(process.env.XDG_CURRENT_DESKTOP)))return B}catch(B){if(B?.code!=="ENOENT")throw B}let Q;try{Q=await R0("gsettings",["list-schemas"])}catch(B){if(B?.code==="ENOENT")return{};throw B}if(!Q.split(/\r?\n/).includes("org.gnome.system.proxy"))return{};return _6(await R0("gsettings",["list-recursively","org.gnome.system.proxy"]))}return{}}function x6(A=P6,Q=process.env,B=Date.now){let I;return async(E)=>{if(K0(E)||NU(E,mE(Q,"NO_PROXY"))||mE(Q,E.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY")||mE(Q,"ALL_PROXY"))return V2(E,Q);if(!I||I.until<=B()){let g=A().catch((F)=>{if(I?.value===g)I=void 0;if(F instanceof Error&&F.message.startsWith("network proxy:"))throw F;let Y=F instanceof Error?F.code??F.name:"unknown error";throw Error(`network proxy: failed to read ${process.platform} system proxy settings (${Y})`,{cause:F})});I={until:B()+30000,value:g}}return V2(E,Q,await I.value)}}var W2=x6();var Cb=new Ib({keepAlive:!0}),gb=new Eb({keepAlive:!0}),w8;function Fb(A,Q){if(!Q)return A.protocol==="https:"?gb:Cb;return A.protocol==="https:"?new W8.HttpsProxyAgent(Q):new V8.HttpProxyAgent(Q)}async function Db(A,Q,B){if(typeof Bun<"u"){let F=A.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY";if(!B&&(process.env[F.toLowerCase()]||process.env[F])){let Y=await Promise.resolve().then(() => OB(N8(),1));return w8??=new Y.Agent,await Y.fetch(A,{...Q,redirect:"manual",dispatcher:w8})}return globalThis.fetch(A.href,{...Q,redirect:"manual",...B?{proxy:B}:{}})}let I=new Request(A,{...Q,redirect:"manual",duplex:"half"});if(I.body&&!I.headers.has("content-length")&&!I.headers.has("transfer-encoding"))I.headers.set("transfer-encoding","chunked");let E=await A0(A,{method:I.method,headers:Object.fromEntries(I.headers),body:I.body?M8.fromWeb(I.body):void 0,signal:I.signal,agent:Fb(A,B),redirect:"manual"}),g=I.method==="HEAD"||[204,205,304].includes(E.status)||!E.body?null:M8.toWeb(E.body);return new Response(g,{status:E.status,statusText:E.statusText,headers:[...E.headers]})}async function Yb(A,Q,B,I=W2){let E=new URL(A),g={...Q};for(let F=0;;F++){if(!["http:","https:"].includes(E.protocol))throw Error(`network: unsupported URL protocol ${E.protocol}`);if(B&&!K0(E))throw Error("network: local request must remain on loopback");g.signal?.throwIfAborted();let Y=B?void 0:await I(E),U=await Db(E,g,Y),N=U.headers.get("location");if(![301,302,303,307,308].includes(U.status)||!N||Q.redirect==="manual")return U;if(await U.body?.cancel(),Q.redirect==="error")throw Error("network: redirect rejected");if(F>=20)throw Error("network: too many redirects");let G=new URL(N,E),M=new Headers(g.headers);if(G.origin!==E.origin)for(let Z of["authorization","proxy-authorization","cookie","host"])M.delete(Z);let V=(g.method??"GET").toUpperCase();if(U.status===303&&V!=="HEAD"||[301,302].includes(U.status)&&V==="POST"){g={...g,method:"GET",body:void 0};for(let Z of["content-type","content-length","content-encoding"])M.delete(Z)}else if(g.body instanceof ReadableStream)throw Error("network: cannot replay a streamed body after redirect");g.headers=M,E=G}}function vC(A,Q={}){return Yb(A,Q,!1)}function Z8(A,Q=[]){let B=A instanceof Error?A.message:String(A);if(A instanceof Error&&A.cause instanceof Error&&!B.includes(A.cause.message))B+=`;${A.cause.message}`;for(let E of Q)if(E)B=B.replaceAll(E,"[redacted]");let I="";if(/HTTP 401\b|code=(?:401|1000|1001|1003|1005)\b|authentication_error/i.test(B))I="认证失败,请检查 API Key 是否完整、有效,并确认 Key 与接口所属平台一致";else if(/HTTP 403\b|code=(?:403|1220)\b|permission_error/i.test(B))I="访问被拒绝,请检查账号及 API Key 的接口权限";else if(/HTTP 429\b|code=(?:429|1302|1305|1308|1309|1310|1311)\b/i.test(B))I="请求受限,请按接口说明检查套餐、额度或稍后重试";else if(/timeout|timed out|aborted|超时/i.test(B))I="请求超时,请检查网络和代理后重试";else if(/fetch failed|failed to fetch|ECONN|ENOTFOUND|EAI_AGAIN|network|代理/i.test(B))I="连接失败,请检查网络、代理和接口地址后重试";else if(/HTTP 404\b/i.test(B))I="模型接口不存在,请检查 API 地址";else if(/HTTP 5\d\d\b/i.test(B))I="上游服务异常,请稍后重试";else if(/data 数组|有效 JSON|无效条目|模型 id 无效/i.test(B))I="模型接口返回异常,请检查 API 地址;持续出现时请反馈诊断信息";else if(/模型目录为空|catalog is empty/i.test(B))I="账号未返回可用模型,请检查套餐和模型权限";return I&&!B.startsWith(I)?`${I}(${B})`:B}function mG(A){return A!==null&&typeof A==="object"&&!Array.isArray(A)}function L8(A){return typeof A==="string"||typeof A==="number"?String(A):void 0}async function R8(A,Q,B){try{if(!Q.trim())throw Error(`${B}: 请填写 API Key`);return await Ub(A,Q,B)}catch(I){throw Error(Z8(I,[Q]))}}async function Ub(A,Q,B){let I=await vC(A,{headers:{Authorization:`Bearer ${Q}`},signal:AbortSignal.timeout(1e4)}),E=await I.text(),g;try{g=JSON.parse(E)}catch(M){throw Error(`${B} HTTP ${I.status}: 响应不是有效 JSON`,{cause:M})}let F=mG(g)?g:void 0,Y=mG(F?.error)?F.error:void 0,U=L8(Y?.code??Y?.type??F?.code),N=L8(Y?.message??F?.msg??F?.message??F?.error),G=F?.success===!1||F?.error!=null||U!==void 0&&U!=="0"&&U!=="200";if(!I.ok||G){let M=[U!==void 0?`code=${U}`:"",N].filter(Boolean).join(": "),V=`${B} HTTP ${I.status}${M?`: ${M}`:""}`;throw Error(Q?V.replaceAll(Q,"[redacted]"):V)}if(!Array.isArray(F?.data))throw Error(`${B} 缺少 data 数组`);if(!F.data.length)throw Error(`${B} 模型目录为空`);if(!F.data.every(mG))throw Error(`${B} 模型目录包含无效条目`);return F.data}var cG="https://open.bigmodel.cn/api/anthropic";function Jb(A){let Q;try{Q=new URL(A)}catch{throw Error("GLM 接口地址无效,请使用 https://open.bigmodel.cn/api/anthropic 或 https://api.z.ai/api/anthropic")}if(Q.protocol!=="https:"||!["open.bigmodel.cn","dev.bigmodel.cn","api.z.ai"].includes(Q.hostname)||Q.username||Q.password||Q.search||Q.hash||Q.pathname.replace(/\/+$/,"")!=="/api/anthropic")throw Error("GLM Claude Code 需要智谱或 Z.ai 的 /api/anthropic HTTPS 端点;Key 须与平台一致");return Q.toString().replace(/\/+$/,"")}async function X8(A,Q){return(await R8(`${Jb(A)}/v1/models`,Q,"GLM models")).map((I)=>{let E=typeof I.display_name==="string"&&I.display_name?I.display_name:I.id;if(typeof E!=="string"||!E.trim())throw Error("GLM models 模型 id 无效");return E})}var TH=OB(rG(),1);import{execFileSync as Vm,spawn as FY}from"node:child_process";import{existsSync as gN,mkdirSync as jH,readFileSync as Wm}from"node:fs";import{createInterface as Zm}from"node:readline/promises";import{dirname as Lm,join as FN}from"node:path";import{homedir as Rm}from"node:os";import{fileURLToPath as Xm}from"node:url";var EY=OB(GH(),1);import{homedir as ub}from"node:os";import{join as GA}from"node:path";var NH=ub(),pb=process.platform==="win32";function lb(A,Q,B){if(A)return A;if(Q)return GA(Q,"lodestar");return B}function db(){if(pb)return GA(process.env.APPDATA??GA(NH,"AppData","Roaming"),"Lodestar");return GA(NH,".config","lodestar")}var tG=lb(process.env.LODESTAR_CONFIG_DIR,process.env.XDG_CONFIG_HOME,db()),HA=EY.lodestarDataDir(),NF=process.env.LODESTAR_CONFIG??GA(tG,"config.toml"),pl=GA(HA,"daemon.pid"),ll=GA(HA,"daemon.log"),dl=GA(HA,"session-chat-map.json"),il=GA(HA,"session-resume-map.json"),nl=GA(HA,"session-turns-map.json"),al=GA(HA,"session-model-map.json"),ol=GA(HA,"temp-session-leases.json"),sl=GA(HA,"tasklist-map.json"),rl=GA(HA,"agent-runs"),tl=GA(HA,"agent-session-ids.json"),el=EY.managedClaudePluginDir(),Ad=GA(HA,"dsh"),Qd=GA(HA,"codex-accounts"),Bd=GA(HA,"codex-accounts.json"),Id=GA(HA,"codex-quota-blocks.json"),eG=GA(HA,"agent-runtimes"),Ed=GA(HA,"context-window-cache.json"),Cd=GA(HA,"notify-callbacks.json"),gd=GA(HA,"alive-on-shutdown.json"),Fd=GA(HA,"inbox"),Dd=GA(HA,"file-deliveries"),Yd=GA(HA,"file-delivery-groups.json"),Ud=GA(HA,"debug.sock"),Jd=GA(HA,"debug-context.json");import{chmodSync as ib,closeSync as AN,fsyncSync as MH,mkdirSync as nb,openSync as wH,renameSync as ab,unlinkSync as ob,writeFileSync as sb}from"node:fs";import{randomUUID as rb}from"node:crypto";import{dirname as VH}from"node:path";var tb=384;var eb=448;function Am(A){let Q=VH(A);nb(Q,{recursive:!0,mode:eb})}function Qm(A,Q,B){Am(A);let I=`${A}.${process.pid}.${rb()}.tmp`,E=null;try{E=wH(I,"wx",B),sb(E,Q),MH(E),AN(E),E=null,ab(I,A);try{ib(A,B)}catch{}if(process.platform!=="win32"){let g=null;try{g=wH(VH(A),"r"),MH(g)}catch{}finally{if(g!==null)try{AN(g)}catch{}}}}catch(g){if(E!==null)try{AN(E)}catch{}try{ob(I)}catch{}throw g}}function MF(A,Q){Qm(A,Q,tb)}import{createHash as Cm,randomUUID as gm}from"node:crypto";import{existsSync as BN,readFileSync as LH}from"node:fs";import{mkdir as RH,mkdtemp as Fm,readFile as XH,rename as KH,rm as wF,writeFile as HH}from"node:fs/promises";import{join as hQ,isAbsolute as Dm}from"node:path";import{fileURLToPath as Ym,pathToFileURL as Sd}from"node:url";var WH=OB(rG(),1);import{execFile as Bm}from"node:child_process";var Im="https://registry.npmjs.org";class CY extends Error{}function Em(A){if(!Number.isSafeInteger(A)||A<=0)return Promise.reject(Error(`Invalid npm installer PID: ${A}`));return new Promise((Q,B)=>{Bm("taskkill",["/PID",String(A),"/T","/F"],{windowsHide:!0,timeout:1e4},(I,E,g)=>{if(I)B(Error(`taskkill npm installer PID ${A} failed: ${I.message}
|
|
118
118
|
${E}${g}`));else Q()})})}async function QN(A,Q,B={}){Q?.throwIfAborted();let I=B.platform??process.platform,E=B.timeoutMs??300000,g=B.terminationTimeoutMs??1e4;return await new Promise((F,Y)=>{let U=(B.spawn??WH.spawn)("npm",["install","--prefix",A,"--include=optional","--no-fund","--no-audit",`--registry=${Im}`],{cwd:A,stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0}),N="",G,M,V=!1,Z=!1,R,H=(P)=>{N=(N+P.toString()).slice(-16384)};U.stdout.on("data",H),U.stderr.on("data",H);let L=(P)=>{if(V)return;if(V=!0,clearTimeout(j),R)clearTimeout(R);if(Q?.removeEventListener("abort",O),P)Y(P);else F()},X=(P)=>new CY(`${G?.message??"Agent runtime install failed"}; npm installer PID ${U.pid??"MISS"} termination unconfirmed: ${P}; partial directory retained: ${A}
|
|
119
119
|
${N}`),q=(P)=>{if(V||Z||M)return;G??=Error(P),R=setTimeout(()=>L(X(`stdio did not close within ${g}ms`)),g),M=Promise.resolve().then(async()=>{if(Z)throw Error("installer closed before process-tree termination started");if(!U.pid)throw Error("installer PID unavailable");if(I==="win32")await(B.terminateWindows??Em)(U.pid);else if(!U.kill("SIGTERM"))throw Error("npm installer rejected SIGTERM")}),M.catch((k)=>L(X(k instanceof Error?k.message:String(k))))},O=()=>q("Agent runtime install aborted"),j=setTimeout(()=>q(`Agent runtime install timed out after ${E}ms`),E);if(Q?.addEventListener("abort",O,{once:!0}),U.on("error",(P)=>{if(G??=P,!U.pid)L(Error(`${P.message}
|
|
120
120
|
${N}`))}),U.once("close",async(P,k)=>{Z=!0,clearTimeout(j),Q?.removeEventListener("abort",O);try{await M}catch(n){L(X(n instanceof Error?n.message:String(n)));return}if(G||P!==0)L(Error(`${G?.message??`npm install exited code=${P} signal=${k}`}
|
package/dist/lodestar-update.js
CHANGED
|
@@ -114,7 +114,7 @@ try {
|
|
|
114
114
|
if ($pointer -ne [IntPtr]::Zero) { [void][LodestarProxy]::GlobalFree($pointer) }
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
`;async function L6(){if(process.platform==="win32")return M6(JSON.parse(await V0("powershell.exe",["-NoProfile","-NonInteractive","-Command",Z6],15000)));if(process.platform==="darwin")return w6(await V0("/usr/sbin/scutil",["--proxy"]));if(process.platform==="linux"){let A=I2(process.env.XDG_CONFIG_HOME||I2(J6(),".config"),"kioslaverc");try{let B=W6(await U6(A,"utf8"));if(B&&(!process.env.XDG_CURRENT_DESKTOP||/kde/i.test(process.env.XDG_CURRENT_DESKTOP)))return B}catch(B){if(B?.code!=="ENOENT")throw B}let Q;try{Q=await V0("gsettings",["list-schemas"])}catch(B){if(B?.code==="ENOENT")return{};throw B}if(!Q.split(/\r?\n/).includes("org.gnome.system.proxy"))return{};return V6(await V0("gsettings",["list-recursively","org.gnome.system.proxy"]))}return{}}function R6(A=L6,Q=process.env,B=Date.now){let I;return async(C)=>{if(Z0(C)||FU(C,bC(Q,"NO_PROXY"))||bC(Q,C.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY")||bC(Q,"ALL_PROXY"))return E2(C,Q);if(!I||I.until<=B()){let g=A().catch((F)=>{if(I?.value===g)I=void 0;if(F instanceof Error&&F.message.startsWith("network proxy:"))throw F;let Y=F instanceof Error?F.code??F.name:"unknown error";throw Error(`network proxy: failed to read ${process.platform} system proxy settings (${Y})`,{cause:F})});I={until:B()+30000,value:g}}return E2(C,Q,await I.value)}}var g2=R6();var df=new pf({keepAlive:!0}),nf=new lf({keepAlive:!0}),C8;function af(A,Q){if(!Q)return A.protocol==="https:"?nf:df;return A.protocol==="https:"?new g8.HttpsProxyAgent(Q):new E8.HttpProxyAgent(Q)}async function of(A,Q,B){if(typeof Bun<"u"){let F=A.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY";if(!B&&(process.env[F.toLowerCase()]||process.env[F])){let Y=await Promise.resolve().then(() => AI(B8(),1));return C8??=new Y.Agent,await Y.fetch(A,{...Q,redirect:"manual",dispatcher:C8})}return globalThis.fetch(A.href,{...Q,redirect:"manual",...B?{proxy:B}:{}})}let I=new Request(A,{...Q,redirect:"manual",duplex:"half"}),C=await sF(A,{method:I.method,headers:Object.fromEntries(I.headers),body:I.body?I8.fromWeb(I.body):void 0,signal:I.signal,agent:af(A,B),redirect:"manual"}),g=I.method==="HEAD"||[204,205,304].includes(C.status)||!C.body?null:I8.toWeb(C.body);return new Response(g,{status:C.status,statusText:C.statusText,headers:[...C.headers]})}async function sf(A,Q,B,I=g2){let C=new URL(A),g={...Q};for(let F=0;;F++){if(!["http:","https:"].includes(C.protocol))throw Error(`network: unsupported URL protocol ${C.protocol}`);if(B&&!Z0(C))throw Error("network: local request must remain on loopback");g.signal?.throwIfAborted();let Y=B?void 0:await I(C),J=await of(C,g,Y),N=J.headers.get("location");if(![301,302,303,307,308].includes(J.status)||!N||Q.redirect==="manual")return J;if(await J.body?.cancel(),Q.redirect==="error")throw Error("network: redirect rejected");if(F>=20)throw Error("network: too many redirects");let G=new URL(N,C),M=new Headers(g.headers);if(G.origin!==C.origin)for(let W of["authorization","proxy-authorization","cookie","host"])M.delete(W);let w=(g.method??"GET").toUpperCase();if(J.status===303&&w!=="HEAD"||[301,302].includes(J.status)&&w==="POST"){g={...g,method:"GET",body:void 0};for(let W of["content-type","content-length","content-encoding"])M.delete(W)}else if(g.body instanceof ReadableStream)throw Error("network: cannot replay a streamed body after redirect");g.headers=M,C=G}}function F8(A,Q={}){return sf(A,Q,!1)}import{createHash as bb,randomUUID as mb}from"node:crypto";import{existsSync as IH,readFileSync as CH}from"node:fs";import{mkdir as EH,mkdtemp as cb,readFile as gH,rename as FH,rm as JF,writeFile as DH}from"node:fs/promises";import{join as nQ,isAbsolute as ub}from"node:path";import{fileURLToPath as pb,pathToFileURL as pl}from"node:url";var s8=AI(o8(),1);import{execFile as $b}from"node:child_process";var Tb="https://registry.npmjs.org";class AY extends Error{}function jb(A){if(!Number.isSafeInteger(A)||A<=0)return Promise.reject(Error(`Invalid npm installer PID: ${A}`));return new Promise((Q,B)=>{$b("taskkill",["/PID",String(A),"/T","/F"],{windowsHide:!0,timeout:1e4},(I,C,g)=>{if(I)B(Error(`taskkill npm installer PID ${A} failed: ${I.message}
|
|
117
|
+
`;async function L6(){if(process.platform==="win32")return M6(JSON.parse(await V0("powershell.exe",["-NoProfile","-NonInteractive","-Command",Z6],15000)));if(process.platform==="darwin")return w6(await V0("/usr/sbin/scutil",["--proxy"]));if(process.platform==="linux"){let A=I2(process.env.XDG_CONFIG_HOME||I2(J6(),".config"),"kioslaverc");try{let B=W6(await U6(A,"utf8"));if(B&&(!process.env.XDG_CURRENT_DESKTOP||/kde/i.test(process.env.XDG_CURRENT_DESKTOP)))return B}catch(B){if(B?.code!=="ENOENT")throw B}let Q;try{Q=await V0("gsettings",["list-schemas"])}catch(B){if(B?.code==="ENOENT")return{};throw B}if(!Q.split(/\r?\n/).includes("org.gnome.system.proxy"))return{};return V6(await V0("gsettings",["list-recursively","org.gnome.system.proxy"]))}return{}}function R6(A=L6,Q=process.env,B=Date.now){let I;return async(C)=>{if(Z0(C)||FU(C,bC(Q,"NO_PROXY"))||bC(Q,C.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY")||bC(Q,"ALL_PROXY"))return E2(C,Q);if(!I||I.until<=B()){let g=A().catch((F)=>{if(I?.value===g)I=void 0;if(F instanceof Error&&F.message.startsWith("network proxy:"))throw F;let Y=F instanceof Error?F.code??F.name:"unknown error";throw Error(`network proxy: failed to read ${process.platform} system proxy settings (${Y})`,{cause:F})});I={until:B()+30000,value:g}}return E2(C,Q,await I.value)}}var g2=R6();var df=new pf({keepAlive:!0}),nf=new lf({keepAlive:!0}),C8;function af(A,Q){if(!Q)return A.protocol==="https:"?nf:df;return A.protocol==="https:"?new g8.HttpsProxyAgent(Q):new E8.HttpProxyAgent(Q)}async function of(A,Q,B){if(typeof Bun<"u"){let F=A.protocol==="https:"?"HTTPS_PROXY":"HTTP_PROXY";if(!B&&(process.env[F.toLowerCase()]||process.env[F])){let Y=await Promise.resolve().then(() => AI(B8(),1));return C8??=new Y.Agent,await Y.fetch(A,{...Q,redirect:"manual",dispatcher:C8})}return globalThis.fetch(A.href,{...Q,redirect:"manual",...B?{proxy:B}:{}})}let I=new Request(A,{...Q,redirect:"manual",duplex:"half"});if(I.body&&!I.headers.has("content-length")&&!I.headers.has("transfer-encoding"))I.headers.set("transfer-encoding","chunked");let C=await sF(A,{method:I.method,headers:Object.fromEntries(I.headers),body:I.body?I8.fromWeb(I.body):void 0,signal:I.signal,agent:af(A,B),redirect:"manual"}),g=I.method==="HEAD"||[204,205,304].includes(C.status)||!C.body?null:I8.toWeb(C.body);return new Response(g,{status:C.status,statusText:C.statusText,headers:[...C.headers]})}async function sf(A,Q,B,I=g2){let C=new URL(A),g={...Q};for(let F=0;;F++){if(!["http:","https:"].includes(C.protocol))throw Error(`network: unsupported URL protocol ${C.protocol}`);if(B&&!Z0(C))throw Error("network: local request must remain on loopback");g.signal?.throwIfAborted();let Y=B?void 0:await I(C),J=await of(C,g,Y),N=J.headers.get("location");if(![301,302,303,307,308].includes(J.status)||!N||Q.redirect==="manual")return J;if(await J.body?.cancel(),Q.redirect==="error")throw Error("network: redirect rejected");if(F>=20)throw Error("network: too many redirects");let G=new URL(N,C),M=new Headers(g.headers);if(G.origin!==C.origin)for(let W of["authorization","proxy-authorization","cookie","host"])M.delete(W);let w=(g.method??"GET").toUpperCase();if(J.status===303&&w!=="HEAD"||[301,302].includes(J.status)&&w==="POST"){g={...g,method:"GET",body:void 0};for(let W of["content-type","content-length","content-encoding"])M.delete(W)}else if(g.body instanceof ReadableStream)throw Error("network: cannot replay a streamed body after redirect");g.headers=M,C=G}}function F8(A,Q={}){return sf(A,Q,!1)}import{createHash as bb,randomUUID as mb}from"node:crypto";import{existsSync as IH,readFileSync as CH}from"node:fs";import{mkdir as EH,mkdtemp as cb,readFile as gH,rename as FH,rm as JF,writeFile as DH}from"node:fs/promises";import{join as nQ,isAbsolute as ub}from"node:path";import{fileURLToPath as pb,pathToFileURL as pl}from"node:url";var s8=AI(o8(),1);import{execFile as $b}from"node:child_process";var Tb="https://registry.npmjs.org";class AY extends Error{}function jb(A){if(!Number.isSafeInteger(A)||A<=0)return Promise.reject(Error(`Invalid npm installer PID: ${A}`));return new Promise((Q,B)=>{$b("taskkill",["/PID",String(A),"/T","/F"],{windowsHide:!0,timeout:1e4},(I,C,g)=>{if(I)B(Error(`taskkill npm installer PID ${A} failed: ${I.message}
|
|
118
118
|
${C}${g}`));else Q()})})}async function pG(A,Q,B={}){Q?.throwIfAborted();let I=B.platform??process.platform,C=B.timeoutMs??300000,g=B.terminationTimeoutMs??1e4;return await new Promise((F,Y)=>{let J=(B.spawn??s8.spawn)("npm",["install","--prefix",A,"--include=optional","--no-fund","--no-audit",`--registry=${Tb}`],{cwd:A,stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0}),N="",G,M,w=!1,W=!1,L,K=(q)=>{N=(N+q.toString()).slice(-16384)};J.stdout.on("data",K),J.stderr.on("data",K);let Z=(q)=>{if(w)return;if(w=!0,clearTimeout(T),L)clearTimeout(L);if(Q?.removeEventListener("abort",_),q)Y(q);else F()},R=(q)=>new AY(`${G?.message??"Agent runtime install failed"}; npm installer PID ${J.pid??"MISS"} termination unconfirmed: ${q}; partial directory retained: ${A}
|
|
119
119
|
${N}`),O=(q)=>{if(w||W||M)return;G??=Error(q),L=setTimeout(()=>Z(R(`stdio did not close within ${g}ms`)),g),M=Promise.resolve().then(async()=>{if(W)throw Error("installer closed before process-tree termination started");if(!J.pid)throw Error("installer PID unavailable");if(I==="win32")await(B.terminateWindows??jb)(J.pid);else if(!J.kill("SIGTERM"))throw Error("npm installer rejected SIGTERM")}),M.catch((x)=>Z(R(x instanceof Error?x.message:String(x))))},_=()=>O("Agent runtime install aborted"),T=setTimeout(()=>O(`Agent runtime install timed out after ${C}ms`),C);if(Q?.addEventListener("abort",_,{once:!0}),J.on("error",(q)=>{if(G??=q,!J.pid)Z(Error(`${q.message}
|
|
120
120
|
${N}`))}),J.once("close",async(q,x)=>{W=!0,clearTimeout(T),Q?.removeEventListener("abort",_);try{await M}catch(i){Z(R(i instanceof Error?i.message:String(i)));return}if(G||q!==0)Z(Error(`${G?.message??`npm install exited code=${q} signal=${x}`}
|