@linzumi/cli 1.0.89 → 1.0.90

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.89 --version
61
+ npx -y @linzumi/cli@1.0.90 --version
62
62
  linzumi --version
63
63
  ```
64
64
 
package/dist/index.js CHANGED
@@ -1470,7 +1470,7 @@ To kick the agent off:
1470
1470
  `,L=Buffer.byteLength(P,"utf8");if(L>s)return l("runner_diagnostics.spool_entry_dropped",{reason:"entry_too_large",entry_bytes:L,max_entry_bytes:s}),!1;lve(n,{recursive:!0}),m(u)+L>i&&f(),_(L);let M=b()?`
1471
1471
  `:"";return dve(u,`${M}${P}`,"utf8"),!0}catch(R){return l("runner_diagnostics.spool_failed",{error:R instanceof Error?R.message:String(R)}),!1}},w=k=>{let R=[],P=fve(k,"utf8");for(let L of P.split(`
1472
1472
  `))if(L.trim()!=="")try{let M=JSON.parse(L);M!==null&&typeof M=="object"&&R.push({parsed:M,raw:L})}catch{}return R};return{append:S,drain:async k=>{if(c)return{uploadedBatches:0,uploadedEntries:0,remainingBatches:p().length,skipped:!0};c=!0;let R=0,P=0;try{f(),_(0);let L=a()-o;for(let M of p()){let j;try{j=w(M)}catch(Q){l("runner_diagnostics.spool_batch_unreadable",{file:M,error:Q instanceof Error?Q.message:String(Q)}),y(M,"unreadable");continue}let F=j.filter(Q=>{let he=Eve(Q.parsed);return he===void 0||he>=L});if(F.length===0){y(M,"empty_or_expired");continue}let A=DT(M,".jsonl"),B=F.map(Q=>Q.raw).join(`
1473
- `),K=F.map(Q=>Q.parsed.spooled_at).filter(Q=>typeof Q=="string"),G={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:A,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:A,entry_count:F.length,...K.length===0?{}:{first_spooled_at:K[0],last_spooled_at:K[K.length-1]}},telemetry_ndjson:B};try{await k(G)}catch(Q){l("runner_diagnostics.spool_upload_failed",{file:M,remaining_batches:p().length,error:Q instanceof Error?Q.message:String(Q)});break}R+=1,P+=F.length;try{PU(M)}catch(Q){l("runner_diagnostics.spool_delete_failed",{file:M,error:Q instanceof Error?Q.message:String(Q)})}}}catch(L){l("runner_diagnostics.spool_drain_failed",{error:L instanceof Error?L.message:String(L)})}finally{c=!1}return{uploadedBatches:R,uploadedEntries:P,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var _ve,bve,wve,vve,Sve,IU,Cve,Tve,EU=z(()=>{"use strict";$y();_ve=32*1024*1024,bve=10080*60*1e3,wve=4*1024*1024,vve=1024*1024,Sve="spool.jsonl",IU=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;Cve=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,Tve=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var jt,AT,Ws=z(()=>{"use strict";jt="1.0.89",AT=`linzumi ${jt}`});import{closeSync as MU,existsSync as $T,mkdirSync as Dve,openSync as AU,readFileSync as OU,renameSync as Mve,unlinkSync as cd,writeFileSync as Ave,writeSync as $U}from"node:fs";import{dirname as jU,join as Ove}from"node:path";function jT(e){return e instanceof us||e instanceof Error&&e.name===zU&&"lockPath"in e&&"heldBy"in e}function LT(e,n=Kn(),t){let r=t===void 0?encodeURIComponent(e):rd(t);return Ove(jU(n),"runners",`${r}.lock`)}function Kx(e){let n=LT(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??KU,r=e.now??(()=>new Date),o=e.killPid??Wve,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:zn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??jt,...e.gracefulUpdateDrain===!0?{gracefulUpdateDrain:!0}:{}};zve(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),qve(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>qU(n,s,r),d=setInterval(a,LU);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),BU(n,s)}}}function qU(e,n,t){try{let r=Wx(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`;Ave(i,`${JSON.stringify(o,null,2)}
1473
+ `),K=F.map(Q=>Q.parsed.spooled_at).filter(Q=>typeof Q=="string"),G={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:A,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:A,entry_count:F.length,...K.length===0?{}:{first_spooled_at:K[0],last_spooled_at:K[K.length-1]}},telemetry_ndjson:B};try{await k(G)}catch(Q){l("runner_diagnostics.spool_upload_failed",{file:M,remaining_batches:p().length,error:Q instanceof Error?Q.message:String(Q)});break}R+=1,P+=F.length;try{PU(M)}catch(Q){l("runner_diagnostics.spool_delete_failed",{file:M,error:Q instanceof Error?Q.message:String(Q)})}}}catch(L){l("runner_diagnostics.spool_drain_failed",{error:L instanceof Error?L.message:String(L)})}finally{c=!1}return{uploadedBatches:R,uploadedEntries:P,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var _ve,bve,wve,vve,Sve,IU,Cve,Tve,EU=z(()=>{"use strict";$y();_ve=32*1024*1024,bve=10080*60*1e3,wve=4*1024*1024,vve=1024*1024,Sve="spool.jsonl",IU=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;Cve=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,Tve=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var jt,AT,Ws=z(()=>{"use strict";jt="1.0.90",AT=`linzumi ${jt}`});import{closeSync as MU,existsSync as $T,mkdirSync as Dve,openSync as AU,readFileSync as OU,renameSync as Mve,unlinkSync as cd,writeFileSync as Ave,writeSync as $U}from"node:fs";import{dirname as jU,join as Ove}from"node:path";function jT(e){return e instanceof us||e instanceof Error&&e.name===zU&&"lockPath"in e&&"heldBy"in e}function LT(e,n=Kn(),t){let r=t===void 0?encodeURIComponent(e):rd(t);return Ove(jU(n),"runners",`${r}.lock`)}function Kx(e){let n=LT(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??KU,r=e.now??(()=>new Date),o=e.killPid??Wve,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:zn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:i,heartbeatAt:i,cliVersion:e.cliVersion??jt,...e.gracefulUpdateDrain===!0?{gracefulUpdateDrain:!0}:{}};zve(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),qve(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>qU(n,s,r),d=setInterval(a,LU);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),BU(n,s)}}}function qU(e,n,t){try{let r=Wx(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`;Ave(i,`${JSON.stringify(o,null,2)}
1474
1474
  `,"utf8"),Mve(i,e)}catch{}}function ld(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>$ve?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function NU(e,n,t,r){return t!==Vx||e.launchSource!==Vx?!1:r.state!=="live"?!0:jve(n,e.cliVersion)>0}function jve(e,n){let t=DU(e),r=DU(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:Lve(t.prerelease,r.prerelease)}function DU(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=[OT(i[0]),OT(i[1]),OT(i[2])],a=o===""?[]:o.split(".").filter(d=>d!=="");return{core:s,prerelease:a}}function OT(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function Lve(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 FU(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 zve(e,n,t,r,o,i,s){if(t===void 0||gr(t)!==gr(Ut))return;let a=LT(e,n),d=Wx(a);if(d!==void 0){if(ld(d,r,o).state==="live")throw new us(a,d);UU(a,r,()=>{let u=$T(a)?zT(a):void 0;if(u===void 0)return;let c=ld(u,r,o);if(c.state==="live")throw new us(a,u);c.state==="wedged"&&FU(a,u,c.reason,i,s),cd(a)})}}function qve(e,n,t,r,o,i,s,a){if(Jx(e,n))return;s?.();let d=Wx(e);if(d===void 0){if(Jx(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(ld(d,t,r).state==="live")throw new us(e,d);a?.(),UU(e,t,()=>{let u=$T(e)?zT(e):void 0;if(u!==void 0){let c=ld(u,t,r);if(c.state==="live")throw new us(e,u);c.state==="wedged"&&FU(e,u,c.reason,o,i),cd(e)}if(!Jx(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function Jx(e,n){Dve(jU(e),{recursive:!0});try{let t=AU(e,"wx");try{$U(t,`${JSON.stringify(n,null,2)}
1475
1475
  `)}finally{MU(t)}return!0}catch(t){if(Dc(t,"EEXIST"))return!1;throw t}}function UU(e,n,t){let r=`${e}.replace`;for(;;)try{let o=AU(r,"wx");try{$U(o,`${process.pid}
1476
1476
  `),t()}finally{MU(o),cd(r)}return}catch(o){if(Dc(o,"EEXIST")){let i=Nve(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.89",
3
+ "version": "1.0.90",
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": {