makecoder 5.0.21 → 5.0.22
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/dist/coder.js
CHANGED
|
@@ -53,7 +53,7 @@ baseurl=${r||""}
|
|
|
53
53
|
\u8BF7\u68C0\u67E5\u7F51\u7EDC\uFF0C\u6216\u624B\u52A8\u4E0B\u8F7D\uFF1A${Vu}`),1);let s=r[e];if(!s||!s.url)return console.error(`[coder app] \u6E05\u5355\u4E2D\u7F3A\u5C11 ${e} \u67B6\u6784\u7684\u4E0B\u8F7D\u4FE1\u606F\u3002`),a?this._openApp():1;if(!a){let n=await this._install(s,r.version,null);return n!==0?n:this._openApp(_v[0])}let i=this._readInstalledAppVersion(a);if(i&&z9(i,r.version))if(console.error(`\u68C0\u6D4B\u5230 BigQuant \u65B0\u7248\u672C\uFF1A\u5F53\u524D ${i}\uFF0C\u6700\u65B0 ${r.version}\u3002`),await this._confirmUpgrade()){let t=await this._install(s,r.version,a);if(t!==0)return t}else console.error("\u7EE7\u7EED\u4F7F\u7528\u5DF2\u5B89\u88C5\u7684\u65E7\u7248 BigQuant\u3002");return this._openApp(a)}catch(r){return console.error(`Error: ${r.message}`),process.env.CODER_DEBUG&&console.error(r.stack),1}}_fetchManifest(){let e=Vu.startsWith("http://")?L9:j9;return new Promise(r=>{let a=!1,s=n=>{a||(a=!0,r(n))},i=e.get(Vu,{timeout:1e4},n=>{if(n.statusCode!==200)return process.env.CODER_DEBUG&&console.error(`[coder app] \u6E05\u5355 HTTP ${n.statusCode}: ${Vu}`),n.resume(),s(null);let t="";n.setEncoding("utf8"),n.on("data",u=>t+=u),n.on("end",()=>{try{s(JSON.parse(t))}catch(u){process.env.CODER_DEBUG&&console.error(`[coder app] \u6E05\u5355\u89E3\u6790\u5931\u8D25: ${u.message}`),s(null)}})});i.on("timeout",()=>{i.destroy(),process.env.CODER_DEBUG&&console.error("[coder app] \u6E05\u5355\u8BF7\u6C42\u8D85\u65F6"),s(null)}),i.on("error",n=>{process.env.CODER_DEBUG&&console.error(`[coder app] \u6E05\u5355\u8BF7\u6C42\u5931\u8D25: ${n.message}`),s(null)})})}_findInstalledAppPath(){return _v.find(e=>ur.existsSync(e))||null}_readInstalledAppVersion(e){let r=mo.join(e,"Contents","Info.plist");if(!ur.existsSync(r))return null;try{return Zd("plutil",["-extract","CFBundleShortVersionString","raw","-o","-",r],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()}catch(a){return process.env.CODER_DEBUG&&console.error(`[coder app] plutil \u8BFB\u53D6\u7248\u672C\u5931\u8D25: ${a.message}`),null}}async _confirmUpgrade(){if(!process.stdin.isTTY||!process.stdout.isTTY)return console.error("\u5F53\u524D\u4E0D\u662F\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\uFF0C\u9ED8\u8BA4\u6267\u884C\u5347\u7EA7\u3002\u8BBE\u7F6E CODER_BIGQUANT_APP_AUTO_UPGRADE=0 \u53EF\u8DF3\u8FC7\u3002"),process.env.CODER_BIGQUANT_APP_AUTO_UPGRADE!=="0";let e=await new Promise(r=>{let a=R9.createInterface({input:process.stdin,output:process.stderr});a.question("\u662F\u5426\u73B0\u5728\u5347\u7EA7 BigQuant\uFF1F[Y/n] ",s=>{a.close(),r(s.trim().toLowerCase())})});return e===""||e==="y"||e==="yes"}async _install(e,r,a){let s=a||_v[0];console.error(a?`\u6B63\u5728\u5347\u7EA7 BigQuant \u5230 ${r}\u2026`:`\u6B63\u5728\u4E0B\u8F7D\u5E76\u5B89\u88C5 BigQuant ${r}\u2026`);let i=ur.mkdtempSync(mo.join(KP.tmpdir(),"bigquant-app-")),n=mo.join(i,"BigQuant.dmg"),t=null;try{if(Zn("curl",["-fL","--retry","2","-o",n,e.url],{stdio:process.env.CODER_DEBUG?"inherit":["ignore","ignore","inherit"]}).status!==0||!ur.existsSync(n))return console.error(`\u4E0B\u8F7D BigQuant \u5B89\u88C5\u5305\u5931\u8D25\uFF1A${e.url}`),1;if(e.sha256){let d=D9(n);if(d!==e.sha256)return console.error(`BigQuant \u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25\uFF08sha256 \u4E0D\u5339\u914D\uFF09\u3002
|
|
54
54
|
\u671F\u671B ${e.sha256}
|
|
55
55
|
\u5B9E\u9645 ${d}`),1;process.env.CODER_DEBUG&&console.error("[coder app] sha256 \u6821\u9A8C\u901A\u8FC7")}let c=Zn("hdiutil",["attach",n,"-nobrowse","-readonly"],{encoding:"utf8"});if(c.status!==0)return console.error("\u6302\u8F7D BigQuant \u5B89\u88C5\u5305\u5931\u8D25\u3002"),process.env.CODER_DEBUG&&c.stderr&&console.error(c.stderr.trim()),1;if(t=N9(c.stdout),!t)return console.error("\u65E0\u6CD5\u89E3\u6790 BigQuant \u5B89\u88C5\u5305\u6302\u8F7D\u70B9\u3002"),1;let h=this._findAppInMount(t);if(!h)return console.error(`DMG \u5185\u672A\u627E\u5230 ${Xu}\u3002`),1;if(a){if(this._quitApp(),!this._replaceAppBundle(h,s))return 1}else if(Zn("ditto",[h,s],{stdio:"inherit"}).status!==0)return console.error(`\u5B89\u88C5 BigQuant \u5230 ${s} \u5931\u8D25\uFF08\u53EF\u80FD\u9700\u8981\u6743\u9650\uFF09\u3002`),1;return this._stripQuarantine(s),console.error(`\u2705 BigQuant ${r} \u5DF2${a?"\u5347\u7EA7":"\u5B89\u88C5"}\u5230 ${s}\u3002`),0}catch(u){return console.error(`\u5B89\u88C5 BigQuant \u5931\u8D25\uFF1A${u.message}`),process.env.CODER_DEBUG&&console.error(u.stack),1}finally{t&&Zn("hdiutil",["detach",t,"-quiet"],{stdio:"ignore"});try{ur.rmSync(i,{recursive:!0,force:!0})}catch{}}}_stripQuarantine(e){Zn("xattr",["-dr","com.apple.quarantine",e],{stdio:process.env.CODER_DEBUG?"inherit":"ignore"}).status!==0&&process.env.CODER_DEBUG&&console.error("[coder app] xattr \u53BB\u9694\u79BB\u8FD4\u56DE\u975E 0\uFF08\u53EF\u80FD\u672C\u5C31\u65E0\u9694\u79BB\u5C5E\u6027\uFF0C\u5FFD\u7565\uFF09\u3002")}_replaceAppBundle(e,r){let a=`${r}.coder-upgrade-backup`;try{return ur.rmSync(a,{recursive:!0,force:!0}),ur.renameSync(r,a),Zn("ditto",[e,r],{stdio:"inherit"}).status===0?(ur.rmSync(a,{recursive:!0,force:!0}),!0):(console.error(`\u5B89\u88C5\u65B0\u7248 BigQuant \u5931\u8D25\uFF1A${r}`),ur.rmSync(r,{recursive:!0,force:!0}),ur.renameSync(a,r),console.error("\u5DF2\u6062\u590D\u65E7\u7248 BigQuant\u3002"),!1)}catch(s){if(console.error(`\u66FF\u6362 BigQuant \u5931\u8D25\uFF1A${s.message}`),!ur.existsSync(r)&&ur.existsSync(a))try{ur.renameSync(a,r),console.error("\u5DF2\u6062\u590D\u65E7\u7248 BigQuant\u3002")}catch(i){console.error(`\u6062\u590D\u65E7\u7248 BigQuant \u5931\u8D25\uFF1A${i.message}`)}return!1}}_findAppInMount(e){let r=mo.join(e,Xu);if(ur.existsSync(r))return r;for(let a of ur.readdirSync(e)){let s=mo.join(e,a);if(a.endsWith(".app")&&ur.statSync(s).isDirectory())return s}return null}_quitApp(){try{Zd("osascript",["-e",'quit app "BigQuant"'],{stdio:"ignore"})}catch{}}_openApp(e){let r=e||this._findInstalledAppPath();if(r)try{return Zd("open",[r],{stdio:"ignore"}),console.error("BigQuant \u5DF2\u542F\u52A8\u3002"),0}catch(a){process.env.CODER_DEBUG&&console.error(`[coder app] open ${r} \u5931\u8D25\uFF1A${a.message}\uFF0C\u5C1D\u8BD5\u6CE8\u518C\u540E\u6309\u540D\u5B57\u542F\u52A8\u3002`),this._registerApp(r)}try{return Zd("open",["-a","BigQuant"],{stdio:"ignore"}),console.error("BigQuant \u5DF2\u542F\u52A8\u3002"),0}catch(a){return console.error(`\u542F\u52A8 BigQuant \u5931\u8D25\uFF1A${a.message}`),1}}_registerApp(e){try{Zd("/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister",["-f",e],{stdio:"ignore"})}catch{}}};function D9(o){let r=require("crypto").createHash("sha256");return r.update(ur.readFileSync(o)),r.digest("hex")}function z9(o,e){let r=HP(o),a=HP(e),s=Math.max(r.length,a.length);for(let i=0;i<s;i++){let n=r[i]||0,t=a[i]||0;if(n<t)return!0;if(n>t)return!1}return!1}function HP(o){return String(o).replace(/^v/i,"").split(".").map(e=>Number.parseInt(e,10)).map(e=>Number.isFinite(e)?e:0)}function N9(o){let e=String(o||"").split(/\r?\n/);for(let r of e){if(!r.includes("/Volumes/"))continue;let s=r.split(" ").find(n=>n.trim().startsWith("/Volumes/"));if(s)return s.trim();let i=r.match(/(\/Volumes\/.+)$/);if(i)return i[1].trim()}return null}JP.exports=bv});var el=q((CFe,ZP)=>{var U9=$P(),M9=RP(),G9=LP(),B9=NP(),W9=WP(),H9=VP();function XP(){let o=new U9;if(process.env.CODER_DEBUG)try{console.error(`[DEBUG] ClaudeBunLauncher selected, executable: ${o.findExecutablePath()}`)}catch(e){console.error(`[DEBUG] ClaudeBunLauncher executable not yet resolved: ${e.message}`)}return o}var Qd={claude:{aliases:["claude"],description:"Claude Code \u667A\u80FD\u4F53\uFF08\u9ED8\u8BA4\uFF09",create:XP,mapArgs:o=>o},"claude-app":{aliases:["claude-app"],description:"\u914D\u7F6E Claude Desktop\uFF08macOS\uFF09\u8D70 coder API\uFF1Asetup|restore|status",create:()=>new M9,mapArgs:o=>o},codex:{aliases:["codex"],description:"OpenAI Codex \u667A\u80FD\u4F53",create:()=>new B9,mapArgs:o=>o},"codex-app":{aliases:["codex-app"],description:"\u914D\u7F6E Codex Desktop\uFF08macOS\uFF09\u8D70 coder API",create:()=>new W9,mapArgs:o=>["app",...o]},gemini:{aliases:["gemini"],description:"Gemini \u667A\u80FD\u4F53",create:()=>new G9,mapArgs:o=>o},"bigquant-app":{aliases:["bigquant-app"],description:"\u5B89\u88C5/\u66F4\u65B0\u5E76\u6253\u5F00 BigQuant Desktop\uFF08macOS\uFF09",create:()=>new H9,mapArgs:o=>o,hidden:!0}},wv=Object.keys(Qd),K9=wv.filter(o=>!Qd[o].hidden),J9=new Set(["claude","codex","gemini"]);function V9(o){return Object.prototype.hasOwnProperty.call(Qd,o)}function YP(o){return Qd[o]||null}async function X9(o,e,r,a={}){let s=YP(o);return s?await s.create().launch({remainingArgs:s.mapArgs(e),coderBaseUrl:r.getCoderBaseUrl(),apikey:r.getApiKey(),extraEnv:a}):(r.fail(`unknown agent: ${o}`,`available: ${wv.join(" | ")}`),1)}ZP.exports={AGENTS:Qd,AGENT_NAMES:wv,VISIBLE_AGENT_NAMES:K9,SHORTCUTS:J9,isAgentName:V9,getAgent:YP,launchAgent:X9,createClaudeLauncher:XP}});var rq=q((RFe,tq)=>{var tl=require("fs"),QP=require("path"),{spawn:eq}=require("child_process"),Sv=class{constructor(){this.extensionId="codev.codev-background";let e=require.main?QP.dirname(require.main.filename):__dirname;this.extensionPath=QP.resolve(e,"vendor/claude-code.vsix"),this._codeCommand=null}async resolveCodeCommand(){if(this._codeCommand)return this._codeCommand;if(process.env.IS_AISTUDIO==="True"){let e="/usr/lib/aistudio/lib/vscode/bin/remote-cli/aistudio";if(tl.existsSync(e))try{return tl.accessSync(e,tl.constants.F_OK|tl.constants.X_OK),this._codeCommand=e,process.env.CODER_DEBUG&&console.log(`Using AI Studio VSCode path: ${e}`),this._codeCommand}catch(r){process.env.CODER_DEBUG&&console.log(`AI Studio path exists but not executable: ${r.message}`)}else process.env.CODER_DEBUG&&console.log(`AI Studio path not found: ${e}`)}try{let{spawn:e}=require("child_process");return new Promise(r=>{let a=e("which",["code"],{stdio:["ignore","pipe","ignore"]}),s="";a.stdout.on("data",i=>{s+=i.toString().trim()}),a.on("close",i=>{i===0&&s?(this._codeCommand=s,process.env.CODER_DEBUG&&console.log(`Resolved code command path: ${s}`),r(this._codeCommand)):(this._codeCommand="code",r(this._codeCommand))}),a.on("error",()=>{this._codeCommand="code",r(this._codeCommand)}),setTimeout(()=>{a.kill(),this._codeCommand="code",r(this._codeCommand)},3e3)})}catch{return this._codeCommand="code",this._codeCommand}}async shouldInstallExtension(){try{return process.env.IS_AISTUDIO!=="True"?(process.env.CODER_DEBUG&&console.log("Not in AI Studio environment (IS_AISTUDIO!=True), skipping extension installation"),!1):await this.isVSCodeAvailable()?await this.isExtensionInstalled()?(process.env.CODER_DEBUG&&console.log(`Extension ${this.extensionId} already installed`),!1):!!tl.existsSync(this.extensionPath):(process.env.CODER_DEBUG&&console.log("VSCode not available, skipping extension installation"),!1)}catch(e){return process.env.CODER_DEBUG&&console.error(`Error checking extension installation status: ${e.message}`),!1}}async installExtension(){try{return console.log("Installing Codev VSCode extension..."),await this.executeVSCodeCommand(["--install-extension",this.extensionPath])?(console.log("\u2705 Codev VSCode extension installed successfully"),!0):(console.warn("\u274C Failed to install Codev VSCode extension"),!1)}catch(e){return console.warn(`Error installing VSCode extension: ${e.message}`),!1}}async isVSCodeAvailable(){try{let e=process.env.IS_AISTUDIO==="True"?["--help"]:["--version"],r=await this.executeVSCodeCommand(e,{timeout:1e4});if(process.env.CODER_DEBUG&&(console.log(`VSCode availability check (${e.join(" ")}): ${r?"available":"unavailable"}`),process.env.IS_AISTUDIO==="True")){let{spawn:a}=require("child_process");try{a("which",["code"],{stdio:["ignore","pipe","ignore"]}).stdout.on("data",i=>{console.log("which code:",i.toString().trim())})}catch(s){console.log("which command failed:",s.message)}}return r}catch(e){return process.env.CODER_DEBUG&&console.error("VSCode availability check error:",e.message),!1}}async isExtensionInstalled(){let e=await this.resolveCodeCommand();try{return new Promise(r=>{try{let a={stdio:["ignore","pipe","ignore"],shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODER_DEBUG&&console.log(`Spawning: ${e} --list-extensions`);let s=eq(e,["--list-extensions"],a),i="";s.stdout.on("data",n=>{i+=n.toString()}),s.on("close",n=>{if(n===0){let t=i.split(`
|
|
56
|
-
`).map(u=>u.trim());r(t.includes(this.extensionId))}else r(!1)}),s.on("error",n=>{process.env.CODER_DEBUG&&(console.error("VSCode list extensions error:",n.message),console.error("Error code:",n.code),console.error("Error errno:",n.errno),console.error("Error syscall:",n.syscall)),r(!1)}),setTimeout(()=>{try{s.kill()}catch{}r(!1)},1e4)}catch(a){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode list extensions:",a.message),r(!1)}})}catch{return!1}}async executeVSCodeCommand(e,r={}){let a=await this.resolveCodeCommand();return new Promise(s=>{try{let i={stdio:"ignore",shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODER_DEBUG&&console.log(`Spawning: ${a} ${e.join(" ")}`);let n=eq(a,e,i);n.on("close",u=>{s(u===0)}),n.on("error",u=>{process.env.CODER_DEBUG&&(console.error("VSCode command error:",u.message),console.error("Error code:",u.code),console.error("Error errno:",u.errno),console.error("Error syscall:",u.syscall)),s(!1)});let t=r.timeout||3e4;setTimeout(()=>{try{n.kill()}catch{}s(!1)},t)}catch(i){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode command:",i.message),s(!1)}})}async ensureExtensionInstalled(){try{process.env.CODER_DEBUG&&console.log("VSCode Extension Service: Checking extension status..."),await this.shouldInstallExtension()&&await this.installExtension()}catch(e){process.env.CODER_DEBUG&&console.error("VSCode Extension Service Error:",e)}}};tq.exports=Sv});var li=q((jFe,Y9)=>{Y9.exports={name:"makecoder",version:"5.0.
|
|
56
|
+
`).map(u=>u.trim());r(t.includes(this.extensionId))}else r(!1)}),s.on("error",n=>{process.env.CODER_DEBUG&&(console.error("VSCode list extensions error:",n.message),console.error("Error code:",n.code),console.error("Error errno:",n.errno),console.error("Error syscall:",n.syscall)),r(!1)}),setTimeout(()=>{try{s.kill()}catch{}r(!1)},1e4)}catch(a){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode list extensions:",a.message),r(!1)}})}catch{return!1}}async executeVSCodeCommand(e,r={}){let a=await this.resolveCodeCommand();return new Promise(s=>{try{let i={stdio:"ignore",shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODER_DEBUG&&console.log(`Spawning: ${a} ${e.join(" ")}`);let n=eq(a,e,i);n.on("close",u=>{s(u===0)}),n.on("error",u=>{process.env.CODER_DEBUG&&(console.error("VSCode command error:",u.message),console.error("Error code:",u.code),console.error("Error errno:",u.errno),console.error("Error syscall:",u.syscall)),s(!1)});let t=r.timeout||3e4;setTimeout(()=>{try{n.kill()}catch{}s(!1)},t)}catch(i){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode command:",i.message),s(!1)}})}async ensureExtensionInstalled(){try{process.env.CODER_DEBUG&&console.log("VSCode Extension Service: Checking extension status..."),await this.shouldInstallExtension()&&await this.installExtension()}catch(e){process.env.CODER_DEBUG&&console.error("VSCode Extension Service Error:",e)}}};tq.exports=Sv});var li=q((jFe,Y9)=>{Y9.exports={name:"makecoder",version:"5.0.22",description:"MakeCoder Coder: AI Agent Runtime OS that runs and orchestrates Claude Code, Codex, Gemini and more across CLI, API, Web and chat",main:"./dist/coder.js",bin:{coder:"./dist/coder.js",cowork:"./dist/cowork.js"},scripts:{test:"node --test test/*.test.js",start:"node ./src/coder.js",build:"node scripts/build.js","build:clean":"node scripts/build.js --clean","build:dev":"node scripts/build.js --no-minify --sourcemap",postinstall:"node scripts/postinstall.js"},keywords:["ai-agent-runtime","agent-os","ai","cli","claude","gemini","codex","agent","orchestration","llm"],author:"makecoder",license:"MIT",repository:{type:"git",url:"https://github.com/makecoderai/coder.git"},homepage:"https://github.com/makecoderai/coder",dependencies:{"@larksuiteoapi/node-sdk":"^1.59.0","@wecom/aibot-node-sdk":"1.0.7",commander:"^15.0.0","node-fetch":"^3.3.2","node-pty":"^1.1.0",open:"^10.1.0",ws:"^8.21.0",yauzl:"^3.2.0",yazl:"^3.3.1",zod:"^3.25.76"},optionalDependencies:{"@anthropic-ai/claude-code-darwin-arm64":"2.1.283","@anthropic-ai/claude-code-darwin-x64":"2.1.283","@anthropic-ai/claude-code-linux-arm64":"2.1.283","@anthropic-ai/claude-code-linux-x64":"2.1.283","@anthropic-ai/claude-code-win32-x64":"2.1.283"},engines:{node:">=20.0.0"},devDependencies:{bun:">=1.3.12",chokidar:"^4.0.3"},files:["dist","scripts/postinstall.js","scripts/assemble-claude-native.mjs","scripts/claude-native-runtime.mjs"]}});var sq=q((LFe,aq)=>{var kv=require("crypto"),{URL:Z9}=require("url"),Iv=class{static generateSignature(e,r,a,s){try{let i=new Z9(e),n=Buffer.from(i.pathname),t=Buffer.from(n),u=r?typeof r=="string"?Buffer.from(r):Buffer.from(JSON.stringify(r)):Buffer.alloc(0),c=Buffer.concat([t,u,Buffer.from(s)]),h=kv.createHmac("sha256",a);return h.update(c),h.digest("hex")}catch(i){throw new Error(`Failed to generate signature: ${i.message}`)}}static validateSignature(e,r,a,s,i){return this.generateSignature(e,r,a,s)===i}static generateTimestamp(){return Date.now().toString()}static generateStrongPassword(e=16){let r="abcdefghijkmnpqrstuvwxyz",a="ABCDEFGHJKLMNPQRSTUVWXYZ",s="23456789",i="!@#$%^&*-_=+",n=r+a+s+i;e<8&&(e=8);let t=c=>c[kv.randomBytes(1)[0]%c.length],u=[t(r),t(a),t(s),t(i)];for(;u.length<e;)u.push(t(n));for(let c=u.length-1;c>0;c--){let h=kv.randomBytes(1)[0]%(c+1);[u[c],u[h]]=[u[h],u[c]]}return u.join("")}};aq.exports=Iv});var $a=q((DFe,iq)=>{function Q9(o){return new Promise((e,r)=>{o.setEncoding("utf8");let a="";o.on("data",s=>a+=s),o.on("end",()=>e({status:o.statusCode,body:a})),o.on("error",r)})}function e7(o,e){o.setEncoding("utf8");let r="";o.on("data",a=>r+=a),o.on("end",()=>e({status:o.statusCode,body:r}))}iq.exports={readTextResponse:Q9,onTextResponse:e7}});var Yu=q((zFe,cq)=>{var t7=require("https"),{URL:r7}=require("url"),{readTextResponse:a7}=$a(),oq="https://makecoder.com/bigapis/auth/v1",s7="https://makecoder.com/bigapis/kbb2/v1",i7="https://makecoder.com/wiki/api",Tv=class{constructor(e){this.token=e}request(e,r,a,s){return new Promise((i,n)=>{let t=s||oq,u=new r7(`${t}${r}`),c={"Content-Type":"application/json",Authorization:`Bearer ${this.token}`},h=null;a!=null&&(h=JSON.stringify(a),c["Content-Length"]=Buffer.byteLength(h));let d=t7.request({hostname:u.hostname,port:u.port||443,path:u.pathname+u.search,method:e,headers:c},p=>i(a7(p)));d.on("error",n),h&&d.write(h),d.end()})}};function nq(o){try{return JSON.parse(o)}catch{return null}}function o7(o){return o===401?2:o===403?5:o===404?4:o===409?6:1}function n7(o){let e=nq(o);return e?.message?e.message:e?.error?e.error:(o||"").slice(0,200)||"\u8BF7\u6C42\u5931\u8D25"}cq.exports={TeamHttp:Tv,parseJson:nq,exitCodeForStatus:o7,errorMessage:n7,API_BASE:oq,BIGKBB_BASE:s7,WIKI_API_BASE:i7}});var lq=q((NFe,dq)=>{var xv=o=>String(o??"").replace(/\|/g,"\\|").replace(/\n/g," ");function c7(o,e,r={}){let{labels:a={},empty:s="\uFF08\u7A7A\uFF09"}=r;if(!e||!e.length){o.emit(s);return}if(o.isJson){o.emit(e);return}let i=Object.keys(e[0]),t=[`| ${i.map(u=>a[u]||u).map(xv).join(" | ")} |`,`| ${i.map(()=>"---").join(" | ")} |`,...e.map(u=>`| ${i.map(c=>xv(u[c])).join(" | ")} |`)];o.emit(t.join(`
|
|
57
57
|
`))}function d7(o,e,r=null){if(o.isJson){let a={};for(let[s,i]of e)a[s]=i;r&&typeof r=="object"&&Object.assign(a,r),o.emit(a);return}o.emit(e.map(([a,s,i])=>`${i||a}: ${s??""}`).join(`
|
|
58
58
|
`))}dq.exports={emitTable:c7,emitDetails:d7,escCell:xv}});var mq=q((MFe,pq)=>{var{TeamHttp:UFe,parseJson:l7,exitCodeForStatus:h7,errorMessage:u7,BIGKBB_BASE:p7,WIKI_API_BASE:m7}=Yu();function fo(o,e,r,a=1){o.fail(e,r);let s=new Error("__handled__");throw s.handled=!0,s.code=a,s}function hq(o,e){fo(o,u7(e.body),f7(e.status),h7(e.status))}function f7(o){if(o===401)return"\u5148\u767B\u5F55: coder auth login --apikey <apiKey>";if(o===403)return"\u6743\u9650\u4E0D\u8DB3\uFF0C\u9700\u56E2\u961F owner / manager\uFF1B\u786E\u8BA4\u5F53\u524D\u56E2\u961F: coder team current";if(o===404)return"\u786E\u8BA4 id \u6B63\u786E\uFF0C\u6216\u7528 coder team list / members \u67E5\u627E"}function uq(o,e){if(e)return e;let r=o.ctx.getTeam?o.ctx.getTeam():null;return r&&r.id?r.id:null}function g7(o,e){let r=uq(o,e);return r||fo(o.ctx,"\u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F","\u8FD0\u884C coder team use <id> \u8BBE\u9ED8\u8BA4\u56E2\u961F\uFF0C\u6216\u52A0 --team <id> / \u4F4D\u7F6E\u53C2\u6570",3),r}async function y7(o,e){let r=encodeURIComponent(JSON.stringify({id__in:[e]})),a;try{a=await o.http.request("GET",`/team?constraints=${r}`)}catch(n){fo(o.ctx,`\u7F51\u7EDC\u9519\u8BEF ${n.message}`,void 0,1)}a.status!==200&&hq(o.ctx,a);let s=l7(a.body),i=s&&s.data&&s.data.items||[];return i.length||fo(o.ctx,`\u56E2\u961F ${e} \u4E0D\u5B58\u5728`,"\u8FD0\u884C coder team list \u67E5\u770B\u53EF\u7528\u56E2\u961F",4),i[0]}function v7(o){return Array.isArray(o.members)?o.members:[]}function _7(o,e,r,a){let s=e.find(i=>i.user_id===r||i.id===r||i.username===r);return s||fo(o.ctx,`\u6210\u5458 '${r}' \u4E0D\u5728\u56E2\u961F '${a||""}' \u4E2D`,"\u8FD0\u884C coder team members \u67E5\u770B\u6210\u5458\uFF0Cuser_id / username \u5747\u53EF",4),s}function b7(o,e){return e?o.filter(r=>r.user_type===e):o}function w7(o,e){e&&e!=="human"&&e!=="ai"&&fo(o.ctx,`--type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${e}'`,void 0,3)}function S7(o,e){let r=o.config&&o.config.metadata&&o.config.metadata.created_by;if(!r)return"";let a=e.find(s=>s.user_id===r);return a?a.nickname?`${a.username}(${a.nickname})`:a.username:r}function k7(o){return o==="mentor"?"admin":"member"}async function I7(o,e,r){try{let a=await o.http.request("POST",`/${e}`,r,m7);(a.status<200||a.status>=300)&&process.stderr.write(`Warning: \u77E5\u8BC6\u5E93\u540C\u6B65\u5931\u8D25 (${e}): HTTP ${a.status}
|
|
59
59
|
`)}catch(a){process.stderr.write(`Warning: \u77E5\u8BC6\u5E93\u540C\u6B65\u5931\u8D25 (${e}): ${a.message}
|
package/dist/cowork.js
CHANGED
|
@@ -53,7 +53,7 @@ baseurl=${r||""}
|
|
|
53
53
|
\u8BF7\u68C0\u67E5\u7F51\u7EDC\uFF0C\u6216\u624B\u52A8\u4E0B\u8F7D\uFF1A${Xu}`),1);let s=r[e];if(!s||!s.url)return console.error(`[coder app] \u6E05\u5355\u4E2D\u7F3A\u5C11 ${e} \u67B6\u6784\u7684\u4E0B\u8F7D\u4FE1\u606F\u3002`),a?this._openApp():1;if(!a){let n=await this._install(s,r.version,null);return n!==0?n:this._openApp(bv[0])}let i=this._readInstalledAppVersion(a);if(i&&G9(i,r.version))if(console.error(`\u68C0\u6D4B\u5230 BigQuant \u65B0\u7248\u672C\uFF1A\u5F53\u524D ${i}\uFF0C\u6700\u65B0 ${r.version}\u3002`),await this._confirmUpgrade()){let t=await this._install(s,r.version,a);if(t!==0)return t}else console.error("\u7EE7\u7EED\u4F7F\u7528\u5DF2\u5B89\u88C5\u7684\u65E7\u7248 BigQuant\u3002");return this._openApp(a)}catch(r){return console.error(`Error: ${r.message}`),process.env.CODER_DEBUG&&console.error(r.stack),1}}_fetchManifest(){let e=Xu.startsWith("http://")?U9:N9;return new Promise(r=>{let a=!1,s=n=>{a||(a=!0,r(n))},i=e.get(Xu,{timeout:1e4},n=>{if(n.statusCode!==200)return process.env.CODER_DEBUG&&console.error(`[coder app] \u6E05\u5355 HTTP ${n.statusCode}: ${Xu}`),n.resume(),s(null);let t="";n.setEncoding("utf8"),n.on("data",u=>t+=u),n.on("end",()=>{try{s(JSON.parse(t))}catch(u){process.env.CODER_DEBUG&&console.error(`[coder app] \u6E05\u5355\u89E3\u6790\u5931\u8D25: ${u.message}`),s(null)}})});i.on("timeout",()=>{i.destroy(),process.env.CODER_DEBUG&&console.error("[coder app] \u6E05\u5355\u8BF7\u6C42\u8D85\u65F6"),s(null)}),i.on("error",n=>{process.env.CODER_DEBUG&&console.error(`[coder app] \u6E05\u5355\u8BF7\u6C42\u5931\u8D25: ${n.message}`),s(null)})})}_findInstalledAppPath(){return bv.find(e=>ur.existsSync(e))||null}_readInstalledAppVersion(e){let r=mo.join(e,"Contents","Info.plist");if(!ur.existsSync(r))return null;try{return Qd("plutil",["-extract","CFBundleShortVersionString","raw","-o","-",r],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim()}catch(a){return process.env.CODER_DEBUG&&console.error(`[coder app] plutil \u8BFB\u53D6\u7248\u672C\u5931\u8D25: ${a.message}`),null}}async _confirmUpgrade(){if(!process.stdin.isTTY||!process.stdout.isTTY)return console.error("\u5F53\u524D\u4E0D\u662F\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\uFF0C\u9ED8\u8BA4\u6267\u884C\u5347\u7EA7\u3002\u8BBE\u7F6E CODER_BIGQUANT_APP_AUTO_UPGRADE=0 \u53EF\u8DF3\u8FC7\u3002"),process.env.CODER_BIGQUANT_APP_AUTO_UPGRADE!=="0";let e=await new Promise(r=>{let a=z9.createInterface({input:process.stdin,output:process.stderr});a.question("\u662F\u5426\u73B0\u5728\u5347\u7EA7 BigQuant\uFF1F[Y/n] ",s=>{a.close(),r(s.trim().toLowerCase())})});return e===""||e==="y"||e==="yes"}async _install(e,r,a){let s=a||bv[0];console.error(a?`\u6B63\u5728\u5347\u7EA7 BigQuant \u5230 ${r}\u2026`:`\u6B63\u5728\u4E0B\u8F7D\u5E76\u5B89\u88C5 BigQuant ${r}\u2026`);let i=ur.mkdtempSync(mo.join(JP.tmpdir(),"bigquant-app-")),n=mo.join(i,"BigQuant.dmg"),t=null;try{if(Zn("curl",["-fL","--retry","2","-o",n,e.url],{stdio:process.env.CODER_DEBUG?"inherit":["ignore","ignore","inherit"]}).status!==0||!ur.existsSync(n))return console.error(`\u4E0B\u8F7D BigQuant \u5B89\u88C5\u5305\u5931\u8D25\uFF1A${e.url}`),1;if(e.sha256){let d=M9(n);if(d!==e.sha256)return console.error(`BigQuant \u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25\uFF08sha256 \u4E0D\u5339\u914D\uFF09\u3002
|
|
54
54
|
\u671F\u671B ${e.sha256}
|
|
55
55
|
\u5B9E\u9645 ${d}`),1;process.env.CODER_DEBUG&&console.error("[coder app] sha256 \u6821\u9A8C\u901A\u8FC7")}let c=Zn("hdiutil",["attach",n,"-nobrowse","-readonly"],{encoding:"utf8"});if(c.status!==0)return console.error("\u6302\u8F7D BigQuant \u5B89\u88C5\u5305\u5931\u8D25\u3002"),process.env.CODER_DEBUG&&c.stderr&&console.error(c.stderr.trim()),1;if(t=B9(c.stdout),!t)return console.error("\u65E0\u6CD5\u89E3\u6790 BigQuant \u5B89\u88C5\u5305\u6302\u8F7D\u70B9\u3002"),1;let h=this._findAppInMount(t);if(!h)return console.error(`DMG \u5185\u672A\u627E\u5230 ${Yu}\u3002`),1;if(a){if(this._quitApp(),!this._replaceAppBundle(h,s))return 1}else if(Zn("ditto",[h,s],{stdio:"inherit"}).status!==0)return console.error(`\u5B89\u88C5 BigQuant \u5230 ${s} \u5931\u8D25\uFF08\u53EF\u80FD\u9700\u8981\u6743\u9650\uFF09\u3002`),1;return this._stripQuarantine(s),console.error(`\u2705 BigQuant ${r} \u5DF2${a?"\u5347\u7EA7":"\u5B89\u88C5"}\u5230 ${s}\u3002`),0}catch(u){return console.error(`\u5B89\u88C5 BigQuant \u5931\u8D25\uFF1A${u.message}`),process.env.CODER_DEBUG&&console.error(u.stack),1}finally{t&&Zn("hdiutil",["detach",t,"-quiet"],{stdio:"ignore"});try{ur.rmSync(i,{recursive:!0,force:!0})}catch{}}}_stripQuarantine(e){Zn("xattr",["-dr","com.apple.quarantine",e],{stdio:process.env.CODER_DEBUG?"inherit":"ignore"}).status!==0&&process.env.CODER_DEBUG&&console.error("[coder app] xattr \u53BB\u9694\u79BB\u8FD4\u56DE\u975E 0\uFF08\u53EF\u80FD\u672C\u5C31\u65E0\u9694\u79BB\u5C5E\u6027\uFF0C\u5FFD\u7565\uFF09\u3002")}_replaceAppBundle(e,r){let a=`${r}.coder-upgrade-backup`;try{return ur.rmSync(a,{recursive:!0,force:!0}),ur.renameSync(r,a),Zn("ditto",[e,r],{stdio:"inherit"}).status===0?(ur.rmSync(a,{recursive:!0,force:!0}),!0):(console.error(`\u5B89\u88C5\u65B0\u7248 BigQuant \u5931\u8D25\uFF1A${r}`),ur.rmSync(r,{recursive:!0,force:!0}),ur.renameSync(a,r),console.error("\u5DF2\u6062\u590D\u65E7\u7248 BigQuant\u3002"),!1)}catch(s){if(console.error(`\u66FF\u6362 BigQuant \u5931\u8D25\uFF1A${s.message}`),!ur.existsSync(r)&&ur.existsSync(a))try{ur.renameSync(a,r),console.error("\u5DF2\u6062\u590D\u65E7\u7248 BigQuant\u3002")}catch(i){console.error(`\u6062\u590D\u65E7\u7248 BigQuant \u5931\u8D25\uFF1A${i.message}`)}return!1}}_findAppInMount(e){let r=mo.join(e,Yu);if(ur.existsSync(r))return r;for(let a of ur.readdirSync(e)){let s=mo.join(e,a);if(a.endsWith(".app")&&ur.statSync(s).isDirectory())return s}return null}_quitApp(){try{Qd("osascript",["-e",'quit app "BigQuant"'],{stdio:"ignore"})}catch{}}_openApp(e){let r=e||this._findInstalledAppPath();if(r)try{return Qd("open",[r],{stdio:"ignore"}),console.error("BigQuant \u5DF2\u542F\u52A8\u3002"),0}catch(a){process.env.CODER_DEBUG&&console.error(`[coder app] open ${r} \u5931\u8D25\uFF1A${a.message}\uFF0C\u5C1D\u8BD5\u6CE8\u518C\u540E\u6309\u540D\u5B57\u542F\u52A8\u3002`),this._registerApp(r)}try{return Qd("open",["-a","BigQuant"],{stdio:"ignore"}),console.error("BigQuant \u5DF2\u542F\u52A8\u3002"),0}catch(a){return console.error(`\u542F\u52A8 BigQuant \u5931\u8D25\uFF1A${a.message}`),1}}_registerApp(e){try{Qd("/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister",["-f",e],{stdio:"ignore"})}catch{}}};function M9(o){let r=require("crypto").createHash("sha256");return r.update(ur.readFileSync(o)),r.digest("hex")}function G9(o,e){let r=KP(o),a=KP(e),s=Math.max(r.length,a.length);for(let i=0;i<s;i++){let n=r[i]||0,t=a[i]||0;if(n<t)return!0;if(n>t)return!1}return!1}function KP(o){return String(o).replace(/^v/i,"").split(".").map(e=>Number.parseInt(e,10)).map(e=>Number.isFinite(e)?e:0)}function B9(o){let e=String(o||"").split(/\r?\n/);for(let r of e){if(!r.includes("/Volumes/"))continue;let s=r.split(" ").find(n=>n.trim().startsWith("/Volumes/"));if(s)return s.trim();let i=r.match(/(\/Volumes\/.+)$/);if(i)return i[1].trim()}return null}VP.exports=wv});var tl=q((DFe,QP)=>{var W9=FP(),H9=jP(),K9=DP(),J9=UP(),V9=HP(),X9=XP();function YP(){let o=new W9;if(process.env.CODER_DEBUG)try{console.error(`[DEBUG] ClaudeBunLauncher selected, executable: ${o.findExecutablePath()}`)}catch(e){console.error(`[DEBUG] ClaudeBunLauncher executable not yet resolved: ${e.message}`)}return o}var el={claude:{aliases:["claude"],description:"Claude Code \u667A\u80FD\u4F53\uFF08\u9ED8\u8BA4\uFF09",create:YP,mapArgs:o=>o},"claude-app":{aliases:["claude-app"],description:"\u914D\u7F6E Claude Desktop\uFF08macOS\uFF09\u8D70 coder API\uFF1Asetup|restore|status",create:()=>new H9,mapArgs:o=>o},codex:{aliases:["codex"],description:"OpenAI Codex \u667A\u80FD\u4F53",create:()=>new J9,mapArgs:o=>o},"codex-app":{aliases:["codex-app"],description:"\u914D\u7F6E Codex Desktop\uFF08macOS\uFF09\u8D70 coder API",create:()=>new V9,mapArgs:o=>["app",...o]},gemini:{aliases:["gemini"],description:"Gemini \u667A\u80FD\u4F53",create:()=>new K9,mapArgs:o=>o},"bigquant-app":{aliases:["bigquant-app"],description:"\u5B89\u88C5/\u66F4\u65B0\u5E76\u6253\u5F00 BigQuant Desktop\uFF08macOS\uFF09",create:()=>new X9,mapArgs:o=>o,hidden:!0}},Sv=Object.keys(el),Y9=Sv.filter(o=>!el[o].hidden),Z9=new Set(["claude","codex","gemini"]);function Q9(o){return Object.prototype.hasOwnProperty.call(el,o)}function ZP(o){return el[o]||null}async function e7(o,e,r,a={}){let s=ZP(o);return s?await s.create().launch({remainingArgs:s.mapArgs(e),coderBaseUrl:r.getCoderBaseUrl(),apikey:r.getApiKey(),extraEnv:a}):(r.fail(`unknown agent: ${o}`,`available: ${Sv.join(" | ")}`),1)}QP.exports={AGENTS:el,AGENT_NAMES:Sv,VISIBLE_AGENT_NAMES:Y9,SHORTCUTS:Z9,isAgentName:Q9,getAgent:ZP,launchAgent:e7,createClaudeLauncher:YP}});var aq=q((zFe,rq)=>{var rl=require("fs"),eq=require("path"),{spawn:tq}=require("child_process"),kv=class{constructor(){this.extensionId="codev.codev-background";let e=require.main?eq.dirname(require.main.filename):__dirname;this.extensionPath=eq.resolve(e,"vendor/claude-code.vsix"),this._codeCommand=null}async resolveCodeCommand(){if(this._codeCommand)return this._codeCommand;if(process.env.IS_AISTUDIO==="True"){let e="/usr/lib/aistudio/lib/vscode/bin/remote-cli/aistudio";if(rl.existsSync(e))try{return rl.accessSync(e,rl.constants.F_OK|rl.constants.X_OK),this._codeCommand=e,process.env.CODER_DEBUG&&console.log(`Using AI Studio VSCode path: ${e}`),this._codeCommand}catch(r){process.env.CODER_DEBUG&&console.log(`AI Studio path exists but not executable: ${r.message}`)}else process.env.CODER_DEBUG&&console.log(`AI Studio path not found: ${e}`)}try{let{spawn:e}=require("child_process");return new Promise(r=>{let a=e("which",["code"],{stdio:["ignore","pipe","ignore"]}),s="";a.stdout.on("data",i=>{s+=i.toString().trim()}),a.on("close",i=>{i===0&&s?(this._codeCommand=s,process.env.CODER_DEBUG&&console.log(`Resolved code command path: ${s}`),r(this._codeCommand)):(this._codeCommand="code",r(this._codeCommand))}),a.on("error",()=>{this._codeCommand="code",r(this._codeCommand)}),setTimeout(()=>{a.kill(),this._codeCommand="code",r(this._codeCommand)},3e3)})}catch{return this._codeCommand="code",this._codeCommand}}async shouldInstallExtension(){try{return process.env.IS_AISTUDIO!=="True"?(process.env.CODER_DEBUG&&console.log("Not in AI Studio environment (IS_AISTUDIO!=True), skipping extension installation"),!1):await this.isVSCodeAvailable()?await this.isExtensionInstalled()?(process.env.CODER_DEBUG&&console.log(`Extension ${this.extensionId} already installed`),!1):!!rl.existsSync(this.extensionPath):(process.env.CODER_DEBUG&&console.log("VSCode not available, skipping extension installation"),!1)}catch(e){return process.env.CODER_DEBUG&&console.error(`Error checking extension installation status: ${e.message}`),!1}}async installExtension(){try{return console.log("Installing Codev VSCode extension..."),await this.executeVSCodeCommand(["--install-extension",this.extensionPath])?(console.log("\u2705 Codev VSCode extension installed successfully"),!0):(console.warn("\u274C Failed to install Codev VSCode extension"),!1)}catch(e){return console.warn(`Error installing VSCode extension: ${e.message}`),!1}}async isVSCodeAvailable(){try{let e=process.env.IS_AISTUDIO==="True"?["--help"]:["--version"],r=await this.executeVSCodeCommand(e,{timeout:1e4});if(process.env.CODER_DEBUG&&(console.log(`VSCode availability check (${e.join(" ")}): ${r?"available":"unavailable"}`),process.env.IS_AISTUDIO==="True")){let{spawn:a}=require("child_process");try{a("which",["code"],{stdio:["ignore","pipe","ignore"]}).stdout.on("data",i=>{console.log("which code:",i.toString().trim())})}catch(s){console.log("which command failed:",s.message)}}return r}catch(e){return process.env.CODER_DEBUG&&console.error("VSCode availability check error:",e.message),!1}}async isExtensionInstalled(){let e=await this.resolveCodeCommand();try{return new Promise(r=>{try{let a={stdio:["ignore","pipe","ignore"],shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODER_DEBUG&&console.log(`Spawning: ${e} --list-extensions`);let s=tq(e,["--list-extensions"],a),i="";s.stdout.on("data",n=>{i+=n.toString()}),s.on("close",n=>{if(n===0){let t=i.split(`
|
|
56
|
-
`).map(u=>u.trim());r(t.includes(this.extensionId))}else r(!1)}),s.on("error",n=>{process.env.CODER_DEBUG&&(console.error("VSCode list extensions error:",n.message),console.error("Error code:",n.code),console.error("Error errno:",n.errno),console.error("Error syscall:",n.syscall)),r(!1)}),setTimeout(()=>{try{s.kill()}catch{}r(!1)},1e4)}catch(a){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode list extensions:",a.message),r(!1)}})}catch{return!1}}async executeVSCodeCommand(e,r={}){let a=await this.resolveCodeCommand();return new Promise(s=>{try{let i={stdio:"ignore",shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODER_DEBUG&&console.log(`Spawning: ${a} ${e.join(" ")}`);let n=tq(a,e,i);n.on("close",u=>{s(u===0)}),n.on("error",u=>{process.env.CODER_DEBUG&&(console.error("VSCode command error:",u.message),console.error("Error code:",u.code),console.error("Error errno:",u.errno),console.error("Error syscall:",u.syscall)),s(!1)});let t=r.timeout||3e4;setTimeout(()=>{try{n.kill()}catch{}s(!1)},t)}catch(i){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode command:",i.message),s(!1)}})}async ensureExtensionInstalled(){try{process.env.CODER_DEBUG&&console.log("VSCode Extension Service: Checking extension status..."),await this.shouldInstallExtension()&&await this.installExtension()}catch(e){process.env.CODER_DEBUG&&console.error("VSCode Extension Service Error:",e)}}};rq.exports=kv});var li=q((NFe,t7)=>{t7.exports={name:"makecoder",version:"5.0.
|
|
56
|
+
`).map(u=>u.trim());r(t.includes(this.extensionId))}else r(!1)}),s.on("error",n=>{process.env.CODER_DEBUG&&(console.error("VSCode list extensions error:",n.message),console.error("Error code:",n.code),console.error("Error errno:",n.errno),console.error("Error syscall:",n.syscall)),r(!1)}),setTimeout(()=>{try{s.kill()}catch{}r(!1)},1e4)}catch(a){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode list extensions:",a.message),r(!1)}})}catch{return!1}}async executeVSCodeCommand(e,r={}){let a=await this.resolveCodeCommand();return new Promise(s=>{try{let i={stdio:"ignore",shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODER_DEBUG&&console.log(`Spawning: ${a} ${e.join(" ")}`);let n=tq(a,e,i);n.on("close",u=>{s(u===0)}),n.on("error",u=>{process.env.CODER_DEBUG&&(console.error("VSCode command error:",u.message),console.error("Error code:",u.code),console.error("Error errno:",u.errno),console.error("Error syscall:",u.syscall)),s(!1)});let t=r.timeout||3e4;setTimeout(()=>{try{n.kill()}catch{}s(!1)},t)}catch(i){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode command:",i.message),s(!1)}})}async ensureExtensionInstalled(){try{process.env.CODER_DEBUG&&console.log("VSCode Extension Service: Checking extension status..."),await this.shouldInstallExtension()&&await this.installExtension()}catch(e){process.env.CODER_DEBUG&&console.error("VSCode Extension Service Error:",e)}}};rq.exports=kv});var li=q((NFe,t7)=>{t7.exports={name:"makecoder",version:"5.0.22",description:"MakeCoder Coder: AI Agent Runtime OS that runs and orchestrates Claude Code, Codex, Gemini and more across CLI, API, Web and chat",main:"./dist/coder.js",bin:{coder:"./dist/coder.js",cowork:"./dist/cowork.js"},scripts:{test:"node --test test/*.test.js",start:"node ./src/coder.js",build:"node scripts/build.js","build:clean":"node scripts/build.js --clean","build:dev":"node scripts/build.js --no-minify --sourcemap",postinstall:"node scripts/postinstall.js"},keywords:["ai-agent-runtime","agent-os","ai","cli","claude","gemini","codex","agent","orchestration","llm"],author:"makecoder",license:"MIT",repository:{type:"git",url:"https://github.com/makecoderai/coder.git"},homepage:"https://github.com/makecoderai/coder",dependencies:{"@larksuiteoapi/node-sdk":"^1.59.0","@wecom/aibot-node-sdk":"1.0.7",commander:"^15.0.0","node-fetch":"^3.3.2","node-pty":"^1.1.0",open:"^10.1.0",ws:"^8.21.0",yauzl:"^3.2.0",yazl:"^3.3.1",zod:"^3.25.76"},optionalDependencies:{"@anthropic-ai/claude-code-darwin-arm64":"2.1.283","@anthropic-ai/claude-code-darwin-x64":"2.1.283","@anthropic-ai/claude-code-linux-arm64":"2.1.283","@anthropic-ai/claude-code-linux-x64":"2.1.283","@anthropic-ai/claude-code-win32-x64":"2.1.283"},engines:{node:">=20.0.0"},devDependencies:{bun:">=1.3.12",chokidar:"^4.0.3"},files:["dist","scripts/postinstall.js","scripts/assemble-claude-native.mjs","scripts/claude-native-runtime.mjs"]}});var iq=q((UFe,sq)=>{var Iv=require("crypto"),{URL:r7}=require("url"),Tv=class{static generateSignature(e,r,a,s){try{let i=new r7(e),n=Buffer.from(i.pathname),t=Buffer.from(n),u=r?typeof r=="string"?Buffer.from(r):Buffer.from(JSON.stringify(r)):Buffer.alloc(0),c=Buffer.concat([t,u,Buffer.from(s)]),h=Iv.createHmac("sha256",a);return h.update(c),h.digest("hex")}catch(i){throw new Error(`Failed to generate signature: ${i.message}`)}}static validateSignature(e,r,a,s,i){return this.generateSignature(e,r,a,s)===i}static generateTimestamp(){return Date.now().toString()}static generateStrongPassword(e=16){let r="abcdefghijkmnpqrstuvwxyz",a="ABCDEFGHJKLMNPQRSTUVWXYZ",s="23456789",i="!@#$%^&*-_=+",n=r+a+s+i;e<8&&(e=8);let t=c=>c[Iv.randomBytes(1)[0]%c.length],u=[t(r),t(a),t(s),t(i)];for(;u.length<e;)u.push(t(n));for(let c=u.length-1;c>0;c--){let h=Iv.randomBytes(1)[0]%(c+1);[u[c],u[h]]=[u[h],u[c]]}return u.join("")}};sq.exports=Tv});var $a=q((MFe,oq)=>{function a7(o){return new Promise((e,r)=>{o.setEncoding("utf8");let a="";o.on("data",s=>a+=s),o.on("end",()=>e({status:o.statusCode,body:a})),o.on("error",r)})}function s7(o,e){o.setEncoding("utf8");let r="";o.on("data",a=>r+=a),o.on("end",()=>e({status:o.statusCode,body:r}))}oq.exports={readTextResponse:a7,onTextResponse:s7}});var Zu=q((GFe,dq)=>{var i7=require("https"),{URL:o7}=require("url"),{readTextResponse:n7}=$a(),nq="https://makecoder.com/bigapis/auth/v1",c7="https://makecoder.com/bigapis/kbb2/v1",d7="https://makecoder.com/wiki/api",xv=class{constructor(e){this.token=e}request(e,r,a,s){return new Promise((i,n)=>{let t=s||nq,u=new o7(`${t}${r}`),c={"Content-Type":"application/json",Authorization:`Bearer ${this.token}`},h=null;a!=null&&(h=JSON.stringify(a),c["Content-Length"]=Buffer.byteLength(h));let d=i7.request({hostname:u.hostname,port:u.port||443,path:u.pathname+u.search,method:e,headers:c},p=>i(n7(p)));d.on("error",n),h&&d.write(h),d.end()})}};function cq(o){try{return JSON.parse(o)}catch{return null}}function l7(o){return o===401?2:o===403?5:o===404?4:o===409?6:1}function h7(o){let e=cq(o);return e?.message?e.message:e?.error?e.error:(o||"").slice(0,200)||"\u8BF7\u6C42\u5931\u8D25"}dq.exports={TeamHttp:xv,parseJson:cq,exitCodeForStatus:l7,errorMessage:h7,API_BASE:nq,BIGKBB_BASE:c7,WIKI_API_BASE:d7}});var hq=q((BFe,lq)=>{var Ev=o=>String(o??"").replace(/\|/g,"\\|").replace(/\n/g," ");function u7(o,e,r={}){let{labels:a={},empty:s="\uFF08\u7A7A\uFF09"}=r;if(!e||!e.length){o.emit(s);return}if(o.isJson){o.emit(e);return}let i=Object.keys(e[0]),t=[`| ${i.map(u=>a[u]||u).map(Ev).join(" | ")} |`,`| ${i.map(()=>"---").join(" | ")} |`,...e.map(u=>`| ${i.map(c=>Ev(u[c])).join(" | ")} |`)];o.emit(t.join(`
|
|
57
57
|
`))}function p7(o,e,r=null){if(o.isJson){let a={};for(let[s,i]of e)a[s]=i;r&&typeof r=="object"&&Object.assign(a,r),o.emit(a);return}o.emit(e.map(([a,s,i])=>`${i||a}: ${s??""}`).join(`
|
|
58
58
|
`))}lq.exports={emitTable:u7,emitDetails:p7,escCell:Ev}});var fq=q((HFe,mq)=>{var{TeamHttp:WFe,parseJson:m7,exitCodeForStatus:f7,errorMessage:g7,BIGKBB_BASE:y7,WIKI_API_BASE:v7}=Zu();function fo(o,e,r,a=1){o.fail(e,r);let s=new Error("__handled__");throw s.handled=!0,s.code=a,s}function uq(o,e){fo(o,g7(e.body),_7(e.status),f7(e.status))}function _7(o){if(o===401)return"\u5148\u767B\u5F55: coder auth login --apikey <apiKey>";if(o===403)return"\u6743\u9650\u4E0D\u8DB3\uFF0C\u9700\u56E2\u961F owner / manager\uFF1B\u786E\u8BA4\u5F53\u524D\u56E2\u961F: coder team current";if(o===404)return"\u786E\u8BA4 id \u6B63\u786E\uFF0C\u6216\u7528 coder team list / members \u67E5\u627E"}function pq(o,e){if(e)return e;let r=o.ctx.getTeam?o.ctx.getTeam():null;return r&&r.id?r.id:null}function b7(o,e){let r=pq(o,e);return r||fo(o.ctx,"\u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F","\u8FD0\u884C coder team use <id> \u8BBE\u9ED8\u8BA4\u56E2\u961F\uFF0C\u6216\u52A0 --team <id> / \u4F4D\u7F6E\u53C2\u6570",3),r}async function w7(o,e){let r=encodeURIComponent(JSON.stringify({id__in:[e]})),a;try{a=await o.http.request("GET",`/team?constraints=${r}`)}catch(n){fo(o.ctx,`\u7F51\u7EDC\u9519\u8BEF ${n.message}`,void 0,1)}a.status!==200&&uq(o.ctx,a);let s=m7(a.body),i=s&&s.data&&s.data.items||[];return i.length||fo(o.ctx,`\u56E2\u961F ${e} \u4E0D\u5B58\u5728`,"\u8FD0\u884C coder team list \u67E5\u770B\u53EF\u7528\u56E2\u961F",4),i[0]}function S7(o){return Array.isArray(o.members)?o.members:[]}function k7(o,e,r,a){let s=e.find(i=>i.user_id===r||i.id===r||i.username===r);return s||fo(o.ctx,`\u6210\u5458 '${r}' \u4E0D\u5728\u56E2\u961F '${a||""}' \u4E2D`,"\u8FD0\u884C coder team members \u67E5\u770B\u6210\u5458\uFF0Cuser_id / username \u5747\u53EF",4),s}function I7(o,e){return e?o.filter(r=>r.user_type===e):o}function T7(o,e){e&&e!=="human"&&e!=="ai"&&fo(o.ctx,`--type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${e}'`,void 0,3)}function x7(o,e){let r=o.config&&o.config.metadata&&o.config.metadata.created_by;if(!r)return"";let a=e.find(s=>s.user_id===r);return a?a.nickname?`${a.username}(${a.nickname})`:a.username:r}function E7(o){return o==="mentor"?"admin":"member"}async function P7(o,e,r){try{let a=await o.http.request("POST",`/${e}`,r,v7);(a.status<200||a.status>=300)&&process.stderr.write(`Warning: \u77E5\u8BC6\u5E93\u540C\u6B65\u5931\u8D25 (${e}): HTTP ${a.status}
|
|
59
59
|
`)}catch(a){process.stderr.write(`Warning: \u77E5\u8BC6\u5E93\u540C\u6B65\u5931\u8D25 (${e}): ${a.message}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "makecoder",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.22",
|
|
4
4
|
"description": "MakeCoder Coder: AI Agent Runtime OS that runs and orchestrates Claude Code, Codex, Gemini and more across CLI, API, Web and chat",
|
|
5
5
|
"main": "./dist/coder.js",
|
|
6
6
|
"bin": {
|
|
@@ -52,15 +52,15 @@
|
|
|
52
52
|
"@anthropic-ai/claude-code-linux-arm64": "2.1.283",
|
|
53
53
|
"@anthropic-ai/claude-code-linux-x64": "2.1.283",
|
|
54
54
|
"@anthropic-ai/claude-code-win32-x64": "2.1.283",
|
|
55
|
-
"makecoder-bin-darwin-arm64": "5.0.
|
|
56
|
-
"makecoder-bin-linux-arm64": "5.0.
|
|
57
|
-
"makecoder-bin-linux-x64": "5.0.
|
|
58
|
-
"makecoder-bin-win-x64": "5.0.
|
|
59
|
-
"makecoder-c-bin-darwin-arm64": "5.0.
|
|
60
|
-
"makecoder-c-bin-darwin-x64": "5.0.
|
|
61
|
-
"makecoder-c-bin-linux-arm64": "5.0.
|
|
62
|
-
"makecoder-c-bin-linux-x64": "5.0.
|
|
63
|
-
"makecoder-c-bin-win-x64": "5.0.
|
|
55
|
+
"makecoder-bin-darwin-arm64": "5.0.22",
|
|
56
|
+
"makecoder-bin-linux-arm64": "5.0.22",
|
|
57
|
+
"makecoder-bin-linux-x64": "5.0.22",
|
|
58
|
+
"makecoder-bin-win-x64": "5.0.22",
|
|
59
|
+
"makecoder-c-bin-darwin-arm64": "5.0.22",
|
|
60
|
+
"makecoder-c-bin-darwin-x64": "5.0.22",
|
|
61
|
+
"makecoder-c-bin-linux-arm64": "5.0.22",
|
|
62
|
+
"makecoder-c-bin-linux-x64": "5.0.22",
|
|
63
|
+
"makecoder-c-bin-win-x64": "5.0.22"
|
|
64
64
|
},
|
|
65
65
|
"engines": {
|
|
66
66
|
"node": ">=20.0.0"
|
|
@@ -103,6 +103,9 @@ export function assembleNative(officialDir, sidecarDir, outputDir) {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
fs.writeFileSync(path.join(staging, "cc-runtime.json"), JSON.stringify(manifest, null, 2) + "\n");
|
|
106
|
+
// mkdtemp creates a 0700 directory. Docker image builds assemble as root,
|
|
107
|
+
// but the CLI runs as an unprivileged user after the image is published.
|
|
108
|
+
if (process.platform !== "win32") fs.chmodSync(staging, 0o755);
|
|
106
109
|
if (fs.existsSync(output)) renameWithWindowsRetry(output, backup);
|
|
107
110
|
try { renameWithWindowsRetry(staging, output); }
|
|
108
111
|
catch (error) {
|