@linzumi/cli 1.0.138 → 1.0.139
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 +1 -1
- package/dist/impl-res/index.js +572 -81
- package/dist/impl-ts/index.js +1 -1
- package/package.json +1 -1
package/dist/impl-ts/index.js
CHANGED
|
@@ -667,7 +667,7 @@ ${n}
|
|
|
667
667
|
`)}catch(o){n?.(o instanceof Error?o.message:String(o))}}}}function jhe(e,n){let t=e.trim();if(t.length<=n)return t;let r="... ";return`${r}${t.slice(t.length-(n-r.length))}`}function Fhe(e){let n=Object.entries(e);return n.length<=yN?e:(n.sort(([,t],[,r])=>Date.parse(t.lastAt)-Date.parse(r.lastAt)),Object.fromEntries(n.slice(-yN)))}function vN(e,n,t,r,o=_N){let i=e.load(),s=(i[n]?.count??0)+1,a=t instanceof Error?t.message:String(t??"");return e.save(Fhe({...i,[n]:{count:s,lastError:jhe(a===""?"the engine worker never started":a,Lhe),lastAt:new Date(r).toISOString()}})),{count:s,tripped:s>=o}}function SN(e,n){let t=e.load();if(t[n]===void 0)return!1;let{[n]:r,...o}=t;return e.save(o),!0}function kN(e,n,t=_N){let r=e.load()[n];return r!==void 0&&r.count>=t?r:void 0}function gC(e,n=hC){let t=CN.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 TN(e,n=hC){let t=CN.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=xN(o);if(a===o)break;o=a}return!0}function yC(e,n={}){let t=n.realpathFn??Dhe,r;try{r=t(Ohe($t(e)))}catch{return!1}return!gC(r,n.statFn??hC)}function PN(e,n=yC){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 xC(e){return(e instanceof Error?e.message:String(e??"")).startsWith(IN)}function RN(e,n){return`${IN}${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 _N,Lhe,yN,CN,IN,EN=F(()=>{"use strict";aC();ms();_N=3,Lhe=480,yN=50;CN=["/Volumes"];IN="coding sessions are paused for "});import{mkdirSync as zhe,rmSync as DN,writeFileSync as qhe,promises as MN}from"node:fs";import{join as Nhe}from"node:path";import{StringDecoder as Uhe}from"node:string_decoder";function Bhe(e){return`'${e.replaceAll("'","'\\''")}'`}function Jhe(e,n){return`__lz_live_out=${Bhe(n)}; if ! : >> "$__lz_live_out" 2>/dev/null; then __lz_live_out=/dev/null; fi; { ${e}${lx}`}function Khe(e){return AN.test(e)&&e.endsWith(lx)}function $N(e){let n=e.match(AN)?.[0];return n===void 0||!e.endsWith(lx)?e:e.slice(n.length,e.length-lx.length)}function ON(e){let n=e.LINZUMI_CLAUDE_LIVE_BASH?.trim().toLowerCase();return!(n==="0"||n==="false"||n==="off"||n==="no")}function LN(e){let n=e.pollIntervalMs??Vhe,t=e.maxEmittedBytesPerTool??Whe,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{DN(l.file,{force:!0})}catch{}}},s=async(c,l)=>{if(!l.reading){l.reading=!0;try{let p=await MN.stat(l.file);if(p.size<=l.offset)return;let m=Math.min(p.size-l.offset,Hhe,t-l.emittedBytes);if(m<=0){i(c);return}let f=await MN.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 b=l.decoder.write(y.subarray(0,x));b!==""&&r.get(c)===l&&e.onOutputDelta(c,b),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 Uhe("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||Khe(p))return;let m=Nhe(e.captureDir,`${c.replaceAll(/[^\w-]/g,"_")}.out`);try{zhe(e.captureDir,{recursive:!0}),qhe(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:Jhe(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{DN(e.captureDir,{recursive:!0,force:!0})}catch{}}}}var AN,lx,Vhe,Whe,Hhe,_C=F(()=>{"use strict";AN=/^__lz_live_out='(?:[^']|'\\'')*'; if ! : >> "\$__lz_live_out" 2>\/dev\/null; then __lz_live_out=\/dev\/null; fi; \{ /,lx=`
|
|
668
668
|
} > >(tee -a -- "$__lz_live_out") 2> >(tee -a -- "$__lz_live_out" >&2)`;Vhe=200,Whe=262144,Hhe=65536});import{spawnSync as Ghe}from"node:child_process";import{existsSync as Zhe}from"node:fs";import{homedir as Qhe}from"node:os";import{basename as Xhe,posix as qN,win32 as Yhe}from"node:path";function vC(e){return e==="win32"?Yhe:qN}function ege(e,n){let t=Xhe(e).includes("fish")?`printf '%s%s%s' '${px}' (string join ':' $PATH) '${wC}'`:`printf '%s%s%s' '${px}' "$PATH" '${wC}'`;switch(n){case"interactive_login":return["-l","-i","-c",t];case"interactive":return["-i","-c",t];case"login":return["-l","-c",t]}}function nge(e,n){let t=Ghe(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??Qhe(),fileExists:e?.fileExists??Zhe,runLoginShell:e?.runLoginShell}}function tge(e){if(e===void 0)return;let n=e.lastIndexOf(px),t=e.lastIndexOf(wC);if(n===-1||t===-1||t<=n)return;let r=e.slice(n+px.length,t).trim();return r===""?void 0:r}function rge(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&&FN)return jN;let r=n.env.SHELL?.trim(),o=n.runLoginShell??nge,i=[];if(r!==void 0&&r!=="")for(let a of["interactive_login","interactive","login"]){let d=o(r,ege(r,a)),u=tge(d.stdout);if(u!==void 0)for(let c of u.split(":"))c!==""&&i.push(c)}let s=i.length===0?void 0:SC(i).join(":");return t&&(jN=s,FN=!0),s}function oge(e){let n=$f(e);if(n.platform==="win32")return[];let t=n.homeDir,r=qN.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 SC([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 zN(e,n){return e===void 0?[]:e.split(vC(n).delimiter).filter(t=>t!=="")}function SC(e){return Array.from(new Set(e))}function NN(e){let n=$f(e);return SC([...zN(n.env.PATH,n.platform),...zN(rge(e),n.platform),...oge(e)])}function fx(e){let n=e===void 0;if(n&&process.env.VITEST!==void 0)return process.env.PATH??"";if(n&&bC!==void 0)return bC;let t=$f(e),r=NN(e).join(vC(t.platform).delimiter);return r!==""&&(t.env.PATH=r),n&&(bC=r),r}function mx(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=vC(t.platform).join;for(let i of NN(n))for(let s of r){let a=o(i,s);if(t.fileExists(a))return a}}function UN(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 px,wC,jN,FN,bC,kC=F(()=>{"use strict";px="__LINZUMI_LOGIN_PATH_BEGIN__",wC="__LINZUMI_LOGIN_PATH_END__";FN=!1});import{closeSync as ige,openSync as sge,readSync as age,statSync as dge}from"node:fs";function xd(e){return typeof e!="string"||e===""?e:uge.reduce((n,t)=>t.source.startsWith("\\beyJ")?n.replace(t,"<redacted>"):n.replace(t,"$1<redacted>"),e)}function BN(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 hge(e,n){let t;try{let{size:r}=dge(e),o=r>n?r-n:0,i=r-o;if(i<=0)return"";let s=Buffer.allocUnsafe(i);t=sge(e,"r");let a=age(t,s,0,i,o);return s.subarray(0,a).toString("utf8")}catch{return""}finally{if(t!==void 0)try{ige(t)}catch{}}}function JN(e){let n=e.now??Date.now,t=e.setIntervalImpl??setInterval,r=e.clearIntervalImpl??clearInterval,o=e.readTail??hge,i=Math.max(lge,e.intervalMs??cge),s=Math.max(1,e.maxTailBytes??pge),a=Math.max(1,e.maxLifecycleEvents??fge),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 w=v.length>s?v.slice(v.length-s):v;return xd(w)}catch{return}},m=()=>{let v=xd(o(e.runnerLogFile,s)),w=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,...w===void 0?{}:{backend_stderr:w}};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??mge),y=(v,w)=>{let k=v.diagnostics!==null&&typeof v.diagnostics=="object"&&!Array.isArray(v.diagnostics)?{...v.diagnostics}:{},R=BN(k.runner_log_tail,f),P=BN(k.backend_stderr,f);return R!==void 0&&(k.runner_log_tail=R),P!==void 0&&(k.backend_stderr=P),k.spool_reason=w instanceof Error?w.message:String(w),{...v,diagnostics:k}},x=async()=>{let v=d.length,w=m();try{await Promise.resolve(e.upload(w)),d.splice(0,v)}catch(k){let R=!1;if(e.spool!==void 0&&v>0)try{R=e.spool.append(y(w,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{}}},b=()=>{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 b(),{recordLifecycle:l,flushNow:x,stop:S}}var uge,cge,lge,pge,fge,mge,hx=F(()=>{"use strict";uge=[/(--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];cge=45e3,lge=5e3,pge=64*1024,fge=200,mge=16*1024});import gge from"blessed";function yge(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 VN(e=gge){let t=e.Tput?.prototype,r=t?._compile;if(t===void 0||typeof r!="function"||t[KN]===!0)return;let o=function(s,a,d){let u=typeof d=="string"?yge(d):d;return r.call(this,s,a,u)};t._compile=o,Object.defineProperty(t,KN,{value:!0,enumerable:!1,configurable:!0,writable:!0})}var KN,WN=F(()=>{"use strict";KN="__linzumiSetulcShimInstalled"});function HN(e){return e===void 0?!1:(e.unicode=!0,e.features!==void 0&&(e.features.unicode=!0),e.brokenACS=!0,!0)}function GN(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}HN(n),t!==void 0&&t!==n&&HN(t)}var ZN=F(()=>{"use strict"});var QN,xge,Of,_ge,XN,YN=F(()=>{"use strict";QN=Symbol.for("linzumi.blessedPartialScreenCrashGuard"),xge=e=>{console.warn(e)},Of=(e,n)=>{n===void 0||process.removeListener(e,n)},_ge=(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},XN=(e,n={})=>{let t=e.prototype;switch(t[QN]){case!0:return;case void 0:break}let r=t.destroy;t[QN]=!0,t.destroy=function(){switch(this.program){case null:case void 0:(n.warn??xge)({event:"runner.tui_partial_screen_teardown",branch:"screen_destroy_missing_program",program_present:!1,action:"cleanup_partial_screen_registration"}),_ge(e,this);break;default:r.call(this);break}}}});function e4(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 bge(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 wge(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}bge(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 n4(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:wge(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 t4=F(()=>{"use strict";Zu()});var jt,CC,Xs=F(()=>{"use strict";jt="1.0.
|
|
670
|
+
`)}},f=Math.max(256,e.spoolTailBytes??mge),y=(v,w)=>{let k=v.diagnostics!==null&&typeof v.diagnostics=="object"&&!Array.isArray(v.diagnostics)?{...v.diagnostics}:{},R=BN(k.runner_log_tail,f),P=BN(k.backend_stderr,f);return R!==void 0&&(k.runner_log_tail=R),P!==void 0&&(k.backend_stderr=P),k.spool_reason=w instanceof Error?w.message:String(w),{...v,diagnostics:k}},x=async()=>{let v=d.length,w=m();try{await Promise.resolve(e.upload(w)),d.splice(0,v)}catch(k){let R=!1;if(e.spool!==void 0&&v>0)try{R=e.spool.append(y(w,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{}}},b=()=>{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 b(),{recordLifecycle:l,flushNow:x,stop:S}}var uge,cge,lge,pge,fge,mge,hx=F(()=>{"use strict";uge=[/(--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];cge=45e3,lge=5e3,pge=64*1024,fge=200,mge=16*1024});import gge from"blessed";function yge(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 VN(e=gge){let t=e.Tput?.prototype,r=t?._compile;if(t===void 0||typeof r!="function"||t[KN]===!0)return;let o=function(s,a,d){let u=typeof d=="string"?yge(d):d;return r.call(this,s,a,u)};t._compile=o,Object.defineProperty(t,KN,{value:!0,enumerable:!1,configurable:!0,writable:!0})}var KN,WN=F(()=>{"use strict";KN="__linzumiSetulcShimInstalled"});function HN(e){return e===void 0?!1:(e.unicode=!0,e.features!==void 0&&(e.features.unicode=!0),e.brokenACS=!0,!0)}function GN(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}HN(n),t!==void 0&&t!==n&&HN(t)}var ZN=F(()=>{"use strict"});var QN,xge,Of,_ge,XN,YN=F(()=>{"use strict";QN=Symbol.for("linzumi.blessedPartialScreenCrashGuard"),xge=e=>{console.warn(e)},Of=(e,n)=>{n===void 0||process.removeListener(e,n)},_ge=(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},XN=(e,n={})=>{let t=e.prototype;switch(t[QN]){case!0:return;case void 0:break}let r=t.destroy;t[QN]=!0,t.destroy=function(){switch(this.program){case null:case void 0:(n.warn??xge)({event:"runner.tui_partial_screen_teardown",branch:"screen_destroy_missing_program",program_present:!1,action:"cleanup_partial_screen_registration"}),_ge(e,this);break;default:r.call(this);break}}}});function e4(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 bge(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 wge(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}bge(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 n4(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:wge(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 t4=F(()=>{"use strict";Zu()});var jt,CC,Xs=F(()=>{"use strict";jt="1.0.139",CC=`linzumi ${jt}`});import ea from"blessed";function l4(e){return e.includes(yx)?e.replace(Rge,"").replace(Ege,"").includes(yx):!1}function Dge(e){return typeof e=="object"&&e!==null&&e.name==="escape"}function TC(e){return e.mode.type==="table"?!1:(e.mode={type:"table"},!0)}function $ge(e){return Mge.test(e)}function p4(e){if(!e.includes(yx))return[];let n=[];for(let t of e.matchAll(Age))n.push(t[1]==="A"?"up":"down");return n}function Oge(e){return $ge(e)?p4(e):[]}function bx(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 qge(){bx({trigger:"crash"},{log:Rg})}function f4(e,n={log:Rg}){if(vt.degradedToHeadless)return;vt.degradedToHeadless=!0;let t=bx({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 wx(e,n){if(m4()){let r=xye(jf);if(Nge(jf,e,n,Date.now()),r!==void 0){r.render(Date.now());return}hye(jf),gye(jf);let o=jC(jf,Date.now());if(o!==void 0){LC(o);return}}let t=v4(e,n);if(t!==void 0)try{process.stdout.write(`${t}
|
|
672
672
|
`)}catch(r){if(nd(r)===void 0)throw r}}function m4(){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 vx(){return m4()}function Nge(e,n,t,r){let o=Bv(n);e.lastUpdateAtMs=r;let i=c4(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<=Sge)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=gx(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?Kge(p?.metadata,d):d;e.discovery.set(l,{key:l,phase:s,status:c?Vge(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=zye(t.threads)??[];for(let a of s){let d=gx(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:NC(e),agentProvider:void 0,linzumiThreadId:u,linzumiThreadTitle:xe(d?.title),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=qye(t.truncated)??e.rosterTruncated;break}case"kandan.message_queued":case"codex.turn_starting":{let s=$C(e,t,r);s.linzumiThreadId=xe(Mt(t,"linzumi_thread_id"))??s.linzumiThreadId,s.linzumiThreadTitle=P4(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=Mye(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=s4(e.rateLimit,a)),d!==void 0&&(e.creditExhaustion=d);let u=xe(t.method),c=gx(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?c4(e):Rye(e,`codex:${p}`,r);m!==void 0&&(m.codexThreadId=p??m.codexThreadId,m.tokenUsage=s??m.tokenUsage,m.creditExhaustion=d??m.creditExhaustion,m.latestCodexEventId=k4(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=$C(e,t,r);s.latestCodexEventId=xe(t.item_key)??s.latestCodexEventId,s.eventType=Dye(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=s4(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}dye(e,o,t,i)}function jC(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?Uge(e,n):Hge(e,t,n);case"raw_all":return IC(e,"Raw Stream",void 0,"esc/q: table",e.rawLines,n,"No raw events yet.");case"raw_job":{let r=e.mode.jobKey,o=e.jobs.get(r),i=`Raw Stream: ${UC(o?.linzumiThreadId)} / ${BC(o?.codexThreadId,o?.agentProvider)}`;return IC(e,i,o?.tokenUsage,"esc/q: table",e.rawLines.filter(s=>s.jobKey===r),n,"No raw events yet.")}case"audit_log":return IC(e,"Commander Audit Log",void 0,"esc/q: table",x4(e).map(r=>({jobKey:void 0,line:r})),n,"No audit events yet.")}}function Uge(e,n){let t=Array.from(e.discovery.values()).sort((s,a)=>xx(s.phase).localeCompare(xx(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=>[Sx(s.phase).padEnd(14),kx(s.status).padEnd(10),`${String(s.placesSearched)} places`.padEnd(10),FC(s)].join(" "));return[qC(),"","Linzumi setup","New computer connected","",`Continue in the browser: ${e.browserUrl??"open the Linzumi setup page"}`,"",Bge(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 xx(e){switch(e){case"projects":return"1-projects";case"conversations":return"2-conversations";default:return`3-${e}`}}function Sx(e){switch(e){case"projects":return"Projects";case"conversations":return"Conversations";default:return"Discovery"}}function kx(e){switch(e){case"starting":return"starting";case"running":return"searching";case"completed":return"done";case"failed":return"failed";default:return e}}function Bge(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 FC(e){if(e.lastError!==void 0)return e.lastError;let n=zC(e);if(n!==void 0)return n;let t=Wge(e.currentSource);return e.currentPlace!==void 0?t===void 0?e.currentPlace:`${t}: ${e.currentPlace}`:e.message??h4(e.phase)}function zC(e){if(e.phase!=="conversations"||!EC(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"} [${Jge(t,n)}] ${t} / ${n} Codex/Claude Code conversations`}function EC(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 Jge(e,n){let r=Math.min(10,Math.max(0,Math.floor(e/n*10)));return`${"#".repeat(r)}${"-".repeat(10-r)}`}function Kge(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 Vge(e,n,t){return e?.status==="running"&&EC(e.metadata)&&!EC(t)?e.status:n}function Wge(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 h4(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 Hge(e,n,t){let r=_4(e,n,t);return[qC(),"","Linzumi Commander","",`Jobs: ${n.length}${e.rosterTruncated?" (first 200 of this node's roster)":""} Last update: ${Ai(e.lastUpdateAtMs,t)}${Ac(e)}`,...g4(e.creditExhaustion),`Overall Token Usage: ${e.tokenUsage??"?"}`,`Account rate limits: ${e.rateLimit??"?"}`,"Controls: up/down select | enter raw job | r raw stream | a audit log | esc table",...DC(e),"",Aye(r.rows),""].join(`
|
package/package.json
CHANGED