@linzumi/cli 1.0.117 → 1.0.118

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.117 --version
61
+ npx -y @linzumi/cli@1.0.118 --version
62
62
  linzumi --version
63
63
  ```
64
64
 
package/dist/index.js CHANGED
@@ -1473,7 +1473,7 @@ To kick the agent off:
1473
1473
  `,O=Buffer.byteLength(T,"utf8");if(O>s)return l("runner_diagnostics.spool_entry_dropped",{reason:"entry_too_large",entry_bytes:O,max_entry_bytes:s}),!1;XSe(n,{recursive:!0}),m(u)+O>i&&f(),_(O);let E=b()?`
1474
1474
  `:"";return GSe(u,`${E}${T}`,"utf8"),!0}catch(R){return l("runner_diagnostics.spool_failed",{error:R instanceof Error?R.message:String(R)}),!1}},v=k=>{let R=[],T=eke(k,"utf8");for(let O of T.split(`
1475
1475
  `))if(O.trim()!=="")try{let E=JSON.parse(O);E!==null&&typeof E=="object"&&R.push({parsed:E,raw:O})}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,T=0;try{f(),_(0);let O=a()-o;for(let E of p()){let j;try{j=v(E)}catch(H){l("runner_diagnostics.spool_batch_unreadable",{file:E,error:H instanceof Error?H.message:String(H)}),y(E,"unreadable");continue}let z=j.filter(H=>{let ce=yke(H.parsed);return ce===void 0||ce>=O});if(z.length===0){y(E,"empty_or_expired");continue}let D=TP(E,".jsonl"),U=z.map(H=>H.raw).join(`
1476
- `),J=z.map(H=>H.parsed.spooled_at).filter(H=>typeof H=="string"),Z={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:D,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:D,entry_count:z.length,...J.length===0?{}:{first_spooled_at:J[0],last_spooled_at:J[J.length-1]}},telemetry_ndjson:U};try{await k(Z)}catch(H){l("runner_diagnostics.spool_upload_failed",{file:E,remaining_batches:p().length,error:H instanceof Error?H.message:String(H)});break}R+=1,T+=z.length;try{Z9(E)}catch(H){l("runner_diagnostics.spool_delete_failed",{file:E,error:H instanceof Error?H.message:String(H)})}}}catch(O){l("runner_diagnostics.spool_drain_failed",{error:O instanceof Error?O.message:String(O)})}finally{c=!1}return{uploadedBatches:R,uploadedEntries:T,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var ske,ake,dke,uke,cke,Q9,pke,fke,Y9=F(()=>{"use strict";fx();ske=32*1024*1024,ake=10080*60*1e3,dke=4*1024*1024,uke=1024*1024,cke="spool.jsonl",Q9=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;pke=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,fke=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var Ut,IP,ia=F(()=>{"use strict";Ut="1.0.117",IP=`linzumi ${Ut}`});import{closeSync as n3,existsSync as EP,mkdirSync as xke,openSync as t3,readFileSync as r3,renameSync as _ke,unlinkSync as Cd,writeFileSync as bke,writeSync as o3}from"node:fs";import{dirname as i3,join as wke}from"node:path";function DP(e){return e instanceof _s||e instanceof Error&&e.name===a3&&"lockPath"in e&&"heldBy"in e}function MP(e,n=Hn(),t){let r=t===void 0?encodeURIComponent(e):yd(t);return wke(i3(n),"runners",`${r}.lock`)}function k_(e){let n=MP(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??m3,r=e.now??(()=>new Date),o=e.killPid??$ke,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??Ut,...e.gracefulUpdateDrain===!0?{gracefulUpdateDrain:!0}:{}};Cke(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),Tke(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>d3(n,s,r),d=setInterval(a,s3);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),p3(n,s)}}}function d3(e,n,t){try{let r=T_(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`;bke(i,`${JSON.stringify(o,null,2)}
1476
+ `),J=z.map(H=>H.parsed.spooled_at).filter(H=>typeof H=="string"),Z={bundle_name:"runner-diagnostics-spool",exported_at:new Date(a()).toISOString(),idempotency_key:D,diagnostics:{kind:"runner_diagnostic_log",spool_batch:!0,idempotency_key:D,entry_count:z.length,...J.length===0?{}:{first_spooled_at:J[0],last_spooled_at:J[J.length-1]}},telemetry_ndjson:U};try{await k(Z)}catch(H){l("runner_diagnostics.spool_upload_failed",{file:E,remaining_batches:p().length,error:H instanceof Error?H.message:String(H)});break}R+=1,T+=z.length;try{Z9(E)}catch(H){l("runner_diagnostics.spool_delete_failed",{file:E,error:H instanceof Error?H.message:String(H)})}}}catch(O){l("runner_diagnostics.spool_drain_failed",{error:O instanceof Error?O.message:String(O)})}finally{c=!1}return{uploadedBatches:R,uploadedEntries:T,remainingBatches:p().length,skipped:!1}},pendingBatchFiles:p}}var ske,ake,dke,uke,cke,Q9,pke,fke,Y9=F(()=>{"use strict";fx();ske=32*1024*1024,ake=10080*60*1e3,dke=4*1024*1024,uke=1024*1024,cke="spool.jsonl",Q9=/^batch-(\d{1,16})-[0-9a-f-]+\.jsonl$/;pke=/\b([A-Z][A-Z0-9_]{1,})=("[^"\n]*"|'[^'\n]*'|[^\s"'`;,)\]}]+)/g,fke=/(?:\/(?:[A-Za-z0-9._@~+-]|%[0-9A-Fa-f]{2})+){2,}/g});var Ut,IP,ia=F(()=>{"use strict";Ut="1.0.118",IP=`linzumi ${Ut}`});import{closeSync as n3,existsSync as EP,mkdirSync as xke,openSync as t3,readFileSync as r3,renameSync as _ke,unlinkSync as Cd,writeFileSync as bke,writeSync as o3}from"node:fs";import{dirname as i3,join as wke}from"node:path";function DP(e){return e instanceof _s||e instanceof Error&&e.name===a3&&"lockPath"in e&&"heldBy"in e}function MP(e,n=Hn(),t){let r=t===void 0?encodeURIComponent(e):yd(t);return wke(i3(n),"runners",`${r}.lock`)}function k_(e){let n=MP(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??m3,r=e.now??(()=>new Date),o=e.killPid??$ke,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??Ut,...e.gracefulUpdateDrain===!0?{gracefulUpdateDrain:!0}:{}};Cke(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),Tke(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let a=()=>d3(n,s,r),d=setInterval(a,s3);return d.unref(),{path:n,record:s,heartbeat:a,release:()=>{clearInterval(d),p3(n,s)}}}function d3(e,n,t){try{let r=T_(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`;bke(i,`${JSON.stringify(o,null,2)}
1477
1477
  `,"utf8"),_ke(i,e)}catch{}}function Td(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>vke?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function u3(e,n,t,r){return t!==C_||e.launchSource!==C_?!1:r.state!=="live"?!0:Ske(n,e.cliVersion)>0}function Ske(e,n){let t=e3(e),r=e3(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:kke(t.prerelease,r.prerelease)}function e3(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=[RP(i[0]),RP(i[1]),RP(i[2])],a=o===""?[]:o.split(".").filter(d=>d!=="");return{core:s,prerelease:a}}function RP(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function kke(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 c3(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 Cke(e,n,t,r,o,i,s){if(t===void 0||_r(t)!==_r(Vt))return;let a=MP(e,n),d=T_(a);if(d!==void 0){if(Td(d,r,o).state==="live")throw new _s(a,d);l3(a,r,()=>{let u=EP(a)?AP(a):void 0;if(u===void 0)return;let c=Td(u,r,o);if(c.state==="live")throw new _s(a,u);c.state==="wedged"&&c3(a,u,c.reason,i,s),Cd(a)})}}function Tke(e,n,t,r,o,i,s,a){if(S_(e,n))return;s?.();let d=T_(e);if(d===void 0){if(S_(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(Td(d,t,r).state==="live")throw new _s(e,d);a?.(),l3(e,t,()=>{let u=EP(e)?AP(e):void 0;if(u!==void 0){let c=Td(u,t,r);if(c.state==="live")throw new _s(e,u);c.state==="wedged"&&c3(e,u,c.reason,o,i),Cd(e)}if(!S_(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function S_(e,n){xke(i3(e),{recursive:!0});try{let t=t3(e,"wx");try{o3(t,`${JSON.stringify(n,null,2)}
1478
1478
  `)}finally{n3(t)}return!0}catch(t){if(Qc(t,"EEXIST"))return!1;throw t}}function l3(e,n,t){let r=`${e}.replace`;for(;;)try{let o=t3(r,"wx");try{o3(o,`${process.pid}
1479
1479
  `),t()}finally{n3(o),Cd(r)}return}catch(o){if(Qc(o,"EEXIST")){let i=Pke(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.117",
3
+ "version": "1.0.118",
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": {
@@ -18,6 +18,7 @@
18
18
  "codex:history-table": "node scripts/codex_history_table.mjs",
19
19
  "test": "vitest run --config vitest.config.mjs",
20
20
  "typecheck": "tsgo --noEmit -p tsconfig.source.json",
21
+ "typecheck:all": "tsgo --noEmit -p tsconfig.json",
21
22
  "typecheck:watch": "tsgo --noEmit -w -p tsconfig.source.json",
22
23
  "prepack": "node scripts/build.mjs",
23
24
  "pack:dry-run": "npm pack --dry-run",