@linzumi/cli 1.0.57 → 1.0.58

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.57 --version
61
+ npx -y @linzumi/cli@1.0.58 --version
62
62
  linzumi --version
63
63
  ```
64
64
 
package/dist/index.js CHANGED
@@ -1316,7 +1316,7 @@ To kick the agent off:
1316
1316
  3. Paste into the thread. Codex will pick it up and start editing this folder.
1317
1317
  `});import{connect as $me}from"node:net";import{gzipSync as Ome}from"node:zlib";async function pF(e,n){if(!n.includes(e.port))return fy(e.requestId,"forward_port_not_allowed");let t=qme(e);if(!t.ok)return fy(e.requestId,t.error);try{let r={method:e.method,headers:Fme(e.headers),redirect:"manual",...t.body===void 0?{}:{body:t.body.buffer.slice(t.body.byteOffset,t.body.byteOffset+t.body.byteLength)}},o=await zme(e.port,e.path,e.queryString,r),i=Buffer.from(await o.arrayBuffer()),s=Ume(e.path,o.headers,i),a=Bme(e,o.headers,s);return a.body.byteLength>lF?fy(e.requestId,"forward_response_too_large"):{requestId:e.requestId,ok:!0,status:o.status,headers:a.headers,bodyBase64:a.body.toString("base64")}}catch{return fy(e.requestId,"forward_target_unavailable")}}function fF(e){return e.type==="forward_http_request"}function mF(e){return e.type==="forward_tcp_open"||e.type==="forward_tcp_send"||e.type==="forward_tcp_close"}function hF(e,n,t,r=Lme){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",()=>{py(o,a.socketId,u)&&i({socketId:a.socketId,type:"open"})}),u.on("data",c=>{!py(o,a.socketId,u)||!(c instanceof Uint8Array)||i({socketId:a.socketId,type:"data",bodyBase64:Buffer.from(c).toString("base64")})}),u.on("close",()=>{py(o,a.socketId,u)&&(o.delete(a.socketId),i({socketId:a.socketId,type:"close"}))}),u.on("error",()=>{py(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=gF(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 py(e,n,t){return e.get(n)?.socket===t}function Lme(e){return $me({host:"127.0.0.1",port:e})}function cF(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 zme(e,n,t,r){try{return await fetch(cF("http",e,n,t),r)}catch(o){try{return await fetch(cF("https",e,n,t),r)}catch{throw o}}}function qme(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=gF(e.bodyBase64);return n===void 0?{ok:!1,error:"invalid_forward_request"}:n.byteLength>lF?{ok:!1,error:"forward_body_too_large"}:{ok:!0,body:n}}function gF(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 Fme(e){let n=new Headers;if(!Array.isArray(e))return n;for(let t of e)Hme(t)&&n.set(t.name,t.value);return n}function Nme(e){return Array.from(e.entries()).filter(([n])=>!xF.has(n.toLowerCase())).slice(0,40).map(([n,t])=>({name:n,value:t}))}function Ume(e,n,t){return Wme(e,n)?Buffer.from(t.toString("utf8").replace('message:h(3783,null,"code-server")','message:h(3783,null,"Kandan")')):t}function Bme(e,n,t){let r=Nme(n);return Jme(e,n,t)?{body:Ome(t),headers:[...r,{name:"content-encoding",value:"gzip"},{name:"vary",value:"accept-encoding"}]}:{body:t,headers:r}}function Jme(e,n,t){return e.method==="HEAD"||t.byteLength<jme||!Kme(e.headers)?!1:Vme(e.path,n)}function Kme(e){return Array.isArray(e)?e.some(n=>yF(n)&&n.name.toLowerCase()==="accept-encoding"&&n.value.toLowerCase().split(",").map(t=>t.trim()).some(t=>t==="gzip"||t.startsWith("gzip;"))):!1}function Vme(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 Wme(e,n){return e.endsWith("/out/vs/code/browser/workbench/workbench.js")&&(n.get("content-type")??"").toLowerCase().includes("javascript")}function Hme(e){return yF(e)&&!xF.has(e.name.toLowerCase())}function yF(e){return Z(e)&&typeof e.name=="string"&&typeof e.value=="string"}function fy(e,n){return{requestId:e,ok:!1,error:n}}var lF,jme,xF,_F=O(()=>{"use strict";Rn();lF=64*1024*1024,jme=32*1024;xF=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 pk}from"node:child_process";import{copyFileSync as Zme,cpSync as Gme,existsSync as my,mkdirSync as Ua,mkdtempSync as Qme,readFileSync as Xme,realpathSync as fk,writeFileSync as Yme}from"node:fs";import{tmpdir as ehe}from"node:os";import{basename as nhe,delimiter as the,dirname as Xi,join as Xn}from"node:path";function wF(e){return e.type==="start_local_editor"}function vF(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:lk(t.collaboration)}}:r}async function SF(e,n){if(n.editorRuntime===void 0)return{ok:!1,state:n.currentState,reason:"local_editor_disabled"};let t=Hr(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&&bhe(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:lk(n.currentState.collaboration)}};let r=rhe(e,n);if(e.collaboration!==void 0&&r===void 0)return{ok:!1,state:n.currentState,reason:"missing_browser_base_url"};let o=await wg(),i=e.collaboration===void 0?void 0:await wg(),s=e.collaboration===void 0||r===void 0?void 0:mhe(e.collaboration,n.runnerId??"local-runner",i,r),a=ohe(s,n.editorRuntime);if(!a.ok)return{ok:!1,state:n.currentState,reason:a.reason};let d=uhe({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 ghe(s,a,n.editorRuntime,n.runnerId);if(!u.ok)return{ok:!1,state:n.currentState,reason:"code_server_spawn_failed"};me("process.spawn",{command:d.command,args:d.args,cwd:t.cwd,purpose:"local_editor.code_server"},{sessionId:n.runnerId});let c=pk(d.command,[...d.args],{cwd:t.cwd,env:_he(process.env,t.cwd,a.userDataDir,u.collaboration),stdio:["ignore","inherit","inherit"]});me("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)=>{me("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=TF(c);if(await PF(c)==="failed")return u.collaboration?.process.kill("SIGINT"),{ok:!1,state:n.currentState,reason:"code_server_spawn_failed"};let[m,p]=await Promise.all([vhe(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:lk(u.collaboration)}})}function rhe(e,n){let t=e.browserBaseUrl??n.browserBaseUrl;return t===void 0||t.trim()===""?void 0:t.trim().replace(/\/+$/,"")}function kF(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 ohe(e,n){try{let t=Qme(Xn(ehe(),"kandan-local-editor-")),r=Xn(t,"extensions"),o=Xn(t,"collaboration-server"),i=Xn(t,"tmp"),s=Xn(t,"User");return Ua(s,{recursive:!0}),Ua(r,{recursive:!0}),Ua(o,{recursive:!0}),Ua(i,{recursive:!0}),n!==void 0&&(ihe(n),xhe(n.assets.documentStateExtensionDir,Xn(r,"kandan.document-state-telemetry"))),Yme(Xn(s,"settings.json"),JSON.stringify(hhe(e),null,2)),{ok:!0,userDataDir:t,extensionsDir:r,collaborationServerDir:o}}catch{return{ok:!1,reason:"code_server_spawn_failed"}}}function ihe(e){let n=she(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 my(o):return;case(!i&&!my(r)):return;default:Ua(Xi(o),{recursive:!0}),Zme(r,o);return}})}function she(e){let n=CF([Xn(e.root,"lib","vscode"),Xn(Xi(Xi(e.codeServerBin)),"lib","vscode"),...ahe(e.codeServerBin).map(o=>Xn(Xi(Xi(o)),"lib","vscode"))]),t=n.find(o=>dhe(o).every(i=>my(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 ahe(e){try{let t=Xme(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 dhe(e){return[Xn(e,"extensions","git-base","dist","extension.js"),Xn(e,"extensions","merge-conflict","dist","mergeConflictMain.js")]}function uhe(e){let n=e.platform??process.platform;if(n==="linux")return che(e);if(n!=="darwin")return hy();let t=ck(e.codeServerBin,e.envPath??process.env.PATH??"");return t.ok?{ok:!0,command:t.command,args:kF(e.port,e.cwd,e.userDataDir,e.extensionsDir)}:hy()}function che(e){let n=ck(e.bubblewrapBin??"bwrap",e.envPath??process.env.PATH??"");if(!n.ok)return hy();let t=ck(e.codeServerBin,e.envPath??process.env.PATH??"");if(!t.ok)return hy();let r=CF(["/usr","/bin","/sbin","/lib","/lib64","/etc","/nix","/opt",...e.codeServerRuntimeRoot===void 0?[]:fhe(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,...kF(e.port,e.cwd,e.userDataDir,e.extensionsDir)];return{ok:!0,command:n.command,args:o}}function hy(){return{ok:!1,reason:"local_editor_filesystem_sandbox_unavailable"}}function ck(e,n){if(lhe(e)){let t=phe(e);return t===void 0?{ok:!1}:{ok:!0,command:e,directory:t}}for(let t of n.split(the)){if(t.trim()==="")continue;let r=Xn(t,e);if(!my(r))continue;let o=fk(r);return{ok:!0,command:o,directory:Xi(o)}}return{ok:!1}}function lhe(e){return e.includes("/")||e.includes("\\")}function phe(e){try{let n=Xi(fk(e));return n==="/"?void 0:n}catch{let t=Xi(e);return t==="."||t==="/"?void 0:t}}function fhe(e){try{return[e,fk(e)]}catch{return[e]}}function CF(e){return Array.from(new Set(e.filter(n=>n.length>0)))}function mhe(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 hhe(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 ghe(e,n,t,r){if(e===void 0)return{ok:!0,ready:Promise.resolve("ready")};try{await Promise.all([bF(t.assets.collaborationExtensionTarball,n.extensionsDir),bF(t.assets.collaborationServerTarball,n.collaborationServerDir)]);let o=yhe(),i=[Xn(n.collaborationServerDir,"open-collaboration-server","bundle","app.js"),"--hostname","127.0.0.1","--port",String(e.serverPort)];me("process.spawn",{command:o,args:i,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r});let s=pk(o,i,{env:{...process.env,OCT_ACTIVATE_SIMPLE_LOGIN:"true",OCT_SERVER_OWNER:"Kandan"},stdio:["ignore","inherit","inherit"]});me("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)=>{me("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=TF(s);return await PF(s)==="failed"?{ok:!1}:{ok:!0,ready:She(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 yhe(e=process.env,n=process.execPath){let t=e.LINZUMI_NODE_BIN?.trim();return t!==void 0&&t!==""?t:nhe(n).toLowerCase().includes("bun")?"node":n}async function bF(e,n){Ua(n,{recursive:!0}),await whe("tar",["-xzf",e,"-C",n])}function xhe(e,n){Ua(Xi(n),{recursive:!0}),Gme(e,n,{recursive:!0})}function _he(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 lk(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 bhe(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 whe(e,n){return new Promise((t,r)=>{me("process.spawn",{command:e,args:n,purpose:"local_editor.install_process"});let o=pk(e,[...n],{stdio:["ignore","ignore","inherit"]});me("process.spawned",{command:e,args:n,pid:o.pid,purpose:"local_editor.install_process"}),o.once("error",r),o.once("exit",(i,s)=>{me("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 TF(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 vhe(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 She(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 PF(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 IF=O(()=>{"use strict";Ma();Ms();Jt()});import{spawn as khe}from"node:child_process";import{createHash as DF}from"node:crypto";import{createReadStream as Che,createWriteStream as The,existsSync as Xu,mkdirSync as Jp,mkdtempSync as Phe,readFileSync as MF,renameSync as Ihe,rmSync as RF,writeFileSync as AF}from"node:fs";import{homedir as Rhe}from"node:os";import{dirname as gy,join as Et,resolve as Ehe}from"node:path";import{Readable as Dhe}from"node:stream";import{pipeline as Mhe}from"node:stream/promises";async function Yu(e){if(e.customCodeServerBin!==void 0)return{codeServerBin:e.customCodeServerBin,status:{status:"custom",mode:"custom",codeServerBin:e.customCodeServerBin}};let n=Ahe(e.platform??process.platform,e.arch??process.arch);if(n===void 0)return mk("unsupported_platform");let t=await $he({kandanUrl:e.kandanUrl,token:e.token,platform:n,fetchImpl:e.fetchImpl??fetch});if(!t.ok)return mk(t.reason);let r=e.cacheRoot??Zhe(),o=zhe(r,t.manifest);if(o.ok)return EF(t.manifest,o.runtime,!1);let i=await qhe({kandanUrl:e.kandanUrl,token:e.token,manifest:t.manifest,cacheRoot:r,fetchImpl:e.fetchImpl??fetch,extractArchive:e.extractArchive??Jhe});return i.ok?EF(t.manifest,i.runtime,!0):mk(i.reason)}function $F(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 Ahe(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 mk(e){return{status:{status:"unavailable",mode:"server_managed",reason:e}}}function EF(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 $he(e){let n=new URL(`/api/v2/local-codex-runner/editor-runtime/${encodeURIComponent(e.platform)}/manifest`,Nn(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 Ohe(t):"manifest_unavailable"};let r=await t.json();return!Z(r)||r.ok!==!0||!Z(r.runtime)?{ok:!1,reason:"manifest_unavailable"}:jhe(r.runtime)}async function Ohe(e){let n=await e.json().catch(()=>{});return Z(n)&&n.error==="token_expired"?"auth_expired":"auth_unauthorized"}function jhe(e){let n=yi(e.version),t=yi(e.platform),r=yi(e.archiveUrl),o=LF(e.archiveSha256),i=yi(e.codeServerVersion),s=yi(e.codeServerBinPath)??"bin/code-server",a=yi(e.manifestPath)??"linzumi-editor-runtime.json",d=Lhe(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 Lhe(e){if(!Array.isArray(e))return;let n=[];for(let t of e){if(!Z(t))return;let r=yi(t.path),o=LF(t.sha256),i=yi(t.url),s=yi(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 zhe(e,n){let t=OF(e,n),r=Et(t,n.manifestPath),o=Et(t,n.codeServerBinPath),i=jF(t,n);if(!Xu(r)||!Xu(o)||i===void 0)return{ok:!1};try{let s=JSON.parse(MF(r,"utf8"));if(Z(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 qhe(e){Jp(e.cacheRoot,{recursive:!0});let n=Phe(Et(e.cacheRoot,".install-")),t=Et(n,"runtime.tar.gz"),r=Et(n,"runtime");try{let o=await Uhe({kandanUrl:e.kandanUrl,token:e.token,manifest:e.manifest,archivePath:t,fetchImpl:e.fetchImpl});if(!o.ok)return o;if(Jp(r,{recursive:!0}),!await e.extractArchive(t,r))return{ok:!1,reason:"archive_extract_failed"};if(!await Fhe({kandanUrl:e.kandanUrl,manifest:e.manifest,runtimeRoot:r,fetchImpl:e.fetchImpl}))return{ok:!1,reason:"install_failed"};let s=Et(r,e.manifest.manifestPath),a=Et(r,e.manifest.codeServerBinPath),d=jF(r,e.manifest);if(!Xu(a)||d===void 0)return{ok:!1,reason:"invalid_archive"};Jp(gy(s),{recursive:!0}),AF(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=OF(e.cacheRoot,e.manifest);return RF(u,{recursive:!0,force:!0}),Jp(gy(u),{recursive:!0}),Ihe(r,u),{ok:!0,runtime:{mode:"server_managed",root:u,codeServerBin:Et(u,e.manifest.codeServerBinPath),assets:{collaborationExtensionTarball:Et(u,"kandan","editor_extensions","typefox.open-collaboration-tools.tar.gz"),collaborationServerTarball:Et(u,"kandan","editor_servers","open-collaboration-server.tar.gz"),documentStateExtensionDir:Et(u,"kandan","editor_extensions","kandan.document-state-telemetry")}}}}catch{return{ok:!1,reason:"install_failed"}}finally{RF(n,{recursive:!0,force:!0})}}async function Fhe(e){for(let n of e.manifest.assets){let t=Et(e.runtimeRoot,n.path);try{let r=await Nhe({kandanUrl:e.kandanUrl,asset:n,fetchImpl:e.fetchImpl});if(r===void 0)continue;Jp(gy(t),{recursive:!0}),AF(t,r)}catch{return!1}}return!0}async function Nhe(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,Nn(e.kandanUrl)),t=await e.fetchImpl(n);return t.status!==200?void 0:Buffer.from(await t.arrayBuffer())}}async function Uhe(e){let n=Nn(e.kandanUrl),t=new URL(e.manifest.archiveUrl,n),r=await e.fetchImpl(t,{...Bhe(t,new URL(n))?{headers:{authorization:`Bearer ${e.token}`}}:{}});return r.status!==200||r.body===null?{ok:!1,reason:"download_failed"}:(await Mhe(Dhe.fromWeb(r.body),The(e.archivePath)),await Khe(e.archivePath)!==e.manifest.archiveSha256?{ok:!1,reason:"checksum_mismatch"}:{ok:!0})}function Bhe(e,n){return e.protocol===n.protocol&&e.host===n.host}function Jhe(e,n){return new Promise(t=>{let o=["-xzf",e,"-C",n];me("process.spawn",{command:"tar",args:o,purpose:"editor_runtime.extract"});let i=khe("tar",o,{stdio:["ignore","ignore","ignore"]});me("process.spawned",{command:"tar",args:o,pid:i.pid,purpose:"editor_runtime.extract"}),i.on("error",()=>t(!1)),i.on("exit",(s,a)=>{me("process.exit",{command:"tar",args:o,pid:i.pid,code:s,signal:a,purpose:"editor_runtime.extract"}),t(s===0)})})}function Khe(e){return new Promise((n,t)=>{let r=DF("sha256"),o=Che(e);o.on("error",t),o.on("data",i=>r.update(i)),o.on("end",()=>n(r.digest("hex")))})}function OF(e,n){return Ehe(e,n.platform,n.archiveSha256)}function jF(e,n){let t=Et(e,"kandan","editor_extensions","typefox.open-collaboration-tools.tar.gz"),r=Et(e,"kandan","editor_servers","open-collaboration-server.tar.gz"),o=Et(e,"kandan","editor_extensions","kandan.document-state-telemetry"),i=Vhe(n.codeServerBinPath),s=[n.codeServerBinPath,Et(i,"lib","vscode","node_modules","vsda","rust","web","vsda.js"),Et(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=Whe(n.assets);for(let d of s){let u=a.get(d);if(u===void 0&&d!==n.codeServerBinPath)return;let c=Et(e,d);if(!Xu(c)||u!==void 0&&Hhe(c)!==u)return}if(!(!Xu(t)||!Xu(r)))return{collaborationExtensionTarball:t,collaborationServerTarball:r,documentStateExtensionDir:o}}function Vhe(e){let n=e.replaceAll("\\","/");return n==="bin/code-server"?".":n.endsWith("/bin/code-server")?n.slice(0,-16)||".":gy(n)}function Whe(e){let n=new Map;for(let t of e)n.set(t.path,t.sha256);return n}function Hhe(e){return DF("sha256").update(MF(e)).digest("hex")}function Zhe(){return Et(Rhe(),".linzumi","editor-runtimes")}function yi(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function LF(e){let n=yi(e);return n!==void 0&&/^[a-f0-9]{64}$/i.test(n)?n.toLowerCase():void 0}var yy=O(()=>{"use strict";uo();Jt();Rn()});import{spawn as Ghe,spawnSync as Qhe}from"node:child_process";import{existsSync as Xhe}from"node:fs";import{delimiter as Yhe,dirname as ege,join as xy}from"node:path";function yk(e){return!nge.has(e??"")}function Yi(e,n,t=1e3){return new Promise(r=>{let o=["--version"];me("process.spawn",{command:e,args:o,cwd:n,purpose:"dependency_probe"});let i=Ghe(e,o,{cwd:n,stdio:["ignore","pipe","pipe"],detached:process.platform!=="win32"});me("process.spawned",{command:e,args:o,cwd:n,pid:i.pid,purpose:"dependency_probe"});let s="",a="",d=!1,u=l=>{d||(d=!0,clearTimeout(c),r(l))},c=setTimeout(()=>{rge(i.pid),me("process.exit",{command:e,args:o,cwd:n,pid:i.pid,code:null,signal:"SIGKILL",purpose:"dependency_probe"}),u({command:e,available:!1,failure:"probe_timeout",failureDetail:hk(a,s),failureTransient:!0})},t);i.stdout?.on("data",l=>{s+=l.toString()}),i.stderr?.on("data",l=>{a+=l.toString()}),i.on("error",l=>{me("process.exit",{command:e,args:o,cwd:n,pid:i.pid,code:null,signal:null,error:"spawn_failed",purpose:"dependency_probe"});let f=l.code,m=f==="ENOENT"&&Xhe(n);u({command:e,available:!1,failure:m?"binary_missing":"probe_failed",failureDetail:hk(l.message,a,s),failureTransient:m?!1:yk(f)})}),i.on("exit",(l,f)=>{if(me("process.exit",{command:e,args:o,cwd:n,pid:i.pid,code:l,signal:f,purpose:"dependency_probe"}),l!==0){u({command:e,available:!1,failure:"probe_failed",failureDetail:hk(a,s),failureTransient:l===null});return}let m=UF(s,a);u(m===void 0?{command:e,available:!0}:{command:e,available:!0,version:m})})})}function hk(...e){for(let n of e){let t=n?.replace(/\s+/g," ").trim();if(t!==void 0&&t!=="")return t.slice(-tge)}}function rge(e){if(e!==void 0)try{process.kill(process.platform==="win32"?e:-e,"SIGKILL")}catch{try{process.kill(e,"SIGKILL")}catch{}}}async function Os(e){ag();let[n,t,r]=await Promise.all([Yi(process.execPath,e.cwd),oge(e),lge(e)]);return{node:n,codex:t,codeServer:r,editorRuntime:e.editorRuntime}}function qF(e,n){let t=e.codex.available&&!n.codex.available&&(n.codex.failure==="probe_timeout"||n.codex.failure==="probe_failed"&&n.codex.failureTransient===!0);return{status:t?{...n,codex:e.codex}:n,codexDowngradeSkipped:t}}async function oge(e){let n=await Yi(e.codexBin,e.cwd);if(n.available)return n;let t=n,r=a=>{a.failure!=="binary_missing"&&(t=a)},o=!e.codexBin.includes("/")&&!e.codexBin.includes("\\"),i=o?(e.resolveAgentBinaryPath??dg)(e.codexBin):void 0;if(i!==void 0&&i!==e.codexBin){let a=await Yi(i,e.cwd);if(a.available)return a;r(a)}let s=sge({cwd:e.cwd,codexBin:e.codexBin,env:e.env??process.env});if(s!==void 0){let a=await Yi(s,e.cwd);if(a.available)return a;r(a)}return o&&ige(e.codexBin,t.failureDetail),t}function ige(e,n){if(zF)return;zF=!0;let t=n===void 0?"":` Probe error: ${n}`;process.stderr.write(`Warning: ${Oj(e,"--codex-bin")}${t}
1318
1318
  `)}function sge(e){return FF(dge(e),e)}function FF(e,n){let[t,...r]=e;if(t===void 0)return;let o=age(t,n);return o===void 0?FF(r,n):o}function age(e,n){let t=Qhe(e,["which","codex"],{cwd:n.cwd,env:n.env??process.env,encoding:"utf8",timeout:1e3});if(t.status===0)return UF(t.stdout?.toString())}function dge(e){let n=e.env??process.env;return Array.from(new Set([uge(e.codexBin),n.VOLTA_HOME===void 0?void 0:xy(n.VOLTA_HOME,"bin","volta"),n.HOME===void 0?void 0:xy(n.HOME,".volta","bin","volta"),...cge(n.PATH)].filter(t=>t!==void 0)))}function uge(e){return e.replaceAll("\\","/").endsWith("/.volta/bin/codex")?xy(ege(e),"volta"):void 0}function cge(e){return e===void 0?[]:e.split(Yhe).filter(n=>n!=="").map(n=>xy(n,"volta"))}function lge(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"}):Yi(e.codeServerBin,e.cwd)}function NF(e){if(js(e),!e.codex.available)throw new Error(`Codex is not available at ${e.codex.command}. Install Codex or pass --codex-bin <path>.`)}function js(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 xk(e){let n=e.codeServer??pge();return{bun:gk(e.node),codex:gk(e.codex),codeServer:gk(n),editorRuntime:e.editorRuntime===void 0?null:$F(e.editorRuntime)}}function pge(){return{command:"code-server",available:!1,reason:"not_configured"}}function gk(e){return{command:e.command,available:e.available,version:e.version??null,reason:e.reason??null}}function UF(...e){for(let n of e){let t=n?.trim();if(t!==void 0&&t!=="")return t}}var nge,tge,zF,_y=O(()=>{"use strict";dv();yy();Jt();nge=new Set(["EACCES","EPERM","ENOTDIR"]);tge=500;zF=!1});import{closeSync as fge,openSync as mge,readSync as hge,statSync as gge}from"node:fs";function _k(e){return typeof e!="string"||e===""?e:yge.reduce((n,t)=>t.source.startsWith("\\beyJ")?n.replace(t,"<redacted>"):n.replace(t,"$1<redacted>"),e)}function vge(e,n){let t;try{let{size:r}=gge(e),o=r>n?r-n:0,i=r-o;if(i<=0)return"";let s=Buffer.allocUnsafe(i);t=mge(e,"r");let a=hge(t,s,0,i,o);return s.subarray(0,a).toString("utf8")}catch{return""}finally{if(t!==void 0)try{fge(t)}catch{}}}function BF(e){let n=e.now??Date.now,t=e.setIntervalImpl??setInterval,r=e.clearIntervalImpl??clearInterval,o=e.readTail??vge,i=Math.max(_ge,e.intervalMs??xge),s=Math.max(1,e.maxTailBytes??bge),a=Math.max(1,e.maxLifecycleEvents??wge),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 _k(S)}catch{return}},m=()=>{let v=_k(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:_k(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(`
1319
- `)}},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 yge,xge,_ge,bge,wge,JF=O(()=>{"use strict";yge=[/(--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];xge=45e3,_ge=5e3,bge=64*1024,wge=200});var zt,bk,Ls=O(()=>{"use strict";zt="1.0.57",bk=`linzumi ${zt}`});import{closeSync as VF,existsSync as Sk,mkdirSync as Sge,openSync as WF,readFileSync as HF,renameSync as kge,unlinkSync as Kp,writeFileSync as Cge,writeSync as ZF}from"node:fs";import{dirname as GF,join as Tge}from"node:path";function XF(e){return e instanceof Ba||e instanceof Error&&e.name===QF&&"lockPath"in e&&"heldBy"in e}function YF(e,n=Un(),t){let r=t===void 0?encodeURIComponent(e):La(t);return Tge(GF(n),"runners",`${r}.lock`)}function eN(e){let n=YF(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??Nge,r=e.now??(()=>new Date),o=e.killPid??Uge,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:Nn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??zt};Mge(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),Age(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>Rge(n,s,r),d=setInterval(a,Pge);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),Oge(n,s)}}}function Rge(e,n,t){try{let r=wy(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`;Cge(i,`${JSON.stringify(o,null,2)}
1319
+ `)}},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 yge,xge,_ge,bge,wge,JF=O(()=>{"use strict";yge=[/(--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];xge=45e3,_ge=5e3,bge=64*1024,wge=200});var zt,bk,Ls=O(()=>{"use strict";zt="1.0.58",bk=`linzumi ${zt}`});import{closeSync as VF,existsSync as Sk,mkdirSync as Sge,openSync as WF,readFileSync as HF,renameSync as kge,unlinkSync as Kp,writeFileSync as Cge,writeSync as ZF}from"node:fs";import{dirname as GF,join as Tge}from"node:path";function XF(e){return e instanceof Ba||e instanceof Error&&e.name===QF&&"lockPath"in e&&"heldBy"in e}function YF(e,n=Un(),t){let r=t===void 0?encodeURIComponent(e):La(t);return Tge(GF(n),"runners",`${r}.lock`)}function eN(e){let n=YF(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??Nge,r=e.now??(()=>new Date),o=e.killPid??Uge,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:Nn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??zt};Mge(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),Age(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>Rge(n,s,r),d=setInterval(a,Pge);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),Oge(n,s)}}}function Rge(e,n,t){try{let r=wy(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`;Cge(i,`${JSON.stringify(o,null,2)}
1320
1320
  `,"utf8"),kge(i,e)}catch{}}function ec(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>Ige?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function nN(e,n,t,r){return t!==by||e.launchSource!==by?!1:r.state!=="live"?!0:Ege(n,e.cliVersion)>0}function Ege(e,n){let t=KF(e),r=KF(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:Dge(t.prerelease,r.prerelease)}function KF(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=[wk(i[0]),wk(i[1]),wk(i[2])],a=o===""?[]:o.split(".").filter(d=>d!=="");return{core:s,prerelease:a}}function wk(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function Dge(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 tN(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 Mge(e,n,t,r,o,i,s){if(t===void 0||sr(t)!==sr(jt))return;let a=YF(e,n),d=wy(a);if(d!==void 0){if(ec(d,r,o).state==="live")throw new Ba(a,d);rN(a,r,()=>{let u=Sk(a)?Ck(a):void 0;if(u===void 0)return;let c=ec(u,r,o);if(c.state==="live")throw new Ba(a,u);c.state==="wedged"&&tN(a,u,c.reason,i,s),Kp(a)})}}function Age(e,n,t,r,o,i,s,a){if(vk(e,n))return;s?.();let d=wy(e);if(d===void 0){if(vk(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(ec(d,t,r).state==="live")throw new Ba(e,d);a?.(),rN(e,t,()=>{let u=Sk(e)?Ck(e):void 0;if(u!==void 0){let c=ec(u,t,r);if(c.state==="live")throw new Ba(e,u);c.state==="wedged"&&tN(e,u,c.reason,o,i),Kp(e)}if(!vk(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function vk(e,n){Sge(GF(e),{recursive:!0});try{let t=WF(e,"wx");try{ZF(t,`${JSON.stringify(n,null,2)}
1321
1321
  `)}finally{VF(t)}return!0}catch(t){if(nc(t,"EEXIST"))return!1;throw t}}function rN(e,n,t){let r=`${e}.replace`;for(;;)try{let o=WF(r,"wx");try{ZF(o,`${process.pid}
1322
1322
  `),t()}finally{VF(o),Kp(r)}return}catch(o){if(nc(o,"EEXIST")){let i=$ge(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.57",
3
+ "version": "1.0.58",
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": {