@linzumi/cli 1.0.3 → 1.0.4
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/index.js +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -273,7 +273,7 @@ ${n}
|
|
|
273
273
|
`,"utf8")}catch{return}}function R9(){let e=process.env.LINZUMI_CLI_AUDIT_LOG?.trim();return e===void 0||e===""?Nk(qk(),".linzumi","logs","command-events.jsonl"):e}function ig(){return Nk(qk(),".linzumi","logs","linzumi-runner.log")}function dg(e){return Kk(e)}function ug(e,n){return M9(n)?Ha:typeof e=="string"?Jk(e):Array.isArray(e)?n==="args"?A9(e):e.map(t=>ug(t,void 0)):e!==null&&typeof e=="object"?Kk(e):e}function Kk(e){let n=typeof e.name=="string"?e.name.toLowerCase():void 0,t=n==="authorization"||n==="cookie"||n==="set-cookie";return Object.fromEntries(Object.entries(e).filter(([r])=>r!=="runner_console").map(([r,o])=>[r,t&&r==="value"?Ha:ug(o,r)]))}function D9(e,n){let t=E9(n.runner_console);return t===void 0?e:{...e,...dg(t)}}function E9(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function A9(e){let n=!1;return e.map(t=>{if(typeof t!="string")return n=!1,ug(t,void 0);if(n)return n=!1,Ha;let[r,o]=O9(t);return I9.has(r)?o===void 0?(n=!0,t):`${r}=${Ha}`:Jk(t)})}function O9(e){let n=e.indexOf("=");return n===-1?[e,void 0]:[e.slice(0,n),e.slice(n+1)]}function M9(e){return e===void 0?!1:/^(authorization|cookie|set-cookie|password)$/i.test(e)||/(^|[_-])(access[_-]?token|api[_-]?key|auth[_-]?token|oauth[_-]?code|refresh[_-]?token|secret|token)$/i.test(e)}function Jk(e){return L9(e).replace(/\beyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,Ha)}function L9(e){let n;try{n=new URL(e)}catch{return F9(e)}for(let t of[...n.searchParams.keys()])zk.has(t.toLowerCase())&&n.searchParams.set(t,Ha);return n.toString()}function F9(e){let n=e.indexOf("?"),t=e.indexOf("#");if(n===-1||t!==-1&&t<n)return e;let r=e.slice(0,n),o=t===-1?e.slice(n+1):e.slice(n+1,t),a=t===-1?"":e.slice(t),s=new URLSearchParams(o),i=!1;for(let d of[...s.keys()])zk.has(d.toLowerCase())&&(s.set(d,Ha),i=!0);switch(i){case!0:return`${r}?${s.toString()}${a}`;case!1:return e}}function j9(e){return e.closed||e.destroyed?Promise.resolve():new Promise((n,t)=>{e.once("error",t),e.end(n)})}var Ha,zk,I9,Ar=Q(()=>{"use strict";Ha="<SENSITIVE_DATA>",zk=new Set(["access_token","authorization","code","cookie","kandan_preview_ticket","refresh_token","token"]),I9=new Set(["--access-token","--api-key","--authorization","--cookie","--oauth-code","--password","--refresh-token","--secret","--token"])});function Al(e,n=process.kill){return Ga.children.add(e),$9(),{unregister:()=>{Ga.children.delete(e)}}}function cg(e=process.kill,n="exit"){let t=[...Ga.children];Ga.children.clear();for(let r of t)q9(r,e,n)}function q9(e,n,t){try{e.stop()}catch(r){lg(e,t,"stop",r)}if(e.pid!==void 0){if(e.ownProcessGroup)try{n(-e.pid,Vk);return}catch(r){if(fg(r)==="ESRCH")return;lg(e,t,"group_kill",r)}try{n(e.pid,Vk)}catch(r){if(fg(r)==="ESRCH")return;lg(e,t,"pid_kill",r)}}}function $9(){if(Ga.handlersInstalled)return;Ga.handlersInstalled=!0;let e=()=>{cg(process.kill,"process_exit")};process.on("exit",e);let n=process.listenerCount("uncaughtException")===0,t=process.listenerCount("unhandledRejection")===0,r=a=>{cg(process.kill,"uncaught_exception"),process.stderr.write(`linzumi runner uncaughtException: ${a instanceof Error?a.stack??a.message:String(a)}
|
|
274
274
|
`),process.exit(1)},o=a=>{cg(process.kill,"unhandled_rejection"),process.stderr.write(`linzumi runner unhandledRejection: ${a instanceof Error?a.stack??a.message:String(a)}
|
|
275
275
|
`),process.exit(1)};n&&process.on("uncaughtException",r),t&&process.on("unhandledRejection",o),Ga.removeHandlers=()=>{process.off("exit",e),n&&process.off("uncaughtException",r),t&&process.off("unhandledRejection",o)}}function lg(e,n,t,r){Pe("process.reap_failed",{purpose:e.kind,pid:e.pid??null,ownProcessGroup:e.ownProcessGroup,reason:n,stage:t,code:fg(r)??null,message:r instanceof Error?r.message:String(r)})}function fg(e){if(e!==null&&typeof e=="object"&&"code"in e){let n=e.code;return typeof n=="string"?n:void 0}}var Ga,Vk,pg=Q(()=>{"use strict";Ar();Ga={children:new Set,handlersInstalled:!1,removeHandlers:void 0},Vk="SIGKILL"});import{mkdirSync as N9,rmSync as Wk,writeFileSync as U9,promises as Hk}from"node:fs";import{join as z9}from"node:path";import{StringDecoder as B9}from"node:string_decoder";function K9(e){return`'${e.replaceAll("'","'\\''")}'`}function J9(e,n){return`__lz_live_out=${K9(n)}; if ! : >> "$__lz_live_out" 2>/dev/null; then __lz_live_out=/dev/null; fi; { ${e}${Ol}`}function V9(e){return Gk.test(e)&&e.endsWith(Ol)}function Zk(e){let n=e.match(Gk)?.[0];return n===void 0||!e.endsWith(Ol)?e:e.slice(n.length,e.length-Ol.length)}function Qk(e){let n=e.LINZUMI_CLAUDE_LIVE_BASH?.trim().toLowerCase();return!(n==="0"||n==="false"||n==="off"||n==="no")}function Xk(e){let n=e.pollIntervalMs??W9,t=e.maxEmittedBytesPerTool??H9,r=new Map,o=!1,a=c=>{let f=r.get(c);if(f!==void 0){r.delete(c),f.timer!==void 0&&(clearInterval(f.timer),f.timer=void 0);try{Wk(f.file,{force:!0})}catch{}}},s=async(c,f)=>{if(!f.reading){f.reading=!0;try{let p=await Hk.stat(f.file);if(p.size<=f.offset)return;let l=Math.min(p.size-f.offset,G9,t-f.emittedBytes);if(l<=0){a(c);return}let h=await Hk.open(f.file,"r");try{let v=Buffer.alloc(l),{bytesRead:x}=await h.read(v,0,l,f.offset);if(x<=0)return;f.offset+=x,f.emittedBytes+=x;let S=f.decoder.write(v.subarray(0,x));S!==""&&r.get(c)===f&&e.onOutputDelta(c,S),f.emittedBytes>=t&&(e.log?.("claude_live_bash.output_budget_exhausted",{tool_use_id:c,emitted_bytes:f.emittedBytes}),a(c))}finally{await h.close()}}catch(p){r.get(c)===f&&(e.log?.("claude_live_bash.tail_read_failed",{tool_use_id:c,message:p instanceof Error?p.message:String(p)}),a(c))}finally{f.reading=!1}}},i=(c,f)=>{a(c);let p={file:f,decoder:new B9("utf8"),offset:0,emittedBytes:0,reading:!1,timer:void 0};r.set(c,p);let l=setInterval(()=>{s(c,p)},n);l.unref?.(),p.timer=l},d=(c,f)=>{if(o)return;let p=f.command;if(typeof p!="string"||p.trim()===""||f.run_in_background===!0||V9(p))return;let l=z9(e.captureDir,`${c.replaceAll(/[^\w-]/g,"_")}.out`);try{N9(e.captureDir,{recursive:!0}),U9(l,"")}catch(h){e.log?.("claude_live_bash.capture_file_failed",{tool_use_id:c,message:h instanceof Error?h.message:String(h)});return}return i(c,l),{...f,command:J9(p,l)}};return{hookMatchers:[{matcher:"Bash",hooks:[async c=>{let f={continue:!0};if(typeof c!="object"||c===null)return f;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 f;let l=d(p.tool_use_id,p.tool_input);return l===void 0?f:{continue:!0,hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:l}}}]}],wrapApprovedTool:d,settleTool:a,settleAll:()=>{for(let c of[...r.keys()])a(c)},close:()=>{o=!0;for(let c of[...r.keys()])a(c);try{Wk(e.captureDir,{recursive:!0,force:!0})}catch{}}}}var Gk,Ol,W9,H9,G9,mg=Q(()=>{"use strict";Gk=/^__lz_live_out='(?:[^']|'\\'')*'; if ! : >> "\$__lz_live_out" 2>\/dev\/null; then __lz_live_out=\/dev\/null; fi; \{ /,Ol=`
|
|
276
|
-
} > >(tee -a -- "$__lz_live_out") 2> >(tee -a -- "$__lz_live_out" >&2)`;W9=200,H9=262144,G9=65536});function Yk(e){if(!(e.thresholdMs>0))throw new Error("Claude turn-stall threshold must be > 0");let n=e.now??(()=>Date.now()),t=e.setTimer??((l,h)=>{let v=setTimeout(l,h);return v.unref?.(),v}),r=e.clearTimer??(l=>clearTimeout(l)),o=e.isTurnActive??(()=>!0),a,s=n(),i=!1,d=!1,u=o(),c=()=>{a!==void 0&&(r(a),a=void 0)},f=()=>{if(a=void 0,i||d)return;if(!o()){u=!1,p();return}if(!u){u=!0,s=n(),p();return}let h=n()-s;if(h<e.thresholdMs){p();return}d=!0,e.onStall({silentMs:h})};function p(){if(i||d)return;c();let l=o()?Math.max(0,e.thresholdMs-(n()-s)):e.thresholdMs;a=t(f,l)}return p(),{kick:()=>{i||d||(u=!0,s=n(),p())},stop:()=>{i=!0,c()}}}var hg=Q(()=>{"use strict"});import{existsSync as Z9,readFileSync as Q9}from"node:fs";import{homedir as X9}from"node:os";import{join as Or}from"node:path";function aC(){return["user","project","local"]}function sC(e){let n=e.cacheReadInputTokens===void 0&&e.cacheCreationInputTokens===void 0?void 0:(e.cacheReadInputTokens??0)+(e.cacheCreationInputTokens??0),t=[e.inputTokens===void 0?void 0:`${e.inputTokens} in`,e.outputTokens===void 0?void 0:`${e.outputTokens} out`,n===void 0?void 0:`${n} cached`,e.totalCostUsd===void 0?void 0:`$${e.totalCostUsd.toFixed(4)}`].filter(r=>r!==void 0);return t.length===0?void 0:t.join(" / ")}function Y9(){let e={inputTokens:0,outputTokens:0,cacheCreationInputTokens:0,cacheReadInputTokens:0},n,t,r=(a,s)=>({inputTokens:de(a.input_tokens)??s?.inputTokens??0,outputTokens:de(a.output_tokens)??s?.outputTokens??0,cacheCreationInputTokens:de(a.cache_creation_input_tokens)??s?.cacheCreationInputTokens??0,cacheReadInputTokens:de(a.cache_read_input_tokens)??s?.cacheReadInputTokens??0}),o=()=>{let a=e.inputTokens+(n?.inputTokens??0),s=e.outputTokens+(n?.outputTokens??0),i=e.cacheCreationInputTokens+(n?.cacheCreationInputTokens??0),d=e.cacheReadInputTokens+(n?.cacheReadInputTokens??0),u=`${a}:${s}:${i}:${d}`;if(u!==t)return t=u,{inputTokens:a,outputTokens:s,cacheCreationInputTokens:i,cacheReadInputTokens:d,totalCostUsd:void 0}};return{observeStreamEvent:a=>{switch(m(a?.type)){case"message_start":{let s=N(N(a?.message)?.usage);return s===void 0?void 0:(n!==void 0&&(e.inputTokens+=n.inputTokens,e.outputTokens+=n.outputTokens,e.cacheCreationInputTokens+=n.cacheCreationInputTokens,e.cacheReadInputTokens+=n.cacheReadInputTokens),n=r(s,void 0),o())}case"message_delta":{let s=N(a?.usage);return s===void 0?void 0:(n=r(s,n),o())}default:return}}}}function e7(e){if(e===void 0)return;let n=m(e.status),t=m(e.rateLimitType)??m(e.rate_limit_type),r=n7(Ml(e.utilization)),o=t7(Ml(e.resetsAt)??Ml(e.resets_at));if(!(n===void 0&&r===void 0&&o===void 0))return{status:n,rateLimitType:t,utilizationPercent:r,resetsAtMs:o}}function n7(e){if(e===void 0||e<0)return;let n=e<=1?e*100:e;return Math.min(100,Math.round(n))}function t7(e){if(!(e===void 0||e<=0))return e>1e12?Math.round(e):Math.round(e*1e3)}function o7(e){if(e!==void 0)return r7[e]??e}function a7(e,n){if(e===void 0)return;let t=Math.max(0,Math.ceil((e-n)/6e4));if(t===0)return"resets now";if(t<60)return`resets in ${t}m`;let r=Math.floor(t/60),o=t%60;return o===0?`resets in ${r}h`:`resets in ${r}h ${o}m`}function yg(e,n){let t=e.utilizationPercent===void 0?e.status==="rejected"?"limit reached":e.status==="allowed_warning"?"approaching limit":"status update":`${e.utilizationPercent}% used${e.status==="rejected"?" (limit reached)":e.status==="allowed_warning"?" (approaching limit)":""}`,r=o7(e.rateLimitType),o=a7(e.resetsAtMs,n);return[r===void 0?t:`${t} (${r})`,o].filter(a=>a!==void 0).join(" - ")}async function Fl(e){
|
|
276
|
+
} > >(tee -a -- "$__lz_live_out") 2> >(tee -a -- "$__lz_live_out" >&2)`;W9=200,H9=262144,G9=65536});function Yk(e){if(!(e.thresholdMs>0))throw new Error("Claude turn-stall threshold must be > 0");let n=e.now??(()=>Date.now()),t=e.setTimer??((l,h)=>{let v=setTimeout(l,h);return v.unref?.(),v}),r=e.clearTimer??(l=>clearTimeout(l)),o=e.isTurnActive??(()=>!0),a,s=n(),i=!1,d=!1,u=o(),c=()=>{a!==void 0&&(r(a),a=void 0)},f=()=>{if(a=void 0,i||d)return;if(!o()){u=!1,p();return}if(!u){u=!0,s=n(),p();return}let h=n()-s;if(h<e.thresholdMs){p();return}d=!0,e.onStall({silentMs:h})};function p(){if(i||d)return;c();let l=o()?Math.max(0,e.thresholdMs-(n()-s)):e.thresholdMs;a=t(f,l)}return p(),{kick:()=>{i||d||(u=!0,s=n(),p())},stop:()=>{i=!0,c()}}}var hg=Q(()=>{"use strict"});import{existsSync as Z9,readFileSync as Q9}from"node:fs";import{homedir as X9}from"node:os";import{join as Or}from"node:path";function aC(){return["user","project","local"]}function sC(e){let n=e.cacheReadInputTokens===void 0&&e.cacheCreationInputTokens===void 0?void 0:(e.cacheReadInputTokens??0)+(e.cacheCreationInputTokens??0),t=[e.inputTokens===void 0?void 0:`${e.inputTokens} in`,e.outputTokens===void 0?void 0:`${e.outputTokens} out`,n===void 0?void 0:`${n} cached`,e.totalCostUsd===void 0?void 0:`$${e.totalCostUsd.toFixed(4)}`].filter(r=>r!==void 0);return t.length===0?void 0:t.join(" / ")}function Y9(){let e={inputTokens:0,outputTokens:0,cacheCreationInputTokens:0,cacheReadInputTokens:0},n,t,r=(a,s)=>({inputTokens:de(a.input_tokens)??s?.inputTokens??0,outputTokens:de(a.output_tokens)??s?.outputTokens??0,cacheCreationInputTokens:de(a.cache_creation_input_tokens)??s?.cacheCreationInputTokens??0,cacheReadInputTokens:de(a.cache_read_input_tokens)??s?.cacheReadInputTokens??0}),o=()=>{let a=e.inputTokens+(n?.inputTokens??0),s=e.outputTokens+(n?.outputTokens??0),i=e.cacheCreationInputTokens+(n?.cacheCreationInputTokens??0),d=e.cacheReadInputTokens+(n?.cacheReadInputTokens??0),u=`${a}:${s}:${i}:${d}`;if(u!==t)return t=u,{inputTokens:a,outputTokens:s,cacheCreationInputTokens:i,cacheReadInputTokens:d,totalCostUsd:void 0}};return{observeStreamEvent:a=>{switch(m(a?.type)){case"message_start":{let s=N(N(a?.message)?.usage);return s===void 0?void 0:(n!==void 0&&(e.inputTokens+=n.inputTokens,e.outputTokens+=n.outputTokens,e.cacheCreationInputTokens+=n.cacheCreationInputTokens,e.cacheReadInputTokens+=n.cacheReadInputTokens),n=r(s,void 0),o())}case"message_delta":{let s=N(a?.usage);return s===void 0?void 0:(n=r(s,n),o())}default:return}}}}function e7(e){if(e===void 0)return;let n=m(e.status),t=m(e.rateLimitType)??m(e.rate_limit_type),r=n7(Ml(e.utilization)),o=t7(Ml(e.resetsAt)??Ml(e.resets_at));if(!(n===void 0&&r===void 0&&o===void 0))return{status:n,rateLimitType:t,utilizationPercent:r,resetsAtMs:o}}function n7(e){if(e===void 0||e<0)return;let n=e<=1?e*100:e;return Math.min(100,Math.round(n))}function t7(e){if(!(e===void 0||e<=0))return e>1e12?Math.round(e):Math.round(e*1e3)}function o7(e){if(e!==void 0)return r7[e]??e}function a7(e,n){if(e===void 0)return;let t=Math.max(0,Math.ceil((e-n)/6e4));if(t===0)return"resets now";if(t<60)return`resets in ${t}m`;let r=Math.floor(t/60),o=t%60;return o===0?`resets in ${r}h`:`resets in ${r}h ${o}m`}function yg(e,n){let t=e.utilizationPercent===void 0?e.status==="rejected"?"limit reached":e.status==="allowed_warning"?"approaching limit":"status update":`${e.utilizationPercent}% used${e.status==="rejected"?" (limit reached)":e.status==="allowed_warning"?" (approaching limit)":""}`,r=o7(e.rateLimitType),o=a7(e.resetsAtMs,n);return[r===void 0?t:`${t} (${r})`,o].filter(a=>a!==void 0).join(" - ")}async function Fl(e){try{return s7(process.env,{cwd:e.cwd,homeDir:X9(),platform:process.platform,fileExists:Z9,readTextFile:m7})?((await(await import("@anthropic-ai/claude-agent-sdk")).startup({options:{cwd:e.cwd,persistSession:!1,settingSources:aC(),tools:[]},initializeTimeoutMs:15e3})).close(),!0):!1}catch(n){return console.error(`claude code availability probe failed: ${n instanceof Error?n.message:String(n)}`),!1}}function s7(e,n){let t=e.CLAUDE_CONFIG_DIR??Or(n.homeDir,".claude");return d7(e)||u7(e)||c7(t,n)||l7(t,n)||p7(n)}function i7(){return{PreToolUse:[{hooks:[async()=>({continue:!0,hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"defer",permissionDecisionReason:"Linzumi handles Claude Code tool policy through the shared approval bridge."}})]}]}}function gg(e){return e!==void 0&&e.trim()!==""}function Su(e){let n=e?.trim().toLowerCase();return n==="1"||n==="true"||n==="yes"||n==="on"}function d7(e){return gg(e.ANTHROPIC_API_KEY)||gg(e.ANTHROPIC_AUTH_TOKEN)||gg(e.CLAUDE_CODE_OAUTH_TOKEN)}function u7(e){return Su(e.CLAUDE_CODE_USE_BEDROCK)||Su(e.CLAUDE_CODE_USE_VERTEX)||Su(e.CLAUDE_CODE_USE_FOUNDRY)||Su(e.CLAUDE_CODE_USE_ANTHROPIC_AWS)||Su(e.CLAUDE_CODE_USE_MANTLE)}function c7(e,n){return n.fileExists(Or(e,".credentials.json"))||n.fileExists(Or(e,".claude.json"))||n.fileExists(Or(n.homeDir,".claude.json"))}function l7(e,n){return[Or(e,"settings.json"),Or(e,"settings.local.json"),Or(n.cwd,".claude","settings.json"),Or(n.cwd,".claude","settings.local.json")].some(t=>f7(t,n))}function f7(e,n){let t=n.readTextFile(e);if(t===void 0)return!1;try{let r=N(JSON.parse(t));return It(m(r?.apiKeyHelper))!==void 0}catch{return!1}}function p7(e){return e.platform!=="darwin"?!1:[Or(e.homeDir,"Library","Application Support","claude-cli-nodejs"),Or(e.homeDir,"Library","Application Support","Claude"),Or(e.homeDir,"Library","Preferences","claude-cli-nodejs")].some(n=>e.fileExists(n))}function m7(e){try{return Q9(e,"utf8")}catch{return}}async function iC(e){let n=e.runner??v7,t={sessionId:void 0,resultText:void 0,assistantTextOrder:[],assistantTextByKey:new Map,usage:void 0,startedSessionIds:new Set,completedTurnCount:0,lastCompletedTurnBody:void 0},r=Y9(),o,a,s=new Promise(d=>{a=d}),i=e.turnStallThresholdMs!==void 0&&e.turnStallThresholdMs>0?Yk({thresholdMs:e.turnStallThresholdMs,isTurnActive:e.turnStallIsActive,onStall:({silentMs:d})=>{o=`Claude Code turn stalled: no SDK output for ${Math.round(d/1e3)}s (threshold ${Math.round((e.turnStallThresholdMs??0)/1e3)}s)`,e.abortController?.abort(),a?.()}}):void 0;try{let d=n(e)[Symbol.asyncIterator]();for(;;){let u;if(i){let h=d.next().then(x=>({kind:"next",result:x}));h.catch(()=>{});let v=await Promise.race([h,s.then(()=>({kind:"stall"}))]);if(v.kind==="stall"){Promise.resolve(d.return?.()).catch(()=>{});break}u=v}else u={kind:"next",result:await d.next()};let c=u;if(c.result.done===!0)break;let f=c.result.value;i?.kick(),t.sessionId=t.sessionId??tC(f);let p=tC(f)??t.sessionId;p!==void 0&&!t.startedSessionIds.has(p)&&(t.startedSessionIds.add(p),await e.onTranscriptEvent?.({type:"session_started",sessionId:p}));for(let h of T7(f,p,r))h.type==="assistant_message"&&y7(t,h),h.type==="usage"&&(t.usage=h.usage),await e.onTranscriptEvent?.(h);let l=C7(f);switch(l.type){case"success":{l.text!==void 0&&(t.resultText=l.text),t.usage=fC(f)??t.usage,t.completedTurnCount+=1,e.streamingInput!==void 0&&(await h7(e,t),t.lastCompletedTurnBody=t.resultText??It(xg(t))??"",await e.onTurnCompleted?.(),eC(t),t.resultText=void 0);break}case"interrupted":{t.completedTurnCount+=1,t.sessionId!==void 0&&await e.onTranscriptEvent?.({type:"turn_interrupted",sessionId:t.sessionId}),e.streamingInput!==void 0&&(await e.onTurnCompleted?.(),eC(t),t.resultText=void 0);break}case"error":return await Ll(e,t.sessionId,`Claude Code failed: ${l.reason}`);case"none":break}}}finally{i?.stop(),e.streamingInput?.close()}return o!==void 0?await Ll(e,t.sessionId,o):g7(e,t)}async function h7(e,n){let t=It(xg(n)),r=n.resultText??t??"",o=n.resultText!==void 0?"result":t!==void 0?"assistant_aggregate":"empty";n.sessionId!==void 0&&await e.onTranscriptEvent?.({type:"turn_completed",sessionId:n.sessionId,body:r,bodySource:o,usage:n.usage})}async function g7(e,n){let t=It(xg(n)),r=n.resultText!==void 0?{body:n.resultText,bodySource:"result"}:t!==void 0?{body:t,bodySource:"assistant_aggregate"}:n.lastCompletedTurnBody!==void 0?{body:n.lastCompletedTurnBody,bodySource:"last_completed_turn"}:void 0;if(r===void 0)return await Ll(e,n.sessionId,"Claude Code completed without a text response");if(n.sessionId===void 0)return await Ll(e,void 0,"Claude Code completed without a session id");let o={sessionId:n.sessionId,body:r.body,usage:n.usage};return await e.onTranscriptEvent?.({type:"session_completed",sessionId:o.sessionId,body:o.body,bodySource:r.bodySource,usage:o.usage}),o}function y7(e,n){let t=x7(n.itemKey);e.assistantTextByKey.has(t)||e.assistantTextOrder.push(t),e.assistantTextByKey.set(t,n.content)}function eC(e){e.assistantTextOrder.splice(0,e.assistantTextOrder.length),e.assistantTextByKey.clear()}function xg(e){return e.assistantTextOrder.flatMap(n=>{let t=e.assistantTextByKey.get(n);return t===void 0?[]:[t]}).join(`
|
|
277
277
|
|
|
278
278
|
`)}function x7(e){let n=e.match(/^assistant-stream-(\d+)$/)?.[1];return n!==void 0?`content-block-${n}`:e}async function dC(e){switch((await(e.validator??b7)({cwd:e.cwd,sessionId:e.sessionId})).type){case"valid":return;case"missing":throw new Error(`Claude Code session ${e.sessionId} was not found for ${e.cwd}`)}}async function uC(e){let n=nC(e.limit,20,1,50),t=nC(e.messagesPerSession,4,0,12);return(e.provider??_7)({cwd:e.cwd,limit:n,messagesPerSession:t})}async function Ll(e,n,t){throw await e.onTranscriptEvent?.({type:"session_failed",sessionId:n,reason:t}),new Error(t)}async function*v7(e){let n=await import("@anthropic-ai/claude-agent-sdk"),t=e.streamingInput?.messages??e.prompt,r=[...e.preToolUseHookMatchers??[],...e.canUseTool===void 0?i7().PreToolUse??[]:[]],o=r.length===0?void 0:{PreToolUse:r},a=n.query({prompt:t,options:{cwd:e.cwd,persistSession:!0,...e.abortController===void 0?{}:{abortController:e.abortController},...e.resumeSessionId===void 0?{}:{resume:e.resumeSessionId},tools:{type:"preset",preset:"claude_code"},includePartialMessages:!0,settingSources:aC(),systemPrompt:{type:"preset",preset:"claude_code",...e.developerInstructions===void 0?{}:{append:e.developerInstructions}},...e.mcpServers===void 0?{}:{mcpServers:e.mcpServers},...e.allowedTools===void 0?{}:{allowedTools:[...e.allowedTools]},...e.env===void 0?{}:{env:e.env},...o===void 0?{}:{hooks:o},...e.canUseTool===void 0?{}:{canUseTool:S7(e.canUseTool,e.wrapApprovedToolInput)},...e.model===void 0?{}:{model:e.model},...e.permissionMode===void 0?{}:{permissionMode:e.permissionMode,...e.permissionMode==="bypassPermissions"?{allowDangerouslySkipPermissions:!0}:{}}}}),s=a;e.onSessionControls?.({interrupt:async()=>{await s.interrupt?.call(a)},setModel:async i=>{await s.setModel?.call(a,i)},setPermissionMode:async i=>{await s.setPermissionMode?.call(a,i)}});try{for await(let i of a)yield i}finally{a.close?.call(a)}}async function b7(e){return await(await import("@anthropic-ai/claude-agent-sdk")).getSessionInfo(e.sessionId,{dir:e.cwd})===void 0?{type:"missing"}:{type:"valid"}}async function _7(e){let n=await import("@anthropic-ai/claude-agent-sdk"),t=await n.listSessions({dir:e.cwd,limit:e.limit});return(await Promise.allSettled(t.slice(0,e.limit).map(async o=>{let a=e.messagesPerSession===0?[]:await n.getSessionMessages(o.sessionId,{dir:e.cwd,limit:e.messagesPerSession});return{sessionId:o.sessionId,summary:o.summary,lastModified:o.lastModified,cwd:o.cwd,fileSize:o.fileSize,firstPrompt:o.firstPrompt,gitBranch:o.gitBranch,messagePreview:a.map(s=>({type:s.type,text:w7(s.message)}))}}))).flatMap(o=>o.status==="fulfilled"?[o.value]:[])}function w7(e){let n=N(e),r=(Array.isArray(n?.content)?n.content:[]).map(o=>{let a=N(o);return m(a?.type)==="text"?m(a?.text):void 0}).filter(o=>o!==void 0).join(`
|
|
279
279
|
|
|
@@ -908,7 +908,7 @@ To kick the agent off:
|
|
|
908
908
|
2. Click any "Try this" prompt on the demo page to copy it.
|
|
909
909
|
3. Paste into the thread. Codex will pick it up and start editing this folder.
|
|
910
910
|
`});import{connect as a$}from"node:net";import{gzipSync as s$}from"node:zlib";async function O2(e,n){if(!n.includes(e.port))return of(e.requestId,"forward_port_not_allowed");let t=c$(e);if(!t.ok)return of(e.requestId,t.error);try{let r={method:e.method,headers:l$(e.headers),redirect:"manual",...t.body===void 0?{}:{body:t.body.buffer.slice(t.body.byteOffset,t.body.byteOffset+t.body.byteLength)}},o=await u$(e.port,e.path,e.queryString,r),a=Buffer.from(await o.arrayBuffer()),s=p$(e.path,o.headers,a),i=m$(e,o.headers,s);return i.body.byteLength>A2?of(e.requestId,"forward_response_too_large"):{requestId:e.requestId,ok:!0,status:o.status,headers:i.headers,bodyBase64:i.body.toString("base64")}}catch{return of(e.requestId,"forward_target_unavailable")}}function M2(e){return e.type==="forward_http_request"}function L2(e){return e.type==="forward_tcp_open"||e.type==="forward_tcp_send"||e.type==="forward_tcp_close"}function F2(e,n,t,r=d$){let o=new Map,a=i=>e.push(n,"forward:tcp_event",i).catch(()=>{}),s=i=>{let d=o.get(i);o.delete(i),d?.socket.end()};return{handle:i=>{switch(i.type){case"forward_tcp_open":{if(!t().includes(i.port)){a({socketId:i.socketId,type:"error",error:"forward_port_not_allowed"});return}o.get(i.socketId)?.socket.destroy();let u=r(i.port);o.set(i.socketId,{socket:u}),u.on("connect",()=>{rf(o,i.socketId,u)&&a({socketId:i.socketId,type:"open"})}),u.on("data",c=>{!rf(o,i.socketId,u)||!(c instanceof Uint8Array)||a({socketId:i.socketId,type:"data",bodyBase64:Buffer.from(c).toString("base64")})}),u.on("close",()=>{rf(o,i.socketId,u)&&(o.delete(i.socketId),a({socketId:i.socketId,type:"close"}))}),u.on("error",()=>{rf(o,i.socketId,u)&&(o.delete(i.socketId),a({socketId:i.socketId,type:"error",error:"forward_target_unavailable"}),u.destroy())});return}case"forward_tcp_send":{let d=o.get(i.socketId),u=j2(i.bodyBase64);if(u===void 0){a({socketId:i.socketId,type:"error",error:"invalid_forward_request"});return}if(d===void 0||d.socket.destroyed===!0||d.socket.writable===!1){a({socketId:i.socketId,type:"error",error:"tcp_socket_not_open"});return}d.socket.write(u);return}case"forward_tcp_close":s(i.socketId);return}},close:()=>{for(let i of o.keys())s(i)}}}function rf(e,n,t){return e.get(n)?.socket===t}function d$(e){return a$({host:"127.0.0.1",port:e})}function E2(e,n,t,r){let o=t.startsWith("/")?t:`/${t}`,a=new URL(`${e}://127.0.0.1:${n}${o}`);return r!==void 0&&r.trim()!==""&&(a.search=r),a.toString()}async function u$(e,n,t,r){try{return await fetch(E2("http",e,n,t),r)}catch(o){try{return await fetch(E2("https",e,n,t),r)}catch{throw o}}}function c$(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=j2(e.bodyBase64);return n===void 0?{ok:!1,error:"invalid_forward_request"}:n.byteLength>A2?{ok:!1,error:"forward_body_too_large"}:{ok:!0,body:n}}function j2(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 l$(e){let n=new Headers;if(!Array.isArray(e))return n;for(let t of e)v$(t)&&n.set(t.name,t.value);return n}function f$(e){return Array.from(e.entries()).filter(([n])=>!$2.has(n.toLowerCase())).slice(0,40).map(([n,t])=>({name:n,value:t}))}function p$(e,n,t){return x$(e,n)?Buffer.from(t.toString("utf8").replace('message:h(3783,null,"code-server")','message:h(3783,null,"Kandan")')):t}function m$(e,n,t){let r=f$(n);return h$(e,n,t)?{body:s$(t),headers:[...r,{name:"content-encoding",value:"gzip"},{name:"vary",value:"accept-encoding"}]}:{body:t,headers:r}}function h$(e,n,t){return e.method==="HEAD"||t.byteLength<i$||!g$(e.headers)?!1:y$(e.path,n)}function g$(e){return Array.isArray(e)?e.some(n=>q2(n)&&n.name.toLowerCase()==="accept-encoding"&&n.value.toLowerCase().split(",").map(t=>t.trim()).some(t=>t==="gzip"||t.startsWith("gzip;"))):!1}function y$(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 x$(e,n){return e.endsWith("/out/vs/code/browser/workbench/workbench.js")&&(n.get("content-type")??"").toLowerCase().includes("javascript")}function v$(e){return q2(e)&&!$2.has(e.name.toLowerCase())}function q2(e){return se(e)&&typeof e.name=="string"&&typeof e.value=="string"}function of(e,n){return{requestId:e,ok:!1,error:n}}var A2,i$,$2,N2=Q(()=>{"use strict";On();A2=64*1024*1024,i$=32*1024;$2=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 Jg}from"node:child_process";import{copyFileSync as b$,cpSync as _$,existsSync as af,mkdirSync as ns,mkdtempSync as w$,readFileSync as S$,realpathSync as Vg,writeFileSync as k$}from"node:fs";import{tmpdir as C$}from"node:os";import{basename as P$,delimiter as T$,dirname as Oo,join as jn}from"node:path";function z2(e){return e.type==="start_local_editor"}function B2(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:Kg(t.collaboration)}}:r}async function K2(e,n){if(n.editorRuntime===void 0)return{ok:!1,state:n.currentState,reason:"local_editor_disabled"};let t=Fr(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&&J$(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:Kg(n.currentState.collaboration)}};let r=I$(e,n);if(e.collaboration!==void 0&&r===void 0)return{ok:!1,state:n.currentState,reason:"missing_browser_base_url"};let o=await Nl(),a=e.collaboration===void 0?void 0:await Nl(),s=e.collaboration===void 0||r===void 0?void 0:$$(e.collaboration,n.runnerId??"local-runner",a,r),i=R$(s,n.editorRuntime);if(!i.ok)return{ok:!1,state:n.currentState,reason:i.reason};let d=M$({codeServerBin:n.editorRuntime.codeServerBin,codeServerRuntimeRoot:n.editorRuntime.root,port:o,cwd:t.cwd,userDataDir:i.userDataDir,extensionsDir:i.extensionsDir,platform:n.platform});if(!d.ok)return{ok:!1,state:n.currentState,reason:d.reason};let u=await U$(s,i,n.editorRuntime,n.runnerId);if(!u.ok)return{ok:!1,state:n.currentState,reason:"code_server_spawn_failed"};Pe("process.spawn",{command:d.command,args:d.args,cwd:t.cwd,purpose:"local_editor.code_server"},{sessionId:n.runnerId});let c=Jg(d.command,[...d.args],{cwd:t.cwd,env:K$(process.env,t.cwd,i.userDataDir,u.collaboration),stdio:["ignore","inherit","inherit"]});Pe("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,S)=>{Pe("process.exit",{command:d.command,args:d.args,cwd:t.cwd,pid:c.pid,code:x,signal:S,purpose:"local_editor.code_server"},{sessionId:n.runnerId})});let f=W2(c);if(await H2(c)==="failed")return u.collaboration?.process.kill("SIGINT"),{ok:!1,state:n.currentState,reason:"code_server_spawn_failed"};let[l,h]=await Promise.all([W$(o,f),u.ready]);return l==="failed"||h==="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:f},event:{cwd:t.cwd,port:o,startedAt:new Date().toISOString(),collaboration:Kg(u.collaboration)}})}function I$(e,n){let t=e.browserBaseUrl??n.browserBaseUrl;return t===void 0||t.trim()===""?void 0:t.trim().replace(/\/+$/,"")}function J2(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 R$(e,n){try{let t=w$(jn(C$(),"kandan-local-editor-")),r=jn(t,"extensions"),o=jn(t,"collaboration-server"),a=jn(t,"tmp"),s=jn(t,"User");return ns(s,{recursive:!0}),ns(r,{recursive:!0}),ns(o,{recursive:!0}),ns(a,{recursive:!0}),n!==void 0&&(D$(n),B$(n.assets.documentStateExtensionDir,jn(r,"kandan.document-state-telemetry"))),k$(jn(s,"settings.json"),JSON.stringify(N$(e),null,2)),{ok:!0,userDataDir:t,extensionsDir:r,collaborationServerDir:o}}catch{return{ok:!1,reason:"code_server_spawn_failed"}}}function D$(e){let n=E$(e);[{source:jn(n,"extensions","git-base","dist","extension.js"),target:jn(n,"extensions","git-base","dist","browser","extension.js"),required:!0},{source:jn(n,"extensions","git-base","dist","extension.js.map"),target:jn(n,"extensions","git-base","dist","browser","extension.js.map"),required:!1},{source:jn(n,"extensions","merge-conflict","dist","mergeConflictMain.js"),target:jn(n,"extensions","merge-conflict","dist","browser","mergeConflictMain.js"),required:!0},{source:jn(n,"extensions","merge-conflict","dist","mergeConflictMain.js.map"),target:jn(n,"extensions","merge-conflict","dist","browser","mergeConflictMain.js.map"),required:!1}].forEach(({source:r,target:o,required:a})=>{switch(!0){case af(o):return;case(!a&&!af(r)):return;default:ns(Oo(o),{recursive:!0}),b$(r,o);return}})}function E$(e){let n=V2([jn(e.root,"lib","vscode"),jn(Oo(Oo(e.codeServerBin)),"lib","vscode"),...A$(e.codeServerBin).map(o=>jn(Oo(Oo(o)),"lib","vscode"))]),t=n.find(o=>O$(o).every(a=>af(a))),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 A$(e){try{let t=S$(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 O$(e){return[jn(e,"extensions","git-base","dist","extension.js"),jn(e,"extensions","merge-conflict","dist","mergeConflictMain.js")]}function M$(e){let n=e.platform??process.platform;if(n==="linux")return L$(e);if(n!=="darwin")return sf();let t=Bg(e.codeServerBin,e.envPath??process.env.PATH??"");return t.ok?{ok:!0,command:t.command,args:J2(e.port,e.cwd,e.userDataDir,e.extensionsDir)}:sf()}function L$(e){let n=Bg(e.bubblewrapBin??"bwrap",e.envPath??process.env.PATH??"");if(!n.ok)return sf();let t=Bg(e.codeServerBin,e.envPath??process.env.PATH??"");if(!t.ok)return sf();let r=V2(["/usr","/bin","/sbin","/lib","/lib64","/etc","/nix","/opt",...e.codeServerRuntimeRoot===void 0?[]:q$(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",jn(e.userDataDir,"data"),"--setenv","XDG_CONFIG_HOME",jn(e.userDataDir,"config"),...r.flatMap(a=>["--ro-bind-try",a,a]),"--bind",e.cwd,e.cwd,"--bind",e.userDataDir,e.userDataDir,...e.extensionsDir===void 0?[]:["--bind",e.extensionsDir,e.extensionsDir],"--chdir",e.cwd,"--",t.command,...J2(e.port,e.cwd,e.userDataDir,e.extensionsDir)];return{ok:!0,command:n.command,args:o}}function sf(){return{ok:!1,reason:"local_editor_filesystem_sandbox_unavailable"}}function Bg(e,n){if(F$(e)){let t=j$(e);return t===void 0?{ok:!1}:{ok:!0,command:e,directory:t}}for(let t of n.split(T$)){if(t.trim()==="")continue;let r=jn(t,e);if(!af(r))continue;let o=Vg(r);return{ok:!0,command:o,directory:Oo(o)}}return{ok:!1}}function F$(e){return e.includes("/")||e.includes("\\")}function j$(e){try{let n=Oo(Vg(e));return n==="/"?void 0:n}catch{let t=Oo(e);return t==="."||t==="/"?void 0:t}}function q$(e){try{return[e,Vg(e)]}catch{return[e]}}function V2(e){return Array.from(new Set(e.filter(n=>n.length>0)))}function $$(e,n,t,r){if(e===void 0||t===void 0)return;let o=`/local-codex-runners/${encodeURIComponent(n)}/forwards/${t}/preview-target`,a=new URL(o,`${r}/`).toString(),s=`/api/v2/editor/sessions/${e.editorSessionId}/collaboration-state`,i=e.bootstrapToken===void 0||e.bootstrapToken===""?void 0:`${o}/_kandan-collaboration/${encodeURIComponent(e.bootstrapToken)}`,d=i===void 0?s:`${i}${s}`,u=i===void 0?a:new URL(i,`${r}/`).toString();return{...e,serverPort:t,serverUrl:a,bootstrapServerUrl:u,collaborationStateUrl:d}}function N$(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 U$(e,n,t,r){if(e===void 0)return{ok:!0,ready:Promise.resolve("ready")};try{await Promise.all([U2(t.assets.collaborationExtensionTarball,n.extensionsDir),U2(t.assets.collaborationServerTarball,n.collaborationServerDir)]);let o=z$(),a=[jn(n.collaborationServerDir,"open-collaboration-server","bundle","app.js"),"--hostname","127.0.0.1","--port",String(e.serverPort)];Pe("process.spawn",{command:o,args:a,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r});let s=Jg(o,a,{env:{...process.env,OCT_ACTIVATE_SIMPLE_LOGIN:"true",OCT_SERVER_OWNER:"Kandan"},stdio:["ignore","inherit","inherit"]});Pe("process.spawned",{command:o,args:a,pid:s.pid,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r}),s.once("exit",(c,f)=>{Pe("process.exit",{command:o,args:a,pid:s.pid,code:c,signal:f,purpose:"local_editor.collaboration_sidecar",editorSessionId:e.editorSessionId,runtimeSessionId:e.runtimeSessionId},{sessionId:r})});let i=W2(s);return await H2(s)==="failed"?{ok:!1}:{ok:!0,ready:H$(e.serverPort,i),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:i}}}catch{return{ok:!1}}}function z$(e=process.env,n=process.execPath){let t=e.LINZUMI_NODE_BIN?.trim();return t!==void 0&&t!==""?t:P$(n).toLowerCase().includes("bun")?"node":n}async function U2(e,n){ns(n,{recursive:!0}),await V$("tar",["-xzf",e,"-C",n])}function B$(e,n){ns(Oo(n),{recursive:!0}),_$(e,n,{recursive:!0})}function K$(e,n,t,r){let{PORT:o,...a}=e,s={...a,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:jn(t,"kandan-oct-auto-host.lock")}}function Kg(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 J$(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 V$(e,n){return new Promise((t,r)=>{Pe("process.spawn",{command:e,args:n,purpose:"local_editor.install_process"});let o=Jg(e,[...n],{stdio:["ignore","ignore","inherit"]});Pe("process.spawned",{command:e,args:n,pid:o.pid,purpose:"local_editor.install_process"}),o.once("error",r),o.once("exit",(a,s)=>{Pe("process.exit",{command:e,args:n,pid:o.pid,code:a,signal:s,purpose:"local_editor.install_process"}),a===0?t():r(new Error(`${e} exited with ${a??"unknown"}`))})})}function W2(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 W$(e,n,t=1e4){let r=Date.now()+t,o=`http://127.0.0.1:${e}/`;return new Promise(a=>{let s=!1,i,d=f=>{s||(s=!0,i!==void 0&&clearTimeout(i),a(f))},u=()=>{i=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 H$(e,n,t=1e4){let r=Date.now()+t,o=`http://127.0.0.1:${e}/api/login/initial`;return new Promise(a=>{let s=!1,i,d=f=>{s||(s=!0,i!==void 0&&clearTimeout(i),a(f))},u=()=>{i=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 H2(e){return new Promise(n=>{let t=!1,r=()=>{e.off("spawn",o),e.off("error",a)},o=()=>{t||(t=!0,r(),n("spawned"))},a=()=>{t||(t=!0,r(),n("failed"))};e.once("spawn",o),e.once("error",a),setImmediate(()=>{!t&&e.pid!==void 0&&o()})})}var G2=Q(()=>{"use strict";Ti();da();Ar()});import{spawn as G$}from"node:child_process";import{createHash as X2}from"node:crypto";import{createReadStream as Z$,createWriteStream as Q$,existsSync as Li,mkdirSync as Nu,mkdtempSync as X$,readFileSync as Y2,renameSync as Y$,rmSync as Z2,writeFileSync as e1}from"node:fs";import{homedir as eN}from"node:os";import{dirname as df,join as at,resolve as nN}from"node:path";import{Readable as tN}from"node:stream";import{pipeline as rN}from"node:stream/promises";async function Fi(e){if(e.customCodeServerBin!==void 0)return{codeServerBin:e.customCodeServerBin,status:{status:"custom",mode:"custom",codeServerBin:e.customCodeServerBin}};let n=oN(e.platform??process.platform,e.arch??process.arch);if(n===void 0)return Wg("unsupported_platform");let t=await aN({kandanUrl:e.kandanUrl,token:e.token,platform:n,fetchImpl:e.fetchImpl??fetch});if(!t.ok)return Wg(t.reason);let r=e.cacheRoot??bN(),o=uN(r,t.manifest);if(o.ok)return Q2(t.manifest,o.runtime,!1);let a=await cN({kandanUrl:e.kandanUrl,token:e.token,manifest:t.manifest,cacheRoot:r,fetchImpl:e.fetchImpl??fetch,extractArchive:e.extractArchive??hN});return a.ok?Q2(t.manifest,a.runtime,!0):Wg(a.reason)}function n1(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 oN(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 Wg(e){return{status:{status:"unavailable",mode:"server_managed",reason:e}}}function Q2(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 aN(e){let n=new URL(`/api/v2/local-codex-runner/editor-runtime/${encodeURIComponent(e.platform)}/manifest`,Xn(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 sN(t):"manifest_unavailable"};let r=await t.json();return!se(r)||r.ok!==!0||!se(r.runtime)?{ok:!1,reason:"manifest_unavailable"}:iN(r.runtime)}async function sN(e){let n=await e.json().catch(()=>{});return se(n)&&n.error==="token_expired"?"auth_expired":"auth_unauthorized"}function iN(e){let n=oo(e.version),t=oo(e.platform),r=oo(e.archiveUrl),o=o1(e.archiveSha256),a=oo(e.codeServerVersion),s=oo(e.codeServerBinPath)??"bin/code-server",i=oo(e.manifestPath)??"linzumi-editor-runtime.json",d=dN(e.assets);return n===void 0||t===void 0||r===void 0||o===void 0||a===void 0||d===void 0?{ok:!1,reason:"manifest_unavailable"}:{ok:!0,manifest:{version:n,platform:t,archiveUrl:r,archiveSha256:o,codeServerVersion:a,codeServerBinPath:s,manifestPath:i,assets:d}}}function dN(e){if(!Array.isArray(e))return;let n=[];for(let t of e){if(!se(t))return;let r=oo(t.path),o=o1(t.sha256),a=oo(t.url),s=oo(t.contentBase64);if(r===void 0||o===void 0)return;n.push({path:r,sha256:o,...a===void 0?{}:{url:a},...s===void 0?{}:{contentBase64:s}})}return n}function uN(e,n){let t=t1(e,n),r=at(t,n.manifestPath),o=at(t,n.codeServerBinPath),a=r1(t,n);if(!Li(r)||!Li(o)||a===void 0)return{ok:!1};try{let s=JSON.parse(Y2(r,"utf8"));if(se(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:a}}}catch{return{ok:!1}}return{ok:!1}}async function cN(e){Nu(e.cacheRoot,{recursive:!0});let n=X$(at(e.cacheRoot,".install-")),t=at(n,"runtime.tar.gz"),r=at(n,"runtime");try{let o=await pN({kandanUrl:e.kandanUrl,token:e.token,manifest:e.manifest,archivePath:t,fetchImpl:e.fetchImpl});if(!o.ok)return o;if(Nu(r,{recursive:!0}),!await e.extractArchive(t,r))return{ok:!1,reason:"archive_extract_failed"};if(!await lN({kandanUrl:e.kandanUrl,manifest:e.manifest,runtimeRoot:r,fetchImpl:e.fetchImpl}))return{ok:!1,reason:"install_failed"};let s=at(r,e.manifest.manifestPath),i=at(r,e.manifest.codeServerBinPath),d=r1(r,e.manifest);if(!Li(i)||d===void 0)return{ok:!1,reason:"invalid_archive"};Nu(df(s),{recursive:!0}),e1(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=t1(e.cacheRoot,e.manifest);return Z2(u,{recursive:!0,force:!0}),Nu(df(u),{recursive:!0}),Y$(r,u),{ok:!0,runtime:{mode:"server_managed",root:u,codeServerBin:at(u,e.manifest.codeServerBinPath),assets:{collaborationExtensionTarball:at(u,"kandan","editor_extensions","typefox.open-collaboration-tools.tar.gz"),collaborationServerTarball:at(u,"kandan","editor_servers","open-collaboration-server.tar.gz"),documentStateExtensionDir:at(u,"kandan","editor_extensions","kandan.document-state-telemetry")}}}}catch{return{ok:!1,reason:"install_failed"}}finally{Z2(n,{recursive:!0,force:!0})}}async function lN(e){for(let n of e.manifest.assets){let t=at(e.runtimeRoot,n.path);try{let r=await fN({kandanUrl:e.kandanUrl,asset:n,fetchImpl:e.fetchImpl});if(r===void 0)continue;Nu(df(t),{recursive:!0}),e1(t,r)}catch{return!1}}return!0}async function fN(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,Xn(e.kandanUrl)),t=await e.fetchImpl(n);return t.status!==200?void 0:Buffer.from(await t.arrayBuffer())}}async function pN(e){let n=Xn(e.kandanUrl),t=new URL(e.manifest.archiveUrl,n),r=await e.fetchImpl(t,{...mN(t,new URL(n))?{headers:{authorization:`Bearer ${e.token}`}}:{}});return r.status!==200||r.body===null?{ok:!1,reason:"download_failed"}:(await rN(tN.fromWeb(r.body),Q$(e.archivePath)),await gN(e.archivePath)!==e.manifest.archiveSha256?{ok:!1,reason:"checksum_mismatch"}:{ok:!0})}function mN(e,n){return e.protocol===n.protocol&&e.host===n.host}function hN(e,n){return new Promise(t=>{let o=["-xzf",e,"-C",n];Pe("process.spawn",{command:"tar",args:o,purpose:"editor_runtime.extract"});let a=G$("tar",o,{stdio:["ignore","ignore","ignore"]});Pe("process.spawned",{command:"tar",args:o,pid:a.pid,purpose:"editor_runtime.extract"}),a.on("error",()=>t(!1)),a.on("exit",(s,i)=>{Pe("process.exit",{command:"tar",args:o,pid:a.pid,code:s,signal:i,purpose:"editor_runtime.extract"}),t(s===0)})})}function gN(e){return new Promise((n,t)=>{let r=X2("sha256"),o=Z$(e);o.on("error",t),o.on("data",a=>r.update(a)),o.on("end",()=>n(r.digest("hex")))})}function t1(e,n){return nN(e,n.platform,n.archiveSha256)}function r1(e,n){let t=at(e,"kandan","editor_extensions","typefox.open-collaboration-tools.tar.gz"),r=at(e,"kandan","editor_servers","open-collaboration-server.tar.gz"),o=at(e,"kandan","editor_extensions","kandan.document-state-telemetry"),a=yN(n.codeServerBinPath),s=[n.codeServerBinPath,at(a,"lib","vscode","node_modules","vsda","rust","web","vsda.js"),at(a,"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"],i=xN(n.assets);for(let d of s){let u=i.get(d);if(u===void 0&&d!==n.codeServerBinPath)return;let c=at(e,d);if(!Li(c)||u!==void 0&&vN(c)!==u)return}if(!(!Li(t)||!Li(r)))return{collaborationExtensionTarball:t,collaborationServerTarball:r,documentStateExtensionDir:o}}function yN(e){let n=e.replaceAll("\\","/");return n==="bin/code-server"?".":n.endsWith("/bin/code-server")?n.slice(0,-16)||".":df(n)}function xN(e){let n=new Map;for(let t of e)n.set(t.path,t.sha256);return n}function vN(e){return X2("sha256").update(Y2(e)).digest("hex")}function bN(){return at(eN(),".linzumi","editor-runtimes")}function oo(e){return typeof e=="string"&&e.trim()!==""?e.trim():void 0}function o1(e){let n=oo(e);return n!==void 0&&/^[a-f0-9]{64}$/i.test(n)?n.toLowerCase():void 0}var uf=Q(()=>{"use strict";no();Ar();On()});import{spawn as _N,spawnSync as wN}from"node:child_process";import{delimiter as SN,dirname as kN,join as cf}from"node:path";function ji(e,n){return new Promise(t=>{let r=["--version"];Pe("process.spawn",{command:e,args:r,cwd:n,purpose:"dependency_probe"});let o=_N(e,r,{cwd:n,stdio:["ignore","pipe","pipe"],detached:process.platform!=="win32"});Pe("process.spawned",{command:e,args:r,cwd:n,pid:o.pid,purpose:"dependency_probe"});let a="",s="",i=!1,d=c=>{i||(i=!0,clearTimeout(u),t(c))},u=setTimeout(()=>{CN(o.pid),Pe("process.exit",{command:e,args:r,cwd:n,pid:o.pid,code:null,signal:"SIGKILL",purpose:"dependency_probe"}),d({command:e,available:!1})},1e3);o.stdout?.on("data",c=>{a+=c.toString()}),o.stderr?.on("data",c=>{s+=c.toString()}),o.on("error",()=>{Pe("process.exit",{command:e,args:r,cwd:n,pid:o.pid,code:null,signal:null,error:"spawn_failed",purpose:"dependency_probe"}),d({command:e,available:!1})}),o.on("exit",(c,f)=>{if(Pe("process.exit",{command:e,args:r,cwd:n,pid:o.pid,code:c,signal:f,purpose:"dependency_probe"}),c!==0){d({command:e,available:!1});return}let p=i1(a,s);d(p===void 0?{command:e,available:!0}:{command:e,available:!0,version:p})})})}function CN(e){if(e!==void 0)try{process.kill(process.platform==="win32"?e:-e,"SIGKILL")}catch{try{process.kill(e,"SIGKILL")}catch{}}}async function la(e){let[n,t,r]=await Promise.all([ji(process.execPath,e.cwd),PN(e),AN(e)]);return{node:n,codex:t,codeServer:r,editorRuntime:e.editorRuntime}}async function PN(e){let n=await ji(e.codexBin,e.cwd);if(n.available)return n;let t=TN({cwd:e.cwd,codexBin:e.codexBin,env:process.env});if(t===void 0)return n;let r=await ji(t,e.cwd);return r.available?r:n}function TN(e){return a1(RN(e),e)}function a1(e,n){let[t,...r]=e;if(t===void 0)return;let o=IN(t,n);return o===void 0?a1(r,n):o}function IN(e,n){let t=wN(e,["which","codex"],{cwd:n.cwd,env:n.env??process.env,encoding:"utf8",timeout:1e3});if(t.status===0)return i1(t.stdout?.toString())}function RN(e){let n=e.env??process.env;return Array.from(new Set([DN(e.codexBin),n.VOLTA_HOME===void 0?void 0:cf(n.VOLTA_HOME,"bin","volta"),n.HOME===void 0?void 0:cf(n.HOME,".volta","bin","volta"),...EN(n.PATH)].filter(t=>t!==void 0)))}function DN(e){return e.replaceAll("\\","/").endsWith("/.volta/bin/codex")?cf(kN(e),"volta"):void 0}function EN(e){return e===void 0?[]:e.split(SN).filter(n=>n!=="").map(n=>cf(n,"volta"))}function AN(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"}):ji(e.codeServerBin,e.cwd)}function s1(e){if(fa(e),!e.codex.available)throw new Error(`Codex is not available at ${e.codex.command}. Install Codex or pass --codex-bin <path>.`)}function fa(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 Gg(e){let n=e.codeServer??ON();return{bun:Hg(e.node),codex:Hg(e.codex),codeServer:Hg(n),editorRuntime:e.editorRuntime===void 0?null:n1(e.editorRuntime)}}function ON(){return{command:"code-server",available:!1,reason:"not_configured"}}function Hg(e){return{command:e.command,available:e.available,version:e.version??null,reason:e.reason??null}}function i1(...e){for(let n of e){let t=n?.trim();if(t!==void 0&&t!=="")return t}}var lf=Q(()=>{"use strict";uf();Ar()});import{closeSync as MN,openSync as LN,readSync as FN,statSync as jN}from"node:fs";function Zg(e){return typeof e!="string"||e===""?e:qN.reduce((n,t)=>t.source.startsWith("\\beyJ")?n.replace(t,"<redacted>"):n.replace(t,"$1<redacted>"),e)}function BN(e,n){let t;try{let{size:r}=jN(e),o=r>n?r-n:0,a=r-o;if(a<=0)return"";let s=Buffer.allocUnsafe(a);t=LN(e,"r");let i=FN(t,s,0,a,o);return s.subarray(0,i).toString("utf8")}catch{return""}finally{if(t!==void 0)try{MN(t)}catch{}}}function d1(e){let n=e.now??Date.now,t=e.setIntervalImpl??setInterval,r=e.clearIntervalImpl??clearInterval,o=e.readTail??BN,a=Math.max(NN,e.intervalMs??$N),s=Math.max(1,e.maxTailBytes??UN),i=Math.max(1,e.maxLifecycleEvents??zN),d=[],u=!1,c,f=S=>{try{for(d.push(S);d.length>i;)d.shift()}catch{}},p=()=>{try{let S=e.backendStderrSnapshot?.();if(typeof S!="string"||S==="")return;let w=S.length>s?S.slice(S.length-s):S;return Zg(w)}catch{return}},l=()=>{let S=Zg(o(e.runnerLogFile,s)),w=p(),P={kind:"runner_diagnostic_log",captured_at:new Date(n()).toISOString(),lifecycle:d.map(C=>({event:C.event,at:C.atIso,...C.closeCode===void 0?{}:{close_code:C.closeCode},...C.closeReason===void 0?{}:{close_reason:Zg(C.closeReason)},...C.previousSessionDurationMs===void 0?{}:{previous_session_duration_ms:C.previousSessionDurationMs},...C.reconnectCount===void 0?{}:{reconnect_count:C.reconnectCount}})),runner_log_tail:S,...w===void 0?{}:{backend_stderr:w}};return{bundle_name:"runner-diagnostics",exported_at:new Date(n()).toISOString(),diagnostics:P,telemetry_ndjson:d.map(C=>JSON.stringify(C)).join(`
|
|
911
|
-
`)}},h=async()=>{let S=d.length;try{await Promise.resolve(e.upload(l())),d.splice(0,S)}catch(w){try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,error:w instanceof Error?w.message:String(w)})}catch{}}},v=()=>{u||c!==void 0||(c=t(()=>{h()},a),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:a,note:"runner lifecycle + runner-log tail + backend stderr are uploaded to Linzumi for support diagnostics (auto-deleted after 4 days)"})}catch{}return v(),{recordLifecycle:f,flushNow:h,stop:x}}var qN,$N,NN,UN,zN,u1=Q(()=>{"use strict";qN=[/(--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];$N=45e3,NN=5e3,UN=64*1024,zN=200});var Ft,Qg,ts=Q(()=>{"use strict";Ft="1.0.
|
|
911
|
+
`)}},h=async()=>{let S=d.length;try{await Promise.resolve(e.upload(l())),d.splice(0,S)}catch(w){try{e.log?.("runner_diagnostics.upload_failed",{buffered_events:d.length,error:w instanceof Error?w.message:String(w)})}catch{}}},v=()=>{u||c!==void 0||(c=t(()=>{h()},a),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:a,note:"runner lifecycle + runner-log tail + backend stderr are uploaded to Linzumi for support diagnostics (auto-deleted after 4 days)"})}catch{}return v(),{recordLifecycle:f,flushNow:h,stop:x}}var qN,$N,NN,UN,zN,u1=Q(()=>{"use strict";qN=[/(--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];$N=45e3,NN=5e3,UN=64*1024,zN=200});var Ft,Qg,ts=Q(()=>{"use strict";Ft="1.0.4",Qg=`linzumi ${Ft}`});import{closeSync as l1,existsSync as ey,mkdirSync as KN,openSync as f1,readFileSync as p1,renameSync as JN,unlinkSync as Uu,writeFileSync as VN,writeSync as m1}from"node:fs";import{dirname as h1,join as WN}from"node:path";function y1(e){return e instanceof rs||e instanceof Error&&e.name===g1&&"lockPath"in e&&"heldBy"in e}function x1(e,n=In(),t){let r=t===void 0?encodeURIComponent(e):Ya(t);return WN(h1(n),"runners",`${r}.lock`)}function v1(e){let n=x1(e.machineId,e.configPath,e.linzumiUrl),t=e.isPidAlive??dU,r=e.now??(()=>new Date),o=e.killPid??uU,a=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:Xn(e.linzumiUrl)},...e.launchSource===void 0?{}:{launchSource:e.launchSource},startedAt:a,heartbeatAt:a,cliVersion:e.cliVersion??Ft};YN(e.machineId,e.configPath,e.linzumiUrl,t,r,o,e.onTakeover),eU(n,s,t,r,o,e.onTakeover,e.beforeReadExistingLock,e.beforeReplaceStaleLock);let i=()=>ZN(n,s,r),d=setInterval(i,HN);return d.unref(),{path:n,record:s,heartbeat:i,release:()=>{clearInterval(d),tU(n,s)}}}function ZN(e,n,t){try{let r=pf(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()},a=`${e}.tmp`;VN(a,`${JSON.stringify(o,null,2)}
|
|
912
912
|
`,"utf8"),JN(a,e)}catch{}}function qi(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>GN?{state:"wedged",reason:e.heartbeatAt===void 0?"missing_heartbeat":"stale_heartbeat"}:{state:"live"}}function b1(e,n,t,r){return t!==ff||e.launchSource!==ff?!1:r.state!=="live"?!0:QN(n,e.cliVersion)>0}function QN(e,n){let t=c1(e),r=c1(n);for(let o=0;o<3;o++)if(t.core[o]!==r.core[o])return t.core[o]>r.core[o]?1:-1;return t.prerelease.length===0&&r.prerelease.length===0?0:t.prerelease.length===0?1:r.prerelease.length===0?-1:XN(t.prerelease,r.prerelease)}function c1(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),a=r.split("."),s=[Xg(a[0]),Xg(a[1]),Xg(a[2])],i=o===""?[]:o.split(".").filter(d=>d!=="");return{core:s,prerelease:i}}function Xg(e){let n=Number.parseInt(e??"",10);return Number.isInteger(n)&&n>=0?n:0}function XN(e,n){let t=Math.max(e.length,n.length);for(let r=0;r<t;r++){if(r>=e.length)return-1;if(r>=n.length)return 1;let o=e[r],a=n[r],s=Number.parseInt(o,10),i=Number.parseInt(a,10),d=s.toString()===o,u=i.toString()===a;if(d&&u){if(s!==i)return s>i?1:-1}else{if(d!==u)return d?-1:1;if(o!==a)return o>a?1:-1}}return 0}function _1(e,n,t,r,o){try{r(n.pid)}catch(a){let s=a!==null&&typeof a=="object"&&"code"in a?a.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.`):a}o?.({lockPath:e,holderPid:n.pid,holderRunnerId:n.runnerId,reason:t})}function YN(e,n,t,r,o,a,s){if(t===void 0||_t(t)!==_t(dt))return;let i=x1(e,n),d=pf(i);if(d!==void 0){if(qi(d,r,o).state==="live")throw new rs(i,d);w1(i,r,()=>{let u=ey(i)?ty(i):void 0;if(u===void 0)return;let c=qi(u,r,o);if(c.state==="live")throw new rs(i,u);c.state==="wedged"&&_1(i,u,c.reason,a,s),Uu(i)})}}function eU(e,n,t,r,o,a,s,i){if(Yg(e,n))return;s?.();let d=pf(e);if(d===void 0){if(Yg(e,n))return;throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)}if(qi(d,t,r).state==="live")throw new rs(e,d);i?.(),w1(e,t,()=>{let u=ey(e)?ty(e):void 0;if(u!==void 0){let c=qi(u,t,r);if(c.state==="live")throw new rs(e,u);c.state==="wedged"&&_1(e,u,c.reason,o,a),Uu(e)}if(!Yg(e,n))throw new Error(`another Linzumi runner lock appeared while starting: ${e}`)})}function Yg(e,n){KN(h1(e),{recursive:!0});try{let t=f1(e,"wx");try{m1(t,`${JSON.stringify(n,null,2)}
|
|
913
913
|
`)}finally{l1(t)}return!0}catch(t){if($i(t,"EEXIST"))return!1;throw t}}function w1(e,n,t){let r=`${e}.replace`;for(;;)try{let o=f1(r,"wx");try{m1(o,`${process.pid}
|
|
914
914
|
`),t()}finally{l1(o),Uu(r)}return}catch(o){if($i(o,"EEXIST")){let a=nU(r);if(a===void 0)continue;if(n(a))throw new Error(["another Linzumi runner is already replacing a stale runner lock",`lock: ${e}`,"Wait for that startup to finish, then retry."].join(`
|
|
@@ -1275,7 +1275,7 @@ Options:
|
|
|
1275
1275
|
--linzumi-url <url> Alias for --api-url
|
|
1276
1276
|
--oauth-callback-host <ip> Callback host reachable by your browser
|
|
1277
1277
|
`}async function joe(e,n={resolveToken:tc,fetchStartTarget:QC,validateToken:Wl,buildDependencyStatus:la,resolveEditorRuntime:Fi,ensureRunnerId:Qt,probeClaudeCodeAvailability:Fl}){let{cwdArg:t,flagArgs:r}=wb(e),o=Kr(r);o.get("help")===!0&&(process.stdout.write(uae()),process.exit(0)),Zoe(o);let a=Qo(o)??Lt,s=Ru(jd(t??process.cwd())).cwd,i=ir([s])[0]??s,d=o.has("allowed-cwd")?ir(Eu(ye(o,"allowed-cwd"))):[],u=Array.from(new Set([i,...d])),c=ye(o,"codex-bin")??"codex",f=ye(o,"code-server-bin"),p=o.get("no-onboarding-discovery")===!0?void 0:"start",l=await n.buildDependencyStatus({cwd:i,codexBin:c,codeServerBin:f});fa(l);let h=l.codex.command,v=ye(o,"token"),x=ye(o,"auth-file"),S=ye(o,"oauth-callback-host"),w=A=>{process.stderr.write(`${t0(A)}
|
|
1278
|
-
`)},P=await n.resolveToken({kandanUrl:a,explicitToken:v,onboarding:p==="start"?"start":void 0,authFilePath:x,callbackHost:S,requiredScopes:p==="start"?Pm:void 0,reportRejectedCachedToken:w}),C=await n.fetchStartTarget({kandanUrl:a,accessToken:P}),D=await n.validateToken({kandanUrl:a,accessToken:P,workspaceSlug:C.workspaceSlug,channelSlug:C.channelSlug,requiredScopes:p==="start"?Pm:void 0})?P:await Joe({kandanUrl:a,explicitToken:v,target:C,authFilePath:x,callbackHost:S,requiredScopes:p==="start"?Pm:void 0,resolveToken:n.resolveToken,reportRejectedCachedToken:w}),y=await n.resolveEditorRuntime({kandanUrl:a,token:D,customCodeServerBin:f,fetchImpl:Qi(jo())}),E=await n.buildDependencyStatus({cwd:i,codexBin:h,codeServerBin:y.codeServerBin,editorRuntime:y.status});fa(E);let I=await _b(n,i);return{kandanUrl:a,token:D,runnerId:(n.ensureRunnerId??Qt)(a),workspaceSlug:C.workspaceSlug,cwd:i,codexBin:h,codexUrl:ye(o,"codex-url"),launchSource:Rm(),launchTui:o.get("launch-tui")===!0,fast:o.get("fast")===!0,logFile:ye(o,"log-file"),allowedCwds:u,projectDiscoveryCwdIsSelectedRoot:!0,allowedForwardPorts:Au(ye(o,"forward-port")),codeServerBin:y.codeServerBin,editorRuntime:y.runtime,socketFactory:Xi(jo()),dependencyStatus:E,claudeCodeAvailable:I,runtimeDefaults:Im(o),onboardingDiscovery:p,channelSession:{workspaceSlug:C.workspaceSlug,channelSlug:C.channelSlug,kandanThreadId:ye(o,"linzumi-thread-id"),listenUser:ye(o,"listen-user")??Qoe(D),model:ye(o,"model"),reasoningEffort:ye(o,"reasoning-effort"),sandbox:ye(o,"sandbox"),approvalPolicy:ye(o,"approval-policy"),allowPortForwardingByDefault:!0,streamFlushMs:Sb(o,"stream-flush-ms")}}}async function qoe(e,n={readTextFile:$oe,buildDependencyStatus:la,resolveEditorRuntime:Fi,ensureRunnerId:Qt,probeClaudeCodeAvailability:Fl}){let{cwdArg:t,flagArgs:r}=wb(e),o=Kr(r);if(o.get("help")===!0&&(process.stdout.write(cae()),process.exit(0)),Noe(o),t!==void 0&&o.has("cwd"))throw new Error("linzumi commander accepts either <folder> or --cwd, not both");let a=ye(o,"agent-token-file")??o0(),s=a0(a,n.readTextFile),i=s.channelId;Uoe(o,i);let d=i===void 0?void 0:{workspaceSlug:s.workspaceId,channelSlug:i,kandanThreadId:ye(o,"linzumi-thread-id"),listenUser:ye(o,"listen-user")??zoe(s.ownerUsername),model:ye(o,"model"),reasoningEffort:ye(o,"reasoning-effort"),sandbox:ye(o,"sandbox"),approvalPolicy:ye(o,"approval-policy"),allowPortForwardingByDefault:!0,streamFlushMs:Sb(o,"stream-flush-ms")},u=Qo(o)??Boe(s.apiUrl),c=t??ye(o,"cwd"),f=Ru(jd(c??process.cwd())).cwd,p=c===void 0&&!o.has("allowed-cwd")?jg(u):{allowedCwds:[],missingAllowedCwds:[]},l=o.has("allowed-cwd")?ir(Eu(ye(o,"allowed-cwd"))):c===void 0?p.allowedCwds.length>0?[...p.allowedCwds]:ir([f]):ir([f]),h=l[0]??f,v=o.has("allowed-cwd")||c===void 0&&p.allowedCwds.length>0,x=ye(o,"codex-bin")??"codex",S=ye(o,"code-server-bin"),w=await n.buildDependencyStatus({cwd:h,codexBin:x,codeServerBin:S});fa(w);let P=w.codex.command,C=await n.resolveEditorRuntime({kandanUrl:u,token:s.commanderToken,customCodeServerBin:S,fetchImpl:Qi(jo())}),T=await n.buildDependencyStatus({cwd:h,codexBin:P,codeServerBin:C.codeServerBin,editorRuntime:C.status});fa(T);let D=await _b(n,h);return{kandanUrl:u,token:s.commanderToken,runnerId:(n.ensureRunnerId??Qt)(u),workspaceSlug:s.workspaceId,cwd:h,codexBin:P,codexUrl:ye(o,"codex-url"),launchSource:Rm(),launchTui:o.get("launch-tui")===!0,fast:o.get("fast")===!0,logFile:ye(o,"log-file"),allowedCwds:l,missingAllowedCwds:p.missingAllowedCwds,projectDiscoveryCwdIsSelectedRoot:v,projectDiscoveryImplicitCwdAliases:v?void 0:l,allowedForwardPorts:Au(ye(o,"forward-port")),codeServerBin:C.codeServerBin,editorRuntime:C.runtime,socketFactory:Xi(jo()),dependencyStatus:T,claudeCodeAvailable:D,runtimeDefaults:Im(o),channelSession:d}}function $oe(e){return yoe(e)?xoe(e,"utf8"):void 0}function Noe(e){let n=["workspace","channel","token","auth-file","oauth-callback-host"].filter(t=>e.has(t));if(n.length>0)throw new Error(`linzumi commander uses the claimed human Commander token scope; remove ${n.map(t=>`--${t}`).join(", ")}.`)}function Uoe(e,n){if(!(n!==void 0||!e.has("linzumi-thread-id")))throw new Error("linzumi commander cannot bind --linzumi-thread-id because the agent token file has no channelId")}function zoe(e){if(e!==void 0)return e;throw new Error("agent token file is missing ownerUsername; rerun linzumi claim or pass --listen-user explicitly")}function Boe(e){let n=Koe(e);switch(n.protocol){case"https:":return n.protocol="wss:",xb(n.toString());case"http:":return n.protocol="ws:",xb(n.toString());case"wss:":case"ws:":return xb(n.toString());default:throw new Error("agent token file apiUrl must use http, https, ws, or wss")}}function Koe(e){try{return new URL(e)}catch{throw new Error("agent token file apiUrl is not a valid URL")}}function xb(e){return e.endsWith("/")?e.slice(0,-1):e}async function Joe(e){if(e.explicitToken!==void 0)throw new Error(`provided local runner token is not scoped to ${e.target.workspaceSlug}/${e.target.channelSlug}`);return await e.resolveToken({kandanUrl:e.kandanUrl,workspaceSlug:e.target.workspaceSlug,channelSlug:e.target.channelSlug,authFilePath:e.authFilePath,callbackHost:e.callbackHost,requiredScopes:e.requiredScopes,reportRejectedCachedToken:e.reportRejectedCachedToken})}async function _b(e,n){
|
|
1278
|
+
`)},P=await n.resolveToken({kandanUrl:a,explicitToken:v,onboarding:p==="start"?"start":void 0,authFilePath:x,callbackHost:S,requiredScopes:p==="start"?Pm:void 0,reportRejectedCachedToken:w}),C=await n.fetchStartTarget({kandanUrl:a,accessToken:P}),D=await n.validateToken({kandanUrl:a,accessToken:P,workspaceSlug:C.workspaceSlug,channelSlug:C.channelSlug,requiredScopes:p==="start"?Pm:void 0})?P:await Joe({kandanUrl:a,explicitToken:v,target:C,authFilePath:x,callbackHost:S,requiredScopes:p==="start"?Pm:void 0,resolveToken:n.resolveToken,reportRejectedCachedToken:w}),y=await n.resolveEditorRuntime({kandanUrl:a,token:D,customCodeServerBin:f,fetchImpl:Qi(jo())}),E=await n.buildDependencyStatus({cwd:i,codexBin:h,codeServerBin:y.codeServerBin,editorRuntime:y.status});fa(E);let I=await _b(n,i);return{kandanUrl:a,token:D,runnerId:(n.ensureRunnerId??Qt)(a),workspaceSlug:C.workspaceSlug,cwd:i,codexBin:h,codexUrl:ye(o,"codex-url"),launchSource:Rm(),launchTui:o.get("launch-tui")===!0,fast:o.get("fast")===!0,logFile:ye(o,"log-file"),allowedCwds:u,projectDiscoveryCwdIsSelectedRoot:!0,allowedForwardPorts:Au(ye(o,"forward-port")),codeServerBin:y.codeServerBin,editorRuntime:y.runtime,socketFactory:Xi(jo()),dependencyStatus:E,claudeCodeAvailable:I,runtimeDefaults:Im(o),onboardingDiscovery:p,channelSession:{workspaceSlug:C.workspaceSlug,channelSlug:C.channelSlug,kandanThreadId:ye(o,"linzumi-thread-id"),listenUser:ye(o,"listen-user")??Qoe(D),model:ye(o,"model"),reasoningEffort:ye(o,"reasoning-effort"),sandbox:ye(o,"sandbox"),approvalPolicy:ye(o,"approval-policy"),allowPortForwardingByDefault:!0,streamFlushMs:Sb(o,"stream-flush-ms")}}}async function qoe(e,n={readTextFile:$oe,buildDependencyStatus:la,resolveEditorRuntime:Fi,ensureRunnerId:Qt,probeClaudeCodeAvailability:Fl}){let{cwdArg:t,flagArgs:r}=wb(e),o=Kr(r);if(o.get("help")===!0&&(process.stdout.write(cae()),process.exit(0)),Noe(o),t!==void 0&&o.has("cwd"))throw new Error("linzumi commander accepts either <folder> or --cwd, not both");let a=ye(o,"agent-token-file")??o0(),s=a0(a,n.readTextFile),i=s.channelId;Uoe(o,i);let d=i===void 0?void 0:{workspaceSlug:s.workspaceId,channelSlug:i,kandanThreadId:ye(o,"linzumi-thread-id"),listenUser:ye(o,"listen-user")??zoe(s.ownerUsername),model:ye(o,"model"),reasoningEffort:ye(o,"reasoning-effort"),sandbox:ye(o,"sandbox"),approvalPolicy:ye(o,"approval-policy"),allowPortForwardingByDefault:!0,streamFlushMs:Sb(o,"stream-flush-ms")},u=Qo(o)??Boe(s.apiUrl),c=t??ye(o,"cwd"),f=Ru(jd(c??process.cwd())).cwd,p=c===void 0&&!o.has("allowed-cwd")?jg(u):{allowedCwds:[],missingAllowedCwds:[]},l=o.has("allowed-cwd")?ir(Eu(ye(o,"allowed-cwd"))):c===void 0?p.allowedCwds.length>0?[...p.allowedCwds]:ir([f]):ir([f]),h=l[0]??f,v=o.has("allowed-cwd")||c===void 0&&p.allowedCwds.length>0,x=ye(o,"codex-bin")??"codex",S=ye(o,"code-server-bin"),w=await n.buildDependencyStatus({cwd:h,codexBin:x,codeServerBin:S});fa(w);let P=w.codex.command,C=await n.resolveEditorRuntime({kandanUrl:u,token:s.commanderToken,customCodeServerBin:S,fetchImpl:Qi(jo())}),T=await n.buildDependencyStatus({cwd:h,codexBin:P,codeServerBin:C.codeServerBin,editorRuntime:C.status});fa(T);let D=await _b(n,h);return{kandanUrl:u,token:s.commanderToken,runnerId:(n.ensureRunnerId??Qt)(u),workspaceSlug:s.workspaceId,cwd:h,codexBin:P,codexUrl:ye(o,"codex-url"),launchSource:Rm(),launchTui:o.get("launch-tui")===!0,fast:o.get("fast")===!0,logFile:ye(o,"log-file"),allowedCwds:l,missingAllowedCwds:p.missingAllowedCwds,projectDiscoveryCwdIsSelectedRoot:v,projectDiscoveryImplicitCwdAliases:v?void 0:l,allowedForwardPorts:Au(ye(o,"forward-port")),codeServerBin:C.codeServerBin,editorRuntime:C.runtime,socketFactory:Xi(jo()),dependencyStatus:T,claudeCodeAvailable:D,runtimeDefaults:Im(o),channelSession:d}}function $oe(e){return yoe(e)?xoe(e,"utf8"):void 0}function Noe(e){let n=["workspace","channel","token","auth-file","oauth-callback-host"].filter(t=>e.has(t));if(n.length>0)throw new Error(`linzumi commander uses the claimed human Commander token scope; remove ${n.map(t=>`--${t}`).join(", ")}.`)}function Uoe(e,n){if(!(n!==void 0||!e.has("linzumi-thread-id")))throw new Error("linzumi commander cannot bind --linzumi-thread-id because the agent token file has no channelId")}function zoe(e){if(e!==void 0)return e;throw new Error("agent token file is missing ownerUsername; rerun linzumi claim or pass --listen-user explicitly")}function Boe(e){let n=Koe(e);switch(n.protocol){case"https:":return n.protocol="wss:",xb(n.toString());case"http:":return n.protocol="ws:",xb(n.toString());case"wss:":case"ws:":return xb(n.toString());default:throw new Error("agent token file apiUrl must use http, https, ws, or wss")}}function Koe(e){try{return new URL(e)}catch{throw new Error("agent token file apiUrl is not a valid URL")}}function xb(e){return e.endsWith("/")?e.slice(0,-1):e}async function Joe(e){if(e.explicitToken!==void 0)throw new Error(`provided local runner token is not scoped to ${e.target.workspaceSlug}/${e.target.channelSlug}`);return await e.resolveToken({kandanUrl:e.kandanUrl,workspaceSlug:e.target.workspaceSlug,channelSlug:e.target.channelSlug,authFilePath:e.authFilePath,callbackHost:e.callbackHost,requiredScopes:e.requiredScopes,reportRejectedCachedToken:e.reportRejectedCachedToken})}async function _b(e,n){let t=e.probeClaudeCodeAvailability;if(t===void 0)return!1;try{return await t({cwd:n})}catch(r){return console.error(`claude code availability probe failed; continuing with Codex only: ${r instanceof Error?r.message:String(r)}`),!1}}async function Voe(e,n={resolveToken:tc,buildDependencyStatus:la,resolveEditorRuntime:Fi,ensureRunnerId:Qt,probeClaudeCodeAvailability:Fl}){let t=Kr(e);t.get("help")===!0&&(process.stdout.write(X5()),process.exit(0)),t.get("version")===!0&&(process.stdout.write(`${Qg}
|
|
1279
1279
|
`),process.exit(0)),Xoe(t);let r=ye(t,"workspace"),o=Qo(t)??Lt,a=Ru(jd(ye(t,"cwd")??process.cwd())).cwd,s=ir([a]),i=t.has("allowed-cwd")?{allowedCwds:[],missingAllowedCwds:[]}:jg(o),d=t.has("allowed-cwd")?ir(Eu(ye(t,"allowed-cwd"))):[...i.allowedCwds],u=s.some(C=>d.includes(C)),c=ye(t,"codex-bin")??"codex",f=ye(t,"code-server-bin"),p=t.get("no-onboarding-discovery")===!0?void 0:"start",l=await n.buildDependencyStatus({cwd:a,codexBin:c,codeServerBin:f});fa(l);let h=l.codex.command,v=ye(t,"token"),x=await n.resolveToken({kandanUrl:o,explicitToken:v,workspaceSlug:r,authFilePath:ye(t,"auth-file"),callbackHost:ye(t,"oauth-callback-host"),requiredScopes:p==="start"?Pm:void 0,reportRejectedCachedToken:C=>{process.stderr.write(`${t0(C)}
|
|
1280
1280
|
`)}}),S=await n.resolveEditorRuntime({kandanUrl:o,token:x,customCodeServerBin:f,fetchImpl:Qi(jo())}),w=await n.buildDependencyStatus({cwd:a,codexBin:h,codeServerBin:S.codeServerBin,editorRuntime:S.status});fa(w);let P=await _b(n,a);return{kandanUrl:o,token:x,runnerId:(n.ensureRunnerId??Qt)(o),cwd:a,codexBin:h,codexUrl:ye(t,"codex-url"),launchSource:Rm(),launchTui:t.get("launch-tui")===!0,fast:t.get("fast")===!0,logFile:ye(t,"log-file"),allowedCwds:Array.from(new Set([...s,...d])),missingAllowedCwds:i.missingAllowedCwds,projectDiscoveryCwdIsSelectedRoot:u,projectDiscoveryImplicitCwdAliases:u?void 0:s,allowedForwardPorts:Au(ye(t,"forward-port")),codeServerBin:S.codeServerBin,editorRuntime:S.runtime,socketFactory:Xi(jo()),dependencyStatus:w,claudeCodeAvailable:P,workspaceSlug:r??g_(x),runtimeDefaults:Im(t),onboardingDiscovery:p,channelSession:void 0,lockTakeover:{takeOverWithoutPrompt:t.get("take-over")===!0,forceNonInteractive:t.get("no-input")===!0}}}function Im(e){return{model:ye(e,"model"),reasoningEffort:ye(e,"reasoning-effort"),approvalPolicy:ye(e,"approval-policy"),sandbox:ye(e,"sandbox"),allowPortForwardingByDefault:!0}}function Rm(){return process.env.LINZUMI_ELECTRON_AUTO_CONNECT_RUNNER==="1"?"electron_auto_connect":void 0}function G5(){return Rm()??"cli"}function Woe(e){return e===void 0?{}:{workspace:e}}function Hoe(e){return e.some(n=>["--help","-h","--version"].includes(n))}function Qo(e){let n=ye(e,"api-url"),t=ye(e,"linzumi-url");if(n!==void 0&&t!==void 0&&n!==t)throw new Error("use only one of --api-url or --linzumi-url");return n??t}function Q5(e){let n=Qo(e);if(n===void 0)throw new Error("missing required flag: --api-url or --linzumi-url");return n}function Kr(e,n=bb){let t=new Map;for(let r=0;r<e.length;r+=1){let o=e[r];if(o===void 0||!o.startsWith("--"))throw new Error(`invalid argument: ${o??""}`);let a=o.slice(2),s=n.get(a);if(s===void 0)throw new Error(`invalid flag: --${a}`);if(s.kind==="boolean"){t.set(a,!0);continue}let i=e[r+1];if(i===void 0||i.startsWith("--"))throw new Error(`missing value for --${a}`);t.set(a,i),r+=1}return t}function wb(e){let n,t=[];for(let r=0;r<e.length;r+=1){let o=e[r];if(o===void 0)continue;if(!o.startsWith("--")){if(n!==void 0)throw new Error("linzumi start accepts at most one folder path");n=o;continue}t.push(o);let a=o.slice(2),s=bb.get(a);if(s===void 0)throw new Error(`invalid flag: --${a}`);if(s?.kind==="value"){let i=e[r+1];i!==void 0&&(t.push(i),r+=1)}}return{cwdArg:n,flagArgs:t}}function Goe(e){let n=[];for(let t=0;t<e.length;t+=1){let r=e[t];if(r===void 0)continue;let o=r.startsWith("--")?r.slice(2):void 0,a=o===void 0?void 0:bb.get(o);if(o==="log-file"||o==="status-dir"){a?.kind==="value"&&(t+=1);continue}if(n.push(r),a?.kind==="value"){let s=e[t+1];s!==void 0&&(n.push(s),t+=1)}}return n}function Zoe(e){let n=["workspace","channel"].filter(t=>e.has(t));if(n.length>0)throw new Error(`linzumi start chooses its workspace during browser onboarding; remove ${n.map(t=>`--${t}`).join(", ")} or use linzumi connect --workspace for an explicit workspace.`)}function jd(e){return e==="~"?H5():e.startsWith("~/")?Tm(H5(),e.slice(2)):Tm(e)}function Qoe(e){let n=Gr(e).actorUsername;if(n!==void 0)return n;throw new Error("missing --listen-user and authenticated user is unavailable")}function Xoe(e){let n=["channel","linzumi-thread-id","listen-user"].filter(t=>e.has(t));if(n.length!==0)throw new Error(`linzumi connect starts a workspace Commander; remove ${n.map(t=>`--${t}`).join(", ")}.`)}function Yoe(e){let n=ye(e,"channel"),t=ye(e,"workspace");return n===void 0?t===void 0?void 0:{workspaceSlug:t}:n.includes("/")?eae(n):{workspaceSlug:t??aae(e,"workspace"),channelSlug:n}}function eae(e){let[n,t,...r]=e.split("/");if(n===void 0||n.trim()===""||t===void 0||t.trim()===""||r.length>0)throw new Error("--channel must be CHANNEL or WORKSPACE/CHANNEL");return{workspaceSlug:n.trim(),channelSlug:t.trim()}}function vb(e){return e.threadProcess?.role==="thread"?e:{...e,machineId:_t(e.kandanUrl)===_t(Lt)?Fg():Xl(e.kandanUrl)}}function nae(e){let n=Kr(e),t=Qo(n)??Lt,r=Ru(jd(ye(n,"cwd")??process.cwd())).cwd,o=n.has("allowed-cwd")?ir(Eu(ye(n,"allowed-cwd"))):ir([r]),a=rae(),s=oae();return{kandanUrl:t,token:s,runnerId:`thread-codex-worker:${a}`,machineId:void 0,runnerLockConfigPath:void 0,workspaceSlug:ye(n,"workspace"),cwd:r,codexBin:ye(n,"codex-bin")??"codex",codexUrl:void 0,launchTui:!1,fast:n.get("fast")===!0?!0:void 0,logFile:ye(n,"log-file"),allowedCwds:o.allowedCwds,missingAllowedCwds:o.missingAllowedCwds,allowedForwardPorts:Au(ye(n,"forward-port")),codeServerBin:void 0,editorRuntime:void 0,socketFactory:void 0,runtimeDefaults:Im(n),threadProcess:{role:"thread",kandanThreadId:a},codexModelProvider:tae(n),channelSession:void 0}}function tae(e){let n=ye(e,"model-provider");if(n===void 0)return;if(n!=="wafer"&&n!=="openai-proxy")throw new Error(`unsupported --model-provider: ${n}`);let t=ye(e,"llm-proxy-base-url"),r=process.env.LINZUMI_LLM_PROXY_TOKEN?.trim();if(t===void 0)throw new Error(`--model-provider ${n} requires --llm-proxy-base-url`);if(r===void 0||r==="")throw new Error(`--model-provider ${n} requires the LINZUMI_LLM_PROXY_TOKEN env credential`);return{provider:n,llmProxyBaseUrl:t,llmProxyToken:r}}function rae(){let e=process.env.LINZUMI_THREAD_RUNNER_KANDAN_THREAD_ID;if(e===void 0||e.trim()==="")throw new Error("thread runner is missing LINZUMI_THREAD_RUNNER_KANDAN_THREAD_ID");return e}function oae(){let e=process.env.LINZUMI_THREAD_RUNNER_TOKEN;if(e===void 0||e.trim()==="")throw new Error("thread runner is missing LINZUMI_THREAD_RUNNER_TOKEN");return e}function aae(e,n){let t=ye(e,n);if(t===void 0)throw new Error(`missing --${n}`);return t}function ye(e,n){let t=e.get(n);if(typeof t=="string"&&t.trim()!=="")return t}function Sb(e,n){let t=ye(e,n);if(t===void 0)return;let r=Number(t);if(Number.isInteger(r)&&r>0)return r;throw new Error(`--${n} must be a positive integer`)}function sae(e,n){let t=ye(e,n);if(t===void 0)return;let r=Number(t);if(Number.isInteger(r)&&r>0&&r<=65535)return r;throw new Error(`--${n} must be a TCP port from 1 to 65535`)}function X5(){return`Linzumi local Codex runner
|
|
1281
1281
|
|
package/package.json
CHANGED