@linzumi/cli 1.0.50 → 1.0.51

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/README.md CHANGED
@@ -58,7 +58,7 @@ Install the CLI or run it with `npx`:
58
58
  ```bash
59
59
  npm install -g @linzumi/cli@latest
60
60
  npx -y @linzumi/cli@latest signup
61
- npx -y @linzumi/cli@1.0.50 --version
61
+ npx -y @linzumi/cli@1.0.51 --version
62
62
  linzumi --version
63
63
  ```
64
64
 
package/dist/index.js CHANGED
@@ -1282,7 +1282,7 @@ To kick the agent off:
1282
1282
  3. Paste into the thread. Codex will pick it up and start editing this folder.
1283
1283
  `});import{connect as tfe}from"node:net";import{gzipSync as rfe}from"node:zlib";async function _q(e,n){if(!n.includes(e.port))return Wg(e.requestId,"forward_port_not_allowed");let t=afe(e);if(!t.ok)return Wg(e.requestId,t.error);try{let r={method:e.method,headers:dfe(e.headers),redirect:"manual",...t.body===void 0?{}:{body:t.body.buffer.slice(t.body.byteOffset,t.body.byteOffset+t.body.byteLength)}},o=await sfe(e.port,e.path,e.queryString,r),i=Buffer.from(await o.arrayBuffer()),s=cfe(e.path,o.headers,i),a=lfe(e,o.headers,s);return a.body.byteLength>xq?Wg(e.requestId,"forward_response_too_large"):{requestId:e.requestId,ok:!0,status:o.status,headers:a.headers,bodyBase64:a.body.toString("base64")}}catch{return Wg(e.requestId,"forward_target_unavailable")}}function bq(e){return e.type==="forward_http_request"}function wq(e){return e.type==="forward_tcp_open"||e.type==="forward_tcp_send"||e.type==="forward_tcp_close"}function vq(e,n,t,r=ife){let o=new Map,i=a=>e.push(n,"forward:tcp_event",a).catch(()=>{}),s=a=>{let d=o.get(a);o.delete(a),d?.socket.end()};return{handle:a=>{switch(a.type){case"forward_tcp_open":{if(!t().includes(a.port)){i({socketId:a.socketId,type:"error",error:"forward_port_not_allowed"});return}o.get(a.socketId)?.socket.destroy();let u=r(a.port);o.set(a.socketId,{socket:u}),u.on("connect",()=>{Vg(o,a.socketId,u)&&i({socketId:a.socketId,type:"open"})}),u.on("data",c=>{!Vg(o,a.socketId,u)||!(c instanceof Uint8Array)||i({socketId:a.socketId,type:"data",bodyBase64:Buffer.from(c).toString("base64")})}),u.on("close",()=>{Vg(o,a.socketId,u)&&(o.delete(a.socketId),i({socketId:a.socketId,type:"close"}))}),u.on("error",()=>{Vg(o,a.socketId,u)&&(o.delete(a.socketId),i({socketId:a.socketId,type:"error",error:"forward_target_unavailable"}),u.destroy())});return}case"forward_tcp_send":{let d=o.get(a.socketId),u=Sq(a.bodyBase64);if(u===void 0){i({socketId:a.socketId,type:"error",error:"invalid_forward_request"});return}if(d===void 0||d.socket.destroyed===!0||d.socket.writable===!1){i({socketId:a.socketId,type:"error",error:"tcp_socket_not_open"});return}d.socket.write(u);return}case"forward_tcp_close":s(a.socketId);return}},close:()=>{for(let a of o.keys())s(a)}}}function Vg(e,n,t){return e.get(n)?.socket===t}function ife(e){return tfe({host:"127.0.0.1",port:e})}function yq(e,n,t,r){let o=t.startsWith("/")?t:`/${t}`,i=new URL(`${e}://127.0.0.1:${n}${o}`);return r!==void 0&&r.trim()!==""&&(i.search=r),i.toString()}async function sfe(e,n,t,r){try{return await fetch(yq("http",e,n,t),r)}catch(o){try{return await fetch(yq("https",e,n,t),r)}catch{throw o}}}function afe(e){if(e.method==="GET"||e.method==="HEAD")return{ok:!0,body:void 0};if(e.bodyBase64===void 0||e.bodyBase64==="")return{ok:!0,body:void 0};let n=Sq(e.bodyBase64);return n===void 0?{ok:!1,error:"invalid_forward_request"}:n.byteLength>xq?{ok:!1,error:"forward_body_too_large"}:{ok:!0,body:n}}function Sq(e){let n=e.trim();if(n.length%4===1||!/^[A-Za-z0-9+/]*={0,2}$/.test(n))return;let t=Buffer.from(n,"base64"),r=t.toString("base64").replace(/=+$/,""),o=n.replace(/=+$/,"");return r===o?t:void 0}function dfe(e){let n=new Headers;if(!Array.isArray(e))return n;for(let t of e)gfe(t)&&n.set(t.name,t.value);return n}function ufe(e){return Array.from(e.entries()).filter(([n])=>!Cq.has(n.toLowerCase())).slice(0,40).map(([n,t])=>({name:n,value:t}))}function cfe(e,n,t){return hfe(e,n)?Buffer.from(t.toString("utf8").replace('message:h(3783,null,"code-server")','message:h(3783,null,"Kandan")')):t}function lfe(e,n,t){let r=ufe(n);return pfe(e,n,t)?{body:rfe(t),headers:[...r,{name:"content-encoding",value:"gzip"},{name:"vary",value:"accept-encoding"}]}:{body:t,headers:r}}function pfe(e,n,t){return e.method==="HEAD"||t.byteLength<ofe||!ffe(e.headers)?!1:mfe(e.path,n)}function ffe(e){return Array.isArray(e)?e.some(n=>kq(n)&&n.name.toLowerCase()==="accept-encoding"&&n.value.toLowerCase().split(",").map(t=>t.trim()).some(t=>t==="gzip"||t.startsWith("gzip;"))):!1}function mfe(e,n){let t=n.get("content-type")?.toLowerCase()??"";return t.startsWith("text/")||t.includes("javascript")||t.includes("json")||t.includes("xml")?!0:/\.(?:css|html|js|json|map|mjs|svg|txt)$/i.test(e)}function hfe(e,n){return e.endsWith("/out/vs/code/browser/workbench/workbench.js")&&(n.get("content-type")??"").toLowerCase().includes("javascript")}function gfe(e){return kq(e)&&!Cq.has(e.name.toLowerCase())}function kq(e){return W(e)&&typeof e.name=="string"&&typeof e.value=="string"}function Wg(e,n){return{requestId:e,ok:!1,error:n}}var xq,ofe,Cq,Tq=j(()=>{"use strict";Rn();xq=64*1024*1024,ofe=32*1024;Cq=new Set(["accept-encoding","connection","content-encoding","content-length","cookie","host","keep-alive","authorization","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","upgrade"])});import{spawn as BS}from"node:child_process";import{copyFileSync as yfe,cpSync as xfe,existsSync as Hg,mkdirSync as $a,mkdtempSync as _fe,readFileSync as bfe,realpathSync as JS,writeFileSync as wfe}from"node:fs";import{tmpdir as vfe}from"node:os";import{basename as Sfe,delimiter as kfe,dirname as Ki,join as Xn}from"node:path";function Iq(e){return e.type==="start_local_editor"}function Rq(e,n,t){let r={localEditor:e!==void 0&&n.length>0,localEditorStatus:t.status};return t.status==="running"?{...r,localEditorPort:t.port,localEditorCwd:t.cwd,...t.collaboration===void 0?{}:{localEditorCollaboration:US(t.collaboration)}}:r}async function Eq(e,n){if(n.editorRuntime===void 0)return{ok:!1,state:n.currentState,reason:"local_editor_disabled"};let t=Vr(e.cwd,n.allowedCwds);if(!t.ok)return{ok:!1,state:n.currentState,reason:t.reason};if(n.currentState.status==="running"&&n.currentState.cwd===t.cwd&&Ufe(n.currentState.collaboration,e.collaboration))return{ok:!0,state:n.currentState,event:{cwd:n.currentState.cwd,port:n.currentState.port,startedAt:new Date().toISOString(),collaboration:US(n.currentState.collaboration)}};let r=Cfe(e,n);if(e.collaboration!==void 0&&r===void 0)return{ok:!1,state:n.currentState,reason:"missing_browser_base_url"};let o=await ng(),i=e.collaboration===void 0?void 0:await ng(),s=e.collaboration===void 0||r===void 0?void 0:jfe(e.collaboration,n.runnerId??"local-runner",i,r),a=Tfe(s,n.editorRuntime);if(!a.ok)return{ok:!1,state:n.currentState,reason:a.reason};let d=Dfe({codeServerBin:n.editorRuntime.codeServerBin,codeServerRuntimeRoot:n.editorRuntime.root,port:o,cwd:t.cwd,userDataDir:a.userDataDir,extensionsDir:a.extensionsDir,platform:n.platform});if(!d.ok)return{ok:!1,state:n.currentState,reason:d.reason};let u=await zfe(s,a,n.editorRuntime,n.runnerId);if(!u.ok)return{ok:!1,state:n.currentState,reason:"code_server_spawn_failed"};ye("process.spawn",{command:d.command,args:d.args,cwd:t.cwd,purpose:"local_editor.code_server"},{sessionId:n.runnerId});let c=BS(d.command,[...d.args],{cwd:t.cwd,env:Nfe(process.env,t.cwd,a.userDataDir,u.collaboration),stdio:["ignore","inherit","inherit"]});ye("process.spawned",{command:d.command,args:d.args,cwd:t.cwd,pid:c.pid,purpose:"local_editor.code_server"},{sessionId:n.runnerId}),c.once("exit",(x,v)=>{ye("process.exit",{command:d.command,args:d.args,cwd:t.cwd,pid:c.pid,code:x,signal:v,purpose:"local_editor.code_server"},{sessionId:n.runnerId})});let l=Aq(c);if(await Oq(c)==="failed")return u.collaboration?.process.kill("SIGINT"),{ok:!1,state:n.currentState,reason:"code_server_spawn_failed"};let[m,p]=await Promise.all([Jfe(o,l),u.ready]);return m==="failed"||p==="failed"?(c.kill("SIGINT"),u.collaboration?.process.kill("SIGINT"),{ok:!1,state:n.currentState,reason:"code_server_spawn_failed"}):(n.currentState.status==="running"&&(n.currentState.process.kill("SIGINT"),n.currentState.collaboration?.process.kill("SIGINT")),{ok:!0,state:{status:"running",cwd:t.cwd,port:o,process:c,collaboration:u.collaboration,exited:l},event:{cwd:t.cwd,port:o,startedAt:new Date().toISOString(),collaboration:US(u.collaboration)}})}function Cfe(e,n){let t=e.browserBaseUrl??n.browserBaseUrl;return t===void 0||t.trim()===""?void 0:t.trim().replace(/\/+$/,"")}function Dq(e,n,t,r){return["--bind-addr",`127.0.0.1:${e}`,"--auth","none","--disable-telemetry","--disable-update-check","--disable-workspace-trust","--disable-getting-started-override","--app-name","Kandan","--user-data-dir",t,...r===void 0?[]:["--extensions-dir",r],n]}function Tfe(e,n){try{let t=_fe(Xn(vfe(),"kandan-local-editor-")),r=Xn(t,"extensions"),o=Xn(t,"collaboration-server"),i=Xn(t,"tmp"),s=Xn(t,"User");return $a(s,{recursive:!0}),$a(r,{recursive:!0}),$a(o,{recursive:!0}),$a(i,{recursive:!0}),n!==void 0&&(Pfe(n),Ffe(n.assets.documentStateExtensionDir,Xn(r,"kandan.document-state-telemetry"))),wfe(Xn(s,"settings.json"),JSON.stringify(Lfe(e),null,2)),{ok:!0,userDataDir:t,extensionsDir:r,collaborationServerDir:o}}catch{return{ok:!1,reason:"code_server_spawn_failed"}}}function Pfe(e){let n=Ife(e);[{source:Xn(n,"extensions","git-base","dist","extension.js"),target:Xn(n,"extensions","git-base","dist","browser","extension.js"),required:!0},{source:Xn(n,"extensions","git-base","dist","extension.js.map"),target:Xn(n,"extensions","git-base","dist","browser","extension.js.map"),required:!1},{source:Xn(n,"extensions","merge-conflict","dist","mergeConflictMain.js"),target:Xn(n,"extensions","merge-conflict","dist","browser","mergeConflictMain.js"),required:!0},{source:Xn(n,"extensions","merge-conflict","dist","mergeConflictMain.js.map"),target:Xn(n,"extensions","merge-conflict","dist","browser","mergeConflictMain.js.map"),required:!1}].forEach(({source:r,target:o,required:i})=>{switch(!0){case Hg(o):return;case(!i&&!Hg(r)):return;default:$a(Ki(o),{recursive:!0}),yfe(r,o);return}})}function Ife(e){let n=Mq([Xn(e.root,"lib","vscode"),Xn(Ki(Ki(e.codeServerBin)),"lib","vscode"),...Rfe(e.codeServerBin).map(o=>Xn(Ki(Ki(o)),"lib","vscode"))]),t=n.find(o=>Efe(o).every(i=>Hg(i))),r=n[0];if(r===void 0)throw new Error("code-server runtime did not include a VS Code root candidate");return t??r}function Rfe(e){try{let t=bfe(e,"utf8").match(/exec\s+(?:"([^"]+)"|'([^']+)'|([^\s]+))\s+"\$@"/u),r=t?.[1]??t?.[2]??t?.[3];return r===void 0||r.trim()===""?[]:[r]}catch{return[]}}function Efe(e){return[Xn(e,"extensions","git-base","dist","extension.js"),Xn(e,"extensions","merge-conflict","dist","mergeConflictMain.js")]}function Dfe(e){let n=e.platform??process.platform;if(n==="linux")return Mfe(e);if(n!=="darwin")return Zg();let t=NS(e.codeServerBin,e.envPath??process.env.PATH??"");return t.ok?{ok:!0,command:t.command,args:Dq(e.port,e.cwd,e.userDataDir,e.extensionsDir)}:Zg()}function Mfe(e){let n=NS(e.bubblewrapBin??"bwrap",e.envPath??process.env.PATH??"");if(!n.ok)return Zg();let t=NS(e.codeServerBin,e.envPath??process.env.PATH??"");if(!t.ok)return Zg();let r=Mq(["/usr","/bin","/sbin","/lib","/lib64","/etc","/nix","/opt",...e.codeServerRuntimeRoot===void 0?[]:$fe(e.codeServerRuntimeRoot),t.directory]),o=["--die-with-parent","--proc","/proc","--dev-bind","/dev","/dev","--tmpfs","/tmp","--setenv","HOME",e.cwd,"--setenv","PWD",e.cwd,"--setenv","XDG_DATA_HOME",Xn(e.userDataDir,"data"),"--setenv","XDG_CONFIG_HOME",Xn(e.userDataDir,"config"),...r.flatMap(i=>["--ro-bind-try",i,i]),"--bind",e.cwd,e.cwd,"--bind",e.userDataDir,e.userDataDir,...e.extensionsDir===void 0?[]:["--bind",e.extensionsDir,e.extensionsDir],"--chdir",e.cwd,"--",t.command,...Dq(e.port,e.cwd,e.userDataDir,e.extensionsDir)];return{ok:!0,command:n.command,args:o}}function Zg(){return{ok:!1,reason:"local_editor_filesystem_sandbox_unavailable"}}function NS(e,n){if(Afe(e)){let t=Ofe(e);return t===void 0?{ok:!1}:{ok:!0,command:e,directory:t}}for(let t of n.split(kfe)){if(t.trim()==="")continue;let r=Xn(t,e);if(!Hg(r))continue;let o=JS(r);return{ok:!0,command:o,directory:Ki(o)}}return{ok:!1}}function Afe(e){return e.includes("/")||e.includes("\\")}function Ofe(e){try{let n=Ki(JS(e));return n==="/"?void 0:n}catch{let t=Ki(e);return t==="."||t==="/"?void 0:t}}function $fe(e){try{return[e,JS(e)]}catch{return[e]}}function Mq(e){return Array.from(new Set(e.filter(n=>n.length>0)))}function jfe(e,n,t,r){if(e===void 0||t===void 0)return;let o=`/local-codex-runners/${encodeURIComponent(n)}/forwards/${t}/preview-target`,i=new URL(o,`${r}/`).toString(),s=`/api/v2/editor/sessions/${e.editorSessionId}/collaboration-state`,a=e.bootstrapToken===void 0||e.bootstrapToken===""?void 0:`${o}/_kandan-collaboration/${encodeURIComponent(e.bootstrapToken)}`,d=a===void 0?s:`${a}${s}`,u=a===void 0?i:new URL(a,`${r}/`).toString();return{...e,serverPort:t,serverUrl:i,bootstrapServerUrl:u,collaborationStateUrl:d}}function Lfe(e){return{"extensions.autoCheckUpdates":!1,"extensions.autoUpdate":!1,"extensions.ignoreRecommendations":!0,"extensions.showRecommendationsOnlyOnDemand":!0,"oct.alwaysAskToOverrideServerUrl":!1,"oct.joinAcceptMode":"auto",...e===void 0?{}:{"oct.kandanEditorSessionId":e.editorSessionId,"oct.kandanCollaborationStateUrl":e.collaborationStateUrl,"oct.serverUrl":e.bootstrapServerUrl},"security.workspace.trust.enabled":!1,"telemetry.telemetryLevel":"off","workbench.secondarySideBar.defaultVisibility":"hidden","workbench.startupEditor":"none","workbench.welcomePage.walkthroughs.openOnInstall":!1}}async function zfe(e,n,t,r){if(e===void 0)return{ok:!0,ready:Promise.resolve("ready")};try{await Promise.all([Pq(t.assets.collaborationExtensionTarball,n.extensionsDir),Pq(t.assets.collaborationServerTarball,n.collaborationServerDir)]);let o=qfe(),i=[Xn(n.collaborationServerDir,"open-collaboration-server","bundle","app.js"),"--hostname","127.0.0.1","--port",String(e.serverPort)];ye("process.spawn",{command:o,args:i,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r});let s=BS(o,i,{env:{...process.env,OCT_ACTIVATE_SIMPLE_LOGIN:"true",OCT_SERVER_OWNER:"Kandan"},stdio:["ignore","inherit","inherit"]});ye("process.spawned",{command:o,args:i,pid:s.pid,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r}),s.once("exit",(c,l)=>{ye("process.exit",{command:o,args:i,pid:s.pid,code:c,signal:l,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r})});let a=Aq(s);return await Oq(s)==="failed"?{ok:!1}:{ok:!0,ready:Kfe(e.serverPort,a),collaboration:{provider:e.provider,editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId,roomId:e.roomId,serverPort:e.serverPort,serverUrl:e.serverUrl,bootstrapServerUrl:e.bootstrapServerUrl,collaborationStateUrl:e.collaborationStateUrl,process:s,exited:a}}}catch{return{ok:!1}}}function qfe(e=process.env,n=process.execPath){let t=e.LINZUMI_NODE_BIN?.trim();return t!==void 0&&t!==""?t:Sfe(n).toLowerCase().includes("bun")?"node":n}async function Pq(e,n){$a(n,{recursive:!0}),await Bfe("tar",["-xzf",e,"-C",n])}function Ffe(e,n){$a(Ki(n),{recursive:!0}),xfe(e,n,{recursive:!0})}function Nfe(e,n,t,r){let{PORT:o,...i}=e,s={...i,PWD:n};return r===void 0?s:{...s,KANDAN_EDITOR_COLLABORATION_DEPLOYMENT_SHAPE:"local_runner_sidecar",KANDAN_EDITOR_COLLABORATION_ENTRY_MODE:"kandan_auto_host_or_join",KANDAN_EDITOR_COLLABORATION_ROOM_ID:r.roomId,KANDAN_EDITOR_COLLABORATION_SERVER_URL:r.bootstrapServerUrl,KANDAN_EDITOR_COLLABORATION_AUTO_HOST_CLAIM_PATH:Xn(t,"kandan-oct-auto-host.lock")}}function US(e){if(e!==void 0)return{provider:e.provider,editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId,roomId:e.roomId,serverPort:e.serverPort,serverUrl:e.serverUrl}}function Ufe(e,n){return e===void 0||n===void 0?e===void 0&&n===void 0:e.editorSessionId===n.editorSessionId&&e.runtimeSessionId===n.runtimeSessionId&&e.roomId===n.roomId}function Bfe(e,n){return new Promise((t,r)=>{ye("process.spawn",{command:e,args:n,purpose:"local_editor.install_process"});let o=BS(e,[...n],{stdio:["ignore","ignore","inherit"]});ye("process.spawned",{command:e,args:n,pid:o.pid,purpose:"local_editor.install_process"}),o.once("error",r),o.once("exit",(i,s)=>{ye("process.exit",{command:e,args:n,pid:o.pid,code:i,signal:s,purpose:"local_editor.install_process"}),i===0?t():r(new Error(`${e} exited with ${i??"unknown"}`))})})}function Aq(e){return new Promise(n=>{let t=!1,r=()=>{e.off("exit",o),e.off("close",o)},o=()=>{t||(t=!0,r(),n())};e.once("exit",o),e.once("close",o),(e.exitCode!==null||e.signalCode!==null)&&o()})}function Jfe(e,n,t=1e4){let r=Date.now()+t,o=`http://127.0.0.1:${e}/`;return new Promise(i=>{let s=!1,a,d=l=>{s||(s=!0,a!==void 0&&clearTimeout(a),i(l))},u=()=>{a=setTimeout(c,50)},c=async()=>{if(Date.now()>r){d("failed");return}try{if((await fetch(o)).status<500){d("ready");return}}catch{u();return}u()};n.then(()=>d("failed")),c()})}function Kfe(e,n,t=1e4){let r=Date.now()+t,o=`http://127.0.0.1:${e}/api/login/initial`;return new Promise(i=>{let s=!1,a,d=l=>{s||(s=!0,a!==void 0&&clearTimeout(a),i(l))},u=()=>{a=setTimeout(c,50)},c=async()=>{if(Date.now()>r){d("failed");return}try{if((await fetch(o,{method:"POST"})).status<500){d("ready");return}}catch{u();return}u()};n.then(()=>d("failed")),c()})}function Oq(e){return new Promise(n=>{let t=!1,r=()=>{e.off("spawn",o),e.off("error",i)},o=()=>{t||(t=!0,r(),n("spawned"))},i=()=>{t||(t=!0,r(),n("failed"))};e.once("spawn",o),e.once("error",i),setImmediate(()=>{!t&&e.pid!==void 0&&o()})})}var $q=j(()=>{"use strict";Ca();Ts();kr()});import{spawn as Vfe}from"node:child_process";import{createHash as zq}from"node:crypto";import{createReadStream as Wfe,createWriteStream as Hfe,existsSync as Ju,mkdirSync as Rp,mkdtempSync as Zfe,readFileSync as qq,renameSync as Gfe,rmSync as jq,writeFileSync as Fq}from"node:fs";import{homedir as Qfe}from"node:os";import{dirname as Gg,join as It,resolve as Xfe}from"node:path";import{Readable as Yfe}from"node:stream";import{pipeline as eme}from"node:stream/promises";async function Ku(e){if(e.customCodeServerBin!==void 0)return{codeServerBin:e.customCodeServerBin,status:{status:"custom",mode:"custom",codeServerBin:e.customCodeServerBin}};let n=nme(e.platform??process.platform,e.arch??process.arch);if(n===void 0)return KS("unsupported_platform");let t=await tme({kandanUrl:e.kandanUrl,token:e.token,platform:n,fetchImpl:e.fetchImpl??fetch});if(!t.ok)return KS(t.reason);let r=e.cacheRoot??yme(),o=sme(r,t.manifest);if(o.ok)return Lq(t.manifest,o.runtime,!1);let i=await ame({kandanUrl:e.kandanUrl,token:e.token,manifest:t.manifest,cacheRoot:r,fetchImpl:e.fetchImpl??fetch,extractArchive:e.extractArchive??pme});return i.ok?Lq(t.manifest,i.runtime,!0):KS(i.reason)}function Nq(e){switch(e.status){case"ready":return{status:"ready",mode:e.mode,version:e.version,platform:e.platform,archiveSha256:e.archiveSha256,codeServerVersion:e.codeServerVersion,updated:e.updated};case"custom":return{status:"custom",mode:e.mode,codeServerBin:e.codeServerBin};case"unavailable":return{status:"unavailable",mode:e.mode,reason:e.reason}}}function nme(e,n){switch(`${e}-${n}`){case"darwin-arm64":return"darwin-arm64";case"darwin-x64":return"darwin-x64";case"linux-x64":return"linux-x64";default:return}}function KS(e){return{status:{status:"unavailable",mode:"server_managed",reason:e}}}function Lq(e,n,t){return{codeServerBin:n.codeServerBin,runtime:n,status:{status:"ready",mode:"server_managed",version:e.version,platform:e.platform,archiveSha256:e.archiveSha256,codeServerVersion:e.codeServerVersion,codeServerBin:n.codeServerBin,updated:t}}}async function tme(e){let n=new URL(`/api/v2/local-codex-runner/editor-runtime/${encodeURIComponent(e.platform)}/manifest`,Fn(e.kandanUrl)),t=await e.fetchImpl(n,{headers:{authorization:`Bearer ${e.token}`}}).catch(()=>{});if(t===void 0)return{ok:!1,reason:"manifest_unavailable"};if(t.status!==200)return{ok:!1,reason:t.status===401?await rme(t):"manifest_unavailable"};let r=await t.json();return!W(r)||r.ok!==!0||!W(r.runtime)?{ok:!1,reason:"manifest_unavailable"}:ome(r.runtime)}async function rme(e){let n=await e.json().catch(()=>{});return W(n)&&n.error==="token_expired"?"auth_expired":"auth_unauthorized"}function ome(e){let n=pi(e.version),t=pi(e.platform),r=pi(e.archiveUrl),o=Jq(e.archiveSha256),i=pi(e.codeServerVersion),s=pi(e.codeServerBinPath)??"bin/code-server",a=pi(e.manifestPath)??"linzumi-editor-runtime.json",d=ime(e.assets);return n===void 0||t===void 0||r===void 0||o===void 0||i===void 0||d===void 0?{ok:!1,reason:"manifest_unavailable"}:{ok:!0,manifest:{version:n,platform:t,archiveUrl:r,archiveSha256:o,codeServerVersion:i,codeServerBinPath:s,manifestPath:a,assets:d}}}function ime(e){if(!Array.isArray(e))return;let n=[];for(let t of e){if(!W(t))return;let r=pi(t.path),o=Jq(t.sha256),i=pi(t.url),s=pi(t.contentBase64);if(r===void 0||o===void 0)return;n.push({path:r,sha256:o,...i===void 0?{}:{url:i},...s===void 0?{}:{contentBase64:s}})}return n}function sme(e,n){let t=Uq(e,n),r=It(t,n.manifestPath),o=It(t,n.codeServerBinPath),i=Bq(t,n);if(!Ju(r)||!Ju(o)||i===void 0)return{ok:!1};try{let s=JSON.parse(qq(r,"utf8"));if(W(s)&&s.version===n.version&&s.platform===n.platform&&(s.archiveSha256===void 0||s.archiveSha256===n.archiveSha256))return{ok:!0,runtime:{mode:"server_managed",root:t,codeServerBin:o,assets:i}}}catch{return{ok:!1}}return{ok:!1}}async function ame(e){Rp(e.cacheRoot,{recursive:!0});let n=Zfe(It(e.cacheRoot,".install-")),t=It(n,"runtime.tar.gz"),r=It(n,"runtime");try{let o=await cme({kandanUrl:e.kandanUrl,token:e.token,manifest:e.manifest,archivePath:t,fetchImpl:e.fetchImpl});if(!o.ok)return o;if(Rp(r,{recursive:!0}),!await e.extractArchive(t,r))return{ok:!1,reason:"archive_extract_failed"};if(!await dme({kandanUrl:e.kandanUrl,manifest:e.manifest,runtimeRoot:r,fetchImpl:e.fetchImpl}))return{ok:!1,reason:"install_failed"};let s=It(r,e.manifest.manifestPath),a=It(r,e.manifest.codeServerBinPath),d=Bq(r,e.manifest);if(!Ju(a)||d===void 0)return{ok:!1,reason:"invalid_archive"};Rp(Gg(s),{recursive:!0}),Fq(s,JSON.stringify({version:e.manifest.version,platform:e.manifest.platform,archiveSha256:e.manifest.archiveSha256,codeServerVersion:e.manifest.codeServerVersion,codeServerBinPath:e.manifest.codeServerBinPath,manifestPath:e.manifest.manifestPath,assets:e.manifest.assets},null,2));let u=Uq(e.cacheRoot,e.manifest);return jq(u,{recursive:!0,force:!0}),Rp(Gg(u),{recursive:!0}),Gfe(r,u),{ok:!0,runtime:{mode:"server_managed",root:u,codeServerBin:It(u,e.manifest.codeServerBinPath),assets:{collaborationExtensionTarball:It(u,"kandan","editor_extensions","typefox.open-collaboration-tools.tar.gz"),collaborationServerTarball:It(u,"kandan","editor_servers","open-collaboration-server.tar.gz"),documentStateExtensionDir:It(u,"kandan","editor_extensions","kandan.document-state-telemetry")}}}}catch{return{ok:!1,reason:"install_failed"}}finally{jq(n,{recursive:!0,force:!0})}}async function dme(e){for(let n of e.manifest.assets){let t=It(e.runtimeRoot,n.path);try{let r=await ume({kandanUrl:e.kandanUrl,asset:n,fetchImpl:e.fetchImpl});if(r===void 0)continue;Rp(Gg(t),{recursive:!0}),Fq(t,r)}catch{return!1}}return!0}async function ume(e){if(e.asset.contentBase64!==void 0)return Buffer.from(e.asset.contentBase64,"base64");if(e.asset.url!==void 0){let n=new URL(e.asset.url,Fn(e.kandanUrl)),t=await e.fetchImpl(n);return t.status!==200?void 0:Buffer.from(await t.arrayBuffer())}}async function cme(e){let n=Fn(e.kandanUrl),t=new URL(e.manifest.archiveUrl,n),r=await e.fetchImpl(t,{...lme(t,new URL(n))?{headers:{authorization:`Bearer ${e.token}`}}:{}});return r.status!==200||r.body===null?{ok:!1,reason:"download_failed"}:(await eme(Yfe.fromWeb(r.body),Hfe(e.archivePath)),await fme(e.archivePath)!==e.manifest.archiveSha256?{ok:!1,reason:"checksum_mismatch"}:{ok:!0})}function lme(e,n){return e.protocol===n.protocol&&e.host===n.host}function pme(e,n){return new Promise(t=>{let o=["-xzf",e,"-C",n];ye("process.spawn",{command:"tar",args:o,purpose:"editor_runtime.extract"});let i=Vfe("tar",o,{stdio:["ignore","ignore","ignore"]});ye("process.spawned",{command:"tar",args:o,pid:i.pid,purpose:"editor_runtime.extract"}),i.on("error",()=>t(!1)),i.on("exit",(s,a)=>{ye("process.exit",{command:"tar",args:o,pid:i.pid,code:s,signal:a,purpose:"editor_runtime.extract"}),t(s===0)})})}function fme(e){return new Promise((n,t)=>{let r=zq("sha256"),o=Wfe(e);o.on("error",t),o.on("data",i=>r.update(i)),o.on("end",()=>n(r.digest("hex")))})}function Uq(e,n){return Xfe(e,n.platform,n.archiveSha256)}function Bq(e,n){let t=It(e,"kandan","editor_extensions","typefox.open-collaboration-tools.tar.gz"),r=It(e,"kandan","editor_servers","open-collaboration-server.tar.gz"),o=It(e,"kandan","editor_extensions","kandan.document-state-telemetry"),i=mme(n.codeServerBinPath),s=[n.codeServerBinPath,It(i,"lib","vscode","node_modules","vsda","rust","web","vsda.js"),It(i,"lib","vscode","node_modules","vsda","rust","web","vsda_bg.wasm"),"kandan/editor_extensions/typefox.open-collaboration-tools.tar.gz","kandan/editor_servers/open-collaboration-server.tar.gz","kandan/editor_extensions/kandan.document-state-telemetry/package.json","kandan/editor_extensions/kandan.document-state-telemetry/out/extension.js"],a=hme(n.assets);for(let d of s){let u=a.get(d);if(u===void 0&&d!==n.codeServerBinPath)return;let c=It(e,d);if(!Ju(c)||u!==void 0&&gme(c)!==u)return}if(!(!Ju(t)||!Ju(r)))return{collaborationExtensionTarball:t,collaborationServerTarball:r,documentStateExtensionDir:o}}function mme(e){let n=e.replaceAll("\\","/");return n==="bin/code-server"?".":n.endsWith("/bin/code-server")?n.slice(0,-16)||".":Gg(n)}function hme(e){let n=new Map;for(let t of e)n.set(t.path,t.sha256);return n}function gme(e){return zq("sha256").update(qq(e)).digest("hex")}function yme(){return It(Qfe(),".linzumi","editor-runtimes")}function pi(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function Jq(e){let n=pi(e);return n!==void 0&&/^[a-f0-9]{64}$/i.test(n)?n.toLowerCase():void 0}var Qg=j(()=>{"use strict";io();kr();Rn()});import{spawn as xme,spawnSync as _me}from"node:child_process";import{delimiter as bme,dirname as wme,join as Xg}from"node:path";function ja(e,n){return new Promise(t=>{let r=["--version"];ye("process.spawn",{command:e,args:r,cwd:n,purpose:"dependency_probe"});let o=xme(e,r,{cwd:n,stdio:["ignore","pipe","pipe"],detached:process.platform!=="win32"});ye("process.spawned",{command:e,args:r,cwd:n,pid:o.pid,purpose:"dependency_probe"});let i="",s="",a=!1,d=c=>{a||(a=!0,clearTimeout(u),t(c))},u=setTimeout(()=>{vme(o.pid),ye("process.exit",{command:e,args:r,cwd:n,pid:o.pid,code:null,signal:"SIGKILL",purpose:"dependency_probe"}),d({command:e,available:!1})},1e3);o.stdout?.on("data",c=>{i+=c.toString()}),o.stderr?.on("data",c=>{s+=c.toString()}),o.on("error",()=>{ye("process.exit",{command:e,args:r,cwd:n,pid:o.pid,code:null,signal:null,error:"spawn_failed",purpose:"dependency_probe"}),d({command:e,available:!1})}),o.on("exit",(c,l)=>{if(ye("process.exit",{command:e,args:r,cwd:n,pid:o.pid,code:c,signal:l,purpose:"dependency_probe"}),c!==0){d({command:e,available:!1});return}let f=Hq(i,s);d(f===void 0?{command:e,available:!0}:{command:e,available:!0,version:f})})})}function vme(e){if(e!==void 0)try{process.kill(process.platform==="win32"?e:-e,"SIGKILL")}catch{try{process.kill(e,"SIGKILL")}catch{}}}async function Rs(e){Nh();let[n,t,r]=await Promise.all([ja(process.execPath,e.cwd),Sme(e),Eme(e)]);return{node:n,codex:t,codeServer:r,editorRuntime:e.editorRuntime}}async function Sme(e){let n=await ja(e.codexBin,e.cwd);if(n.available)return n;let t=!e.codexBin.includes("/")&&!e.codexBin.includes("\\"),r=t?(e.resolveAgentBinaryPath??Uh)(e.codexBin):void 0;if(r!==void 0&&r!==e.codexBin){let i=await ja(r,e.cwd);if(i.available)return i}let o=Cme({cwd:e.cwd,codexBin:e.codexBin,env:e.env??process.env});if(o!==void 0){let i=await ja(o,e.cwd);if(i.available)return i}return t&&kme(e.codexBin),n}function kme(e){Kq||(Kq=!0,process.stderr.write(`Warning: ${U$(e,"--codex-bin")}
1284
1284
  `))}function Cme(e){return Vq(Pme(e),e)}function Vq(e,n){let[t,...r]=e;if(t===void 0)return;let o=Tme(t,n);return o===void 0?Vq(r,n):o}function Tme(e,n){let t=_me(e,["which","codex"],{cwd:n.cwd,env:n.env??process.env,encoding:"utf8",timeout:1e3});if(t.status===0)return Hq(t.stdout?.toString())}function Pme(e){let n=e.env??process.env;return Array.from(new Set([Ime(e.codexBin),n.VOLTA_HOME===void 0?void 0:Xg(n.VOLTA_HOME,"bin","volta"),n.HOME===void 0?void 0:Xg(n.HOME,".volta","bin","volta"),...Rme(n.PATH)].filter(t=>t!==void 0)))}function Ime(e){return e.replaceAll("\\","/").endsWith("/.volta/bin/codex")?Xg(wme(e),"volta"):void 0}function Rme(e){return e===void 0?[]:e.split(bme).filter(n=>n!=="").map(n=>Xg(n,"volta"))}function Eme(e){switch(e.editorRuntime?.status){case"ready":return Promise.resolve({command:e.codeServerBin??e.editorRuntime.codeServerBin,available:!0,version:e.editorRuntime.codeServerVersion});case"unavailable":return Promise.resolve({command:e.codeServerBin??"code-server",available:!1,reason:"editor_runtime_unavailable"});case"custom":case void 0:break}return e.codeServerBin===void 0?Promise.resolve({command:"code-server",available:!1,reason:"not_configured"}):ja(e.codeServerBin,e.cwd)}function Wq(e){if(Es(e),!e.codex.available)throw new Error(`Codex is not available at ${e.codex.command}. Install Codex or pass --codex-bin <path>.`)}function Es(e){if(!e.node.available)throw new Error("Node.js is not available. Install Node.js 20+, then rerun the bootstrap command.");if(e.editorRuntime?.status==="unavailable"||e.codeServer?.available===!1&&e.codeServer.reason!=="not_configured"){if(e.editorRuntime?.status==="unavailable")switch(e.editorRuntime.reason){case"auth_expired":throw new Error("Linzumi authentication expired. Sign in again, then reconnect the local runner.");case"auth_unauthorized":throw new Error("Linzumi authentication was rejected. Sign in again, then reconnect the local runner.");default:break}throw new Error("The Linzumi editor runtime is not available. Reconnect when the runtime update finishes or pass --code-server-bin <path> for a custom development runtime.")}}function WS(e){let n=e.codeServer??Dme();return{bun:VS(e.node),codex:VS(e.codex),codeServer:VS(n),editorRuntime:e.editorRuntime===void 0?null:Nq(e.editorRuntime)}}function Dme(){return{command:"code-server",available:!1,reason:"not_configured"}}function VS(e){return{command:e.command,available:e.available,version:e.version??null,reason:e.reason??null}}function Hq(...e){for(let n of e){let t=n?.trim();if(t!==void 0&&t!=="")return t}}var Kq,Yg=j(()=>{"use strict";qw();Qg();kr();Kq=!1});import{closeSync as Mme,openSync as Ame,readSync as Ome,statSync as $me}from"node:fs";function HS(e){return typeof e!="string"||e===""?e:jme.reduce((n,t)=>t.source.startsWith("\\beyJ")?n.replace(t,"<redacted>"):n.replace(t,"$1<redacted>"),e)}function Nme(e,n){let t;try{let{size:r}=$me(e),o=r>n?r-n:0,i=r-o;if(i<=0)return"";let s=Buffer.allocUnsafe(i);t=Ame(e,"r");let a=Ome(t,s,0,i,o);return s.subarray(0,a).toString("utf8")}catch{return""}finally{if(t!==void 0)try{Mme(t)}catch{}}}function Zq(e){let n=e.now??Date.now,t=e.setIntervalImpl??setInterval,r=e.clearIntervalImpl??clearInterval,o=e.readTail??Nme,i=Math.max(zme,e.intervalMs??Lme),s=Math.max(1,e.maxTailBytes??qme),a=Math.max(1,e.maxLifecycleEvents??Fme),d=[],u=!1,c,l=v=>{try{for(d.push(v);d.length>a;)d.shift()}catch{}},f=()=>{try{let v=e.backendStderrSnapshot?.();if(typeof v!="string"||v==="")return;let S=v.length>s?v.slice(v.length-s):v;return HS(S)}catch{return}},m=()=>{let v=HS(o(e.runnerLogFile,s)),S=f(),b={kind:"runner_diagnostic_log",captured_at:new Date(n()).toISOString(),lifecycle:d.map(w=>({event:w.event,at:w.atIso,...w.closeCode===void 0?{}:{close_code:w.closeCode},...w.closeReason===void 0?{}:{close_reason:HS(w.closeReason)},...w.previousSessionDurationMs===void 0?{}:{previous_session_duration_ms:w.previousSessionDurationMs},...w.reconnectCount===void 0?{}:{reconnect_count:w.reconnectCount}})),runner_log_tail:v,...S===void 0?{}:{backend_stderr:S}};return{bundle_name:"runner-diagnostics",exported_at:new Date(n()).toISOString(),diagnostics:b,telemetry_ndjson:d.map(w=>JSON.stringify(w)).join(`
1285
- `)}},p=async()=>{let v=d.length;try{await Promise.resolve(e.upload(m())),d.splice(0,v)}catch(S){try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,error:S instanceof Error?S.message:String(S)})}catch{}}},y=()=>{u||c!==void 0||(c=t(()=>{p()},i),c.unref?.())},x=()=>{u=!0,c!==void 0&&(r(c),c=void 0)};try{e.log?.("runner_diagnostics.enabled",{destination:"linzumi",runner_log_file:e.runnerLogFile,interval_ms:i,note:"runner lifecycle + runner-log tail + backend stderr are uploaded to Linzumi for support diagnostics (auto-deleted after 4 days)"})}catch{}return y(),{recordLifecycle:l,flushNow:p,stop:x}}var jme,Lme,zme,qme,Fme,Gq=j(()=>{"use strict";jme=[/(--token[=\s]+)\S+/gi,/(bearer\s+)[^\s,;"'\]\}]+/gi,/((?:access[_-]?token|api[_-]?key|auth[_-]?token|authorization|secret|password|refresh[_-]?token|session[_-]?token|jwt|token)["']?\s*[:=]\s*["']?)[^\s,;"'\]\}]+/gi,/\beyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g];Lme=45e3,zme=5e3,qme=64*1024,Fme=200});var $t,ZS,Ds=j(()=>{"use strict";$t="1.0.50",ZS=`linzumi ${$t}`});import{closeSync as Xq,existsSync as XS,mkdirSync as Ume,openSync as Yq,readFileSync as eF,renameSync as Bme,unlinkSync as Ep,writeFileSync as Jme,writeSync as nF}from"node:fs";import{dirname as tF,join as Kme}from"node:path";function oF(e){return e instanceof La||e instanceof Error&&e.name===rF&&"lockPath"in e&&"heldBy"in e}function iF(e,n=Nn(),t){let r=t===void 0?encodeURIComponent(e):Ea(t);return Kme(tF(n),"runners",`${r}.lock`)}function sF(e){let n=iF(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??she,r=e.now??(()=>new Date),o=e.killPid??ahe,i=r().toISOString(),s={version:1,machineId:e.machineId,runnerId:e.runnerId,pid:e.pid??process.pid,cwd:e.cwd,workspace:e.workspace,...e.linzumiUrl===void 0?{}:{linzumiUrl:Fn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??$t};Qme(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),Xme(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>Hme(n,s,r),d=setInterval(a,Vme);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),ehe(n,s)}}}function Hme(e,n,t){try{let r=ny(e);if(r===void 0||r.machineId!==n.machineId||r.runnerId!==n.runnerId||r.pid!==n.pid||r.startedAt!==n.startedAt)return;let o={...r,heartbeatAt:t().toISOString()},i=`${e}.tmp`;Jme(i,`${JSON.stringify(o,null,2)}
1285
+ `)}},p=async()=>{let v=d.length;try{await Promise.resolve(e.upload(m())),d.splice(0,v)}catch(S){try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,error:S instanceof Error?S.message:String(S)})}catch{}}},y=()=>{u||c!==void 0||(c=t(()=>{p()},i),c.unref?.())},x=()=>{u=!0,c!==void 0&&(r(c),c=void 0)};try{e.log?.("runner_diagnostics.enabled",{destination:"linzumi",runner_log_file:e.runnerLogFile,interval_ms:i,note:"runner lifecycle + runner-log tail + backend stderr are uploaded to Linzumi for support diagnostics (auto-deleted after 4 days)"})}catch{}return y(),{recordLifecycle:l,flushNow:p,stop:x}}var jme,Lme,zme,qme,Fme,Gq=j(()=>{"use strict";jme=[/(--token[=\s]+)\S+/gi,/(bearer\s+)[^\s,;"'\]\}]+/gi,/((?:access[_-]?token|api[_-]?key|auth[_-]?token|authorization|secret|password|refresh[_-]?token|session[_-]?token|jwt|token)["']?\s*[:=]\s*["']?)[^\s,;"'\]\}]+/gi,/\beyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g];Lme=45e3,zme=5e3,qme=64*1024,Fme=200});var $t,ZS,Ds=j(()=>{"use strict";$t="1.0.51",ZS=`linzumi ${$t}`});import{closeSync as Xq,existsSync as XS,mkdirSync as Ume,openSync as Yq,readFileSync as eF,renameSync as Bme,unlinkSync as Ep,writeFileSync as Jme,writeSync as nF}from"node:fs";import{dirname as tF,join as Kme}from"node:path";function oF(e){return e instanceof La||e instanceof Error&&e.name===rF&&"lockPath"in e&&"heldBy"in e}function iF(e,n=Nn(),t){let r=t===void 0?encodeURIComponent(e):Ea(t);return Kme(tF(n),"runners",`${r}.lock`)}function sF(e){let n=iF(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??she,r=e.now??(()=>new Date),o=e.killPid??ahe,i=r().toISOString(),s={version:1,machineId:e.machineId,runnerId:e.runnerId,pid:e.pid??process.pid,cwd:e.cwd,workspace:e.workspace,...e.linzumiUrl===void 0?{}:{linzumiUrl:Fn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??$t};Qme(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),Xme(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>Hme(n,s,r),d=setInterval(a,Vme);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),ehe(n,s)}}}function Hme(e,n,t){try{let r=ny(e);if(r===void 0||r.machineId!==n.machineId||r.runnerId!==n.runnerId||r.pid!==n.pid||r.startedAt!==n.startedAt)return;let o={...r,heartbeatAt:t().toISOString()},i=`${e}.tmp`;Jme(i,`${JSON.stringify(o,null,2)}
1286
1286
  `,"utf8"),Bme(i,e)}catch{}}function Vu(e,n,t){if(!n(e.pid))return{state:"dead"};let r=e.heartbeatAt??e.startedAt,o=Date.parse(r);return Number.isNaN(o)||t().getTime()-o>Wme?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function aF(e,n,t,r){return t!==ey||e.launchSource!==ey?!1:r.state!=="live"?!0:Zme(n,e.cliVersion)>0}function Zme(e,n){let t=Qq(e),r=Qq(n);for(let o=0;o<3;o++){let i=t.core[o],s=r.core[o];if(i===void 0||s===void 0)throw new Error(`compareCliVersions: unexpected undefined at core index ${o}`);if(i!==s)return i>s?1:-1}return t.prerelease.length===0&&r.prerelease.length===0?0:t.prerelease.length===0?1:r.prerelease.length===0?-1:Gme(t.prerelease,r.prerelease)}function Qq(e){let n=e.trim().replace(/^v/i,"").split("+",1)[0]??"",t=n.indexOf("-"),r=t===-1?n:n.slice(0,t),o=t===-1?"":n.slice(t+1),i=r.split("."),s=[GS(i[0]),GS(i[1]),GS(i[2])],a=o===""?[]:o.split(".").filter(d=>d!=="");return{core:s,prerelease:a}}function GS(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function Gme(e,n){let t=Math.max(e.length,n.length);for(let r=0;r<t;r++){let o=e[r],i=n[r];if(o===void 0)return-1;if(i===void 0)return 1;let s=Number.parseInt(o,10),a=Number.parseInt(i,10),d=s.toString()===o,u=a.toString()===i;if(d&&u){if(s!==a)return s>a?1:-1}else{if(d!==u)return d?-1:1;if(o!==i)return o>i?1:-1}}return 0}function dF(e,n,t,r,o){try{r(n.pid)}catch(i){let s=i!==null&&typeof i=="object"&&"code"in i?i.code:void 0;if(s!=="ESRCH")throw s==="EPERM"||s==="EACCES"?new Error(`Cannot take over the runner lock at ${e}: its holder process (pid ${n.pid}) is owned by another user and cannot be stopped. Stop that process, or remove the lock file, then retry.`):i}o?.({lockPath:e,holderPid:n.pid,holderRunnerId:n.runnerId,reason:t})}function Qme(e,n,t,r,o,i,s){if(t===void 0||tr(t)!==tr(At))return;let a=iF(e,n),d=ny(a);if(d!==void 0){if(Vu(d,r,o).state==="live")throw new La(a,d);uF(a,r,()=>{let u=XS(a)?ek(a):void 0;if(u===void 0)return;let c=Vu(u,r,o);if(c.state==="live")throw new La(a,u);c.state==="wedged"&&dF(a,u,c.reason,i,s),Ep(a)})}}function Xme(e,n,t,r,o,i,s,a){if(QS(e,n))return;s?.();let d=ny(e);if(d===void 0){if(QS(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(Vu(d,t,r).state==="live")throw new La(e,d);a?.(),uF(e,t,()=>{let u=XS(e)?ek(e):void 0;if(u!==void 0){let c=Vu(u,t,r);if(c.state==="live")throw new La(e,u);c.state==="wedged"&&dF(e,u,c.reason,o,i),Ep(e)}if(!QS(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function QS(e,n){Ume(tF(e),{recursive:!0});try{let t=Yq(e,"wx");try{nF(t,`${JSON.stringify(n,null,2)}
1287
1287
  `)}finally{Xq(t)}return!0}catch(t){if(Wu(t,"EEXIST"))return!1;throw t}}function uF(e,n,t){let r=`${e}.replace`;for(;;)try{let o=Yq(r,"wx");try{nF(o,`${process.pid}
1288
1288
  `),t()}finally{Xq(o),Ep(r)}return}catch(o){if(Wu(o,"EEXIST")){let i=Yme(r);if(i===void 0)continue;if(n(i))throw new Error(["another Linzumi runner is already replacing a stale runner lock",`lock: ${e}`,"Wait for that startup to finish, then retry."].join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linzumi/cli",
3
- "version": "1.0.50",
3
+ "version": "1.0.51",
4
4
  "description": "Linzumi CLI \u2014 point a Codex agent at the real code on your laptop, with your team watching and steering from shared threads.",
5
5
  "type": "module",
6
6
  "bin": {