@linzumi/cli 1.0.130 → 1.0.131

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.
@@ -667,7 +667,7 @@ ${n}
667
667
  `)}catch(o){n?.(o instanceof Error?o.message:String(o))}}}}function Phe(e,n){let t=e.trim();if(t.length<=n)return t;let r="... ";return`${r}${t.slice(t.length-(n-r.length))}`}function Ihe(e){let n=Object.entries(e);return n.length<=pN?e:(n.sort(([,t],[,r])=>Date.parse(t.lastAt)-Date.parse(r.lastAt)),Object.fromEntries(n.slice(-pN)))}function yN(e,n,t,r,o=mN){let i=e.load(),s=(i[n]?.count??0)+1,a=t instanceof Error?t.message:String(t??"");return e.save(Ihe({...i,[n]:{count:s,lastError:Phe(a===""?"the engine worker never started":a,The),lastAt:new Date(r).toISOString()}})),{count:s,tripped:s>=o}}function xN(e,n){let t=e.load();if(t[n]===void 0)return!1;let{[n]:r,...o}=t;return e.save(o),!0}function _N(e,n,t=mN){let r=e.load()[n];return r!==void 0&&r.count>=t?r:void 0}function mC(e,n=fC){let t=bN.find(r=>e!==r&&e.startsWith(`${r}/`));if(t===void 0)return!1;try{return n(e).dev===n(t).dev}catch{return!1}}function wN(e,n=fC){let t=bN.find(i=>e!==i&&e.startsWith(`${i}/`));if(t===void 0)return!1;let r;try{r=n(t).dev}catch{return!1}let o=e;for(;o!==t;)try{return n(o).dev===r}catch(i){let s=typeof i=="object"&&i!==null&&"code"in i?i.code:void 0;if(s!=="ENOENT"&&s!=="ENOTDIR")return!1;let a=fN(o);if(a===o)break;o=a}return!0}function hC(e,n={}){let t=n.realpathFn??whe,r;try{r=t(Che($t(e)))}catch{return!1}return!mC(r,n.statFn??fC)}function vN(e,n=hC){let t=e.load(),r=[],o={};for(let[i,s]of Object.entries(t)){let a=!1;try{a=n(i)}catch{a=!1}a?r.push(i):o[i]=s}return r.length>0&&e.save(o),r}function gC(e){return(e instanceof Error?e.message:String(e??"")).startsWith(SN)}function kN(e,n){return`${SN}${e} on this computer: the last ${n.count} attempts there died during startup (most recent error: ${n.lastError}). Check that the folder exists and its disk/volume is mounted. The pause clears after one successful session, or on runner restart (\`linzumi connect\`) once the folder is present again.`}var mN,The,pN,bN,SN,CN=F(()=>{"use strict";iC();ms();mN=3,The=480,pN=50;bN=["/Volumes"];SN="coding sessions are paused for "});import{mkdirSync as Rhe,rmSync as TN,writeFileSync as Ehe,promises as PN}from"node:fs";import{join as Dhe}from"node:path";import{StringDecoder as Mhe}from"node:string_decoder";function Ahe(e){return`'${e.replaceAll("'","'\\''")}'`}function $he(e,n){return`__lz_live_out=${Ahe(n)}; if ! : >> "$__lz_live_out" 2>/dev/null; then __lz_live_out=/dev/null; fi; { ${e}${cx}`}function Ohe(e){return IN.test(e)&&e.endsWith(cx)}function RN(e){let n=e.match(IN)?.[0];return n===void 0||!e.endsWith(cx)?e:e.slice(n.length,e.length-cx.length)}function EN(e){let n=e.LINZUMI_CLAUDE_LIVE_BASH?.trim().toLowerCase();return!(n==="0"||n==="false"||n==="off"||n==="no")}function DN(e){let n=e.pollIntervalMs??Lhe,t=e.maxEmittedBytesPerTool??jhe,r=new Map,o=!1,i=c=>{let l=r.get(c);if(l!==void 0){r.delete(c),l.timer!==void 0&&(clearInterval(l.timer),l.timer=void 0);try{TN(l.file,{force:!0})}catch{}}},s=async(c,l)=>{if(!l.reading){l.reading=!0;try{let p=await PN.stat(l.file);if(p.size<=l.offset)return;let m=Math.min(p.size-l.offset,Fhe,t-l.emittedBytes);if(m<=0){i(c);return}let f=await PN.open(l.file,"r");try{let y=Buffer.alloc(m),{bytesRead:x}=await f.read(y,0,m,l.offset);if(x<=0)return;l.offset+=x,l.emittedBytes+=x;let w=l.decoder.write(y.subarray(0,x));w!==""&&r.get(c)===l&&e.onOutputDelta(c,w),l.emittedBytes>=t&&(e.log?.("claude_live_bash.output_budget_exhausted",{tool_use_id:c,emitted_bytes:l.emittedBytes}),i(c))}finally{await f.close()}}catch(p){r.get(c)===l&&(e.log?.("claude_live_bash.tail_read_failed",{tool_use_id:c,message:p instanceof Error?p.message:String(p)}),i(c))}finally{l.reading=!1}}},a=(c,l)=>{i(c);let p={file:l,decoder:new Mhe("utf8"),offset:0,emittedBytes:0,reading:!1,timer:void 0};r.set(c,p);let m=setInterval(()=>{s(c,p)},n);m.unref?.(),p.timer=m},d=(c,l)=>{if(o)return;let p=l.command;if(typeof p!="string"||p.trim()===""||l.run_in_background===!0||Ohe(p))return;let m=Dhe(e.captureDir,`${c.replaceAll(/[^\w-]/g,"_")}.out`);try{Rhe(e.captureDir,{recursive:!0}),Ehe(m,"")}catch(f){e.log?.("claude_live_bash.capture_file_failed",{tool_use_id:c,message:f instanceof Error?f.message:String(f)});return}return a(c,m),{...l,command:$he(p,m)}};return{hookMatchers:[{matcher:"Bash",hooks:[async c=>{let l={continue:!0};if(typeof c!="object"||c===null)return l;let p=c;if(p.hook_event_name!=="PreToolUse"||p.tool_name!=="Bash"||typeof p.tool_use_id!="string"||p.tool_use_id===""||typeof p.tool_input!="object"||p.tool_input===null||p.permission_mode!=="bypassPermissions")return l;let m=d(p.tool_use_id,p.tool_input);return m===void 0?l:{continue:!0,hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:m}}}]}],wrapApprovedTool:d,settleTool:i,settleAll:()=>{for(let c of[...r.keys()])i(c)},close:()=>{o=!0;for(let c of[...r.keys()])i(c);try{TN(e.captureDir,{recursive:!0,force:!0})}catch{}}}}var IN,cx,Lhe,jhe,Fhe,yC=F(()=>{"use strict";IN=/^__lz_live_out='(?:[^']|'\\'')*'; if ! : >> "\$__lz_live_out" 2>\/dev\/null; then __lz_live_out=\/dev\/null; fi; \{ /,cx=`
668
668
  } > >(tee -a -- "$__lz_live_out") 2> >(tee -a -- "$__lz_live_out" >&2)`;Lhe=200,jhe=262144,Fhe=65536});import{spawnSync as zhe}from"node:child_process";import{existsSync as qhe}from"node:fs";import{homedir as Nhe}from"node:os";import{basename as Uhe,posix as ON,win32 as Bhe}from"node:path";function bC(e){return e==="win32"?Bhe:ON}function Jhe(e,n){let t=Uhe(e).includes("fish")?`printf '%s%s%s' '${lx}' (string join ':' $PATH) '${_C}'`:`printf '%s%s%s' '${lx}' "$PATH" '${_C}'`;switch(n){case"interactive_login":return["-l","-i","-c",t];case"interactive":return["-i","-c",t];case"login":return["-l","-c",t]}}function Khe(e,n){let t=zhe(e,[...n],{encoding:"utf8",timeout:5e3,killSignal:"SIGKILL",stdio:["ignore","pipe","ignore"]});return{stdout:typeof t.stdout=="string"?t.stdout:void 0,error:t.error}}function $f(e){return{env:e?.env??process.env,platform:e?.platform??process.platform,homeDir:e?.homeDir??Nhe(),fileExists:e?.fileExists??qhe,runLoginShell:e?.runLoginShell}}function Vhe(e){if(e===void 0)return;let n=e.lastIndexOf(lx),t=e.lastIndexOf(_C);if(n===-1||t===-1||t<=n)return;let r=e.slice(n+lx.length,t).trim();return r===""?void 0:r}function Whe(e){let n=$f(e);if(n.platform==="win32")return;let t=e===void 0;if(e!==void 0&&e.runLoginShell===void 0||t&&process.env.VITEST!==void 0)return;if(t&&AN)return MN;let r=n.env.SHELL?.trim(),o=n.runLoginShell??Khe,i=[];if(r!==void 0&&r!=="")for(let a of["interactive_login","interactive","login"]){let d=o(r,Jhe(r,a)),u=Vhe(d.stdout);if(u!==void 0)for(let c of u.split(":"))c!==""&&i.push(c)}let s=i.length===0?void 0:wC(i).join(":");return t&&(MN=s,AN=!0),s}function Hhe(e){let n=$f(e);if(n.platform==="win32")return[];let t=n.homeDir,r=ON.join,o=n.env.VOLTA_HOME?.trim(),i=n.env.BUN_INSTALL?.trim(),s=n.env.npm_config_prefix?.trim(),a=n.env.N_PREFIX?.trim();return wC([r(t,".local","bin"),r(t,".volta","bin"),o===void 0||o===""?void 0:r(o,"bin"),r(t,".bun","bin"),i===void 0||i===""?void 0:r(i,"bin"),r(t,".npm-global","bin"),s===void 0||s===""?void 0:r(s,"bin"),a===void 0||a===""?void 0:r(a,"bin"),r(t,".claude","local"),"/opt/homebrew/bin","/usr/local/bin"].filter(d=>d!==void 0))}function $N(e,n){return e===void 0?[]:e.split(bC(n).delimiter).filter(t=>t!=="")}function wC(e){return Array.from(new Set(e))}function LN(e){let n=$f(e);return wC([...$N(n.env.PATH,n.platform),...$N(Whe(e),n.platform),...Hhe(e)])}function px(e){let n=e===void 0;if(n&&process.env.VITEST!==void 0)return process.env.PATH??"";if(n&&xC!==void 0)return xC;let t=$f(e),r=LN(e).join(bC(t.platform).delimiter);return r!==""&&(t.env.PATH=r),n&&(xC=r),r}function fx(e,n){let t=$f(n);if(e.includes("/")||e.includes("\\"))return t.fileExists(e)?e:void 0;let r=t.platform==="win32"?[`${e}.exe`,`${e}.cmd`,e]:[e],o=bC(t.platform).join;for(let i of LN(n))for(let s of r){let a=o(i,s);if(t.fileExists(a))return a}}function jN(e,n){return[`\`${e}\` was not found on this runner's PATH, the login-shell PATH, or the common install locations (~/.local/bin, ~/.volta/bin, ~/.bun/bin, npm-global, Homebrew).`,`If \`${e}\` works in your terminal, the runner process does not see your shell's PATH (common when the runner is launched from an app or service instead of a terminal).`,`Fix: pass ${n} "$(command -v ${e})" when starting the runner, or make sure ${e}'s directory is on your login-shell PATH.`].join(`
669
669
  `)}var lx,_C,MN,AN,xC,vC=F(()=>{"use strict";lx="__LINZUMI_LOGIN_PATH_BEGIN__",_C="__LINZUMI_LOGIN_PATH_END__";AN=!1});import{closeSync as Ghe,openSync as Zhe,readSync as Qhe,statSync as Xhe}from"node:fs";function xd(e){return typeof e!="string"||e===""?e:Yhe.reduce((n,t)=>t.source.startsWith("\\beyJ")?n.replace(t,"<redacted>"):n.replace(t,"$1<redacted>"),e)}function FN(e,n){if(typeof e!="string"||e==="")return;if(Buffer.byteLength(e,"utf8")<=n)return e;let t=Buffer.from(e,"utf8"),r=t.length-n;for(;r<t.length&&((t[r]??0)&192)===128;)r+=1;return t.subarray(r).toString("utf8")}function ige(e,n){let t;try{let{size:r}=Xhe(e),o=r>n?r-n:0,i=r-o;if(i<=0)return"";let s=Buffer.allocUnsafe(i);t=Zhe(e,"r");let a=Qhe(t,s,0,i,o);return s.subarray(0,a).toString("utf8")}catch{return""}finally{if(t!==void 0)try{Ghe(t)}catch{}}}function zN(e){let n=e.now??Date.now,t=e.setIntervalImpl??setInterval,r=e.clearIntervalImpl??clearInterval,o=e.readTail??ige,i=Math.max(nge,e.intervalMs??ege),s=Math.max(1,e.maxTailBytes??tge),a=Math.max(1,e.maxLifecycleEvents??rge),d=[],u=!1,c,l=v=>{try{for(d.push(v);d.length>a;)d.shift()}catch{}},p=()=>{try{let v=e.backendStderrSnapshot?.();if(typeof v!="string"||v==="")return;let b=v.length>s?v.slice(v.length-s):v;return xd(b)}catch{return}},m=()=>{let v=xd(o(e.runnerLogFile,s)),b=p(),k={kind:"runner_diagnostic_log",captured_at:new Date(n()).toISOString(),lifecycle:d.map(R=>({event:R.event,at:R.atIso,...R.closeCode===void 0?{}:{close_code:R.closeCode},...R.closeReason===void 0?{}:{close_reason:xd(R.closeReason)},...R.previousSessionDurationMs===void 0?{}:{previous_session_duration_ms:R.previousSessionDurationMs},...R.reconnectCount===void 0?{}:{reconnect_count:R.reconnectCount}})),runner_log_tail:v,...b===void 0?{}:{backend_stderr:b}};return{bundle_name:"runner-diagnostics",exported_at:new Date(n()).toISOString(),diagnostics:k,telemetry_ndjson:d.map(R=>JSON.stringify(R)).join(`
670
- `)}},f=Math.max(256,e.spoolTailBytes??oge),y=(v,b)=>{let k=v.diagnostics!==null&&typeof v.diagnostics=="object"&&!Array.isArray(v.diagnostics)?{...v.diagnostics}:{},R=FN(k.runner_log_tail,f),P=FN(k.backend_stderr,f);return R!==void 0&&(k.runner_log_tail=R),P!==void 0&&(k.backend_stderr=P),k.spool_reason=b instanceof Error?b.message:String(b),{...v,diagnostics:k}},x=async()=>{let v=d.length,b=m();try{await Promise.resolve(e.upload(b)),d.splice(0,v)}catch(k){let R=!1;if(e.spool!==void 0&&v>0)try{R=e.spool.append(y(b,k))}catch{R=!1}R&&d.splice(0,v);try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,spooled:R,error:k instanceof Error?k.message:String(k)})}catch{}}},w=()=>{u||c!==void 0||(c=t(()=>{x()},i),c.unref?.())},S=()=>{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 w(),{recordLifecycle:l,flushNow:x,stop:S}}var Yhe,ege,nge,tge,rge,oge,mx=F(()=>{"use strict";Yhe=[/(--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];ege=45e3,nge=5e3,tge=64*1024,rge=200,oge=16*1024});import sge from"blessed";function age(e){if(e.indexOf("%;")===-1)return e;let n=0,t="",r=0;for(;r<e.length;){let o=e[r],i=e[r+1];if(o==="%"&&i==="%"){t+="%%",r+=2;continue}if(o==="%"&&i==="?"){n+=1,t+="%?",r+=2;continue}if(o==="%"&&i===";"){n>0&&(n-=1,t+="%;"),r+=2;continue}t+=o,r+=1}return t}function NN(e=sge){let t=e.Tput?.prototype,r=t?._compile;if(t===void 0||typeof r!="function"||t[qN]===!0)return;let o=function(s,a,d){let u=typeof d=="string"?age(d):d;return r.call(this,s,a,u)};t._compile=o,Object.defineProperty(t,qN,{value:!0,enumerable:!1,configurable:!0,writable:!0})}var qN,UN=F(()=>{"use strict";qN="__linzumiSetulcShimInstalled"});function BN(e){return e===void 0?!1:(e.unicode=!0,e.features!==void 0&&(e.features.unicode=!0),e.brokenACS=!0,!0)}function JN(e){if(e===void 0)return;let n=e.tput,t=e.program?.tput;if(n===void 0&&t===void 0){console.warn("[blessedAcsCharsetShim] screen has no tput; ACS charset fix was NOT applied - dynamic cells may render garbled");return}BN(n),t!==void 0&&t!==n&&BN(t)}var KN=F(()=>{"use strict"});var VN,dge,Of,uge,WN,HN=F(()=>{"use strict";VN=Symbol.for("linzumi.blessedPartialScreenCrashGuard"),dge=e=>{console.warn(e)},Of=(e,n)=>{n===void 0||process.removeListener(e,n)},uge=(e,n)=>{let t=e.instances.indexOf(n);t===-1||(e.instances.splice(t,1),e.total-=1),e.global=e.instances[0]??null,e.total===0&&(Of("uncaughtException",e._exceptionHandler),Of("SIGTERM",e._sigtermHandler),Of("SIGINT",e._sigintHandler),Of("SIGQUIT",e._sigquitHandler),Of("exit",e._exitHandler),delete e._exceptionHandler,delete e._sigtermHandler,delete e._sigintHandler,delete e._sigquitHandler,delete e._exitHandler,delete e._bound),n.destroyed=!0},WN=(e,n={})=>{let t=e.prototype;switch(t[VN]){case!0:return;case void 0:break}let r=t.destroy;t[VN]=!0,t.destroy=function(){switch(this.program){case null:case void 0:(n.warn??dge)({event:"runner.tui_partial_screen_teardown",branch:"screen_destroy_missing_program",program_present:!1,action:"cleanup_partial_screen_registration"}),uge(e,this);break;default:r.call(this);break}}}});function GN(e){if(typeof e!="function")return;let n=e;if(!(!Array.isArray(n.instances)||typeof n.total!="number"))return n}function Lf(e,n){if(typeof n=="function")try{process.removeListener(e,n)}catch{}}function cge(e,n){try{let t=e.instances.indexOf(n);return t===-1?!1:(e.instances.splice(t,1),e.total-=1,e.global=e.instances[0],e.total===0&&(e.global=null,Lf("uncaughtException",e._exceptionHandler),Lf("SIGTERM",e._sigtermHandler),Lf("SIGINT",e._sigintHandler),Lf("SIGQUIT",e._sigquitHandler),Lf("exit",e._exitHandler),delete e._exceptionHandler,delete e._sigtermHandler,delete e._sigintHandler,delete e._sigquitHandler,delete e._exitHandler,delete e._bound),!0)}catch{return!1}}function lge(e,n,t,r){let o=0;for(let i of e.instances.slice()){if(n.has(i))continue;let s=i.program===void 0,a;if(!s&&typeof i.destroy=="function")try{i.destroy()}catch(d){a=d}cge(e,i),o+=1,xo(t,"runner.tui_stranded_screen_swept",{partial_construction:s,destroy_error:a===void 0?null:a instanceof Error?a.message:String(a),...r})}return o}function ZN(e,n,t={}){let r=t.sinks??{},o=t.context??{},i=new Set(e?.instances??[]);try{return n()}catch(s){let a=e===void 0?0:lge(e,i,r,o);throw xo(r,"runner.tui_screen_construction_failed",{message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack??null:null,swept_screens:a,...o}),s}}var QN=F(()=>{"use strict";Zu()});var jt,SC,Xs=F(()=>{"use strict";jt="1.0.130",SC=`linzumi ${jt}`});import ea from"blessed";function d4(e){return e.includes(gx)?e.replace(_ge,"").replace(bge,"").includes(gx):!1}function wge(e){return typeof e=="object"&&e!==null&&e.name==="escape"}function YN(e){return e.mode.type==="table"?!1:(e.mode={type:"table"},!0)}function kge(e){return vge.test(e)}function u4(e){if(!e.includes(gx))return[];let n=[];for(let t of e.matchAll(Sge))n.push(t[1]==="A"?"up":"down");return n}function Cge(e){return kge(e)?u4(e):[]}function _x(e,n={}){let t=vt.dashboard,r={trigger:e.trigger,had_tui:t!==void 0,stdin_was_tty_at_start:vt.stdinWasTtyAtStart,stdout_was_tty_at_start:vt.stdoutWasTtyAtStart};if(t===void 0)return xo(n,"runner.tui_teardown_ok",r),{hadTui:!1,ok:!0,swallowedErrorCode:void 0};vt.dashboard=void 0,vt.stop?.(),vt.stop=void 0;try{return t.destroy(),xo(n,"runner.tui_teardown_ok",r),{hadTui:!0,ok:!0,swallowedErrorCode:void 0}}catch(o){let i=Ap(o);return xo(n,"runner.tui_teardown_tty_error",{...r,stage:"screen_destroy",code:i??null,message:o instanceof Error?o.message:String(o),swallowed:!0}),{hadTui:!0,ok:!1,swallowedErrorCode:i}}}function Ege(){_x({trigger:"crash"},{log:Ig})}function c4(e,n={log:Ig}){if(vt.degradedToHeadless)return;vt.degradedToHeadless=!0;let t=_x({trigger:"tty_write_error"},n);xo(n,"runner.tui_degraded_headless",{code:e.code??null,stage:e.stage,had_tui:t.hadTui,teardown_ok:t.ok,note:"terminal detached mid-run; console disabled, runner continues headless"});try{process.stderr.write(`linzumi runner: terminal lost (write ${e.code??"error"}); Commander TUI disabled, runner continues headless
670
+ `)}},f=Math.max(256,e.spoolTailBytes??oge),y=(v,b)=>{let k=v.diagnostics!==null&&typeof v.diagnostics=="object"&&!Array.isArray(v.diagnostics)?{...v.diagnostics}:{},R=FN(k.runner_log_tail,f),P=FN(k.backend_stderr,f);return R!==void 0&&(k.runner_log_tail=R),P!==void 0&&(k.backend_stderr=P),k.spool_reason=b instanceof Error?b.message:String(b),{...v,diagnostics:k}},x=async()=>{let v=d.length,b=m();try{await Promise.resolve(e.upload(b)),d.splice(0,v)}catch(k){let R=!1;if(e.spool!==void 0&&v>0)try{R=e.spool.append(y(b,k))}catch{R=!1}R&&d.splice(0,v);try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,spooled:R,error:k instanceof Error?k.message:String(k)})}catch{}}},w=()=>{u||c!==void 0||(c=t(()=>{x()},i),c.unref?.())},S=()=>{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 w(),{recordLifecycle:l,flushNow:x,stop:S}}var Yhe,ege,nge,tge,rge,oge,mx=F(()=>{"use strict";Yhe=[/(--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];ege=45e3,nge=5e3,tge=64*1024,rge=200,oge=16*1024});import sge from"blessed";function age(e){if(e.indexOf("%;")===-1)return e;let n=0,t="",r=0;for(;r<e.length;){let o=e[r],i=e[r+1];if(o==="%"&&i==="%"){t+="%%",r+=2;continue}if(o==="%"&&i==="?"){n+=1,t+="%?",r+=2;continue}if(o==="%"&&i===";"){n>0&&(n-=1,t+="%;"),r+=2;continue}t+=o,r+=1}return t}function NN(e=sge){let t=e.Tput?.prototype,r=t?._compile;if(t===void 0||typeof r!="function"||t[qN]===!0)return;let o=function(s,a,d){let u=typeof d=="string"?age(d):d;return r.call(this,s,a,u)};t._compile=o,Object.defineProperty(t,qN,{value:!0,enumerable:!1,configurable:!0,writable:!0})}var qN,UN=F(()=>{"use strict";qN="__linzumiSetulcShimInstalled"});function BN(e){return e===void 0?!1:(e.unicode=!0,e.features!==void 0&&(e.features.unicode=!0),e.brokenACS=!0,!0)}function JN(e){if(e===void 0)return;let n=e.tput,t=e.program?.tput;if(n===void 0&&t===void 0){console.warn("[blessedAcsCharsetShim] screen has no tput; ACS charset fix was NOT applied - dynamic cells may render garbled");return}BN(n),t!==void 0&&t!==n&&BN(t)}var KN=F(()=>{"use strict"});var VN,dge,Of,uge,WN,HN=F(()=>{"use strict";VN=Symbol.for("linzumi.blessedPartialScreenCrashGuard"),dge=e=>{console.warn(e)},Of=(e,n)=>{n===void 0||process.removeListener(e,n)},uge=(e,n)=>{let t=e.instances.indexOf(n);t===-1||(e.instances.splice(t,1),e.total-=1),e.global=e.instances[0]??null,e.total===0&&(Of("uncaughtException",e._exceptionHandler),Of("SIGTERM",e._sigtermHandler),Of("SIGINT",e._sigintHandler),Of("SIGQUIT",e._sigquitHandler),Of("exit",e._exitHandler),delete e._exceptionHandler,delete e._sigtermHandler,delete e._sigintHandler,delete e._sigquitHandler,delete e._exitHandler,delete e._bound),n.destroyed=!0},WN=(e,n={})=>{let t=e.prototype;switch(t[VN]){case!0:return;case void 0:break}let r=t.destroy;t[VN]=!0,t.destroy=function(){switch(this.program){case null:case void 0:(n.warn??dge)({event:"runner.tui_partial_screen_teardown",branch:"screen_destroy_missing_program",program_present:!1,action:"cleanup_partial_screen_registration"}),uge(e,this);break;default:r.call(this);break}}}});function GN(e){if(typeof e!="function")return;let n=e;if(!(!Array.isArray(n.instances)||typeof n.total!="number"))return n}function Lf(e,n){if(typeof n=="function")try{process.removeListener(e,n)}catch{}}function cge(e,n){try{let t=e.instances.indexOf(n);return t===-1?!1:(e.instances.splice(t,1),e.total-=1,e.global=e.instances[0],e.total===0&&(e.global=null,Lf("uncaughtException",e._exceptionHandler),Lf("SIGTERM",e._sigtermHandler),Lf("SIGINT",e._sigintHandler),Lf("SIGQUIT",e._sigquitHandler),Lf("exit",e._exitHandler),delete e._exceptionHandler,delete e._sigtermHandler,delete e._sigintHandler,delete e._sigquitHandler,delete e._exitHandler,delete e._bound),!0)}catch{return!1}}function lge(e,n,t,r){let o=0;for(let i of e.instances.slice()){if(n.has(i))continue;let s=i.program===void 0,a;if(!s&&typeof i.destroy=="function")try{i.destroy()}catch(d){a=d}cge(e,i),o+=1,xo(t,"runner.tui_stranded_screen_swept",{partial_construction:s,destroy_error:a===void 0?null:a instanceof Error?a.message:String(a),...r})}return o}function ZN(e,n,t={}){let r=t.sinks??{},o=t.context??{},i=new Set(e?.instances??[]);try{return n()}catch(s){let a=e===void 0?0:lge(e,i,r,o);throw xo(r,"runner.tui_screen_construction_failed",{message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack??null:null,swept_screens:a,...o}),s}}var QN=F(()=>{"use strict";Zu()});var jt,SC,Xs=F(()=>{"use strict";jt="1.0.131",SC=`linzumi ${jt}`});import ea from"blessed";function d4(e){return e.includes(gx)?e.replace(_ge,"").replace(bge,"").includes(gx):!1}function wge(e){return typeof e=="object"&&e!==null&&e.name==="escape"}function YN(e){return e.mode.type==="table"?!1:(e.mode={type:"table"},!0)}function kge(e){return vge.test(e)}function u4(e){if(!e.includes(gx))return[];let n=[];for(let t of e.matchAll(Sge))n.push(t[1]==="A"?"up":"down");return n}function Cge(e){return kge(e)?u4(e):[]}function _x(e,n={}){let t=vt.dashboard,r={trigger:e.trigger,had_tui:t!==void 0,stdin_was_tty_at_start:vt.stdinWasTtyAtStart,stdout_was_tty_at_start:vt.stdoutWasTtyAtStart};if(t===void 0)return xo(n,"runner.tui_teardown_ok",r),{hadTui:!1,ok:!0,swallowedErrorCode:void 0};vt.dashboard=void 0,vt.stop?.(),vt.stop=void 0;try{return t.destroy(),xo(n,"runner.tui_teardown_ok",r),{hadTui:!0,ok:!0,swallowedErrorCode:void 0}}catch(o){let i=Ap(o);return xo(n,"runner.tui_teardown_tty_error",{...r,stage:"screen_destroy",code:i??null,message:o instanceof Error?o.message:String(o),swallowed:!0}),{hadTui:!0,ok:!1,swallowedErrorCode:i}}}function Ege(){_x({trigger:"crash"},{log:Ig})}function c4(e,n={log:Ig}){if(vt.degradedToHeadless)return;vt.degradedToHeadless=!0;let t=_x({trigger:"tty_write_error"},n);xo(n,"runner.tui_degraded_headless",{code:e.code??null,stage:e.stage,had_tui:t.hadTui,teardown_ok:t.ok,note:"terminal detached mid-run; console disabled, runner continues headless"});try{process.stderr.write(`linzumi runner: terminal lost (write ${e.code??"error"}); Commander TUI disabled, runner continues headless
671
671
  `)}catch(r){nd(r)===void 0&&xo(n,"runner.tui_degrade_farewell_write_failed",{message:r instanceof Error?r.message:String(r),stage:e.stage,swallowed:!0})}}function bx(e,n){if(l4()){let r=uye(jf);if(Dge(jf,e,n,Date.now()),r!==void 0){r.render(Date.now());return}sye(jf),aye(jf);let o=AC(jf,Date.now());if(o!==void 0){MC(o);return}}let t=y4(e,n);if(t!==void 0)try{process.stdout.write(`${t}
672
672
  `)}catch(r){if(nd(r)===void 0)throw r}}function l4(){if(vt.degradedToHeadless)return!1;switch(process.env.LINZUMI_RUNNER_CONSOLE){case"dashboard":return!0;case"lines":return!1;default:return process.stdout.isTTY===!0}}function wx(){return l4()}function Dge(e,n,t,r){let o=Nv(n);e.lastUpdateAtMs=r;let i=a4(e)?.key;switch(o){case"onboarding.discovery_agents_started":e.browserUrl=xe(t.kandanUrl),e.workspace=xe(t.workspace),e.runnerId=xe(Mt(t,"runnerId"));break;case"kandan.connection_stale":e.connectionStale=!0;break;case"kandan.connection_recovered":e.connectionStale=!1;break;case"runner.notice":{let s=xe(t.message);if(s===void 0)break;let a=xe(t.key)??s,d=e.notices.get(a),u=xe(t.severity)??"warning",c=Un(t.count)??(d?.count??0)+1;if(d===void 0){e.notices.set(a,{key:a,severity:u,message:s,count:c,updatedAtMs:r});for(let l of e.notices.keys()){if(e.notices.size<=fge)break;e.notices.delete(l)}}else d.severity=u,d.message=s,d.count=c,d.updatedAtMs=r;break}case"onboarding.discovery_status":{let s=xe(t.phase),a=xe(t.status),d=hx(t.metadata),u=xe(d?.worker_id);if(s!==void 0&&a!==void 0){let c=s==="conversations",l=c?s:u??s,p=e.discovery.get(l),m=c?Oge(p?.metadata,d):d;e.discovery.set(l,{key:l,phase:s,status:c?Lge(p,a,d):a,placesSearched:Math.max(p?.placesSearched??0,Un(t.places_searched)??0),message:xe(t.message)??(c?p?.message:void 0),currentPlace:xe(t.current_place)??(c?p?.currentPlace:void 0),currentSource:xe(t.current_source)??(c?p?.currentSource:void 0),lastError:xe(t.last_error),metadata:m,updatedAtMs:r})}break}case"kandan.roster_seeded":{let s=Eye(t.threads)??[];for(let a of s){let d=hx(a),u=xe(Mt(d,"kandan_thread_id"));if(u===void 0)continue;let c=`linzumi:${u}`;if((e.jobs.get(c)??Array.from(e.jobs.values()).find(m=>m.linzumiThreadId===u))!==void 0)continue;let p=Un(d?.last_activity_at_ms);e.jobs.set(c,{key:c,createdAtMs:p??0,createdOrdinal:jC(e),agentProvider:void 0,linzumiThreadId:u,linzumiThreadTitle:void 0,codexThreadId:void 0,tokenUsage:void 0,lastIncomingPreview:void 0,lastIncomingAtMs:void 0,lastAssistantPreview:void 0,lastAssistantAtMs:void 0,latestCodexEventId:void 0,eventType:"idle (server roster)",creditExhaustion:void 0,queueDepth:void 0,turnId:void 0,updatedAtMs:p??0})}e.rosterTruncated=Dye(t.truncated)??e.rosterTruncated;break}case"kandan.message_queued":case"codex.turn_starting":{let s=EC(e,t,r);s.linzumiThreadId=xe(Mt(t,"linzumi_thread_id"))??s.linzumiThreadId,s.linzumiThreadTitle=v4(t)??s.linzumiThreadTitle,s.codexThreadId=xe(Mt(t,"codex_thread_id"))??s.codexThreadId,s.lastIncomingPreview=xe(t.body_preview)??s.lastIncomingPreview,s.lastIncomingAtMs=Un(t.message_received_at_ms)??s.lastIncomingAtMs,s.queueDepth=Un(t.queue_depth)??s.queueDepth,s.eventType=Sye(o),s.updatedAtMs=r;break}case"codex.notification":{let s=xe(t.token_usage_summary),a=xe(t.rate_limit_summary),d=xe(t.credit_exhaustion_summary);s!==void 0&&(e.tokenUsage=s),a!==void 0&&(e.rateLimit=t4(e.rateLimit,a)),d!==void 0&&(e.creditExhaustion=d);let u=xe(t.method),c=hx(t.metadata);if(!(xe(c?.threadId)!==void 0||xe(c?.turnId)!==void 0||xe(c?.itemId)!==void 0))break;let p=xe(c?.threadId),m=p===void 0?a4(e):bye(e,`codex:${p}`,r);m!==void 0&&(m.codexThreadId=p??m.codexThreadId,m.tokenUsage=s??m.tokenUsage,m.creditExhaustion=d??m.creditExhaustion,m.latestCodexEventId=_4(t),m.eventType=t.credit_exhaustion_detected===!0?"credit_exhausted":u??o,m.turnId=xe(c?.turnId)??m.turnId,m.updatedAtMs=r);break}case"kandan.codex_output_forwarded":case"kandan.codex_delta_forwarded":case"kandan.codex_reasoning_delta_forwarded":case"kandan.codex_command_output_forwarded":case"kandan.codex_file_change_forwarded":case"kandan.codex_web_search_progress_forwarded":{let s=EC(e,t,r);s.latestCodexEventId=xe(t.item_key)??s.latestCodexEventId,s.eventType=vye(o,t),s.turnId=xe(t.turn_id)??s.turnId,xe(t.structured_kind)==="codex_assistant_message"&&(s.lastAssistantPreview=xe(t.body_preview)??s.lastAssistantPreview,s.lastAssistantAtMs=r),s.updatedAtMs=r;break}case"claude_code.turn_starting":case"claude_code.message_queued":{let s=Dc(e,t,r);s.lastIncomingPreview=xe(t.body_preview)??s.lastIncomingPreview,s.lastIncomingAtMs=Un(t.message_received_at_ms)??s.lastIncomingAtMs,s.eventType=o==="claude_code.message_queued"?"message_queued":"turn_starting",s.updatedAtMs=r;break}case"claude_code.session_started":{let s=Dc(e,t,r);s.eventType="session_started",s.updatedAtMs=r;break}case"claude_code.turn_completed":{let s=Dc(e,t,r);s.lastAssistantPreview=xe(t.body_preview)??s.lastAssistantPreview,s.lastAssistantAtMs=r,s.eventType="turn_completed",s.updatedAtMs=r;break}case"claude_code.turn_terminal":{let s=Dc(e,t,r);s.turnId=xe(t.turn_id)??s.turnId,s.eventType=`turn_${xe(t.outcome)??"terminal"}`,s.updatedAtMs=r;break}case"claude_code.rate_limit":{let s=xe(t.rate_limit_summary);s!==void 0&&(e.rateLimit=t4(e.rateLimit,s));let a=Dc(e,t,r);a.eventType="rate_limit",a.updatedAtMs=r;break}case"claude_code.token_usage":{let s=xe(t.token_usage_summary),a=Dc(e,t,r);s!==void 0&&(e.tokenUsage=s,a.tokenUsage=s),a.eventType="token_usage",a.updatedAtMs=r;break}default:break}Yge(e,o,t,i)}function AC(e,n){if(e.jobs.size===0&&e.discovery.size===0&&e.notices.size===0&&e.tokenUsage===void 0&&e.rateLimit===void 0&&e.creditExhaustion===void 0)return;let t=_d(e);switch(e.mode.type){case"table":return e.jobs.size===0&&e.discovery.size>0?Mge(e,n):Fge(e,t,n);case"raw_all":return o4(e,"Raw Stream",void 0,"esc: table",e.rawLines,n);case"raw_job":{let r=e.mode.jobKey,o=e.jobs.get(r),i=`Raw Stream: ${FC(o?.linzumiThreadId)} / ${zC(o?.codexThreadId,o?.agentProvider)}`;return o4(e,i,o?.tokenUsage,"esc: table",e.rawLines.filter(s=>s.jobKey===r),n)}}}function Mge(e,n){let t=Array.from(e.discovery.values()).sort((s,a)=>yx(s.phase).localeCompare(yx(a.phase))),r=t.reduce((s,a)=>s+a.placesSearched,0),o=t.some(s=>["starting","running"].includes(s.status)),i=t.length===0?["Discovery starting 0 places Waiting for discovery agents"]:t.map(s=>[vx(s.phase).padEnd(14),Sx(s.status).padEnd(10),`${String(s.placesSearched)} places`.padEnd(10),$C(s)].join(" "));return[LC(),"","Linzumi setup","New computer connected","",`Continue in the browser: ${e.browserUrl??"open the Linzumi setup page"}`,"",Age(t),`Workspace: ${e.workspace??"?"}`,`Runner: ${e.runnerId??"?"}`,`Status: ${o?"searching":"finished"} Places searched: ${r}`,`Last update: ${Ai(e.lastUpdateAtMs,n)}${Ac(e)}`,"","Phase Status Places Detail","------------- ---------- --------- ------------------------------",...i,""].join(`
673
673
  `)}function yx(e){switch(e){case"projects":return"1-projects";case"conversations":return"2-conversations";default:return`3-${e}`}}function vx(e){switch(e){case"projects":return"Projects";case"conversations":return"Conversations";default:return"Discovery"}}function Sx(e){switch(e){case"starting":return"starting";case"running":return"searching";case"completed":return"done";case"failed":return"failed";default:return e}}function Age(e){return e.length===0?"I'm waiting for the discovery agents to start.":e.some(t=>["starting","running"].includes(t.status))?"I'm scouting existing projects and coding-agent conversations.":"Discovery is finished and idle. Select a project in the browser or move on."}function $C(e){if(e.lastError!==void 0)return e.lastError;let n=OC(e);if(n!==void 0)return n;let t=jge(e.currentSource);return e.currentPlace!==void 0?t===void 0?e.currentPlace:`${t}: ${e.currentPlace}`:e.message??p4(e.phase)}function OC(e){if(e.phase!=="conversations"||!TC(e.metadata))return;let n=Un(e.metadata?.total_count)??(Un(e.metadata?.codex_count)??0)+(Un(e.metadata?.claude_code_count)??0),t=Un(e.metadata?.imported_count)??Un(e.metadata?.reported_count);return t===void 0||n<=0?void 0:`${e.status==="completed"?"Imported":"Importing"} [${$ge(t,n)}] ${t} / ${n} Codex/Claude Code conversations`}function TC(e){return xe(e?.worker_id)==="conversations-local-import"||Un(e?.imported_count)!==void 0||Un(e?.failed_import_count)!==void 0||Un(e?.total_count)!==void 0}function $ge(e,n){let r=Math.min(10,Math.max(0,Math.floor(e/n*10)));return`${"#".repeat(r)}${"-".repeat(10-r)}`}function Oge(e,n){return e===void 0?n:n===void 0?e:{...e,...n,...Ff(e,n,"codex_count"),...Ff(e,n,"claude_code_count"),...Ff(e,n,"reported_count"),...Ff(e,n,"imported_count"),...Ff(e,n,"total_count")}}function Ff(e,n,t){let r=Un(e[t]),o=Un(n[t]);return r===void 0&&o===void 0?{}:{[t]:Math.max(r??0,o??0)}}function Lge(e,n,t){return e?.status==="running"&&TC(e.metadata)&&!TC(t)?e.status:n}function jge(e){switch(e){case"git":return"Git";case"codex":return"Codex";case"claude_code":return"Claude Code";case void 0:return;default:return e}}function p4(e){switch(e){case"projects":return"Checking common project folders and Git worktrees.";case"conversations":return"Checking Codex and Claude Code sessions.";default:return"Checking local context."}}function Fge(e,n,t){let r=m4(e,n,t);return[LC(),"","Linzumi Commander","",`Jobs: ${n.length}${e.rosterTruncated?" (first 200 of this node's roster)":""} Last update: ${Ai(e.lastUpdateAtMs,t)}${Ac(e)}`,...f4(e.creditExhaustion),`Overall Token Usage: ${e.tokenUsage??"?"}`,`Account rate limits: ${e.rateLimit??"?"}`,"Controls: up/down select | enter raw job | r raw stream | esc table",...PC(e),"",kye(r.rows),""].join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linzumi/cli",
3
- "version": "1.0.130",
3
+ "version": "1.0.131",
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": {
@@ -7,7 +7,9 @@
7
7
  //
8
8
  // 1. pnpm bump-version <new-version> (for example: 1.2.3-beta)
9
9
  // 2. Run the test suite: pnpm vitest run --config vitest.config.mjs
10
- // 3. Commit with a "[deploy-cli]" title and merge to main.
10
+ // 3. Commit with a "[deploy-commander]" title and merge to main (the
11
+ // deprecated "[deploy-cli]" marker stays honored through the N3.2
12
+ // dual-accept window - naming program).
11
13
  // 4. The main publish workflow (.github/workflows/linzumi-cli-publish.yml)
12
14
  // publishes @linzumi/cli@<new-version> to npm.
13
15
  //
@@ -179,7 +181,7 @@ function appendVersionSpecComment(content) {
179
181
  ' Spec: scripts/bump-cli-version.mjs (automated version bump)',
180
182
  ` Relationship: Bumps the published CLI version so the`,
181
183
  ' current mainline CLI can be released under a fresh immutable npm',
182
- ' version with `[deploy-cli]`.',
184
+ ' version with `[deploy-commander]`.',
183
185
  '',
184
186
  ].join('\n');
185
187
 
@@ -325,6 +327,6 @@ if (dryRun) {
325
327
  process.stdout.write('Dry run - no files were written.\n');
326
328
  } else {
327
329
  process.stdout.write(
328
- 'Done. Now run the test suite before committing:\n pnpm vitest run --config vitest.config.mjs\nThen commit with a "[deploy-cli]" title and merge to main to publish.\n'
330
+ 'Done. Now run the test suite before committing:\n pnpm vitest run --config vitest.config.mjs\nThen commit with a "[deploy-commander]" title and merge to main to publish.\n'
329
331
  );
330
332
  }