vibemux-worker 0.1.4 → 0.1.5

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.
@@ -1,4 +1,4 @@
1
- import pi from"dotenv";import{existsSync as rr,readFileSync as nr}from"node:fs";import ne from"node:path";import{fileURLToPath as mi}from"node:url";var Zt=null,er=null,tr=null,fi=e=>{try{let t=JSON.parse(nr(e,"utf8"));return!!(t.name&&t.version)}catch{return!1}},hi=()=>{let e=process.env.VIBEMUX_RUNTIME_ROOT?.trim();if(e)return ne.resolve(e);let t=ne.dirname(mi(import.meta.url));for(;;){let r=ne.join(t,"package.json");if(rr(r)&&fi(r))return t;let n=ne.dirname(t);if(n===t)return process.cwd();t=n}},X=()=>(Zt||(Zt=hi()),Zt),he=()=>{if(!er){let e=ne.join(X(),"package.json");er=rr(e)?JSON.parse(nr(e,"utf8")):{}}return er},Pe=()=>{if(!tr){let e=ne.join(X(),"runtime","worker-release.json");tr=rr(e)?JSON.parse(nr(e,"utf8")):{}}return tr},Z=()=>he().version?.trim()||process.env.npm_package_version?.trim()||"0.0.0",Ue=()=>ne.join(X(),"dist-worker","apps","worker","src","index.js"),pn=()=>ne.join(X(),"dist-worker","apps","worker","web"),ut=()=>{let e=process.platform==="win32"?"vibemux-worker.cmd":"vibemux-worker";return ne.join(X(),"bin",e)};import{existsSync as ft,mkdirSync as mn,readFileSync as ht,rmSync as Bi,writeFileSync as fn}from"node:fs";import{randomUUID as _i}from"node:crypto";import Ge from"node:os";import j from"node:path";var ee=e=>{let t=e?.trim();if(!t)return{};try{let r=JSON.parse(t);return r&&typeof r=="object"?r:{}}catch(r){throw new Error(r instanceof Error?`OpenCode \u914D\u7F6E JSON \u65E0\u6548\uFF1A${r.message}`:"OpenCode \u914D\u7F6E JSON \u65E0\u6548")}};var ke="built-in://vibemux",or=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),ki=(e,t,r)=>{let n=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")||`${e}-${r+1}`;return`${e}-${r+1}-${n}`};var yi=e=>e.replace(/\/+$/,""),wi=e=>e.startsWith("sse://")?`http://${e.slice(6)}`:e,xi=e=>{if(!e.executorToken?.trim())return null;let t={Authorization:`Bearer ${e.executorToken}`};return e.actingUserId?.trim()&&(t["x-vibemux-acting-user"]=e.actingUserId.trim()),{type:"remote",url:`${yi(e.cloudUrl)}/mcp/executor`,enabled:!0,headers:t}},Ci=e=>{let t=e.replace(/^stdio:\/\//,"").trim();return t?{command:t}:null},Si=e=>{let t=wi(e).trim();return t?{type:"remote",url:t,enabled:!0}:null},De=(e,t)=>e.filter(r=>r.enabled).reduce((r,n,o)=>{let s=n.id?.trim()||ki("mcp",n.name,o),i=n.target===ke?xi(t):n.transport==="stdio"||n.target.startsWith("stdio://")?Ci(n.target):Si(n.target);return i&&(r[s]=i),r},{}),pt=(e,t,r)=>{let n=ee(e),o=or(n)?{...n}:{},s=or(o.mcp)?{...o.mcp}:or(o.mcpServers)?{...o.mcpServers}:{},i=De(t,r),{mcpServers:a,...l}=o,c={...l,mcp:{...s,...i}};return JSON.stringify(c,null,2)};var bi={defaultModel:"",agent:"",permissionPolicy:""},vi={defaultModel:"gpt-5.4",sandbox:"workspace-write",approval:"never",reasoningEffort:"medium",reasoningSummary:"auto"},Pi={defaultModel:"sonnet",permissionMode:"bypassPermissions",planMode:!1},Ii={OpenCode:bi,Codex:vi,ClaudeCode:Pi};var Ti=e=>({OpenCode:{...e.OpenCode},Codex:{...e.Codex},ClaudeCode:{...e.ClaudeCode}}),Ne=(e,t)=>{let r=Ti(Ii);return e?.OpenCode&&(r.OpenCode={...r.OpenCode,...e.OpenCode}),e?.Codex&&(r.Codex={...r.Codex,...e.Codex}),e?.ClaudeCode&&(r.ClaudeCode={...r.ClaudeCode,...e.ClaudeCode}),!r.OpenCode.defaultModel.trim()&&t?.trim()&&(r.OpenCode.defaultModel=t.trim()),r};var gt=null,Ei=()=>gt||(gt=Pe(),gt),Le=()=>process.env.VIBEMUX_WORKER_RELEASE_CHANNEL?.trim()||Ei().channel?.trim()||"production",Ri=e=>e==="preview"?"vibemux-worker-preview":"vibemux-worker",Ai=e=>e==="preview"?"preview":"latest",Mi=()=>(process.env.npm_config_registry?.trim()||"https://registry.npmjs.org").replace(/\/$/,""),Oi=async e=>{let t=await fetch(`${Mi()}/${e}`,{method:"GET",signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error(`\u67E5\u8BE2 npm \u5305\u5931\u8D25\uFF0CHTTP ${t.status}`);return await t.json()},ye=async()=>{let e=Z(),t=Le(),r=he().name?.trim()||"",n=Ri(t),o=Ai(t);if(r!==n)return{ok:!0,currentVersion:e,channel:t,available:!1,packageName:n,packageTag:o,message:"\u5F53\u524D\u662F\u6E90\u7801\u6A21\u5F0F\u6216\u975E npm Worker \u5305\uFF0C\u8DF3\u8FC7\u7248\u672C\u66F4\u65B0\u68C0\u67E5\u3002"};try{let i=(await Oi(n))["dist-tags"]?.[o]?.trim();return i?i===e?{ok:!0,currentVersion:e,latestVersion:i,channel:t,available:!1,packageName:n,packageTag:o,message:`\u5F53\u524D\u5DF2\u662F\u6700\u65B0\u7248\u672C ${e}\u3002`}:{ok:!0,currentVersion:e,latestVersion:i,channel:t,available:!0,packageName:n,packageTag:o,message:`\u68C0\u6D4B\u5230\u65B0\u7248\u672C ${i}\u3002`}:{ok:!1,currentVersion:e,channel:t,available:!1,packageName:n,packageTag:o,message:`\u672A\u627E\u5230 npm dist-tag: ${o}`}}catch(s){return{ok:!1,currentVersion:e,channel:t,available:!1,packageName:n,packageTag:o,message:s instanceof Error?s.message:"\u67E5\u8BE2 npm \u66F4\u65B0\u5931\u8D25"}}};var kt=j.join(Ge.homedir(),".vibemux"),Wi=j.join(kt,"worker"),$i=j.join(kt,"worker-dev"),Ui=j.join(kt,"worker-dev-preview"),Di=j.join(kt,"worker-preview"),Ni="http://127.0.0.1:8989",Li=48100,Gi=new Set(["http://127.0.0.1:8989","http://localhost:8989","http://127.0.0.1:18989","http://localhost:18989","ws://127.0.0.1:8989","ws://localhost:8989","ws://127.0.0.1:18989","ws://localhost:18989"]),hn=()=>!!process.env.VIBEMUX_CLOUD_URL?.trim(),mt=()=>process.env.VIBEMUX_CLOUD_URL?.trim()||Pe().defaultCloudUrl?.trim()||Ni,ji=e=>process.env.NODE_ENV==="development"||hn()||!Pe().defaultCloudUrl?.trim()?!1:Gi.has(e?.trim()||""),Hi=()=>{let e=mt(),t=Le();return process.env.NODE_ENV==="development"?e.includes("preview.vibemux.com")?Ui:$i:t==="preview"||e.includes("preview.vibemux.com")?Di:Wi},qi=()=>{let e=Number(process.env.VIBEMUX_WORKER_PORT?.trim());if(Number.isFinite(e)&&e>0)return e;let t=Pe().defaultLocalServerPort;return Number.isFinite(t)&&t?t:Li},Fi=()=>process.env.OPENCODE_CONFIG_PATH?.trim()||j.join(Ge.homedir(),".config","opencode","opencode.json"),Ji=()=>{let e=process.env.CODEX_HOME?.trim()||j.join(Ge.homedir(),".codex");return j.join(e,"config.toml")},zi=()=>{let e=process.env.CLAUDE_HOME?.trim()||j.join(Ge.homedir(),".claude");return j.join(e,"settings.json")},Vi=()=>{let e=Fi();if(!ft(e))return{opencodeConfigContent:"",defaultModel:""};try{let t=ht(e,"utf8").trim();if(!t)return{opencodeConfigContent:"",defaultModel:""};let r=ee(t),n=Object.entries(r.default??{}).find(([,o])=>!!o?.trim());return{opencodeConfigContent:t,defaultModel:n?`${n[0]}/${n[1]}`:""}}catch{return{opencodeConfigContent:"",defaultModel:""}}},gn=e=>{if(!ft(e))return"";try{return ht(e,"utf8").trim()}catch{return""}},Ki=()=>{let e=process.env.VIBEMUX_WORKER_HOME?.trim();if(e)return e;let t=process.env.VIBEMUX_HOME?.trim();return t?j.join(t,"worker"):Hi()},we=()=>j.resolve(Ki()),sr=()=>j.join(we(),"config.json"),Xi=()=>j.join(we(),"machine-id"),Yi=()=>{let e=we(),t=Xi();if(ft(t)){let n=ht(t,"utf8").trim();if(n)return n}mn(e,{recursive:!0});let r=_i();return fn(t,`${r}
1
+ import pi from"dotenv";import{existsSync as rr,readFileSync as nr}from"node:fs";import ne from"node:path";import{fileURLToPath as mi}from"node:url";var Zt=null,er=null,tr=null,fi=e=>{try{let t=JSON.parse(nr(e,"utf8"));return!!(t.name&&t.version)}catch{return!1}},hi=()=>{let e=process.env.VIBEMUX_RUNTIME_ROOT?.trim();if(e)return ne.resolve(e);let t=ne.dirname(mi(import.meta.url));for(;;){let r=ne.join(t,"package.json");if(rr(r)&&fi(r))return t;let n=ne.dirname(t);if(n===t)return process.cwd();t=n}},X=()=>(Zt||(Zt=hi()),Zt),he=()=>{if(!er){let e=ne.join(X(),"package.json");er=rr(e)?JSON.parse(nr(e,"utf8")):{}}return er},Pe=()=>{if(!tr){let e=ne.join(X(),"runtime","worker-release.json");tr=rr(e)?JSON.parse(nr(e,"utf8")):{}}return tr},Z=()=>he().version?.trim()||process.env.npm_package_version?.trim()||"0.0.0",Ue=()=>ne.join(X(),"dist-worker","apps","worker","src","index.js"),pn=()=>ne.join(X(),"dist-worker","apps","worker","web"),ut=()=>{let e=process.platform==="win32"?"vibemux-worker.cmd":"vibemux-worker";return ne.join(X(),"bin",e)};import{existsSync as ft,mkdirSync as mn,readFileSync as ht,rmSync as Bi,writeFileSync as fn}from"node:fs";import{randomUUID as _i}from"node:crypto";import Ge from"node:os";import j from"node:path";var ee=e=>{let t=e?.trim();if(!t)return{};try{let r=JSON.parse(t);return r&&typeof r=="object"?r:{}}catch(r){throw new Error(r instanceof Error?`OpenCode \u914D\u7F6E JSON \u65E0\u6548\uFF1A${r.message}`:"OpenCode \u914D\u7F6E JSON \u65E0\u6548")}};var ke="built-in://vibemux",or=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),ki=(e,t,r)=>{let n=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")||`${e}-${r+1}`;return`${e}-${r+1}-${n}`};var yi=e=>e.replace(/\/+$/,""),wi=e=>e.startsWith("sse://")?`http://${e.slice(6)}`:e,xi=e=>{if(!e.executorToken?.trim())return null;let t={Authorization:`Bearer ${e.executorToken}`};return e.actingUserId?.trim()&&(t["x-vibemux-acting-user"]=e.actingUserId.trim()),{type:"remote",url:`${yi(e.cloudUrl)}/mcp/executor`,enabled:!0,headers:t}},Ci=e=>{let t=e.replace(/^stdio:\/\//,"").trim();return t?{command:t}:null},Si=e=>{let t=wi(e).trim();return t?{type:"remote",url:t,enabled:!0}:null},De=(e,t)=>e.filter(r=>r.enabled).reduce((r,n,o)=>{let s=n.id?.trim()||ki("mcp",n.name,o),i=n.target===ke?xi(t):n.transport==="stdio"||n.target.startsWith("stdio://")?Ci(n.target):Si(n.target);return i&&(r[s]=i),r},{}),pt=(e,t,r)=>{let n=ee(e),o=or(n)?{...n}:{},s=or(o.mcp)?{...o.mcp}:or(o.mcpServers)?{...o.mcpServers}:{},i=De(t,r),{mcpServers:a,...l}=o,c={...l,mcp:{...s,...i}};return JSON.stringify(c,null,2)};var bi={defaultModel:"",agent:"",permissionPolicy:""},vi={defaultModel:"gpt-5.4",sandbox:"workspace-write",approval:"never",reasoningEffort:"medium",reasoningSummary:"auto"},Pi={defaultModel:"sonnet",permissionMode:"bypassPermissions",planMode:!1},Ii={OpenCode:bi,Codex:vi,ClaudeCode:Pi};var Ti=e=>({OpenCode:{...e.OpenCode},Codex:{...e.Codex},ClaudeCode:{...e.ClaudeCode}}),Ne=(e,t)=>{let r=Ti(Ii);return e?.OpenCode&&(r.OpenCode={...r.OpenCode,...e.OpenCode}),e?.Codex&&(r.Codex={...r.Codex,...e.Codex}),e?.ClaudeCode&&(r.ClaudeCode={...r.ClaudeCode,...e.ClaudeCode}),!r.OpenCode.defaultModel.trim()&&t?.trim()&&(r.OpenCode.defaultModel=t.trim()),r};var gt=null,Ei=()=>gt||(gt=Pe(),gt),Le=()=>process.env.VIBEMUX_WORKER_RELEASE_CHANNEL?.trim()||Ei().channel?.trim()||"production",Ri=e=>e==="preview"?"vibemux-worker-preview":"vibemux-worker",Ai=e=>e==="preview"?"preview":"latest",Mi=()=>(process.env.npm_config_registry?.trim()||"https://registry.npmjs.org").replace(/\/$/,""),Oi=async e=>{let t=await fetch(`${Mi()}/${e}`,{method:"GET",signal:AbortSignal.timeout(5e3)});if(!t.ok)throw new Error(`\u67E5\u8BE2 npm \u5305\u5931\u8D25\uFF0CHTTP ${t.status}`);return await t.json()},ye=async()=>{let e=Z(),t=Le(),r=he().name?.trim()||"",n=Ri(t),o=Ai(t);if(r!==n)return{ok:!0,currentVersion:e,channel:t,available:!1,packageName:n,packageTag:o,message:"\u5F53\u524D\u662F\u6E90\u7801\u6A21\u5F0F\u6216\u975E npm Worker \u5305\uFF0C\u8DF3\u8FC7\u7248\u672C\u66F4\u65B0\u68C0\u67E5\u3002"};try{let i=(await Oi(n))["dist-tags"]?.[o]?.trim();return i?i===e?{ok:!0,currentVersion:e,latestVersion:i,channel:t,available:!1,packageName:n,packageTag:o,message:`\u5F53\u524D\u5DF2\u662F\u6700\u65B0\u7248\u672C ${e}\u3002`}:{ok:!0,currentVersion:e,latestVersion:i,channel:t,available:!0,packageName:n,packageTag:o,message:`\u68C0\u6D4B\u5230\u65B0\u7248\u672C ${i}\u3002`}:{ok:!1,currentVersion:e,channel:t,available:!1,packageName:n,packageTag:o,message:`\u672A\u627E\u5230 npm dist-tag: ${o}`}}catch(s){return{ok:!1,currentVersion:e,channel:t,available:!1,packageName:n,packageTag:o,message:s instanceof Error?s.message:"\u67E5\u8BE2 npm \u66F4\u65B0\u5931\u8D25"}}};var kt=j.join(Ge.homedir(),".vibemux"),Wi=j.join(kt,"worker"),$i=j.join(kt,"worker-dev"),Ui=j.join(kt,"worker-dev-preview"),Di=j.join(kt,"worker-preview"),Ni="http://127.0.0.1:8989",Li=48100,Gi=new Set(["http://127.0.0.1:8989","http://localhost:8989","http://127.0.0.1:18989","http://localhost:18989","ws://127.0.0.1:8989","ws://localhost:8989","ws://127.0.0.1:18989","ws://localhost:18989"]),hn=()=>!!process.env.VIBEMUX_CLOUD_URL?.trim(),mt=()=>process.env.VIBEMUX_CLOUD_URL?.trim()||Pe().defaultCloudUrl?.trim()||Ni,ji=e=>{if(process.env.NODE_ENV==="development"||hn())return!1;let t=Pe().defaultCloudUrl?.trim();if(!t)return!1;if(Gi.has(e?.trim()||""))return!0;let r=t.includes("preview.vibemux.com"),n=e?.includes("preview.vibemux.com");return r!==n},Hi=()=>{let e=mt(),t=Le();return process.env.NODE_ENV==="development"?e.includes("preview.vibemux.com")?Ui:$i:t==="preview"||e.includes("preview.vibemux.com")?Di:Wi},qi=()=>{let e=Number(process.env.VIBEMUX_WORKER_PORT?.trim());if(Number.isFinite(e)&&e>0)return e;let t=Pe().defaultLocalServerPort;return Number.isFinite(t)&&t?t:Li},Fi=()=>process.env.OPENCODE_CONFIG_PATH?.trim()||j.join(Ge.homedir(),".config","opencode","opencode.json"),Ji=()=>{let e=process.env.CODEX_HOME?.trim()||j.join(Ge.homedir(),".codex");return j.join(e,"config.toml")},zi=()=>{let e=process.env.CLAUDE_HOME?.trim()||j.join(Ge.homedir(),".claude");return j.join(e,"settings.json")},Vi=()=>{let e=Fi();if(!ft(e))return{opencodeConfigContent:"",defaultModel:""};try{let t=ht(e,"utf8").trim();if(!t)return{opencodeConfigContent:"",defaultModel:""};let r=ee(t),n=Object.entries(r.default??{}).find(([,o])=>!!o?.trim());return{opencodeConfigContent:t,defaultModel:n?`${n[0]}/${n[1]}`:""}}catch{return{opencodeConfigContent:"",defaultModel:""}}},gn=e=>{if(!ft(e))return"";try{return ht(e,"utf8").trim()}catch{return""}},Ki=()=>{let e=process.env.VIBEMUX_WORKER_HOME?.trim();if(e)return e;let t=process.env.VIBEMUX_HOME?.trim();return t?j.join(t,"worker"):Hi()},we=()=>j.resolve(Ki()),sr=()=>j.join(we(),"config.json"),Xi=()=>j.join(we(),"machine-id"),Yi=()=>{let e=we(),t=Xi();if(ft(t)){let n=ht(t,"utf8").trim();if(n)return n}mn(e,{recursive:!0});let r=_i();return fn(t,`${r}
2
2
  `,"utf8"),r},Qi=()=>({cloudUrl:mt(),machineId:Yi(),machineName:Ge.hostname(),opencodeConfigContent:"",codexConfigContent:"",claudeCodeConfigContent:"",defaultModel:"",agentSettings:Ne(),mcpServers:[],workspaceRoot:j.join(we(),"workspace"),maxConcurrency:5,labels:[],capabilities:["code-execution","git-operations"],localServerPort:Number(process.env.VIBEMUX_WORKER_PORT||qi()),projectBindings:[]}),b=()=>{let e=sr(),t=ft(e)?JSON.parse(ht(e,"utf8")):{},r={...Qi(),...t},n=Vi();hn()&&(r.cloudUrl=mt()),ji(r.cloudUrl)&&(r.cloudUrl=mt());let o=Number(process.env.VIBEMUX_WORKER_PORT?.trim());return Number.isFinite(o)&&o>0&&(r.localServerPort=o),r.opencodeConfigContent?.trim()||(r.opencodeConfigContent=n.opencodeConfigContent),r.codexConfigContent?.trim()||(r.codexConfigContent=gn(Ji())),r.claudeCodeConfigContent?.trim()||(r.claudeCodeConfigContent=gn(zi())),r.defaultModel?.trim()||(r.defaultModel=n.defaultModel),r.agentSettings=Ne(r.agentSettings,r.defaultModel),r},Ie=e=>{let t=we();mn(t,{recursive:!0}),fn(sr(),`${JSON.stringify(e,null,2)}
3
3
  `,"utf8")},Te=(e=b(),t)=>pt(e.opencodeConfigContent,e.mcpServers??[],{cloudUrl:e.cloudUrl,executorToken:e.executorToken,actingUserId:t}),yt=()=>{Bi(sr(),{force:!0})},wt=()=>{let e={...b(),executorName:void 0,executorId:void 0,executorToken:void 0};return Ie(e),e};import{existsSync as Ct}from"node:fs";import{stdin as In,stdout as Tn}from"node:process";import St from"node:path";import{createInterface as wa}from"node:readline/promises";import{existsSync as ca}from"node:fs";import la from"node:os";import wn from"node:path";import{spawn as da}from"node:child_process";import{accessSync as Zi,constants as ea,existsSync as ta}from"node:fs";import{delimiter as ir,dirname as ra,isAbsolute as na,join as oa}from"node:path";import{spawnSync as sa}from"node:child_process";var U=(e,t,r)=>{let n=sa(e,t,{cwd:r?.cwd,encoding:"utf8",env:r?.env,stdio:r?.streamOutput?"inherit":"pipe",timeout:r?.timeout??12e4});return{ok:n.status===0,stdout:n.stdout?.trim()??"",stderr:n.stderr?.trim()??"",error:n.error instanceof Error?n.error.message:void 0}},B=(e,t)=>e.stdout||e.stderr||e.error||t,_=(e,t=["--version"])=>U(e,t).ok,ia=e=>{let t=process.env.PATH??"";t.split(ir).filter(Boolean).includes(e)||(process.env.PATH=t?`${e}${ir}${t}`:e)},ar=e=>{if(!ta(e))return!1;try{return Zi(e,ea.X_OK),!0}catch{return!1}},yn=e=>{let t=(process.env.PATHEXT??".COM;.EXE;.BAT;.CMD").split(";").map(r=>r.trim().toLowerCase()).filter(Boolean);if(t.some(r=>e.toLowerCase().endsWith(r)))return ar(e)?e:null;for(let r of t){let n=`${e}${r}`;if(ar(n))return n}return null},kn=e=>process.platform==="win32"?yn(e):ar(e)?e:null,oe=e=>{if(e.includes("/")||e.includes("\\")||na(e))return kn(e);for(let t of(process.env.PATH??"").split(ir).filter(Boolean)){let r=oa(t,e),n=process.platform==="win32"?yn(r):kn(r);if(n)return ia(ra(n)),n}return null},aa=(e,t,r)=>typeof process.getuid=="function"&&process.getuid()===0?{command:e,args:t}:_("sudo")?r?.interactiveAuth?{command:"sudo",args:[e,...t]}:_("sudo",["-n","true"])?{command:"sudo",args:["-n",e,...t]}:null:null,se=(e,t,r,n)=>{let o=aa(e,t,n);return o?U(o.command,o.args,{streamOutput:n?.streamOutput,timeout:r}):{ok:!1,stdout:"",stderr:"",error:n?.interactiveAuth?"\u7F3A\u5C11 sudo \u80FD\u529B\uFF0C\u65E0\u6CD5\u81EA\u52A8\u5B89\u88C5\u3002":"\u7F3A\u5C11 root \u6216\u514D\u5BC6 sudo \u6743\u9650\uFF0C\u65E0\u6CD5\u81EA\u52A8\u5B89\u88C5\u3002"}};var je=900*1e3,xn=15e3,ua=()=>process.env.CLAUDE_HOME?.trim()||wn.join(la.homedir(),".claude"),pa=e=>e==="codex-cli"?"Codex CLI":e==="codex-auth"?"Codex \u767B\u5F55":e==="claude-cli"?"Claude Code CLI":e==="claude-auth"?"Claude Code \u8BA4\u8BC1":e,xt=(e,t,r)=>({id:e,label:pa(e),ok:r.ok,changed:r.changed,detail:r.detail,skipped:r.skipped,installer:t?.installer,commandSummary:t?.commandSummary}),Cn=(e,t,r,n,o,s)=>{let i={installer:r,commandSummary:t},a=U("npm",["install","-g",e],{streamOutput:s?.streamOutput,timeout:je});return!a.ok&&process.platform!=="win32"&&(a=se("npm",["install","-g",e],je,s)),xt(n,i,{ok:a.ok,changed:a.ok,detail:B(a,o)})},Sn=()=>_("npm")?{installer:"npm",commandSummary:"npm install -g @openai/codex",manualHint:"\u8BF7\u5148\u5B89\u88C5 Node.js/npm\uFF0C\u7136\u540E\u6267\u884C `npm install -g @openai/codex`\u3002",run(e){return Cn("@openai/codex","npm install -g @openai/codex","npm","codex-cli","\u5B89\u88C5 Codex CLI \u5931\u8D25",e)}}:null,bn=()=>process.platform==="darwin"&&_("brew")?{installer:"brew",commandSummary:"brew install --cask claude-code",manualHint:"\u8BF7\u5148\u6267\u884C `brew install --cask claude-code`\uFF0C\u7136\u540E\u8FD0\u884C `claude` \u5B8C\u6210\u767B\u5F55\u3002",run(e){let t={installer:"brew",commandSummary:"brew install --cask claude-code"},r=U("brew",["install","--cask","claude-code"],{streamOutput:e?.streamOutput,timeout:je});return xt("claude-cli",t,{ok:r.ok,changed:r.ok,detail:B(r,"\u5B89\u88C5 Claude Code CLI \u5931\u8D25")})}}:process.platform==="win32"&&_("winget")?{installer:"winget",commandSummary:"winget install Anthropic.ClaudeCode",manualHint:"\u8BF7\u5148\u6267\u884C `winget install Anthropic.ClaudeCode`\uFF0C\u7136\u540E\u8FD0\u884C `claude` \u5B8C\u6210\u767B\u5F55\u3002",run(e){let t={installer:"winget",commandSummary:"winget install Anthropic.ClaudeCode"},r=U("winget",["install","--id","Anthropic.ClaudeCode","--exact","--source","winget","--accept-package-agreements","--accept-source-agreements"],{streamOutput:e?.streamOutput,timeout:je});return xt("claude-cli",t,{ok:r.ok,changed:r.ok,detail:B(r,"\u5B89\u88C5 Claude Code CLI \u5931\u8D25")})}}:process.platform!=="win32"&&_("bash")?{installer:"install.sh",commandSummary:"curl -fsSL https://claude.ai/install.sh | bash",manualHint:"\u8BF7\u6267\u884C `curl -fsSL https://claude.ai/install.sh | bash`\uFF0C\u7136\u540E\u8FD0\u884C `claude` \u5B8C\u6210\u767B\u5F55\u3002",run(e){let t={installer:"install.sh",commandSummary:"curl -fsSL https://claude.ai/install.sh | bash"},r=U("bash",["-lc","curl -fsSL https://claude.ai/install.sh | bash"],{streamOutput:e?.streamOutput,timeout:je});return xt("claude-cli",t,{ok:r.ok,changed:r.ok,detail:B(r,"\u5B89\u88C5 Claude Code CLI \u5931\u8D25")})}}:_("npm")?{installer:"npm",commandSummary:"npm install -g @anthropic-ai/claude-code",manualHint:"\u8BF7\u5148\u5B89\u88C5 Node.js/npm\uFF0C\u7136\u540E\u6267\u884C `npm install -g @anthropic-ai/claude-code`\u3002",run(e){return Cn("@anthropic-ai/claude-code","npm install -g @anthropic-ai/claude-code","npm","claude-cli","\u5B89\u88C5 Claude Code CLI \u5931\u8D25",e)}}:null,ga=()=>{let e=oe("codex"),t=e?U(e,["--version"]):null,r=Sn();return{id:"codex-cli",label:"Codex CLI",ok:!!(e&&t?.ok),detail:e&&t?.ok?t.stdout||e:"\u672A\u68C0\u6D4B\u5230 `codex` \u53EF\u6267\u884C\u6587\u4EF6\u3002",autoInstallable:!!r,installer:r?.installer,installCommand:r?.commandSummary,hint:r?.manualHint||"\u8BF7\u5148\u5B89\u88C5 Codex CLI\uFF0C\u5E76\u786E\u8BA4 `codex` \u5DF2\u8FDB\u5165 PATH\u3002"}},ma=async()=>{let e=oe("codex");if(!e)return{id:"codex-auth",label:"Codex \u767B\u5F55",ok:!1,detail:"\u672A\u68C0\u6D4B\u5230 `codex`\uFF0C\u6682\u65F6\u65E0\u6CD5\u68C0\u67E5\u767B\u5F55\u72B6\u6001\u3002",autoInstallable:!1,hint:"\u8BF7\u5148\u5B89\u88C5 Codex CLI\uFF0C\u518D\u8FD0\u884C `codex` \u5B8C\u6210\u767B\u5F55\u3002"};let t=await new Promise(r=>{let n=da(e,["app-server"],{env:process.env,stdio:["pipe","pipe","pipe"]}),o="",s="",i=!1,a=0,l=-1,c=-1,u=h=>{i||(i=!0,clearTimeout(w),n.killed||n.kill("SIGTERM"),r(h))},d=h=>{n.stdin.write(`${JSON.stringify(h)}
4
4
  `)},w=setTimeout(()=>{u({ok:!1,detail:"Codex \u767B\u5F55\u72B6\u6001\u68C0\u67E5\u8D85\u65F6\u3002"})},xn),p=()=>{a+=1,c=a,d({jsonrpc:"2.0",id:a,method:"account/read",params:{refreshToken:!1}})},x=h=>{let m=h.trim();if(m)try{let k=JSON.parse(m);if(k.error?.message){u({ok:!1,detail:k.error.message});return}if(!k.result||typeof k.id>"u")return;if(k.id===l){d({jsonrpc:"2.0",method:"initialized"}),p();return}if(k.id!==c)return;if(k.result.requiresOpenaiAuth&&!k.result.account){u({ok:!1,detail:"Codex \u672A\u767B\u5F55\uFF0C\u8BF7\u5148\u8FD0\u884C `codex` \u5B8C\u6210\u8BA4\u8BC1\u3002"});return}u({ok:!0,detail:"Codex \u767B\u5F55\u72B6\u6001\u6B63\u5E38\u3002"})}catch{return}};n.stdout.on("data",h=>{o+=h.toString();let m=o.split(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibemux-worker",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.24.0",