@linzumi/cli 1.0.21 → 1.0.22

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.21 --version
61
+ npx -y @linzumi/cli@1.0.22 --version
62
62
  linzumi --version
63
63
  ```
64
64
 
package/dist/index.js CHANGED
@@ -1028,7 +1028,7 @@ To kick the agent off:
1028
1028
  2. Click any "Try this" prompt on the demo page to copy it.
1029
1029
  3. Paste into the thread. Codex will pick it up and start editing this folder.
1030
1030
  `});import{connect as GZ}from"node:net";import{gzipSync as ZZ}from"node:zlib";async function WE(e,n){if(!n.includes(e.port))return dm(e.requestId,"forward_port_not_allowed");let t=eQ(e);if(!t.ok)return dm(e.requestId,t.error);try{let r={method:e.method,headers:nQ(e.headers),redirect:"manual",...t.body===void 0?{}:{body:t.body.buffer.slice(t.body.byteOffset,t.body.byteOffset+t.body.byteLength)}},o=await YZ(e.port,e.path,e.queryString,r),a=Buffer.from(await o.arrayBuffer()),i=rQ(e.path,o.headers,a),s=oQ(e,o.headers,i);return s.body.byteLength>VE?dm(e.requestId,"forward_response_too_large"):{requestId:e.requestId,ok:!0,status:o.status,headers:s.headers,bodyBase64:s.body.toString("base64")}}catch{return dm(e.requestId,"forward_target_unavailable")}}function HE(e){return e.type==="forward_http_request"}function GE(e){return e.type==="forward_tcp_open"||e.type==="forward_tcp_send"||e.type==="forward_tcp_close"}function ZE(e,n,t,r=XZ){let o=new Map,a=s=>e.push(n,"forward:tcp_event",s).catch(()=>{}),i=s=>{let d=o.get(s);o.delete(s),d?.socket.end()};return{handle:s=>{switch(s.type){case"forward_tcp_open":{if(!t().includes(s.port)){a({socketId:s.socketId,type:"error",error:"forward_port_not_allowed"});return}o.get(s.socketId)?.socket.destroy();let u=r(s.port);o.set(s.socketId,{socket:u}),u.on("connect",()=>{sm(o,s.socketId,u)&&a({socketId:s.socketId,type:"open"})}),u.on("data",c=>{!sm(o,s.socketId,u)||!(c instanceof Uint8Array)||a({socketId:s.socketId,type:"data",bodyBase64:Buffer.from(c).toString("base64")})}),u.on("close",()=>{sm(o,s.socketId,u)&&(o.delete(s.socketId),a({socketId:s.socketId,type:"close"}))}),u.on("error",()=>{sm(o,s.socketId,u)&&(o.delete(s.socketId),a({socketId:s.socketId,type:"error",error:"forward_target_unavailable"}),u.destroy())});return}case"forward_tcp_send":{let d=o.get(s.socketId),u=QE(s.bodyBase64);if(u===void 0){a({socketId:s.socketId,type:"error",error:"invalid_forward_request"});return}if(d===void 0||d.socket.destroyed===!0||d.socket.writable===!1){a({socketId:s.socketId,type:"error",error:"tcp_socket_not_open"});return}d.socket.write(u);return}case"forward_tcp_close":i(s.socketId);return}},close:()=>{for(let s of o.keys())i(s)}}}function sm(e,n,t){return e.get(n)?.socket===t}function XZ(e){return GZ({host:"127.0.0.1",port:e})}function KE(e,n,t,r){let o=t.startsWith("/")?t:`/${t}`,a=new URL(`${e}://127.0.0.1:${n}${o}`);return r!==void 0&&r.trim()!==""&&(a.search=r),a.toString()}async function YZ(e,n,t,r){try{return await fetch(KE("http",e,n,t),r)}catch(o){try{return await fetch(KE("https",e,n,t),r)}catch{throw o}}}function eQ(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=QE(e.bodyBase64);return n===void 0?{ok:!1,error:"invalid_forward_request"}:n.byteLength>VE?{ok:!1,error:"forward_body_too_large"}:{ok:!0,body:n}}function QE(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 nQ(e){let n=new Headers;if(!Array.isArray(e))return n;for(let t of e)uQ(t)&&n.set(t.name,t.value);return n}function tQ(e){return Array.from(e.entries()).filter(([n])=>!YE.has(n.toLowerCase())).slice(0,40).map(([n,t])=>({name:n,value:t}))}function rQ(e,n,t){return dQ(e,n)?Buffer.from(t.toString("utf8").replace('message:h(3783,null,"code-server")','message:h(3783,null,"Kandan")')):t}function oQ(e,n,t){let r=tQ(n);return aQ(e,n,t)?{body:ZZ(t),headers:[...r,{name:"content-encoding",value:"gzip"},{name:"vary",value:"accept-encoding"}]}:{body:t,headers:r}}function aQ(e,n,t){return e.method==="HEAD"||t.byteLength<QZ||!iQ(e.headers)?!1:sQ(e.path,n)}function iQ(e){return Array.isArray(e)?e.some(n=>XE(n)&&n.name.toLowerCase()==="accept-encoding"&&n.value.toLowerCase().split(",").map(t=>t.trim()).some(t=>t==="gzip"||t.startsWith("gzip;"))):!1}function sQ(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 dQ(e,n){return e.endsWith("/out/vs/code/browser/workbench/workbench.js")&&(n.get("content-type")??"").toLowerCase().includes("javascript")}function uQ(e){return XE(e)&&!YE.has(e.name.toLowerCase())}function XE(e){return ee(e)&&typeof e.name=="string"&&typeof e.value=="string"}function dm(e,n){return{requestId:e,ok:!1,error:n}}var VE,QZ,YE,eD=V(()=>{"use strict";Mn();VE=64*1024*1024,QZ=32*1024;YE=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 uv}from"node:child_process";import{copyFileSync as cQ,cpSync as lQ,existsSync as um,mkdirSync as Ki,mkdtempSync as fQ,readFileSync as pQ,realpathSync as cv,writeFileSync as mQ}from"node:fs";import{tmpdir as hQ}from"node:os";import{basename as gQ,delimiter as yQ,dirname as fa,join as Zn}from"node:path";function tD(e){return e.type==="start_local_editor"}function rD(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:dv(t.collaboration)}}:r}async function oD(e,n){if(n.editorRuntime===void 0)return{ok:!1,state:n.currentState,reason:"local_editor_disabled"};let t=Fr(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&&LQ(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:dv(n.currentState.collaboration)}};let r=xQ(e,n);if(e.collaboration!==void 0&&r===void 0)return{ok:!1,state:n.currentState,reason:"missing_browser_base_url"};let o=await wp(),a=e.collaboration===void 0?void 0:await wp(),i=e.collaboration===void 0||r===void 0?void 0:RQ(e.collaboration,n.runnerId??"local-runner",a,r),s=vQ(i,n.editorRuntime);if(!s.ok)return{ok:!1,state:n.currentState,reason:s.reason};let d=kQ({codeServerBin:n.editorRuntime.codeServerBin,codeServerRuntimeRoot:n.editorRuntime.root,port:o,cwd:t.cwd,userDataDir:s.userDataDir,extensionsDir:s.extensionsDir,platform:n.platform});if(!d.ok)return{ok:!1,state:n.currentState,reason:d.reason};let u=await DQ(i,s,n.editorRuntime,n.runnerId);if(!u.ok)return{ok:!1,state:n.currentState,reason:"code_server_spawn_failed"};Te("process.spawn",{command:d.command,args:d.args,cwd:t.cwd,purpose:"local_editor.code_server"},{sessionId:n.runnerId});let c=uv(d.command,[...d.args],{cwd:t.cwd,env:OQ(process.env,t.cwd,s.userDataDir,u.collaboration),stdio:["ignore","inherit","inherit"]});Te("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,S)=>{Te("process.exit",{command:d.command,args:d.args,cwd:t.cwd,pid:c.pid,code:x,signal:S,purpose:"local_editor.code_server"},{sessionId:n.runnerId})});let l=sD(c);if(await dD(c)==="failed")return u.collaboration?.process.kill("SIGINT"),{ok:!1,state:n.currentState,reason:"code_server_spawn_failed"};let[p,f]=await Promise.all([FQ(o,l),u.ready]);return p==="failed"||f==="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:dv(u.collaboration)}})}function xQ(e,n){let t=e.browserBaseUrl??n.browserBaseUrl;return t===void 0||t.trim()===""?void 0:t.trim().replace(/\/+$/,"")}function aD(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 vQ(e,n){try{let t=fQ(Zn(hQ(),"kandan-local-editor-")),r=Zn(t,"extensions"),o=Zn(t,"collaboration-server"),a=Zn(t,"tmp"),i=Zn(t,"User");return Ki(i,{recursive:!0}),Ki(r,{recursive:!0}),Ki(o,{recursive:!0}),Ki(a,{recursive:!0}),n!==void 0&&(bQ(n),MQ(n.assets.documentStateExtensionDir,Zn(r,"kandan.document-state-telemetry"))),mQ(Zn(i,"settings.json"),JSON.stringify(EQ(e),null,2)),{ok:!0,userDataDir:t,extensionsDir:r,collaborationServerDir:o}}catch{return{ok:!1,reason:"code_server_spawn_failed"}}}function bQ(e){let n=wQ(e);[{source:Zn(n,"extensions","git-base","dist","extension.js"),target:Zn(n,"extensions","git-base","dist","browser","extension.js"),required:!0},{source:Zn(n,"extensions","git-base","dist","extension.js.map"),target:Zn(n,"extensions","git-base","dist","browser","extension.js.map"),required:!1},{source:Zn(n,"extensions","merge-conflict","dist","mergeConflictMain.js"),target:Zn(n,"extensions","merge-conflict","dist","browser","mergeConflictMain.js"),required:!0},{source:Zn(n,"extensions","merge-conflict","dist","mergeConflictMain.js.map"),target:Zn(n,"extensions","merge-conflict","dist","browser","mergeConflictMain.js.map"),required:!1}].forEach(({source:r,target:o,required:a})=>{switch(!0){case um(o):return;case(!a&&!um(r)):return;default:Ki(fa(o),{recursive:!0}),cQ(r,o);return}})}function wQ(e){let n=iD([Zn(e.root,"lib","vscode"),Zn(fa(fa(e.codeServerBin)),"lib","vscode"),..._Q(e.codeServerBin).map(o=>Zn(fa(fa(o)),"lib","vscode"))]),t=n.find(o=>SQ(o).every(a=>um(a))),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 _Q(e){try{let t=pQ(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 SQ(e){return[Zn(e,"extensions","git-base","dist","extension.js"),Zn(e,"extensions","merge-conflict","dist","mergeConflictMain.js")]}function kQ(e){let n=e.platform??process.platform;if(n==="linux")return CQ(e);if(n!=="darwin")return cm();let t=sv(e.codeServerBin,e.envPath??process.env.PATH??"");return t.ok?{ok:!0,command:t.command,args:aD(e.port,e.cwd,e.userDataDir,e.extensionsDir)}:cm()}function CQ(e){let n=sv(e.bubblewrapBin??"bwrap",e.envPath??process.env.PATH??"");if(!n.ok)return cm();let t=sv(e.codeServerBin,e.envPath??process.env.PATH??"");if(!t.ok)return cm();let r=iD(["/usr","/bin","/sbin","/lib","/lib64","/etc","/nix","/opt",...e.codeServerRuntimeRoot===void 0?[]:IQ(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",Zn(e.userDataDir,"data"),"--setenv","XDG_CONFIG_HOME",Zn(e.userDataDir,"config"),...r.flatMap(a=>["--ro-bind-try",a,a]),"--bind",e.cwd,e.cwd,"--bind",e.userDataDir,e.userDataDir,...e.extensionsDir===void 0?[]:["--bind",e.extensionsDir,e.extensionsDir],"--chdir",e.cwd,"--",t.command,...aD(e.port,e.cwd,e.userDataDir,e.extensionsDir)];return{ok:!0,command:n.command,args:o}}function cm(){return{ok:!1,reason:"local_editor_filesystem_sandbox_unavailable"}}function sv(e,n){if(PQ(e)){let t=TQ(e);return t===void 0?{ok:!1}:{ok:!0,command:e,directory:t}}for(let t of n.split(yQ)){if(t.trim()==="")continue;let r=Zn(t,e);if(!um(r))continue;let o=cv(r);return{ok:!0,command:o,directory:fa(o)}}return{ok:!1}}function PQ(e){return e.includes("/")||e.includes("\\")}function TQ(e){try{let n=fa(cv(e));return n==="/"?void 0:n}catch{let t=fa(e);return t==="."||t==="/"?void 0:t}}function IQ(e){try{return[e,cv(e)]}catch{return[e]}}function iD(e){return Array.from(new Set(e.filter(n=>n.length>0)))}function RQ(e,n,t,r){if(e===void 0||t===void 0)return;let o=`/local-codex-runners/${encodeURIComponent(n)}/forwards/${t}/preview-target`,a=new URL(o,`${r}/`).toString(),i=`/api/v2/editor/sessions/${e.editorSessionId}/collaboration-state`,s=e.bootstrapToken===void 0||e.bootstrapToken===""?void 0:`${o}/_kandan-collaboration/${encodeURIComponent(e.bootstrapToken)}`,d=s===void 0?i:`${s}${i}`,u=s===void 0?a:new URL(s,`${r}/`).toString();return{...e,serverPort:t,serverUrl:a,bootstrapServerUrl:u,collaborationStateUrl:d}}function EQ(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 DQ(e,n,t,r){if(e===void 0)return{ok:!0,ready:Promise.resolve("ready")};try{await Promise.all([nD(t.assets.collaborationExtensionTarball,n.extensionsDir),nD(t.assets.collaborationServerTarball,n.collaborationServerDir)]);let o=AQ(),a=[Zn(n.collaborationServerDir,"open-collaboration-server","bundle","app.js"),"--hostname","127.0.0.1","--port",String(e.serverPort)];Te("process.spawn",{command:o,args:a,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r});let i=uv(o,a,{env:{...process.env,OCT_ACTIVATE_SIMPLE_LOGIN:"true",OCT_SERVER_OWNER:"Kandan"},stdio:["ignore","inherit","inherit"]});Te("process.spawned",{command:o,args:a,pid:i.pid,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r}),i.once("exit",(c,l)=>{Te("process.exit",{command:o,args:a,pid:i.pid,code:c,signal:l,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r})});let s=sD(i);return await dD(i)==="failed"?{ok:!1}:{ok:!0,ready:qQ(e.serverPort,s),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:i,exited:s}}}catch{return{ok:!1}}}function AQ(e=process.env,n=process.execPath){let t=e.LINZUMI_NODE_BIN?.trim();return t!==void 0&&t!==""?t:gQ(n).toLowerCase().includes("bun")?"node":n}async function nD(e,n){Ki(n,{recursive:!0}),await jQ("tar",["-xzf",e,"-C",n])}function MQ(e,n){Ki(fa(n),{recursive:!0}),lQ(e,n,{recursive:!0})}function OQ(e,n,t,r){let{PORT:o,...a}=e,i={...a,PWD:n};return r===void 0?i:{...i,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:Zn(t,"kandan-oct-auto-host.lock")}}function dv(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 LQ(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 jQ(e,n){return new Promise((t,r)=>{Te("process.spawn",{command:e,args:n,purpose:"local_editor.install_process"});let o=uv(e,[...n],{stdio:["ignore","ignore","inherit"]});Te("process.spawned",{command:e,args:n,pid:o.pid,purpose:"local_editor.install_process"}),o.once("error",r),o.once("exit",(a,i)=>{Te("process.exit",{command:e,args:n,pid:o.pid,code:a,signal:i,purpose:"local_editor.install_process"}),a===0?t():r(new Error(`${e} exited with ${a??"unknown"}`))})})}function sD(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 FQ(e,n,t=1e4){let r=Date.now()+t,o=`http://127.0.0.1:${e}/`;return new Promise(a=>{let i=!1,s,d=l=>{i||(i=!0,s!==void 0&&clearTimeout(s),a(l))},u=()=>{s=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 qQ(e,n,t=1e4){let r=Date.now()+t,o=`http://127.0.0.1:${e}/api/login/initial`;return new Promise(a=>{let i=!1,s,d=l=>{i||(i=!0,s!==void 0&&clearTimeout(s),a(l))},u=()=>{s=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 dD(e){return new Promise(n=>{let t=!1,r=()=>{e.off("spawn",o),e.off("error",a)},o=()=>{t||(t=!0,r(),n("spawned"))},a=()=>{t||(t=!0,r(),n("failed"))};e.once("spawn",o),e.once("error",a),setImmediate(()=>{!t&&e.pid!==void 0&&o()})})}var uD=V(()=>{"use strict";ji();Wa();Lr()});import{spawn as $Q}from"node:child_process";import{createHash as fD}from"node:crypto";import{createReadStream as NQ,createWriteStream as UQ,existsSync as qd,mkdirSync as Xc,mkdtempSync as zQ,readFileSync as pD,renameSync as BQ,rmSync as cD,writeFileSync as mD}from"node:fs";import{homedir as JQ}from"node:os";import{dirname as lm,join as St,resolve as KQ}from"node:path";import{Readable as VQ}from"node:stream";import{pipeline as WQ}from"node:stream/promises";async function $d(e){if(e.customCodeServerBin!==void 0)return{codeServerBin:e.customCodeServerBin,status:{status:"custom",mode:"custom",codeServerBin:e.customCodeServerBin}};let n=HQ(e.platform??process.platform,e.arch??process.arch);if(n===void 0)return lv("unsupported_platform");let t=await GQ({kandanUrl:e.kandanUrl,token:e.token,platform:n,fetchImpl:e.fetchImpl??fetch});if(!t.ok)return lv(t.reason);let r=e.cacheRoot??cX(),o=YQ(r,t.manifest);if(o.ok)return lD(t.manifest,o.runtime,!1);let a=await eX({kandanUrl:e.kandanUrl,token:e.token,manifest:t.manifest,cacheRoot:r,fetchImpl:e.fetchImpl??fetch,extractArchive:e.extractArchive??aX});return a.ok?lD(t.manifest,a.runtime,!0):lv(a.reason)}function hD(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 HQ(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 lv(e){return{status:{status:"unavailable",mode:"server_managed",reason:e}}}function lD(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 GQ(e){let n=new URL(`/api/v2/local-codex-runner/editor-runtime/${encodeURIComponent(e.platform)}/manifest`,at(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 ZQ(t):"manifest_unavailable"};let r=await t.json();return!ee(r)||r.ok!==!0||!ee(r.runtime)?{ok:!1,reason:"manifest_unavailable"}:QQ(r.runtime)}async function ZQ(e){let n=await e.json().catch(()=>{});return ee(n)&&n.error==="token_expired"?"auth_expired":"auth_unauthorized"}function QQ(e){let n=Lo(e.version),t=Lo(e.platform),r=Lo(e.archiveUrl),o=xD(e.archiveSha256),a=Lo(e.codeServerVersion),i=Lo(e.codeServerBinPath)??"bin/code-server",s=Lo(e.manifestPath)??"linzumi-editor-runtime.json",d=XQ(e.assets);return n===void 0||t===void 0||r===void 0||o===void 0||a===void 0||d===void 0?{ok:!1,reason:"manifest_unavailable"}:{ok:!0,manifest:{version:n,platform:t,archiveUrl:r,archiveSha256:o,codeServerVersion:a,codeServerBinPath:i,manifestPath:s,assets:d}}}function XQ(e){if(!Array.isArray(e))return;let n=[];for(let t of e){if(!ee(t))return;let r=Lo(t.path),o=xD(t.sha256),a=Lo(t.url),i=Lo(t.contentBase64);if(r===void 0||o===void 0)return;n.push({path:r,sha256:o,...a===void 0?{}:{url:a},...i===void 0?{}:{contentBase64:i}})}return n}function YQ(e,n){let t=gD(e,n),r=St(t,n.manifestPath),o=St(t,n.codeServerBinPath),a=yD(t,n);if(!qd(r)||!qd(o)||a===void 0)return{ok:!1};try{let i=JSON.parse(pD(r,"utf8"));if(ee(i)&&i.version===n.version&&i.platform===n.platform&&(i.archiveSha256===void 0||i.archiveSha256===n.archiveSha256))return{ok:!0,runtime:{mode:"server_managed",root:t,codeServerBin:o,assets:a}}}catch{return{ok:!1}}return{ok:!1}}async function eX(e){Xc(e.cacheRoot,{recursive:!0});let n=zQ(St(e.cacheRoot,".install-")),t=St(n,"runtime.tar.gz"),r=St(n,"runtime");try{let o=await rX({kandanUrl:e.kandanUrl,token:e.token,manifest:e.manifest,archivePath:t,fetchImpl:e.fetchImpl});if(!o.ok)return o;if(Xc(r,{recursive:!0}),!await e.extractArchive(t,r))return{ok:!1,reason:"archive_extract_failed"};if(!await nX({kandanUrl:e.kandanUrl,manifest:e.manifest,runtimeRoot:r,fetchImpl:e.fetchImpl}))return{ok:!1,reason:"install_failed"};let i=St(r,e.manifest.manifestPath),s=St(r,e.manifest.codeServerBinPath),d=yD(r,e.manifest);if(!qd(s)||d===void 0)return{ok:!1,reason:"invalid_archive"};Xc(lm(i),{recursive:!0}),mD(i,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=gD(e.cacheRoot,e.manifest);return cD(u,{recursive:!0,force:!0}),Xc(lm(u),{recursive:!0}),BQ(r,u),{ok:!0,runtime:{mode:"server_managed",root:u,codeServerBin:St(u,e.manifest.codeServerBinPath),assets:{collaborationExtensionTarball:St(u,"kandan","editor_extensions","typefox.open-collaboration-tools.tar.gz"),collaborationServerTarball:St(u,"kandan","editor_servers","open-collaboration-server.tar.gz"),documentStateExtensionDir:St(u,"kandan","editor_extensions","kandan.document-state-telemetry")}}}}catch{return{ok:!1,reason:"install_failed"}}finally{cD(n,{recursive:!0,force:!0})}}async function nX(e){for(let n of e.manifest.assets){let t=St(e.runtimeRoot,n.path);try{let r=await tX({kandanUrl:e.kandanUrl,asset:n,fetchImpl:e.fetchImpl});if(r===void 0)continue;Xc(lm(t),{recursive:!0}),mD(t,r)}catch{return!1}}return!0}async function tX(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,at(e.kandanUrl)),t=await e.fetchImpl(n);return t.status!==200?void 0:Buffer.from(await t.arrayBuffer())}}async function rX(e){let n=at(e.kandanUrl),t=new URL(e.manifest.archiveUrl,n),r=await e.fetchImpl(t,{...oX(t,new URL(n))?{headers:{authorization:`Bearer ${e.token}`}}:{}});return r.status!==200||r.body===null?{ok:!1,reason:"download_failed"}:(await WQ(VQ.fromWeb(r.body),UQ(e.archivePath)),await iX(e.archivePath)!==e.manifest.archiveSha256?{ok:!1,reason:"checksum_mismatch"}:{ok:!0})}function oX(e,n){return e.protocol===n.protocol&&e.host===n.host}function aX(e,n){return new Promise(t=>{let o=["-xzf",e,"-C",n];Te("process.spawn",{command:"tar",args:o,purpose:"editor_runtime.extract"});let a=$Q("tar",o,{stdio:["ignore","ignore","ignore"]});Te("process.spawned",{command:"tar",args:o,pid:a.pid,purpose:"editor_runtime.extract"}),a.on("error",()=>t(!1)),a.on("exit",(i,s)=>{Te("process.exit",{command:"tar",args:o,pid:a.pid,code:i,signal:s,purpose:"editor_runtime.extract"}),t(i===0)})})}function iX(e){return new Promise((n,t)=>{let r=fD("sha256"),o=NQ(e);o.on("error",t),o.on("data",a=>r.update(a)),o.on("end",()=>n(r.digest("hex")))})}function gD(e,n){return KQ(e,n.platform,n.archiveSha256)}function yD(e,n){let t=St(e,"kandan","editor_extensions","typefox.open-collaboration-tools.tar.gz"),r=St(e,"kandan","editor_servers","open-collaboration-server.tar.gz"),o=St(e,"kandan","editor_extensions","kandan.document-state-telemetry"),a=sX(n.codeServerBinPath),i=[n.codeServerBinPath,St(a,"lib","vscode","node_modules","vsda","rust","web","vsda.js"),St(a,"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"],s=dX(n.assets);for(let d of i){let u=s.get(d);if(u===void 0&&d!==n.codeServerBinPath)return;let c=St(e,d);if(!qd(c)||u!==void 0&&uX(c)!==u)return}if(!(!qd(t)||!qd(r)))return{collaborationExtensionTarball:t,collaborationServerTarball:r,documentStateExtensionDir:o}}function sX(e){let n=e.replaceAll("\\","/");return n==="bin/code-server"?".":n.endsWith("/bin/code-server")?n.slice(0,-16)||".":lm(n)}function dX(e){let n=new Map;for(let t of e)n.set(t.path,t.sha256);return n}function uX(e){return fD("sha256").update(pD(e)).digest("hex")}function cX(){return St(JQ(),".linzumi","editor-runtimes")}function Lo(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function xD(e){let n=Lo(e);return n!==void 0&&/^[a-f0-9]{64}$/i.test(n)?n.toLowerCase():void 0}var fm=V(()=>{"use strict";uo();Lr();Mn()});import{spawn as lX,spawnSync as fX}from"node:child_process";import{delimiter as pX,dirname as mX,join as pm}from"node:path";function Nd(e,n){return new Promise(t=>{let r=["--version"];Te("process.spawn",{command:e,args:r,cwd:n,purpose:"dependency_probe"});let o=lX(e,r,{cwd:n,stdio:["ignore","pipe","pipe"],detached:process.platform!=="win32"});Te("process.spawned",{command:e,args:r,cwd:n,pid:o.pid,purpose:"dependency_probe"});let a="",i="",s=!1,d=c=>{s||(s=!0,clearTimeout(u),t(c))},u=setTimeout(()=>{hX(o.pid),Te("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=>{a+=c.toString()}),o.stderr?.on("data",c=>{i+=c.toString()}),o.on("error",()=>{Te("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(Te("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 m=wD(a,i);d(m===void 0?{command:e,available:!0}:{command:e,available:!0,version:m})})})}function hX(e){if(e!==void 0)try{process.kill(process.platform==="win32"?e:-e,"SIGKILL")}catch{try{process.kill(e,"SIGKILL")}catch{}}}async function Ga(e){let[n,t,r]=await Promise.all([Nd(process.execPath,e.cwd),gX(e),_X(e)]);return{node:n,codex:t,codeServer:r,editorRuntime:e.editorRuntime}}async function gX(e){let n=await Nd(e.codexBin,e.cwd);if(n.available)return n;let t=yX({cwd:e.cwd,codexBin:e.codexBin,env:process.env});if(t===void 0)return n;let r=await Nd(t,e.cwd);return r.available?r:n}function yX(e){return vD(vX(e),e)}function vD(e,n){let[t,...r]=e;if(t===void 0)return;let o=xX(t,n);return o===void 0?vD(r,n):o}function xX(e,n){let t=fX(e,["which","codex"],{cwd:n.cwd,env:n.env??process.env,encoding:"utf8",timeout:1e3});if(t.status===0)return wD(t.stdout?.toString())}function vX(e){let n=e.env??process.env;return Array.from(new Set([bX(e.codexBin),n.VOLTA_HOME===void 0?void 0:pm(n.VOLTA_HOME,"bin","volta"),n.HOME===void 0?void 0:pm(n.HOME,".volta","bin","volta"),...wX(n.PATH)].filter(t=>t!==void 0)))}function bX(e){return e.replaceAll("\\","/").endsWith("/.volta/bin/codex")?pm(mX(e),"volta"):void 0}function wX(e){return e===void 0?[]:e.split(pX).filter(n=>n!=="").map(n=>pm(n,"volta"))}function _X(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"}):Nd(e.codeServerBin,e.cwd)}function bD(e){if(Za(e),!e.codex.available)throw new Error(`Codex is not available at ${e.codex.command}. Install Codex or pass --codex-bin <path>.`)}function Za(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 pv(e){let n=e.codeServer??SX();return{bun:fv(e.node),codex:fv(e.codex),codeServer:fv(n),editorRuntime:e.editorRuntime===void 0?null:hD(e.editorRuntime)}}function SX(){return{command:"code-server",available:!1,reason:"not_configured"}}function fv(e){return{command:e.command,available:e.available,version:e.version??null,reason:e.reason??null}}function wD(...e){for(let n of e){let t=n?.trim();if(t!==void 0&&t!=="")return t}}var mm=V(()=>{"use strict";fm();Lr()});import{closeSync as kX,openSync as CX,readSync as PX,statSync as TX}from"node:fs";function mv(e){return typeof e!="string"||e===""?e:IX.reduce((n,t)=>t.source.startsWith("\\beyJ")?n.replace(t,"<redacted>"):n.replace(t,"$1<redacted>"),e)}function MX(e,n){let t;try{let{size:r}=TX(e),o=r>n?r-n:0,a=r-o;if(a<=0)return"";let i=Buffer.allocUnsafe(a);t=CX(e,"r");let s=PX(t,i,0,a,o);return i.subarray(0,s).toString("utf8")}catch{return""}finally{if(t!==void 0)try{kX(t)}catch{}}}function _D(e){let n=e.now??Date.now,t=e.setIntervalImpl??setInterval,r=e.clearIntervalImpl??clearInterval,o=e.readTail??MX,a=Math.max(EX,e.intervalMs??RX),i=Math.max(1,e.maxTailBytes??DX),s=Math.max(1,e.maxLifecycleEvents??AX),d=[],u=!1,c,l=S=>{try{for(d.push(S);d.length>s;)d.shift()}catch{}},m=()=>{try{let S=e.backendStderrSnapshot?.();if(typeof S!="string"||S==="")return;let P=S.length>i?S.slice(S.length-i):S;return mv(P)}catch{return}},p=()=>{let S=mv(o(e.runnerLogFile,i)),P=m(),C={kind:"runner_diagnostic_log",captured_at:new Date(n()).toISOString(),lifecycle:d.map(k=>({event:k.event,at:k.atIso,...k.closeCode===void 0?{}:{close_code:k.closeCode},...k.closeReason===void 0?{}:{close_reason:mv(k.closeReason)},...k.previousSessionDurationMs===void 0?{}:{previous_session_duration_ms:k.previousSessionDurationMs},...k.reconnectCount===void 0?{}:{reconnect_count:k.reconnectCount}})),runner_log_tail:S,...P===void 0?{}:{backend_stderr:P}};return{bundle_name:"runner-diagnostics",exported_at:new Date(n()).toISOString(),diagnostics:C,telemetry_ndjson:d.map(k=>JSON.stringify(k)).join(`
1031
- `)}},f=async()=>{let S=d.length;try{await Promise.resolve(e.upload(p())),d.splice(0,S)}catch(P){try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,error:P instanceof Error?P.message:String(P)})}catch{}}},y=()=>{u||c!==void 0||(c=t(()=>{f()},a),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:a,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:f,stop:x}}var IX,RX,EX,DX,AX,SD=V(()=>{"use strict";IX=[/(--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];RX=45e3,EX=5e3,DX=64*1024,AX=200});var Ht,hv,Vi=V(()=>{"use strict";Ht="1.0.21",hv=`linzumi ${Ht}`});import{closeSync as CD,existsSync as xv,mkdirSync as OX,openSync as PD,readFileSync as TD,renameSync as LX,unlinkSync as Yc,writeFileSync as jX,writeSync as ID}from"node:fs";import{dirname as RD,join as FX}from"node:path";function DD(e){return e instanceof Wi||e instanceof Error&&e.name===ED&&"lockPath"in e&&"heldBy"in e}function AD(e,n=Nn(),t){let r=t===void 0?encodeURIComponent(e):Ui(t);return FX(RD(n),"runners",`${r}.lock`)}function MD(e){let n=AD(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??XX,r=e.now??(()=>new Date),o=e.killPid??YX,a=r().toISOString(),i={version:1,machineId:e.machineId,runnerId:e.runnerId,pid:e.pid??process.pid,cwd:e.cwd,workspace:e.workspace,...e.linzumiUrl===void 0?{}:{linzumiUrl:at(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:a,heartbeatAt:a,cliVersion:e.cliVersion??Ht};BX(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),JX(n,i,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let s=()=>NX(n,i,r),d=setInterval(s,qX);return d.unref(),{path:n,record:i,heartbeat:s,release:()=>{clearInterval(d),VX(n,i)}}}function NX(e,n,t){try{let r=gm(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()},a=`${e}.tmp`;jX(a,`${JSON.stringify(o,null,2)}
1031
+ `)}},f=async()=>{let S=d.length;try{await Promise.resolve(e.upload(p())),d.splice(0,S)}catch(P){try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,error:P instanceof Error?P.message:String(P)})}catch{}}},y=()=>{u||c!==void 0||(c=t(()=>{f()},a),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:a,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:f,stop:x}}var IX,RX,EX,DX,AX,SD=V(()=>{"use strict";IX=[/(--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];RX=45e3,EX=5e3,DX=64*1024,AX=200});var Ht,hv,Vi=V(()=>{"use strict";Ht="1.0.22",hv=`linzumi ${Ht}`});import{closeSync as CD,existsSync as xv,mkdirSync as OX,openSync as PD,readFileSync as TD,renameSync as LX,unlinkSync as Yc,writeFileSync as jX,writeSync as ID}from"node:fs";import{dirname as RD,join as FX}from"node:path";function DD(e){return e instanceof Wi||e instanceof Error&&e.name===ED&&"lockPath"in e&&"heldBy"in e}function AD(e,n=Nn(),t){let r=t===void 0?encodeURIComponent(e):Ui(t);return FX(RD(n),"runners",`${r}.lock`)}function MD(e){let n=AD(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??XX,r=e.now??(()=>new Date),o=e.killPid??YX,a=r().toISOString(),i={version:1,machineId:e.machineId,runnerId:e.runnerId,pid:e.pid??process.pid,cwd:e.cwd,workspace:e.workspace,...e.linzumiUrl===void 0?{}:{linzumiUrl:at(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:a,heartbeatAt:a,cliVersion:e.cliVersion??Ht};BX(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),JX(n,i,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let s=()=>NX(n,i,r),d=setInterval(s,qX);return d.unref(),{path:n,record:i,heartbeat:s,release:()=>{clearInterval(d),VX(n,i)}}}function NX(e,n,t){try{let r=gm(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()},a=`${e}.tmp`;jX(a,`${JSON.stringify(o,null,2)}
1032
1032
  `,"utf8"),LX(a,e)}catch{}}function Ud(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>$X?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function OD(e,n,t,r){return t!==hm||e.launchSource!==hm?!1:r.state!=="live"?!0:UX(n,e.cliVersion)>0}function UX(e,n){let t=kD(e),r=kD(n);for(let o=0;o<3;o++)if(t.core[o]!==r.core[o])return t.core[o]>r.core[o]?1:-1;return t.prerelease.length===0&&r.prerelease.length===0?0:t.prerelease.length===0?1:r.prerelease.length===0?-1:zX(t.prerelease,r.prerelease)}function kD(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),a=r.split("."),i=[gv(a[0]),gv(a[1]),gv(a[2])],s=o===""?[]:o.split(".").filter(d=>d!=="");return{core:i,prerelease:s}}function gv(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function zX(e,n){let t=Math.max(e.length,n.length);for(let r=0;r<t;r++){if(r>=e.length)return-1;if(r>=n.length)return 1;let o=e[r],a=n[r],i=Number.parseInt(o,10),s=Number.parseInt(a,10),d=i.toString()===o,u=s.toString()===a;if(d&&u){if(i!==s)return i>s?1:-1}else{if(d!==u)return d?-1:1;if(o!==a)return o>a?1:-1}}return 0}function LD(e,n,t,r,o){try{r(n.pid)}catch(a){let i=a!==null&&typeof a=="object"&&"code"in a?a.code:void 0;if(i!=="ESRCH")throw i==="EPERM"||i==="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.`):a}o?.({lockPath:e,holderPid:n.pid,holderRunnerId:n.runnerId,reason:t})}function BX(e,n,t,r,o,a,i){if(t===void 0||Wt(t)!==Wt(It))return;let s=AD(e,n),d=gm(s);if(d!==void 0){if(Ud(d,r,o).state==="live")throw new Wi(s,d);jD(s,r,()=>{let u=xv(s)?bv(s):void 0;if(u===void 0)return;let c=Ud(u,r,o);if(c.state==="live")throw new Wi(s,u);c.state==="wedged"&&LD(s,u,c.reason,a,i),Yc(s)})}}function JX(e,n,t,r,o,a,i,s){if(yv(e,n))return;i?.();let d=gm(e);if(d===void 0){if(yv(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(Ud(d,t,r).state==="live")throw new Wi(e,d);s?.(),jD(e,t,()=>{let u=xv(e)?bv(e):void 0;if(u!==void 0){let c=Ud(u,t,r);if(c.state==="live")throw new Wi(e,u);c.state==="wedged"&&LD(e,u,c.reason,o,a),Yc(e)}if(!yv(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function yv(e,n){OX(RD(e),{recursive:!0});try{let t=PD(e,"wx");try{ID(t,`${JSON.stringify(n,null,2)}
1033
1033
  `)}finally{CD(t)}return!0}catch(t){if(zd(t,"EEXIST"))return!1;throw t}}function jD(e,n,t){let r=`${e}.replace`;for(;;)try{let o=PD(r,"wx");try{ID(o,`${process.pid}
1034
1034
  `),t()}finally{CD(o),Yc(r)}return}catch(o){if(zd(o,"EEXIST")){let a=KX(r);if(a===void 0)continue;if(n(a))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.21",
3
+ "version": "1.0.22",
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": {