makecoder 4.0.65 → 4.0.67

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
@@ -1,99 +1,95 @@
1
1
  #!/usr/bin/env node
2
- var bt=Object.create;var xe=Object.defineProperty;var It=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var xt=Object.getPrototypeOf,$t=Object.prototype.hasOwnProperty;var k=(c,e)=>()=>(e||c((e={exports:{}}).exports,e),e.exports);var kt=(c,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of wt(e))!$t.call(c,n)&&n!==t&&xe(c,n,{get:()=>e[n],enumerable:!(o=It(e,n))||o.enumerable});return c};var St=(c,e,t)=>(t=c!=null?bt(xt(c)):{},kt(e||!c||!c.__esModule?xe(t,"default",{value:c,enumerable:!0}):t,c));var R=k((Co,Ct)=>{Ct.exports={name:"makecoder",version:"4.0.65",description:"MakeCoder: Unified AI agent CLI tool integrating Claude Code, Codex and Gemini CLI",main:"./dist/coder.js",bin:{coder:"./dist/coder.js"},scripts:{test:'echo "Error: no test specified" && exit 1',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:["cli","ai","claude","gemini","codex","agent"],author:"makecoder",license:"MIT",repository:{type:"git",url:"https://github.com/makecoderai/coder.git"},homepage:"https://github.com/makecoderai/coder",dependencies:{"node-fetch":"^3.3.2",open:"^10.1.0",zod:"^3.25.76"},optionalDependencies:{bun:">=1.3.12"},engines:{node:">=20.0.0"},devDependencies:{chokidar:"^4.0.3"},files:["dist","packages","scripts/postinstall.js"]}});var Ce=k((vo,Se)=>{var E=require("fs"),$e=require("path"),vt=require("os"),_t=new Set(["auth","skills","wiki","channel","team"]),ke=new Set(["claude","gemini","codex"]),Et=new Set(["pub","auth","update","skills","wiki","channel","team"]),Q=class{constructor(){let e=process.env.CODER_PROFILE,t=e?`.coder.${e}`:".coder";this.configPath=$e.join(vt.homedir(),t,"config.json"),this.defaultConfig={agent:"claude",auth:{apikey:null}}}loadConfig(){let e=$e.dirname(this.configPath);try{return E.existsSync(e)||E.mkdirSync(e,{recursive:!0}),E.existsSync(this.configPath)||E.writeFileSync(this.configPath,JSON.stringify(this.defaultConfig,null,2)),JSON.parse(E.readFileSync(this.configPath,"utf8"))}catch{return{...this.defaultConfig}}}getApiKeyFromConfig(e){return e.auth?.apikey?e.auth.apikey:e.auth?.ak&&e.auth?.sk?`${e.auth.ak}.${e.auth.sk}`:null}saveAuthToConfig(e){let t=this.loadConfig();t.auth={apikey:e};try{return E.writeFileSync(this.configPath,JSON.stringify(t,null,2)),!0}catch{return!1}}clearAuthFromConfig(){let e=this.loadConfig();e.auth={apikey:null};try{return E.writeFileSync(this.configPath,JSON.stringify(e,null,2)),!0}catch{return!1}}getTeam(){return this.loadConfig().team||null}setTeam(e,t){let o=this.loadConfig();e==null?delete o.team:o.team={id:e,name:t||""};try{return E.writeFileSync(this.configPath,JSON.stringify(o,null,2)),!0}catch{return!1}}getTeamManual(){return!!this.loadConfig().team_manual}setTeamManual(e){let t=this.loadConfig();e?t.team_manual=!0:delete t.team_manual;try{return E.writeFileSync(this.configPath,JSON.stringify(t,null,2)),!0}catch{return!1}}async parse(e=process.argv.slice(2)){let t=this.loadConfig(),o={agent:t.agent||"claude",remainingArgs:[]},n=0;if(e.length>0){if(ke.has(e[0]))o.agent=e[0],o.agentSetBySubcommand=!0,n=1;else if(Et.has(e[0])){if(o.command=e[0],n=1,e[0]==="auth"){let r=e[1];r==="--help"||r==="-h"?o.authSubcommand="--help":(o.authSubcommand=r,o.authRemainingArgs=e.slice(2)),n=e.length}else if(e[0]==="skills"){let r=e[1];o.skillsSubcommand=r==="--help"||r==="-h"?void 0:r,o.skillsArg=e[2],o.skillsRemainingArgs=e.slice(2),n=e.length}else if(e[0]==="wiki"){let r=e[1];o.wikiSubcommand=r==="--help"||r==="-h"?void 0:r,o.wikiArg=e[2],o.wikiRemainingArgs=e.slice(2),n=e.length}else if(e[0]==="team"){let r=e[1];o.teamSubcommand=r==="--help"||r==="-h"?void 0:r,o.teamArg=e[2],o.teamRemainingArgs=e.slice(2),n=e.length}else if(e[0]==="channel"){let r=e[1];r==="--help"||r==="-h"?o.channelSubcommand="--help":r==="list"||r==="show"||r==="add"||r==="remove"||r==="update"?(o.channelSubcommand=r,o.channelArg=e[2],o.channelRemainingArgs=e.slice(2)):o.channelRemainingArgs=e.slice(1),n=e.length}}}for(;n<e.length;){let r=e[n];if(r==="--agent"){if(o.agentSetBySubcommand)throw new Error(`\u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\u5B50\u547D\u4EE4 '${o.agent}' \u548C --agent\uFF0C\u8BF7\u9009\u62E9\u5176\u4E00`);let i=e[n+1];if(!i||!ke.has(i))throw new Error("--agent \u9700\u8981\u6307\u5B9A\u4EE3\u7406\u7C7B\u578B\uFF08claude|gemini|codex\uFF09");o.agent=i,n+=2}else if(r==="--apikey"){let i=e[n+1];if(!i||i.startsWith("--"))throw new Error("--apikey \u9700\u8981\u63D0\u4F9B API Key \u503C");if(i.indexOf(".")===-1)throw new Error("API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk>");o.apikey=i,n+=2}else if(r==="--name"){let i=e[n+1];i&&!i.startsWith("--")?(o.pubName=i,n+=2):n+=1}else if(r==="--allow-clone")o.allowClone=!0,n+=1;else if(r==="--meta-data"){let i=e[n+1];if(!i||i.startsWith("--"))throw new Error("--meta-data \u9700\u8981\u4E00\u4E2A JSON \u5B57\u7B26\u4E32\u503C");try{JSON.parse(i)}catch(a){throw new Error(`--meta-data \u4E0D\u662F\u5408\u6CD5\u7684 JSON\uFF1A${a.message}`)}o.pubMetaData=i,n+=2}else{o.remainingArgs=e.slice(n);break}}if(o.command!=="auth"&&!o.apikey){let r=this.getApiKeyFromConfig(t);o.apikey=r||process.env.CODER_APIKEY||null}o.codevServer=process.env.CODEV_SERVER||t.codevServer||"https://makecoder.com/bigapis/codev/v1";let s=o.remainingArgs.includes("--version")||o.remainingArgs.includes("-v")||o.remainingArgs.includes("--help")||o.remainingArgs.includes("-h");return!_t.has(o.command)&&!s&&!o.apikey&&await this._oauthLogin(o),o}async _oauthLogin(e){console.log(`\u274C \u5C1A\u672A\u767B\u5F55
2
+ var pt=Object.create;var we=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var ft=Object.getOwnPropertyNames;var gt=Object.getPrototypeOf,yt=Object.prototype.hasOwnProperty;var S=(l,e)=>()=>(e||l((e={exports:{}}).exports,e),e.exports);var bt=(l,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ft(e))!yt.call(l,n)&&n!==t&&we(l,n,{get:()=>e[n],enumerable:!(o=ht(e,n))||o.enumerable});return l};var It=(l,e,t)=>(t=l!=null?pt(gt(l)):{},bt(e||!l||!l.__esModule?we(t,"default",{value:l,enumerable:!0}):t,l));var U=S((po,wt)=>{wt.exports={name:"makecoder",version:"4.0.67",description:"MakeCoder: Unified AI agent CLI tool integrating Claude Code, Codex and Gemini CLI",main:"./dist/coder.js",bin:{coder:"./dist/coder.js"},scripts:{test:'echo "Error: no test specified" && exit 1',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:["cli","ai","claude","gemini","codex","agent"],author:"makecoder",license:"MIT",repository:{type:"git",url:"https://github.com/makecoderai/coder.git"},homepage:"https://github.com/makecoderai/coder",dependencies:{bun:">=1.3.12","node-fetch":"^3.3.2",open:"^10.1.0",zod:"^3.25.76"},engines:{node:">=20.0.0"},devDependencies:{chokidar:"^4.0.3"},files:["dist","packages","scripts/postinstall.js"]}});var Se=S((ho,ke)=>{var D=require("fs"),xe=require("path"),xt=require("os"),$t=new Set(["auth","skills","wiki","channel","team"]),$e=new Set(["claude","gemini","codex"]),kt=new Set(["pub","auth","update","skills","wiki","channel","team"]),Y=class{constructor(){let e=process.env.CODER_PROFILE,t=e?`.coder.${e}`:".coder";this.configPath=xe.join(xt.homedir(),t,"config.json"),this.defaultConfig={agent:"claude",auth:{apikey:null}}}loadConfig(){let e=xe.dirname(this.configPath);try{return D.existsSync(e)||D.mkdirSync(e,{recursive:!0}),D.existsSync(this.configPath)||D.writeFileSync(this.configPath,JSON.stringify(this.defaultConfig,null,2)),JSON.parse(D.readFileSync(this.configPath,"utf8"))}catch{return{...this.defaultConfig}}}getApiKeyFromConfig(e){return e.auth?.apikey?e.auth.apikey:e.auth?.ak&&e.auth?.sk?`${e.auth.ak}.${e.auth.sk}`:null}saveAuthToConfig(e){let t=this.loadConfig();t.auth={apikey:e};try{return D.writeFileSync(this.configPath,JSON.stringify(t,null,2)),!0}catch{return!1}}clearAuthFromConfig(){let e=this.loadConfig();e.auth={apikey:null};try{return D.writeFileSync(this.configPath,JSON.stringify(e,null,2)),!0}catch{return!1}}getTeam(){return this.loadConfig().team||null}setTeam(e,t){let o=this.loadConfig();e==null?delete o.team:o.team={id:e,name:t||""};try{return D.writeFileSync(this.configPath,JSON.stringify(o,null,2)),!0}catch{return!1}}getTeamManual(){return!!this.loadConfig().team_manual}setTeamManual(e){let t=this.loadConfig();e?t.team_manual=!0:delete t.team_manual;try{return D.writeFileSync(this.configPath,JSON.stringify(t,null,2)),!0}catch{return!1}}async parse(e=process.argv.slice(2)){let t=this.loadConfig(),o={agent:t.agent||"claude",remainingArgs:[]},n=0;if(e.length>0){if($e.has(e[0]))o.agent=e[0],o.agentSetBySubcommand=!0,n=1;else if(kt.has(e[0])){if(o.command=e[0],n=1,e[0]==="auth"){let r=e[1];r==="--help"||r==="-h"?o.authSubcommand="--help":(o.authSubcommand=r,o.authRemainingArgs=e.slice(2)),n=e.length}else if(e[0]==="skills"){let r=e[1];o.skillsSubcommand=r==="--help"||r==="-h"?void 0:r,o.skillsArg=e[2],o.skillsRemainingArgs=e.slice(2),n=e.length}else if(e[0]==="wiki"){let r=e[1];o.wikiSubcommand=r==="--help"||r==="-h"?void 0:r,o.wikiArg=e[2],o.wikiRemainingArgs=e.slice(2),n=e.length}else if(e[0]==="team"){let r=e[1];o.teamSubcommand=r==="--help"||r==="-h"?void 0:r,o.teamArg=e[2],o.teamRemainingArgs=e.slice(2),n=e.length}else if(e[0]==="channel"){let r=e[1];r==="--help"||r==="-h"?o.channelSubcommand="--help":r==="list"||r==="show"||r==="add"||r==="remove"||r==="update"?(o.channelSubcommand=r,o.channelArg=e[2],o.channelRemainingArgs=e.slice(2)):o.channelRemainingArgs=e.slice(1),n=e.length}}}for(;n<e.length;){let r=e[n];if(r==="--agent"){if(o.agentSetBySubcommand)throw new Error(`\u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\u5B50\u547D\u4EE4 '${o.agent}' \u548C --agent\uFF0C\u8BF7\u9009\u62E9\u5176\u4E00`);let i=e[n+1];if(!i||!$e.has(i))throw new Error("--agent \u9700\u8981\u6307\u5B9A\u4EE3\u7406\u7C7B\u578B\uFF08claude|gemini|codex\uFF09");o.agent=i,n+=2}else if(r==="--apikey"){let i=e[n+1];if(!i||i.startsWith("--"))throw new Error("--apikey \u9700\u8981\u63D0\u4F9B API Key \u503C");if(i.indexOf(".")===-1)throw new Error("API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk>");o.apikey=i,n+=2}else if(r==="--name"){let i=e[n+1];i&&!i.startsWith("--")?(o.pubName=i,n+=2):n+=1}else if(r==="--allow-clone")o.allowClone=!0,n+=1;else if(r==="--meta-data"){let i=e[n+1];if(!i||i.startsWith("--"))throw new Error("--meta-data \u9700\u8981\u4E00\u4E2A JSON \u5B57\u7B26\u4E32\u503C");try{JSON.parse(i)}catch(c){throw new Error(`--meta-data \u4E0D\u662F\u5408\u6CD5\u7684 JSON\uFF1A${c.message}`)}o.pubMetaData=i,n+=2}else{o.remainingArgs=e.slice(n);break}}if(o.command!=="auth"&&!o.apikey){let r=this.getApiKeyFromConfig(t);o.apikey=r||process.env.CODER_APIKEY||null}o.codevServer=process.env.CODEV_SERVER||t.codevServer||"https://makecoder.com/bigapis/codev/v1";let s=o.remainingArgs.includes("--version")||o.remainingArgs.includes("-v")||o.remainingArgs.includes("--help")||o.remainingArgs.includes("-h");return!$t.has(o.command)&&!s&&!o.apikey&&await this._oauthLogin(o),o}async _oauthLogin(e){console.log(`\u274C \u5C1A\u672A\u767B\u5F55
3
3
  `),console.log("\u8BF7\u5148\u767B\u5F55:"),console.log(` coder auth login
4
4
  `),console.log("\u6216\u76F4\u63A5\u63D0\u4F9B API Key:"),console.log(` coder auth login --apikey <your-api-key>
5
5
  `),console.log(`\u83B7\u53D6 API Key: https://makecoder.com/my/apikeys
6
- `),process.exit(1)}showHelp(){let{version:e}=R(),t=[`Coder v${e} - \u7EDF\u4E00 AI \u4EE3\u7406 CLI`,"","Usage: coder [options] [command] [arguments]","","Arguments:"," prompt \u60A8\u7684\u63D0\u793A\u8BCD","","Commands:"," claude \u542F\u52A8 Claude Code \u4EE3\u7406\uFF08\u9ED8\u8BA4\uFF09"," gemini \u542F\u52A8 Gemini \u4EE3\u7406"," codex \u542F\u52A8 OpenAI Codex \u4EE3\u7406"," auth \u7BA1\u7406\u8EAB\u4EFD\u9A8C\u8BC1\u51ED\u8BC1"," update \u5347\u7EA7 Coder \u5230\u6700\u65B0\u7248\u672C"," pub \u53D1\u5E03\u5F53\u524D\u76EE\u5F55\u4E3A MakeCoder \u7F51\u9875\u5E94\u7528"," skills \u7BA1\u7406 Claude Code skills"," wiki \u7BA1\u7406 MakeCoder \u77E5\u8BC6\u5E93"," channel \u7BA1\u7406\u6E20\u9053\u7ED1\u5B9A\uFF08\u4F01\u4E1A\u5FAE\u4FE1\u7B49\uFF09"," team \u7BA1\u7406\u56E2\u961F\u4E0E\u6210\u5458\uFF08\u9762\u5411 AI\uFF09","","Options:"," --agent <agent> \u6307\u5B9A\u4F7F\u7528\u7684 AI \u4EE3\u7406\uFF08claude|gemini|codex\uFF09"," --apikey <key> \u4E34\u65F6\u63D0\u4F9B API Key\uFF08\u683C\u5F0F: <ak>.<sk>\uFF09"," --version, -v \u663E\u793A\u7248\u672C\u53F7"," --help, -h \u663E\u793A\u6B64\u5E2E\u52A9\u4FE1\u606F","","Examples:"," coder claude \u542F\u52A8 Claude Code \u4EE3\u7406"," coder gemini \u542F\u52A8 Gemini \u4EE3\u7406"," coder auth login \u767B\u5F55\uFF08\u6D4F\u89C8\u5668\u6216\u7EC8\u7AEF\u8F93\u5165 API Key\uFF09"," coder auth login --apikey <key> \u76F4\u63A5\u4FDD\u5B58 API Key"," coder auth logout \u9000\u51FA\u767B\u5F55"," coder auth status \u67E5\u770B\u767B\u5F55\u72B6\u6001"," coder pub --name myproject \u53D1\u5E03\u5F53\u524D\u76EE\u5F55\u4E3A MakeCoder \u7F51\u9875\u5E94\u7528"," coder skills --help \u67E5\u770B skills \u5B50\u547D\u4EE4\u5E2E\u52A9"," coder wiki --help \u67E5\u770B wiki \u5B50\u547D\u4EE4\u5E2E\u52A9"," coder channel --help \u67E5\u770B channel \u5B50\u547D\u4EE4\u5E2E\u52A9"," coder team --help \u67E5\u770B team \u5B50\u547D\u4EE4\u5E2E\u52A9","",`\u914D\u7F6E\u6587\u4EF6: ${this.configPath}`];console.log(t.join(`
7
- `))}};Se.exports=Q});var L=k((_o,ve)=>{function Dt(c=process.argv.slice(2)){return c.includes("--print")||c.includes("-p")}function Ot(){return process.env.CODER_NESTED==="1"||!process.stdout.isTTY}ve.exports={isPrintMode:Dt,shouldSuppressUpdateNotice:Ot}});var M=k((Do,Ee)=>{var{spawn:Pt}=require("child_process"),_e=require("path"),At=require("fs"),Eo=require("os"),{isPrintMode:Tt}=L(),ee=class{constructor(e){this.config=e}findExecutablePath(){let e=_e.dirname(require.main.filename);for(let t of this.config.executablePaths){let o=_e.resolve(e,t);if(At.existsSync(o))return o}throw new Error(`Could not find executable in any of the configured paths: ${this.config.executablePaths.join(", ")}`)}handleChildMessages(e){process.env.CODEV_DEBUG&&console.log("Child process message handler initialized"),e.connected&&(e.on("message",t=>{this.onChildMessage(t)}),e.on("exit",async(t,o)=>{try{await this.handleChildProcessExit(t,o)}catch(n){console.error("Error in handleChildProcessExit:",n.message)}}),e.on("error",t=>{this.handleChildProcessError(t)}))}onChildMessage(e){process.env.CODEV_DEBUG&&console.log("Received IPC message from child:",e)}handleChildProcessExit(e,t){}handleChildProcessError(e){}async launch(e={}){let{remainingArgs:t=[],codevServer:o,apikey:n=null,extraEnv:s={}}=e;try{let r=this.findExecutablePath();return process.env.CODEV_DEBUG&&console.log(`executablePath: ${r}`),new Promise((i,a)=>{let l={...process.env,...this.config.environmentVariables(o),...s};n&&(l.CODER_APIKEY=n);let d=["--no-warnings"];process.env.CODEV_INSPECT_BRK==="True"&&d.push("--inspect-brk"),d.push(r,...t);let u=Pt("node",d,{env:l,stdio:["inherit","inherit","inherit","ipc"]});this.handleChildMessages(u),u.on("error",p=>{console.error(`Failed to start: ${p.message}`),a(p)}),u.on("exit",async(p,m)=>{Tt(t)||m&&console.log(`terminated by signal: ${m}`)}),process.on("SIGINT",async()=>{console.log(`
8
- Terminating ...`),u.kill("SIGTERM"),setTimeout(()=>{u.killed||u.kill("SIGKILL")},8e3)}),process.on("SIGTERM",async()=>{console.log(`
9
- Terminating ...`),u.kill("SIGTERM"),setTimeout(()=>{u.killed||u.kill("SIGKILL")},8e3)})})}catch(r){throw r}}};Ee.exports=ee});var Pe=k((Oo,Oe)=>{var qt=M(),F=require("path"),De=require("fs"),te=class extends qt{constructor(){super({executablePaths:["cc.mjs","../dist/cc.mjs","/tmp/claude-code/package/cc.mjs"],environmentVariables:e=>({ANTHROPIC_BASE_URL:`${e}/claude`,ANTHROPIC_API_KEY:"null",DISABLE_TELEMETRY:!0,CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:!0,DISABLE_COST_WARNINGS:!0,DISABLE_NON_ESSENTIAL_MODEL_CALLS:!0,CODEV_SERVER:e,CLAUDE_CODE_ATTRIBUTION_HEADER:"0",DISABLE_AUTOUPDATER:"1"})})}findExecutablePath(){let e=F.dirname(require.main.filename);for(let o of this.config.executablePaths){let n=F.resolve(e,o);if(De.existsSync(n))return n}let t=this._findGlobalMakecoderCcMjs();if(t)return t;throw new Error(`Could not find Claude Code (node) executable in any of the configured paths: ${this.config.executablePaths.join(", ")}`)}_findGlobalMakecoderCcMjs(){let e=F.dirname(process.execPath),t=[F.join(e,"..","lib","node_modules","makecoder","dist","cc.mjs"),F.join(e,"node_modules","makecoder","dist","cc.mjs")];for(let o of t)if(De.existsSync(o))return o;return null}};Oe.exports=te});var Te=k((Po,Ae)=>{var Bt=M(),{spawn:jt,execFileSync:Ut}=require("child_process"),D=require("path"),q=require("fs"),{isPrintMode:Lt}=L(),Nt=process.env.CODEV_DEBUG==="True",oe=class extends Bt{constructor(){let e=`${process.platform}-${process.arch}`;super({executablePaths:[`${e}/cc.js`,`../dist/${e}/cc.js`,`/tmp/claude-code-${e}/package/extracted/src/entrypoints/cc.js`],environmentVariables:t=>({ANTHROPIC_BASE_URL:`${t}/claude`,ANTHROPIC_API_KEY:"null",DISABLE_TELEMETRY:!0,CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:!0,DISABLE_COST_WARNINGS:!0,DISABLE_NON_ESSENTIAL_MODEL_CALLS:!0,CODEV_SERVER:t,CLAUDE_CODE_ATTRIBUTION_HEADER:"0",DISABLE_INSTALLATION_CHECKS:"1",DISABLE_AUTOUPDATER:"1",ANTHROPIC_DEFAULT_HAIKU_MODEL:"claude-haiku-4-5"})})}async launch(e={}){return this._launchWithBun(e)}findExecutablePath(){let e=D.dirname(require.main.filename);for(let o of this.config.executablePaths){let n=D.resolve(e,o);if(q.existsSync(n))return n}let t=this._findGlobalMakecoderCc();if(t)return t;throw new Error(`Could not find Claude Code (bun) executable in any of the configured paths: ${this.config.executablePaths.join(", ")}`)}_findGlobalMakecoderCc(){let e=`${process.platform}-${process.arch}`,t=D.dirname(process.execPath),o=[D.join(t,"..","lib","node_modules","makecoder","dist",e,"cc.js"),D.join(t,"node_modules","makecoder","dist",e,"cc.js")];for(let n of o)if(q.existsSync(n))return n;return null}_resolveBunPath(){let e=process.platform==="win32",t=e?"bun.exe":"bun";try{return Ut(t,["--version"],{stdio:"ignore"}),t}catch{}let o=D.join(process.env.HOME||process.env.USERPROFILE||"",".local","bin",t);if(q.existsSync(o))return o;let n=D.join(__dirname,"..","..","node_modules",".bin",t);if(q.existsSync(n))return n;let s=this._getBunPlatformPackage();if(s)try{let r=D.dirname(require.resolve(`${s}/package.json`)),i=D.join(r,"bin",t);if(q.existsSync(i))return i}catch{}try{let r=require.resolve(`bun/${e?"bin/bun.exe":"bin/bun"}`);if(q.existsSync(r))return r}catch{}throw new Error("bun is not installed. Install it with: npm install -g bun or curl -fsSL https://bun.sh/install | bash")}_getBunPlatformPackage(){let e=process.platform,t=process.arch;return{"darwin-arm64":"@oven-sh/bun-darwin-aarch64","darwin-x64":"@oven-sh/bun-darwin-x64","linux-arm64":"@oven-sh/bun-linux-aarch64","linux-x64":"@oven-sh/bun-linux-x64","win32-x64":"@oven-sh/bun-windows-x64"}[`${e}-${t}`]||null}async _launchWithBun(e={}){let{remainingArgs:t=[],codevServer:o,apikey:n=null,extraEnv:s={}}=e,r=this.findExecutablePath(),i=this._resolveBunPath();return Nt&&(console.log(`executablePath (bun): ${r}`),console.log(`bunPath: ${i}`)),new Promise((a,l)=>{let d={...process.env,...this.config.environmentVariables(o),CODER_EXECPATH:q.realpathSync(process.argv[1]),...s};n&&(d.CODER_APIKEY=n);let u=[r,...t],p=jt(i,u,{env:d,stdio:["inherit","inherit","inherit","ipc"]});p.on("error",m=>{m.code==="ENOENT"?console.error("bun binary not found. Install it with: npm install -g bun or curl -fsSL https://bun.sh/install | bash"):console.error(`Failed to start bun: ${m.message}`),l(m)}),p.on("exit",async(m,f)=>{Lt(t)||f&&console.log(`terminated by signal: ${f}`)}),process.on("SIGINT",async()=>{console.log(`
10
- Terminating ...`),p.kill("SIGTERM"),setTimeout(()=>{p.killed||p.kill("SIGKILL")},8e3)}),process.on("SIGTERM",async()=>{console.log(`
11
- Terminating ...`),p.kill("SIGTERM"),setTimeout(()=>{p.killed||p.kill("SIGKILL")},8e3)})})}};Ae.exports=oe});var je=k((Ao,Be)=>{var Rt=M(),J=require("path"),qe=require("fs"),ne=class extends Rt{constructor(){super({executablePaths:["gemini/gemini.js","../dist/gemini/gemini.js"],environmentVariables:e=>({GOOGLE_GEMINI_BASE_URL:`${e}/gemini`,GEMINI_API_KEY:"null",GOOGLE_API_KEY:"null",GOOGLE_CLOUD_PROJECT:"coder",GOOGLE_CLOUD_LOCATION:"coder",USE_VERTEX:!0,GEMINI_TELEMETRY_ENABLED:"false",GEMINI_TELEMETRY_LOG_PROMPTS:"false"})})}findExecutablePath(){let e=J.dirname(require.main.filename);for(let o of this.config.executablePaths){let n=J.resolve(e,o);if(qe.existsSync(n))return n}let t=this._findGlobalMakecoderGemini();if(t)return t;throw new Error(`Could not find Gemini executable in any of the configured paths: ${this.config.executablePaths.join(", ")}`)}_findGlobalMakecoderGemini(){let e=J.dirname(process.execPath),t=[J.join(e,"..","lib","node_modules","makecoder","dist","gemini","gemini.js"),J.join(e,"node_modules","makecoder","dist","gemini","gemini.js")];for(let o of t)if(qe.existsSync(o))return o;return null}};Be.exports=ne});var Le=k((To,Ue)=>{var Mt=M(),G=require("path"),re=require("fs"),{spawn:Ft}=require("child_process"),Jt=process.env.CODEV_DEBUG==="True",se=class extends Mt{constructor(){super({executablePaths:["codex.mjs","../dist/codex.mjs"],environmentVariables:()=>({CODEX_DISABLE_WEBSOCKET:"1"})})}checkCodexAvailability(){try{let e=this.findExecutablePath();return re.existsSync(e)}catch{return!1}}findExecutablePath(){let e=G.dirname(require.main.filename);for(let o of this.config.executablePaths){let n=G.resolve(e,o);if(re.existsSync(n))return n}let t=this._findGlobalMakecoderCodex();if(t)return t;throw new Error(`Could not find Codex executable in any of the configured paths: ${this.config.executablePaths.join(", ")}`)}_findGlobalMakecoderCodex(){let e=G.dirname(process.execPath),t=[G.join(e,"..","lib","node_modules","makecoder","dist","codex.mjs"),G.join(e,"node_modules","makecoder","dist","codex.mjs")];for(let o of t)if(re.existsSync(o))return o;return null}async launch(e={}){let{remainingArgs:t=[],codevServer:o,apikey:n=null}=e;try{if(!this.checkCodexAvailability())throw new Error("Codex executable not found. Please ensure makecoder is properly installed: npm install -g makecoder@latest");let s=this.findExecutablePath();Jt&&console.log(`executablePath: ${s}`);let i=[...["-c",`openai_base_url="${o}/codex"`,"-c","analytics.enabled=false","-c","feedback.enabled=false","-c","check_for_update_on_startup=false","-c",'otel.exporter="none"',"-c",'otel.trace_exporter="none"',"-c",'otel.metrics_exporter="none"'],...t];return new Promise((a,l)=>{let d={...process.env,...this.config.environmentVariables(o)};n&&(d.CODER_APIKEY=n);let u=["--no-warnings"];process.env.CODEV_INSPECT_BRK==="True"&&u.push("--inspect-brk"),u.push(s,...i);let p=Ft("node",u,{env:d,stdio:["inherit","inherit","inherit","ipc"]});this.handleChildMessages(p),p.on("error",m=>{console.error(`Failed to start Codex: ${m.message}`),l(m)}),p.on("exit",async(m,f)=>{f&&console.log(`terminated by signal: ${f}`)}),process.on("SIGINT",async()=>{console.log(`
12
- Terminating ...`),p.kill("SIGTERM"),setTimeout(()=>{p.killed||p.kill("SIGKILL")},8e3)}),process.on("SIGTERM",async()=>{console.log(`
13
- Terminating ...`),p.kill("SIGTERM"),setTimeout(()=>{p.killed||p.kill("SIGKILL")},8e3)})})}catch(s){throw s}}};Ue.exports=se});var Fe=k((qo,Me)=>{var V=require("fs"),Ne=require("path"),{spawn:Re}=require("child_process"),ie=class{constructor(){this.extensionId="codev.codev-background";let e=require.main?Ne.dirname(require.main.filename):__dirname;this.extensionPath=Ne.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(V.existsSync(e))try{return V.accessSync(e,V.constants.F_OK|V.constants.X_OK),this._codeCommand=e,process.env.CODEV_DEBUG&&console.log(`Using AI Studio VSCode path: ${e}`),this._codeCommand}catch(t){process.env.CODEV_DEBUG&&console.log(`AI Studio path exists but not executable: ${t.message}`)}else process.env.CODEV_DEBUG&&console.log(`AI Studio path not found: ${e}`)}try{let{spawn:e}=require("child_process");return new Promise(t=>{let o=e("which",["code"],{stdio:["ignore","pipe","ignore"]}),n="";o.stdout.on("data",s=>{n+=s.toString().trim()}),o.on("close",s=>{s===0&&n?(this._codeCommand=n,process.env.CODEV_DEBUG&&console.log(`Resolved code command path: ${n}`),t(this._codeCommand)):(this._codeCommand="code",t(this._codeCommand))}),o.on("error",()=>{this._codeCommand="code",t(this._codeCommand)}),setTimeout(()=>{o.kill(),this._codeCommand="code",t(this._codeCommand)},3e3)})}catch{return this._codeCommand="code",this._codeCommand}}async shouldInstallExtension(){try{return process.env.IS_AISTUDIO!=="True"?(process.env.CODEV_DEBUG&&console.log("Not in AI Studio environment (IS_AISTUDIO!=True), skipping extension installation"),!1):await this.isVSCodeAvailable()?await this.isExtensionInstalled()?(process.env.CODEV_DEBUG&&console.log(`Extension ${this.extensionId} already installed`),!1):!!V.existsSync(this.extensionPath):(process.env.CODEV_DEBUG&&console.log("VSCode not available, skipping extension installation"),!1)}catch(e){return process.env.CODEV_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"],t=await this.executeVSCodeCommand(e,{timeout:1e4});if(process.env.CODEV_DEBUG&&(console.log(`VSCode availability check (${e.join(" ")}): ${t?"available":"unavailable"}`),process.env.IS_AISTUDIO==="True")){let{spawn:o}=require("child_process");try{o("which",["code"],{stdio:["ignore","pipe","ignore"]}).stdout.on("data",s=>{console.log("which code:",s.toString().trim())})}catch(n){console.log("which command failed:",n.message)}}return t}catch(e){return process.env.CODEV_DEBUG&&console.error("VSCode availability check error:",e.message),!1}}async isExtensionInstalled(){let e=await this.resolveCodeCommand();try{return new Promise(t=>{try{let o={stdio:["ignore","pipe","ignore"],shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODEV_DEBUG&&console.log(`Spawning: ${e} --list-extensions`);let n=Re(e,["--list-extensions"],o),s="";n.stdout.on("data",r=>{s+=r.toString()}),n.on("close",r=>{if(r===0){let i=s.split(`
14
- `).map(a=>a.trim());t(i.includes(this.extensionId))}else t(!1)}),n.on("error",r=>{process.env.CODEV_DEBUG&&(console.error("VSCode list extensions error:",r.message),console.error("Error code:",r.code),console.error("Error errno:",r.errno),console.error("Error syscall:",r.syscall)),t(!1)}),setTimeout(()=>{try{n.kill()}catch{}t(!1)},1e4)}catch(o){process.env.CODEV_DEBUG&&console.error("Failed to spawn VSCode list extensions:",o.message),t(!1)}})}catch{return!1}}async executeVSCodeCommand(e,t={}){let o=await this.resolveCodeCommand();return new Promise(n=>{try{let s={stdio:"ignore",shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODEV_DEBUG&&console.log(`Spawning: ${o} ${e.join(" ")}`);let r=Re(o,e,s);r.on("close",a=>{n(a===0)}),r.on("error",a=>{process.env.CODEV_DEBUG&&(console.error("VSCode command error:",a.message),console.error("Error code:",a.code),console.error("Error errno:",a.errno),console.error("Error syscall:",a.syscall)),n(!1)});let i=t.timeout||3e4;setTimeout(()=>{try{r.kill()}catch{}n(!1)},i)}catch(s){process.env.CODEV_DEBUG&&console.error("Failed to spawn VSCode command:",s.message),n(!1)}})}async ensureExtensionInstalled(){try{process.env.CODEV_DEBUG&&console.log("VSCode Extension Service: Checking extension status..."),await this.shouldInstallExtension()&&await this.installExtension()}catch(e){process.env.CODEV_DEBUG&&console.error("VSCode Extension Service Error:",e)}}};Me.exports=ie});var Ve=k((Bo,Ge)=>{var v=require("fs"),B=require("path"),Gt=require("readline"),{execSync:z}=require("child_process"),Je=require("os"),ce=class{constructor(){this.serverUrl="https://makecoder.com/bigapis/codev/v1/coderpub"}getClaudeJsonlPath(e,t=!1){let o=e.replace(/[/_]/g,"-"),n=B.join(Je.homedir(),".claude","projects",o);if(t&&(console.log(`
15
- \u{1F4C2} [allow-clone] \u67E5\u627E JSONL \u6587\u4EF6...`),console.log(` \u9879\u76EE\u76EE\u5F55: ${e}`),console.log(` Claude \u9879\u76EE\u540D: ${o}`),console.log(` Claude \u9879\u76EE\u76EE\u5F55: ${n}`)),!v.existsSync(n))return t&&console.log(" \u274C Claude \u9879\u76EE\u76EE\u5F55\u4E0D\u5B58\u5728"),null;t&&console.log(" \u2713 Claude \u9879\u76EE\u76EE\u5F55\u5B58\u5728");try{let s=v.readdirSync(n).filter(r=>r.endsWith(".jsonl")).map(r=>({name:r,path:B.join(n,r),mtime:v.statSync(B.join(n,r)).mtime,size:v.statSync(B.join(n,r)).size})).sort((r,i)=>i.mtime-r.mtime);return t&&(console.log(` \u627E\u5230 ${s.length} \u4E2A JSONL \u6587\u4EF6:`),s.forEach((r,i)=>{let a=(r.size/1024).toFixed(2),l=r.mtime.toLocaleString(),d=i===0?" <- \u6700\u65B0":"";console.log(` ${i+1}. ${r.name} (${a} KB, ${l})${d}`)})),s.length>0?(t&&console.log(` \u2713 \u9009\u62E9\u6700\u65B0\u6587\u4EF6: ${s[0].name}`),s[0].path):(t&&console.log(" \u274C \u76EE\u5F55\u4E2D\u6CA1\u6709 JSONL \u6587\u4EF6"),null)}catch(s){return t&&console.log(` \u274C \u8BFB\u53D6\u76EE\u5F55\u5931\u8D25: ${s.message}`),null}}async promptForName(){let e=Gt.createInterface({input:process.stdin,output:process.stdout});return new Promise((t,o)=>{e.question("\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0 (name): ",n=>{e.close();let s=n.trim();if(!s){o(new Error("\u9879\u76EE\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A"));return}if(!/^[a-zA-Z0-9_-]+$/.test(s)){o(new Error("\u9879\u76EE\u540D\u79F0\u53EA\u80FD\u5305\u542B\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\u548C\u8FDE\u5B57\u7B26"));return}t(s)})})}async createZip(e,t={}){let{allowClone:o=!1}=t,n=Je.tmpdir(),s=`coder-pub-${Date.now()}.zip`,r=B.join(n,s);try{let i=!1;if(v.existsSync(B.join(e,".git")))try{z(`git archive -o "${r}" HEAD`,{cwd:e,stdio:"pipe"}),console.log("\u{1F4E6} \u4F7F\u7528 git archive \u521B\u5EFA\u538B\u7F29\u5305\uFF08\u5DF2\u6392\u9664 .gitignore \u4E2D\u7684\u6587\u4EF6\uFF09"),i=!0}catch{console.log("\u26A0\uFE0F git archive \u5931\u8D25\uFF0C\u4F7F\u7528\u666E\u901A zip \u547D\u4EE4")}if(!i){let l=[".git/*","node_modules/*",".env",".env.*","*.log",".DS_Store"].map(d=>`-x "${d}"`).join(" ");z(`zip -r "${r}" . ${l}`,{cwd:e,stdio:"pipe"}),console.log("\u{1F4E6} \u5DF2\u521B\u5EFA\u538B\u7F29\u5305")}if(o){console.log(`
16
- \u{1F504} [allow-clone] \u5F00\u59CB\u5904\u7406 AI \u751F\u6210\u8BB0\u5F55...`);let a=this.getClaudeJsonlPath(e,!0);if(a){let l=B.join(n,"coder.pub.jsonl"),u=(v.statSync(a).size/1024).toFixed(2);console.log(`
17
- \u{1F4E6} [allow-clone] \u6253\u5305 JSONL \u6587\u4EF6...`),console.log(` \u6E90\u6587\u4EF6: ${a}`),console.log(` \u6587\u4EF6\u5927\u5C0F: ${u} KB`),console.log(` \u4E34\u65F6\u6587\u4EF6: ${l}`),v.copyFileSync(a,l),console.log(" \u2713 \u5DF2\u590D\u5236\u5230\u4E34\u65F6\u76EE\u5F55"),console.log(` \u76EE\u6807 ZIP: ${r}`),console.log(" \u76EE\u6807\u6587\u4EF6\u540D: coder.pub.jsonl"),z(`zip -j "${r}" "${l}"`,{stdio:"pipe"}),console.log(" \u2713 \u5DF2\u6DFB\u52A0\u5230 ZIP \u5305"),v.unlinkSync(l),console.log(" \u2713 \u5DF2\u6E05\u7406\u4E34\u65F6\u6587\u4EF6"),console.log(`\u{1F4CB} [allow-clone] AI \u751F\u6210\u8BB0\u5F55\u5904\u7406\u5B8C\u6210 (coder.pub.jsonl)
6
+ `),process.exit(1)}showHelp(){let{version:e}=U(),t=[`Coder v${e} - \u7EDF\u4E00 AI \u4EE3\u7406 CLI`,"","Usage: coder [options] [command] [arguments]","","Arguments:"," prompt \u60A8\u7684\u63D0\u793A\u8BCD","","Commands:"," claude \u542F\u52A8 Claude Code \u4EE3\u7406\uFF08\u9ED8\u8BA4\uFF09"," gemini \u542F\u52A8 Gemini \u4EE3\u7406"," codex \u542F\u52A8 OpenAI Codex \u4EE3\u7406"," auth \u7BA1\u7406\u8EAB\u4EFD\u9A8C\u8BC1\u51ED\u8BC1"," update \u5347\u7EA7 Coder \u5230\u6700\u65B0\u7248\u672C"," pub \u53D1\u5E03\u5F53\u524D\u76EE\u5F55\u4E3A MakeCoder \u7F51\u9875\u5E94\u7528"," skills \u7BA1\u7406 Claude Code skills"," wiki \u7BA1\u7406 MakeCoder \u77E5\u8BC6\u5E93"," channel \u7BA1\u7406\u6E20\u9053\u7ED1\u5B9A\uFF08\u4F01\u4E1A\u5FAE\u4FE1\u7B49\uFF09"," team \u7BA1\u7406\u56E2\u961F\u4E0E\u6210\u5458\uFF08\u9762\u5411 AI\uFF09","","Options:"," --agent <agent> \u6307\u5B9A\u4F7F\u7528\u7684 AI \u4EE3\u7406\uFF08claude|gemini|codex\uFF09"," --apikey <key> \u4E34\u65F6\u63D0\u4F9B API Key\uFF08\u683C\u5F0F: <ak>.<sk>\uFF09"," --version, -v \u663E\u793A\u7248\u672C\u53F7"," --help, -h \u663E\u793A\u6B64\u5E2E\u52A9\u4FE1\u606F","","Examples:"," coder claude \u542F\u52A8 Claude Code \u4EE3\u7406"," coder gemini \u542F\u52A8 Gemini \u4EE3\u7406"," coder auth login \u767B\u5F55\uFF08\u6D4F\u89C8\u5668\u6216\u7EC8\u7AEF\u8F93\u5165 API Key\uFF09"," coder auth login --apikey <key> \u76F4\u63A5\u4FDD\u5B58 API Key"," coder auth logout \u9000\u51FA\u767B\u5F55"," coder auth status \u67E5\u770B\u767B\u5F55\u72B6\u6001"," coder pub --name myproject \u53D1\u5E03\u5F53\u524D\u76EE\u5F55\u4E3A MakeCoder \u7F51\u9875\u5E94\u7528"," coder skills --help \u67E5\u770B skills \u5B50\u547D\u4EE4\u5E2E\u52A9"," coder wiki --help \u67E5\u770B wiki \u5B50\u547D\u4EE4\u5E2E\u52A9"," coder channel --help \u67E5\u770B channel \u5B50\u547D\u4EE4\u5E2E\u52A9"," coder team --help \u67E5\u770B team \u5B50\u547D\u4EE4\u5E2E\u52A9","",`\u914D\u7F6E\u6587\u4EF6: ${this.configPath}`];console.log(t.join(`
7
+ `))}};ke.exports=Y});var N=S((fo,Ce)=>{var{spawn:St}=require("child_process"),L=require("path"),ve=require("fs"),X=class{constructor(e){this.config=e}findExecutablePath(){let e=L.dirname(require.main.filename);for(let t of this.config.executablePaths){let o=L.resolve(e,t);if(ve.existsSync(o))return o}if(this.config.globalSubPath){let t=this._findGlobalMakecoderPath(this.config.globalSubPath);if(t)return t}throw new Error(`Could not find ${this.config.name||"executable"} in any of the configured paths: ${this.config.executablePaths.join(", ")}`)}_findGlobalMakecoderPath(e){let t=L.dirname(process.execPath),o=[L.join(t,"..","lib","node_modules","makecoder","dist",e),L.join(t,"node_modules","makecoder","dist",e)];for(let n of o)if(ve.existsSync(n))return n;return null}async launch(e={}){let{remainingArgs:t=[],codevServer:o,apikey:n=null,extraEnv:s={}}=e;try{let r=this.findExecutablePath();return process.env.CODEV_DEBUG&&console.log(`executablePath: ${r}`),new Promise((i,c)=>{let a={...process.env,...this.config.environmentVariables(o),...s};n&&(a.CODER_APIKEY=n);let d=["--no-warnings"];process.env.CODEV_INSPECT_BRK==="True"&&d.push("--inspect-brk"),d.push(r,...t);let u=St("node",d,{env:a,stdio:"inherit"});u.on("error",m=>{console.error(`Failed to start: ${m.message}`),c(m)}),u.on("exit",m=>i(m)),process.on("SIGINT",()=>{}),process.on("SIGTERM",()=>{u.kill("SIGTERM"),setTimeout(()=>{u.killed||u.kill("SIGKILL")},8e3)})})}catch(r){throw r}}};Ce.exports=X});var Ee=S((go,_e)=>{var vt=N(),Z=class extends vt{constructor(){super({name:"Claude Code (node)",executablePaths:["cc.mjs","../dist/cc.mjs","/tmp/claude-code/package/cc.mjs"],globalSubPath:"cc.mjs",environmentVariables:e=>({ANTHROPIC_BASE_URL:`${e}/claude`,ANTHROPIC_API_KEY:"null",DISABLE_TELEMETRY:!0,CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:!0,DISABLE_COST_WARNINGS:!0,DISABLE_NON_ESSENTIAL_MODEL_CALLS:!0,CODEV_SERVER:e,CLAUDE_CODE_ATTRIBUTION_HEADER:"0",DISABLE_AUTOUPDATER:"1"})})}};_e.exports=Z});var Oe=S((yo,De)=>{var Ct=N(),{spawn:_t,execFileSync:Et}=require("child_process"),G=require("path"),R=require("fs"),Q=class extends Ct{constructor(){let e=`${process.platform}-${process.arch}`;super({name:"Claude Code (bun)",executablePaths:[`${e}/cc.js`,`../dist/${e}/cc.js`,`/tmp/claude-code-${e}/package/extracted/src/entrypoints/cc.js`],globalSubPath:`${e}/cc.js`,environmentVariables:t=>({ANTHROPIC_BASE_URL:`${t}/claude`,ANTHROPIC_API_KEY:"null",DISABLE_TELEMETRY:!0,CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:!0,DISABLE_COST_WARNINGS:!0,DISABLE_NON_ESSENTIAL_MODEL_CALLS:!0,CODEV_SERVER:t,CLAUDE_CODE_ATTRIBUTION_HEADER:"0",DISABLE_INSTALLATION_CHECKS:"1",DISABLE_AUTOUPDATER:"1",ANTHROPIC_DEFAULT_HAIKU_MODEL:"claude-haiku-4-5"})})}_resolveBunPath(){let e=process.platform==="win32",t=e?"bun.exe":"bun",o=process.env.HOME||process.env.USERPROFILE||"";try{return Et(t,["--version"],{stdio:"ignore"}),t}catch{}if(o){let s=G.join(o,".bun","bin",t);if(R.existsSync(s))return s}if(o){let s=G.join(o,".local","bin",t);if(R.existsSync(s))return s}try{let s=require.resolve(`bun/${e?"bin/bun.exe":"bin/bun"}`);if(R.existsSync(s))return s}catch{}let n=this._getBunPlatformPackage();if(n)try{let s=G.dirname(require.resolve(`${n}/package.json`)),r=G.join(s,"bin",t);if(R.existsSync(r))return r}catch{}throw new Error(["bun is not installed.","","Tried (in order):"," 1. `bun` on PATH"," 2. ~/.bun/bin/bun"," 3. ~/.local/bin/bun"," 4. require.resolve('bun/bin/bun') \u2014 npm-installed bun package"," 5. @oven-sh/bun-<platform> tarball \u2014 npm platform package","","Fixes:"," - npm install -g bun"," - curl -fsSL https://bun.sh/install | bash (then open a new shell)"," - re-run `npm install -g makecoder` with --verbose to see why the"," bundled bun postinstall failed (network / proxy / mirror issues"," silently skip optionalDependencies)."].join(`
8
+ `))}_getBunPlatformPackage(){let e=process.platform,t=process.arch;return{"darwin-arm64":"@oven-sh/bun-darwin-aarch64","darwin-x64":"@oven-sh/bun-darwin-x64","linux-arm64":"@oven-sh/bun-linux-aarch64","linux-x64":"@oven-sh/bun-linux-x64","win32-x64":"@oven-sh/bun-windows-x64"}[`${e}-${t}`]||null}async launch(e={}){let{remainingArgs:t=[],codevServer:o,apikey:n=null,extraEnv:s={}}=e,r=this.findExecutablePath(),i=this._resolveBunPath();return process.env.CODEV_DEBUG&&(console.log(`executablePath (bun): ${r}`),console.log(`bunPath: ${i}`)),new Promise((c,a)=>{let d={...process.env,...this.config.environmentVariables(o),CODER_EXECPATH:R.realpathSync(process.argv[1]),...s};n&&(d.CODER_APIKEY=n);let u=_t(i,[r,...t],{env:d,stdio:"inherit"});u.on("error",m=>{m.code==="ENOENT"?console.error("bun binary not found. Install it with: npm install -g bun or curl -fsSL https://bun.sh/install | bash"):console.error(`Failed to start bun: ${m.message}`),a(m)}),u.on("exit",m=>c(m)),process.on("SIGINT",()=>{}),process.on("SIGTERM",()=>{u.kill("SIGTERM"),setTimeout(()=>{u.killed||u.kill("SIGKILL")},8e3)})})}};De.exports=Q});var Pe=S((bo,Ae)=>{var Dt=N(),ee=class extends Dt{constructor(){super({name:"Gemini",executablePaths:["gemini/gemini.js","../dist/gemini/gemini.js"],globalSubPath:"gemini/gemini.js",environmentVariables:e=>({GOOGLE_GEMINI_BASE_URL:`${e}/gemini`,GEMINI_API_KEY:"null",GOOGLE_API_KEY:"null",GOOGLE_CLOUD_PROJECT:"coder",GOOGLE_CLOUD_LOCATION:"coder",USE_VERTEX:!0,GEMINI_TELEMETRY_ENABLED:"false",GEMINI_TELEMETRY_LOG_PROMPTS:"false"})})}};Ae.exports=ee});var qe=S((Io,Te)=>{var Ot=N(),te=class extends Ot{constructor(){super({name:"Codex",executablePaths:["codex.mjs","../dist/codex.mjs"],globalSubPath:"codex.mjs",environmentVariables:()=>({CODEX_DISABLE_WEBSOCKET:"1"})})}async launch(e={}){let{remainingArgs:t=[],codevServer:o}=e,n=["-c",`openai_base_url="${o}/codex"`,"-c","analytics.enabled=false","-c","feedback.enabled=false","-c","check_for_update_on_startup=false","-c",'otel.exporter="none"',"-c",'otel.trace_exporter="none"',"-c",'otel.metrics_exporter="none"'];return super.launch({...e,remainingArgs:[...n,...t]})}};Te.exports=te});var Le=S((wo,Ue)=>{var F=require("fs"),Be=require("path"),{spawn:je}=require("child_process"),oe=class{constructor(){this.extensionId="codev.codev-background";let e=require.main?Be.dirname(require.main.filename):__dirname;this.extensionPath=Be.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(F.existsSync(e))try{return F.accessSync(e,F.constants.F_OK|F.constants.X_OK),this._codeCommand=e,process.env.CODEV_DEBUG&&console.log(`Using AI Studio VSCode path: ${e}`),this._codeCommand}catch(t){process.env.CODEV_DEBUG&&console.log(`AI Studio path exists but not executable: ${t.message}`)}else process.env.CODEV_DEBUG&&console.log(`AI Studio path not found: ${e}`)}try{let{spawn:e}=require("child_process");return new Promise(t=>{let o=e("which",["code"],{stdio:["ignore","pipe","ignore"]}),n="";o.stdout.on("data",s=>{n+=s.toString().trim()}),o.on("close",s=>{s===0&&n?(this._codeCommand=n,process.env.CODEV_DEBUG&&console.log(`Resolved code command path: ${n}`),t(this._codeCommand)):(this._codeCommand="code",t(this._codeCommand))}),o.on("error",()=>{this._codeCommand="code",t(this._codeCommand)}),setTimeout(()=>{o.kill(),this._codeCommand="code",t(this._codeCommand)},3e3)})}catch{return this._codeCommand="code",this._codeCommand}}async shouldInstallExtension(){try{return process.env.IS_AISTUDIO!=="True"?(process.env.CODEV_DEBUG&&console.log("Not in AI Studio environment (IS_AISTUDIO!=True), skipping extension installation"),!1):await this.isVSCodeAvailable()?await this.isExtensionInstalled()?(process.env.CODEV_DEBUG&&console.log(`Extension ${this.extensionId} already installed`),!1):!!F.existsSync(this.extensionPath):(process.env.CODEV_DEBUG&&console.log("VSCode not available, skipping extension installation"),!1)}catch(e){return process.env.CODEV_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"],t=await this.executeVSCodeCommand(e,{timeout:1e4});if(process.env.CODEV_DEBUG&&(console.log(`VSCode availability check (${e.join(" ")}): ${t?"available":"unavailable"}`),process.env.IS_AISTUDIO==="True")){let{spawn:o}=require("child_process");try{o("which",["code"],{stdio:["ignore","pipe","ignore"]}).stdout.on("data",s=>{console.log("which code:",s.toString().trim())})}catch(n){console.log("which command failed:",n.message)}}return t}catch(e){return process.env.CODEV_DEBUG&&console.error("VSCode availability check error:",e.message),!1}}async isExtensionInstalled(){let e=await this.resolveCodeCommand();try{return new Promise(t=>{try{let o={stdio:["ignore","pipe","ignore"],shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODEV_DEBUG&&console.log(`Spawning: ${e} --list-extensions`);let n=je(e,["--list-extensions"],o),s="";n.stdout.on("data",r=>{s+=r.toString()}),n.on("close",r=>{if(r===0){let i=s.split(`
9
+ `).map(c=>c.trim());t(i.includes(this.extensionId))}else t(!1)}),n.on("error",r=>{process.env.CODEV_DEBUG&&(console.error("VSCode list extensions error:",r.message),console.error("Error code:",r.code),console.error("Error errno:",r.errno),console.error("Error syscall:",r.syscall)),t(!1)}),setTimeout(()=>{try{n.kill()}catch{}t(!1)},1e4)}catch(o){process.env.CODEV_DEBUG&&console.error("Failed to spawn VSCode list extensions:",o.message),t(!1)}})}catch{return!1}}async executeVSCodeCommand(e,t={}){let o=await this.resolveCodeCommand();return new Promise(n=>{try{let s={stdio:"ignore",shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODEV_DEBUG&&console.log(`Spawning: ${o} ${e.join(" ")}`);let r=je(o,e,s);r.on("close",c=>{n(c===0)}),r.on("error",c=>{process.env.CODEV_DEBUG&&(console.error("VSCode command error:",c.message),console.error("Error code:",c.code),console.error("Error errno:",c.errno),console.error("Error syscall:",c.syscall)),n(!1)});let i=t.timeout||3e4;setTimeout(()=>{try{r.kill()}catch{}n(!1)},i)}catch(s){process.env.CODEV_DEBUG&&console.error("Failed to spawn VSCode command:",s.message),n(!1)}})}async ensureExtensionInstalled(){try{process.env.CODEV_DEBUG&&console.log("VSCode Extension Service: Checking extension status..."),await this.shouldInstallExtension()&&await this.installExtension()}catch(e){process.env.CODEV_DEBUG&&console.error("VSCode Extension Service Error:",e)}}};Ue.exports=oe});var Fe=S((xo,Re)=>{var C=require("fs"),P=require("path"),At=require("readline"),{execSync:V}=require("child_process"),Ne=require("os"),ne=class{constructor(){this.serverUrl="https://makecoder.com/bigapis/codev/v1/coderpub"}getClaudeJsonlPath(e,t=!1){let o=e.replace(/[/_]/g,"-"),n=P.join(Ne.homedir(),".claude","projects",o);if(t&&(console.log(`
10
+ \u{1F4C2} [allow-clone] \u67E5\u627E JSONL \u6587\u4EF6...`),console.log(` \u9879\u76EE\u76EE\u5F55: ${e}`),console.log(` Claude \u9879\u76EE\u540D: ${o}`),console.log(` Claude \u9879\u76EE\u76EE\u5F55: ${n}`)),!C.existsSync(n))return t&&console.log(" \u274C Claude \u9879\u76EE\u76EE\u5F55\u4E0D\u5B58\u5728"),null;t&&console.log(" \u2713 Claude \u9879\u76EE\u76EE\u5F55\u5B58\u5728");try{let s=C.readdirSync(n).filter(r=>r.endsWith(".jsonl")).map(r=>({name:r,path:P.join(n,r),mtime:C.statSync(P.join(n,r)).mtime,size:C.statSync(P.join(n,r)).size})).sort((r,i)=>i.mtime-r.mtime);return t&&(console.log(` \u627E\u5230 ${s.length} \u4E2A JSONL \u6587\u4EF6:`),s.forEach((r,i)=>{let c=(r.size/1024).toFixed(2),a=r.mtime.toLocaleString(),d=i===0?" <- \u6700\u65B0":"";console.log(` ${i+1}. ${r.name} (${c} KB, ${a})${d}`)})),s.length>0?(t&&console.log(` \u2713 \u9009\u62E9\u6700\u65B0\u6587\u4EF6: ${s[0].name}`),s[0].path):(t&&console.log(" \u274C \u76EE\u5F55\u4E2D\u6CA1\u6709 JSONL \u6587\u4EF6"),null)}catch(s){return t&&console.log(` \u274C \u8BFB\u53D6\u76EE\u5F55\u5931\u8D25: ${s.message}`),null}}async promptForName(){let e=At.createInterface({input:process.stdin,output:process.stdout});return new Promise((t,o)=>{e.question("\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0 (name): ",n=>{e.close();let s=n.trim();if(!s){o(new Error("\u9879\u76EE\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A"));return}if(!/^[a-zA-Z0-9_-]+$/.test(s)){o(new Error("\u9879\u76EE\u540D\u79F0\u53EA\u80FD\u5305\u542B\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\u548C\u8FDE\u5B57\u7B26"));return}t(s)})})}async createZip(e,t={}){let{allowClone:o=!1}=t,n=Ne.tmpdir(),s=`coder-pub-${Date.now()}.zip`,r=P.join(n,s);try{let i=!1;if(C.existsSync(P.join(e,".git")))try{V(`git archive -o "${r}" HEAD`,{cwd:e,stdio:"pipe"}),console.log("\u{1F4E6} \u4F7F\u7528 git archive \u521B\u5EFA\u538B\u7F29\u5305\uFF08\u5DF2\u6392\u9664 .gitignore \u4E2D\u7684\u6587\u4EF6\uFF09"),i=!0}catch{console.log("\u26A0\uFE0F git archive \u5931\u8D25\uFF0C\u4F7F\u7528\u666E\u901A zip \u547D\u4EE4")}if(!i){let a=[".git/*","node_modules/*",".env",".env.*","*.log",".DS_Store"].map(d=>`-x "${d}"`).join(" ");V(`zip -r "${r}" . ${a}`,{cwd:e,stdio:"pipe"}),console.log("\u{1F4E6} \u5DF2\u521B\u5EFA\u538B\u7F29\u5305")}if(o){console.log(`
11
+ \u{1F504} [allow-clone] \u5F00\u59CB\u5904\u7406 AI \u751F\u6210\u8BB0\u5F55...`);let c=this.getClaudeJsonlPath(e,!0);if(c){let a=P.join(n,"coder.pub.jsonl"),u=(C.statSync(c).size/1024).toFixed(2);console.log(`
12
+ \u{1F4E6} [allow-clone] \u6253\u5305 JSONL \u6587\u4EF6...`),console.log(` \u6E90\u6587\u4EF6: ${c}`),console.log(` \u6587\u4EF6\u5927\u5C0F: ${u} KB`),console.log(` \u4E34\u65F6\u6587\u4EF6: ${a}`),C.copyFileSync(c,a),console.log(" \u2713 \u5DF2\u590D\u5236\u5230\u4E34\u65F6\u76EE\u5F55"),console.log(` \u76EE\u6807 ZIP: ${r}`),console.log(" \u76EE\u6807\u6587\u4EF6\u540D: coder.pub.jsonl"),V(`zip -j "${r}" "${a}"`,{stdio:"pipe"}),console.log(" \u2713 \u5DF2\u6DFB\u52A0\u5230 ZIP \u5305"),C.unlinkSync(a),console.log(" \u2713 \u5DF2\u6E05\u7406\u4E34\u65F6\u6587\u4EF6"),console.log(`\u{1F4CB} [allow-clone] AI \u751F\u6210\u8BB0\u5F55\u5904\u7406\u5B8C\u6210 (coder.pub.jsonl)
18
13
  `)}else console.log(`\u26A0\uFE0F [allow-clone] \u672A\u627E\u5230 Claude Code \u751F\u6210\u8BB0\u5F55
19
- `)}return r}catch(i){throw new Error(`\u521B\u5EFA\u538B\u7F29\u5305\u5931\u8D25: ${i.message}`)}}async upload(e,t,o,n,s=!1){let r=n?`${n}/coderpub`:this.serverUrl,i=o;console.log("\u{1F4E4} \u6B63\u5728\u4E0A\u4F20\u5230\u670D\u52A1\u5668..."),s&&(console.log(` \u670D\u52A1\u5668\u5730\u5740: ${r}`),console.log(` \u9879\u76EE\u540D\u79F0: ${t}`),console.log(` ZIP \u6587\u4EF6: ${e}`));try{let a=`curl -s -X POST "${r}" -H "Authorization: Bearer ${i}" -F "name=${t}" -F "zip_file=@${e}"`;s&&console.log(" \u6267\u884C\u4E0A\u4F20\u547D\u4EE4...");let l=z(a,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});return s&&console.log(" \u2713 \u4E0A\u4F20\u5B8C\u6210\uFF0C\u89E3\u6790\u54CD\u5E94..."),JSON.parse(l)}catch(a){if(a.stdout)try{return JSON.parse(a.stdout)}catch{throw new Error(`\u4E0A\u4F20\u5931\u8D25: ${a.message}`)}throw new Error(`\u4E0A\u4F20\u5931\u8D25: ${a.message}`)}}cleanup(e){try{v.existsSync(e)&&v.unlinkSync(e)}catch{}}async publish(e){let{apikey:t,serverBaseUrl:o,allowClone:n}=e,{name:s}=e,r=null;try{s||(s=await this.promptForName()),console.log(`
20
- \u{1F680} \u6B63\u5728\u53D1\u5E03\u9879\u76EE: ${s}`),console.log(`\u{1F4C1} \u76EE\u5F55: ${process.cwd()}`),n&&console.log("\u{1F513} allow-clone: \u542F\u7528 (\u5C06\u5305\u542B AI \u751F\u6210\u8BB0\u5F55)"),console.log(),r=await this.createZip(process.cwd(),{allowClone:n});let a=(v.statSync(r).size/(1024*1024)).toFixed(2);console.log(`\u{1F4CA} \u538B\u7F29\u5305\u5927\u5C0F: ${a} MB`),n&&console.log(`
21
- \u{1F310} [allow-clone] \u5F00\u59CB\u4E0A\u4F20\u5230\u670D\u52A1\u5668...`);let l=await this.upload(r,s,t,o,n);return l.code===0?(console.log(`
22
- \u2705 \u53D1\u5E03\u6210\u529F!`),console.log(`\u{1F4CC} \u7248\u672C: ${l.data.version}`),console.log(`\u{1F310} \u8BBF\u95EE\u5730\u5740: https://${s}.coder.pub/`),0):(console.error(`
23
- \u274C \u53D1\u5E03\u5931\u8D25: ${l.message||l.reason}`),1)}catch(i){return console.error(`
14
+ `)}return r}catch(i){throw new Error(`\u521B\u5EFA\u538B\u7F29\u5305\u5931\u8D25: ${i.message}`)}}async upload(e,t,o,n,s=!1){let r=n?`${n}/coderpub`:this.serverUrl,i=o;console.log("\u{1F4E4} \u6B63\u5728\u4E0A\u4F20\u5230\u670D\u52A1\u5668..."),s&&(console.log(` \u670D\u52A1\u5668\u5730\u5740: ${r}`),console.log(` \u9879\u76EE\u540D\u79F0: ${t}`),console.log(` ZIP \u6587\u4EF6: ${e}`));try{let c=`curl -s -X POST "${r}" -H "Authorization: Bearer ${i}" -F "name=${t}" -F "zip_file=@${e}"`;s&&console.log(" \u6267\u884C\u4E0A\u4F20\u547D\u4EE4...");let a=V(c,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});return s&&console.log(" \u2713 \u4E0A\u4F20\u5B8C\u6210\uFF0C\u89E3\u6790\u54CD\u5E94..."),JSON.parse(a)}catch(c){if(c.stdout)try{return JSON.parse(c.stdout)}catch{throw new Error(`\u4E0A\u4F20\u5931\u8D25: ${c.message}`)}throw new Error(`\u4E0A\u4F20\u5931\u8D25: ${c.message}`)}}cleanup(e){try{C.existsSync(e)&&C.unlinkSync(e)}catch{}}async publish(e){let{apikey:t,serverBaseUrl:o,allowClone:n}=e,{name:s}=e,r=null;try{s||(s=await this.promptForName()),console.log(`
15
+ \u{1F680} \u6B63\u5728\u53D1\u5E03\u9879\u76EE: ${s}`),console.log(`\u{1F4C1} \u76EE\u5F55: ${process.cwd()}`),n&&console.log("\u{1F513} allow-clone: \u542F\u7528 (\u5C06\u5305\u542B AI \u751F\u6210\u8BB0\u5F55)"),console.log(),r=await this.createZip(process.cwd(),{allowClone:n});let c=(C.statSync(r).size/(1024*1024)).toFixed(2);console.log(`\u{1F4CA} \u538B\u7F29\u5305\u5927\u5C0F: ${c} MB`),n&&console.log(`
16
+ \u{1F310} [allow-clone] \u5F00\u59CB\u4E0A\u4F20\u5230\u670D\u52A1\u5668...`);let a=await this.upload(r,s,t,o,n);return a.code===0?(console.log(`
17
+ \u2705 \u53D1\u5E03\u6210\u529F!`),console.log(`\u{1F4CC} \u7248\u672C: ${a.data.version}`),console.log(`\u{1F310} \u8BBF\u95EE\u5730\u5740: https://${s}.coder.pub/`),0):(console.error(`
18
+ \u274C \u53D1\u5E03\u5931\u8D25: ${a.message||a.reason}`),1)}catch(i){return console.error(`
24
19
  \u274C ${i.message}`),1}finally{r&&this.cleanup(r)}}showHelp(){console.log(["Usage: coder pub [options]","","\u53D1\u5E03\u5F53\u524D\u76EE\u5F55\u4E3A MakeCoder \u7F51\u9875\u5E94\u7528","","Options:"," --name <name> \u5E94\u7528\u540D\u79F0\uFF08\u5FC5\u9700\uFF09"," --allow-clone \u5305\u542B Claude Code \u751F\u6210\u8BB0\u5F55\uFF0C\u5141\u8BB8\u4ED6\u4EBA\u514B\u9686"," --help, -h \u663E\u793A\u6B64\u5E2E\u52A9\u4FE1\u606F","","Description:"," \u5C06\u5F53\u524D\u76EE\u5F55\u7684\u4EE3\u7801\u53D1\u5E03\u4E3A MakeCoder \u5E73\u53F0\u4E0A\u7684\u7F51\u9875\u5E94\u7528\u3002"," \u5E94\u7528\u5C06\u5728 https://<name>.coder.pub/ \u4E0A\u53EF\u8BBF\u95EE\u3002","","Examples:"," coder pub --name myapp \u53D1\u5E03\u5E94\u7528\uFF0C\u8BBF\u95EE\u5730\u5740: https://myapp.coder.pub/"," coder pub --name myapp --allow-clone \u53D1\u5E03\u5E94\u7528\u5E76\u5305\u542B\u751F\u6210\u8BB0\u5F55","","Notes:"," - \u5E94\u7528\u540D\u79F0\u53EA\u80FD\u5305\u542B\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\u548C\u8FDE\u5B57\u7B26"," - \u4F7F\u7528 git archive \u521B\u5EFA\u538B\u7F29\u5305\uFF08\u81EA\u52A8\u6392\u9664 .gitignore \u4E2D\u7684\u6587\u4EF6\uFF09"," - \u5982\u679C\u4E0D\u662F git \u4ED3\u5E93\uFF0C\u5C06\u4F7F\u7528\u666E\u901A zip \u547D\u4EE4"].join(`
25
- `))}};Ge.exports=ce});var ze=k((jo,Ke)=>{var He=require("https"),x=require("fs"),C=require("path"),W=require("os"),{shouldSuppressUpdateNotice:Vt}=L(),O="https://makecoder.com/skillhub",ae=class{getSkillDirs(){let e=W.homedir();return[C.join(e,".agents","skills")]}fetchWithAuth(e,t){return new Promise((o,n)=>{let s=new URL(e),r={hostname:s.hostname,port:s.port||443,path:s.pathname+s.search,method:"GET",headers:t?{Authorization:`Bearer ${t}`}:{}};He.get(r,i=>{if(i.statusCode>=300&&i.statusCode<400&&i.headers.location)return this.fetchWithAuth(i.headers.location,t).then(o).catch(n);let a="";i.on("data",l=>{a+=l}),i.on("end",()=>o({status:i.statusCode,body:a}))}).on("error",n)})}async handle({skillsSubcommand:e,skillsArg:t,skillsRemainingArgs:o,apikey:n}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;if(e==="publish")return await this.publish(o||[],n);if(e==="unpublish")return await this.unpublish(t,n);if(e==="list")return await this.listMySkills(n);if(e==="namespaces")return await this.listNamespaces(n);if(e==="check-updates"){let s=this.getInstalledSkills();if(s.length===0)return console.log("\u6CA1\u6709\u5DF2\u5B89\u88C5\u7684 skill"),0;console.log(`\u{1F50D} \u68C0\u67E5 ${s.length} \u4E2A skill \u7684\u66F4\u65B0...`);let r=await this.checkUpdates(n);if(r.length===0)console.log("\u2705 \u6240\u6709 skill \u5747\u4E3A\u6700\u65B0\u7248\u672C");else{console.log(`
20
+ `))}};Re.exports=ne});var re=S(($o,Me)=>{function Pt(){return process.env.CODER_NESTED==="1"||!process.stdout.isTTY}Me.exports={shouldSuppressUpdateNotice:Pt}});var Ge=S((ko,Je)=>{var se=require("https"),$=require("fs"),v=require("path"),H=require("os"),{shouldSuppressUpdateNotice:Tt}=re(),T="https://makecoder.com/skillhub",ie=class{constructor(e,t){this.argParser=e||null,this.teamService=t||null}_defaultNamespace(){let e=this.argParser?this.argParser.getTeam():null;return e&&e.id?e.id.slice(0,8):null}_resolveNamespace(e){let t=e||this._defaultNamespace()||"global",o=t.startsWith("@")?t.slice(1):t;return o.length>8&&o.includes("-")?o.slice(0,8):o}getSkillDirs(){let e=H.homedir();return[v.join(e,".agents","skills")]}_request(e,t,o){return new Promise((n,s)=>{let r=new URL(`${T}${t}`),i={hostname:r.hostname,port:r.port||443,path:r.pathname+r.search,method:e,headers:o?{Authorization:`Bearer ${o}`}:{}},c=se.request(i,a=>{if(a.statusCode>=300&&a.statusCode<400&&a.headers.location)return this._request(e,a.headers.location,o).then(n).catch(s);let d="";a.on("data",u=>d+=u),a.on("end",()=>n({status:a.statusCode,body:d}))});c.on("error",s),c.end()})}fetchWithAuth(e,t){return new Promise((o,n)=>{let s=new URL(e),r={hostname:s.hostname,port:s.port||443,path:s.pathname+s.search,method:"GET",headers:t?{Authorization:`Bearer ${t}`}:{}};se.get(r,i=>{if(i.statusCode>=300&&i.statusCode<400&&i.headers.location)return this.fetchWithAuth(i.headers.location,t).then(o).catch(n);let c="";i.on("data",a=>{c+=a}),i.on("end",()=>o({status:i.statusCode,body:c}))}).on("error",n)})}async handle({skillsSubcommand:e,skillsArg:t,skillsRemainingArgs:o,apikey:n}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;if(e==="publish")return await this.publish(o||[],n);if(e==="unpublish")return await this.unpublish(t,n);if(e==="list")return await this.listTeamSkills(o||[],n);if(e==="my-skills")return await this.listMySkills(o||[],n);if(e==="check-updates"){let s=this.getInstalledSkills();if(s.length===0)return console.log("\u6CA1\u6709\u5DF2\u5B89\u88C5\u7684 skill"),0;console.log(`\u{1F50D} \u68C0\u67E5 ${s.length} \u4E2A skill \u7684\u66F4\u65B0...`);let r=await this.checkUpdates(n);if(r.length===0)console.log("\u2705 \u6240\u6709 skill \u5747\u4E3A\u6700\u65B0\u7248\u672C");else{console.log(`
26
21
  \u53D1\u73B0 ${r.length} \u4E2A\u53EF\u66F4\u65B0\u7684 skill:
27
22
  `);for(let i of r)console.log(` ${i.name.padEnd(24)} ${i.localVersion} \u2192 ${i.remoteVersion}`);console.log("\n\u8FD0\u884C `coder skills update` \u66F4\u65B0\u5168\u90E8")}return 0}if(t&&e!=="search"&&!/^[@a-zA-Z0-9_\-/.]+$/.test(t))return console.error("\u274C skill \u540D\u79F0\u5305\u542B\u975E\u6CD5\u5B57\u7B26"),1;if(e==="search")return t?await this.search(t):(console.error("\u274C \u8BF7\u6307\u5B9A\u641C\u7D22\u5173\u952E\u8BCD"),1);if(e==="remove")return t?this.remove(t):(console.error("\u274C \u8BF7\u6307\u5B9A skill \u540D\u79F0"),1);if(e==="add")return t?n?await this.install(t,n):(console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1):(console.error("\u274C \u8BF7\u6307\u5B9A skill \u540D\u79F0"),1);if(e==="update"){if(!n)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;if(t)return await this.install(t,n);console.log("\u{1F50D} \u68C0\u67E5\u53EF\u66F4\u65B0\u7684 skill...");let s=await this.checkUpdates(n);if(s.length===0)return console.log("\u2705 \u6240\u6709 skill \u5747\u4E3A\u6700\u65B0\u7248\u672C"),0;console.log(`\u{1F4E6} \u53D1\u73B0 ${s.length} \u4E2A\u53EF\u66F4\u65B0\u7684 skill\uFF0C\u5F00\u59CB\u66F4\u65B0...
28
- `);let r=0,i=0,a=!1;for(let l of s){let d=await this.install(l.name,n);d==="EACCES"?(a=!0,i++):d!==0?i++:r++}console.log(`
29
- \u66F4\u65B0\u5B8C\u6210: ${r} \u6210\u529F, ${i} \u5931\u8D25`);try{let l=C.join(W.homedir(),".agents","skills",".update-cache.json");x.existsSync(l)&&x.unlinkSync(l)}catch{}if(a){let l=this.getSkillDirs()[0];console.error(`
23
+ `);let r=0,i=0,c=!1;for(let a of s){let d=await this.install(a.name,n);d==="EACCES"?(c=!0,i++):d!==0?i++:r++}console.log(`
24
+ \u66F4\u65B0\u5B8C\u6210: ${r} \u6210\u529F, ${i} \u5931\u8D25`);try{let a=v.join(H.homedir(),".agents","skills",".update-cache.json");$.existsSync(a)&&$.unlinkSync(a)}catch{}if(c){let a=this.getSkillDirs()[0];console.error(`
30
25
  \u26A0\uFE0F \u90E8\u5206 skill \u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u5148\u8FD0\u884C:
31
- sudo chown -R $(whoami) "${l}"`)}return i>0?1:0}return console.error(`\u274C \u672A\u77E5\u5B50\u547D\u4EE4: ${e}`),1}async install(e,t){let o=O.replace(/\/$/,"");console.log(`\u{1F50D} \u6B63\u5728\u4ECE ${O} \u67E5\u627E skill...`);let n;try{let u=await this.fetchWithAuth(`${o}/.well-known/agent-skills/index.json?skill=${encodeURIComponent(e)}`,t);if(u.status===404)return console.error(`\u274C \u672A\u627E\u5230 skill: ${e}`),1;if(u.status!==200)return console.error(`\u274C \u65E0\u6CD5\u83B7\u53D6 skill \u4FE1\u606F (HTTP ${u.status})`),1;n=JSON.parse(u.body)}catch(u){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${u.message}`),1}let s=(n.skills||[])[0];if(!s)return console.error(`\u274C \u672A\u627E\u5230 skill: ${e}`),1;let r=Array.from(new Set(["SKILL.md",...s.files||[]])),i=`${o}/.well-known/agent-skills/${s.name}`,a={};for(let u of r)try{let p=await this.fetchWithAuth(`${i}/${u}`,t);if(p.status!==200){console.warn(`\u26A0\uFE0F \u8DF3\u8FC7 ${u} (HTTP ${p.status})`);continue}a[u]=p.body}catch(p){console.warn(`\u26A0\uFE0F \u4E0B\u8F7D ${u} \u5931\u8D25: ${p.message}`)}console.log(`\u{1F4E6} \u6B63\u5728\u5B89\u88C5 ${s.name}...`);let l={name:s.name,version:s.version||null,installedAt:new Date().toISOString()};for(let u of this.getSkillDirs()){let p=C.join(u,s.name);x.mkdirSync(p,{recursive:!0});try{for(let[m,f]of Object.entries(a)){let y=C.join(p,m);x.mkdirSync(C.dirname(y),{recursive:!0}),x.writeFileSync(y,f,"utf8")}x.writeFileSync(C.join(p,".skill-meta.json"),JSON.stringify(l,null,2),"utf8")}catch(m){if(m.code==="EACCES")return"EACCES";throw m}}let d=s.version?` (v${s.version})`:"";return console.log(`\u2705 ${s.name}${d} \u5B89\u88C5\u5B8C\u6210`),this.cleanLegacySkill(s.name),0}cleanLegacySkill(e){let t=W.homedir(),o=[".claude",".codex",".gemini"].map(n=>C.join(t,n,"skills",e));for(let n of o)if(x.existsSync(n))try{x.rmSync(n,{recursive:!0,force:!0})}catch{}}getInstalledSkills(){let e=[];for(let t of this.getSkillDirs())if(x.existsSync(t))for(let o of x.readdirSync(t,{withFileTypes:!0})){if(!o.isDirectory()||o.name.startsWith("."))continue;let n=C.join(t,o.name),s=C.join(n,".skill-meta.json"),r=null;if(x.existsSync(s))try{r=JSON.parse(x.readFileSync(s,"utf8"))}catch{}e.push({name:o.name,dir:n,meta:r})}return e}async checkUpdates(e){let t=this.getInstalledSkills();if(t.length===0)return[];let o=O.replace(/\/$/,""),n=[];for(let s of t){let r=s.meta?.version||"0.0.1";try{let i=await this.fetchWithAuth(`${o}/.well-known/agent-skills/index.json?skill=${encodeURIComponent(s.name)}`,e);if(i.status===404||i.status!==200)continue;let l=(JSON.parse(i.body).skills||[])[0];if(!l?.version)continue;l.version!==r&&n.push({name:s.name,localVersion:r,remoteVersion:l.version})}catch{}}return n}notifyAndRefreshUpdates(e){let t=C.join(W.homedir(),".agents","skills",".update-cache.json");if(!Vt())try{if(x.existsSync(t)){let r=JSON.parse(x.readFileSync(t,"utf8"));if(Array.isArray(r.updates)&&r.updates.length>0){let a=r.updates.length,l;if(a<=3)l=r.updates.map(d=>`${d.name} (${d.localVersion} \u2192 ${d.remoteVersion})`).join(", ");else{let d=r.updates[0];l=`${d.name} (${d.localVersion} \u2192 ${d.remoteVersion}) \u7B49 ${a} \u4E2A skill \u8981\u66F4\u65B0`}console.error(`\x1B[33m\u26A1 ${l}\uFF0C\u8FD0\u884C \`coder skills update\` \u5347\u7EA7\x1B[0m`),a>3&&console.error("\x1B[33m \u8FD0\u884C `coder skills check-updates` \u67E5\u770B\u5B8C\u6574\u5217\u8868\x1B[0m"),console.error()}}}catch{}let o=3600*1e3,n=0;try{n=JSON.parse(x.readFileSync(t,"utf8")).checkedAt||0}catch{}!this.getInstalledSkills().some(r=>!r.meta?.version)&&Date.now()-n<o||setImmediate(async()=>{try{let r=await this.checkUpdates(e);x.mkdirSync(C.dirname(t),{recursive:!0}),x.writeFileSync(t,JSON.stringify({checkedAt:Date.now(),updates:r},null,2),"utf8")}catch{}})}remove(e){let t=!1;for(let o of this.getSkillDirs()){let n=C.join(o,e);x.existsSync(n)&&(x.rmSync(n,{recursive:!0,force:!0}),console.log(` \u{1F5D1}\uFE0F ${n}`),t=!0)}return t?(console.log(`\u2705 ${e} \u5DF2\u5220\u9664`),0):(console.error(`\u274C \u672A\u627E\u5230\u5DF2\u5B89\u88C5\u7684 skill: ${e}`),1)}async search(e){let t=`${O}/api/web/skills?q=${encodeURIComponent(e)}&sort=relevance&page=0&size=12`;return new Promise(o=>{He.get(t,n=>{let s="";n.on("data",r=>{s+=r}),n.on("end",()=>{try{let r=JSON.parse(s);if(r.code!==0)return console.error(`\u274C \u67E5\u8BE2\u5931\u8D25: ${r.msg}`),o(1);let i=r.data.items;if(i.length===0)return console.log(`\u6CA1\u6709\u627E\u5230\u4E0E "${e}" \u76F8\u5173\u7684 skill`),o(0);console.log(`\u627E\u5230 ${r.data.total} \u4E2A\u7ED3\u679C:
32
- `);for(let a of i)console.log(` ${a.slug.padEnd(20)} ${a.summary}`);o(0)}catch(r){console.error(`\u274C \u89E3\u6790\u54CD\u5E94\u5931\u8D25: ${r.message}`),o(1)}})}).on("error",n=>{console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${n.message}`),o(1)})})}async publish(e,t){let{execSync:o}=require("child_process"),n=require("os"),s="global",r="PUBLIC",i=null,a=null,l=null,d=null;for(let g=0;g<e.length;g++)if(e[g]==="--namespace"||e[g]==="-n")s=e[++g];else if(e[g]==="--visibility"||e[g]==="-v")r=e[++g];else if(e[g]==="--meta-data"){let h=e[++g];try{JSON.parse(h)}catch(I){return console.error(`\u274C --meta-data \u4E0D\u662F\u5408\u6CD5\u7684 JSON\uFF1A${I.message}`),1}i=h}else if(!e[g].startsWith("-")){let h=e[g];x.existsSync(h)&&x.statSync(h).isDirectory()?d=h:a=h}if(!t)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;let u=s.startsWith("@")?s.slice(1):s;u==="global"||(r="NAMESPACE_ONLY");let m=["PUBLIC","NAMESPACE_ONLY","PRIVATE"];if(!m.includes(r))return console.error(`\u274C visibility \u5FC5\u987B\u662F: ${m.join(", ")}`),1;if(a){if(!x.existsSync(a))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${a}`),1}else{let g=d?C.resolve(d):process.cwd();l=C.join(n.tmpdir(),`skill-pub-${Date.now()}.zip`),console.log(`\u{1F4E6} \u6B63\u5728\u6253\u5305 ${g}...`);try{x.existsSync(C.join(g,".git"))?(o(`git archive -o "${l}" HEAD`,{cwd:g,stdio:"pipe"}),console.log(" \u4F7F\u7528 git archive\uFF08\u5DF2\u6392\u9664 .gitignore \u6587\u4EF6\uFF09")):o(`zip -r "${l}" . -x ".git/*" -x "node_modules/*" -x ".env" -x "*.log"`,{cwd:g,stdio:"pipe"})}catch(h){return console.error(`\u274C \u6253\u5305\u5931\u8D25: ${h.message}`),1}a=l}let f=`${O}/api/v1/skills/${encodeURIComponent(u)}/publish?visibility=${encodeURIComponent(r)}`,y=t;console.log(`\u{1F680} \u6B63\u5728\u53D1\u5E03\u5230 ${O}...`),console.log(` namespace: ${u}`),console.log(` visibility: ${r}`);try{let g=i?` -F "meta_data=${i.replace(/"/g,'\\"')}"`:"",h=`curl -s -X POST "${f}" -H "Authorization: Bearer ${y}" -F "file=@${a}"${g}`,I=o(h,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),w=JSON.parse(I);if(w.code===0){let $=w.data;return console.log(`
33
- \u2705 \u53D1\u5E03\u6210\u529F!`),console.log(` ${$.namespace}/${$.slug}@${$.version}`),$.status==="PUBLISHED"?console.log(" \u72B6\u6001: \u5DF2\u53D1\u5E03"):console.log(" \u72B6\u6001: \u5F85\u5BA1\u6838"),0}else return console.error(`
34
- \u274C \u53D1\u5E03\u5931\u8D25: ${w.msg||JSON.stringify(w)}`),1}catch(g){let h=g.stdout;if(h)try{let I=JSON.parse(h);return console.error(`
35
- \u274C \u53D1\u5E03\u5931\u8D25: ${I.msg||h}`),1}catch{}return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${g.message}`),1}finally{l&&x.existsSync(l)&&x.unlinkSync(l)}}async unpublish(e,t){let{execSync:o}=require("child_process");if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A skill: coder skills unpublish <namespace>/<slug>"),1;if(!t)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;let n=e.split("/");if(n.length!==2||!n[0]||!n[1])return console.error("\u274C \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <namespace>/<slug>\uFF0C\u4F8B\u5982: global/my-skill"),1;let[s,r]=n,i=s.startsWith("@")?s.slice(1):s,a=`${O}/api/v1/skills/${encodeURIComponent(i)}/${encodeURIComponent(r)}`,l=t;console.log(`\u{1F5D1}\uFE0F \u6B63\u5728\u4E0B\u67B6 ${i}/${r}...`);try{let d=o(`curl -s -X DELETE "${a}" -H "Authorization: Bearer ${l}"`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),u=JSON.parse(d);return u.code===0?(console.log(`\u2705 \u5DF2\u4E0B\u67B6 ${i}/${r}`),0):(console.error(`\u274C \u4E0B\u67B6\u5931\u8D25: ${u.msg||JSON.stringify(u)}`),1)}catch(d){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${d.message}`),1}}async listMySkills(e){let{execSync:t}=require("child_process");if(!e)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;let o=`${O}/api/v1/me/skills?size=50`,n=e;try{let s=t(`curl -s "${o}" -H "Authorization: Bearer ${n}"`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),r=JSON.parse(s);if(r.code!==0)return console.error(`\u274C \u83B7\u53D6\u5931\u8D25: ${r.msg}`),1;let i=r.data?.items||[],a=r.data?.total||0;if(i.length===0)return console.log("\u6682\u65E0\u5DF2\u53D1\u5E03\u7684 skill"),0;console.log(`\u5171 ${a} \u4E2A skill:
36
- `);for(let l of i){let d=`${l.namespace}/${l.slug}`.padEnd(36),u=`\u2B50 ${l.starCount??0}`.padEnd(8),p=`\u2193 ${l.downloadCount??0}`.padEnd(10);console.log(` ${d} ${u} ${p} [${l.status}]`),l.displayName&&l.displayName!==l.slug&&console.log(` ${"".padEnd(36)} ${l.displayName}`)}return 0}catch(s){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${s.message}`),1}}async listNamespaces(e){let{execSync:t}=require("child_process");if(!e)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;let o=`${O}/api/v1/me/namespaces`,n=e;try{let s=t(`curl -s "${o}" -H "Authorization: Bearer ${n}"`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),r=JSON.parse(s);if(r.code!==0)return console.error(`\u274C \u83B7\u53D6\u5931\u8D25: ${r.msg}`),1;let i=r.data||[];if(i.length===0)return console.log("\u6682\u65E0\u547D\u540D\u7A7A\u95F4"),0;console.log(`\u5171 ${i.length} \u4E2A\u547D\u540D\u7A7A\u95F4:
37
- `);for(let a of i){let l=a.type==="GLOBAL"?"\u5168\u5C40":"\u56E2\u961F";console.log(` @${a.slug.padEnd(20)} ${a.displayName.padEnd(20)} [${l}] ${a.status}`)}return 0}catch(s){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${s.message}`),1}}showHelp(){console.log(["Usage: coder skills [subcommand] [options]","","Subcommands:"," add <name> \u5B89\u88C5 skill"," remove <name> \u5378\u8F7D skill"," update [name] \u66F4\u65B0 skill\uFF08\u4E0D\u6307\u5B9A\u540D\u79F0\u5219\u66F4\u65B0\u5168\u90E8\uFF09"," check-updates \u68C0\u67E5\u5DF2\u5B89\u88C5 skill \u662F\u5426\u6709\u65B0\u7248\u672C"," search <keyword> \u641C\u7D22 skill"," list \u67E5\u770B\u6211\u53D1\u5E03\u7684 skill"," publish [options] [<dir-or-zip>] \u53D1\u5E03 skill \u5230 skillhub"," unpublish <namespace>/<slug> \u4E0B\u67B6 skill"," namespaces \u67E5\u770B\u6211\u7684\u547D\u540D\u7A7A\u95F4","","Publish Options:"," --namespace <ns> \u76EE\u6807\u547D\u540D\u7A7A\u95F4\uFF08\u9ED8\u8BA4: global\uFF09"," --visibility <v> \u53EF\u89C1\u6027: PUBLIC | NAMESPACE_ONLY | PRIVATE"," \uFF08\u9ED8\u8BA4: PUBLIC\uFF0C\u975E global \u547D\u540D\u7A7A\u95F4\u65F6\u81EA\u52A8\u9501\u5B9A\u4E3A NAMESPACE_ONLY\uFF09"," --meta-data <json> \u9644\u52A0\u81EA\u5B9A\u4E49\u5143\u6570\u636E JSON","","Examples:"," coder skills add vue \u5B89\u88C5 vue skill"," coder skills search react \u641C\u7D22 react skills"," coder skills list \u67E5\u770B\u6211\u53D1\u5E03\u7684 skill"," coder skills publish ./my-skill-dir \u4ECE\u76EE\u5F55\u53D1\u5E03"," coder skills publish --namespace myteam ./my-skill-dir"," coder skills publish --visibility PRIVATE my-skill.zip",` coder skills publish --meta-data '{"category":"tool"}' ./my-skill-dir`," coder skills unpublish global/my-skill"," coder skills namespaces \u67E5\u770B\u6211\u7684\u547D\u540D\u7A7A\u95F4"].join(`
38
- `))}};Ke.exports=ae});var Ye=k((Uo,We)=>{var Ht=require("https"),Y="https://makecoder.com/wiki",Kt=`${Y}/api`,_=c=>`${Y}/doc/${c}`,le=c=>`${Y}/collection/${c}`;function zt(c){return c.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}var Wt={"collection-info":{endpoint:"collections.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",buildBody:c=>({id:c}),print:c=>{let e=c.data;console.log(`ID: ${e.id}
26
+ sudo chown -R $(whoami) "${a}"`)}return i>0?1:0}return console.error(`\u274C \u672A\u77E5\u5B50\u547D\u4EE4: ${e}`),1}async install(e,t){let o=T.replace(/\/$/,"");console.log(`\u{1F50D} \u6B63\u5728\u4ECE ${T} \u67E5\u627E skill...`);let n;try{let u=await this.fetchWithAuth(`${o}/.well-known/agent-skills/index.json?skill=${encodeURIComponent(e)}`,t);if(u.status===404)return console.error(`\u274C \u672A\u627E\u5230 skill: ${e}`),1;if(u.status!==200)return console.error(`\u274C \u65E0\u6CD5\u83B7\u53D6 skill \u4FE1\u606F (HTTP ${u.status})`),1;n=JSON.parse(u.body)}catch(u){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${u.message}`),1}let s=(n.skills||[])[0];if(!s)return console.error(`\u274C \u672A\u627E\u5230 skill: ${e}`),1;let r=Array.from(new Set(["SKILL.md",...s.files||[]])),i=`${o}/.well-known/agent-skills/${s.name}`,c={};for(let u of r)try{let m=await this.fetchWithAuth(`${i}/${u}`,t);if(m.status!==200){console.warn(`\u26A0\uFE0F \u8DF3\u8FC7 ${u} (HTTP ${m.status})`);continue}c[u]=m.body}catch(m){console.warn(`\u26A0\uFE0F \u4E0B\u8F7D ${u} \u5931\u8D25: ${m.message}`)}console.log(`\u{1F4E6} \u6B63\u5728\u5B89\u88C5 ${s.name}...`);let a={name:s.name,version:s.version||null,installedAt:new Date().toISOString()};for(let u of this.getSkillDirs()){let m=v.join(u,s.name);$.mkdirSync(m,{recursive:!0});try{for(let[p,h]of Object.entries(c)){let f=v.join(m,p);$.mkdirSync(v.dirname(f),{recursive:!0}),$.writeFileSync(f,h,"utf8")}$.writeFileSync(v.join(m,".skill-meta.json"),JSON.stringify(a,null,2),"utf8")}catch(p){if(p.code==="EACCES")return"EACCES";throw p}}let d=s.version?` (v${s.version})`:"";return console.log(`\u2705 ${s.name}${d} \u5B89\u88C5\u5B8C\u6210`),this.cleanLegacySkill(s.name),0}cleanLegacySkill(e){let t=H.homedir(),o=[".claude",".codex",".gemini"].map(n=>v.join(t,n,"skills",e));for(let n of o)if($.existsSync(n))try{$.rmSync(n,{recursive:!0,force:!0})}catch{}}getInstalledSkills(){let e=[];for(let t of this.getSkillDirs())if($.existsSync(t))for(let o of $.readdirSync(t,{withFileTypes:!0})){if(!o.isDirectory()||o.name.startsWith("."))continue;let n=v.join(t,o.name),s=v.join(n,".skill-meta.json"),r=null;if($.existsSync(s))try{r=JSON.parse($.readFileSync(s,"utf8"))}catch{}e.push({name:o.name,dir:n,meta:r})}return e}async checkUpdates(e){let t=this.getInstalledSkills();if(t.length===0)return[];let o=T.replace(/\/$/,""),n=[];for(let s of t){let r=s.meta?.version||"0.0.1";try{let i=await this.fetchWithAuth(`${o}/.well-known/agent-skills/index.json?skill=${encodeURIComponent(s.name)}`,e);if(i.status===404||i.status!==200)continue;let a=(JSON.parse(i.body).skills||[])[0];if(!a?.version)continue;a.version!==r&&n.push({name:s.name,localVersion:r,remoteVersion:a.version})}catch{}}return n}notifyAndRefreshUpdates(e){let t=v.join(H.homedir(),".agents","skills",".update-cache.json");if(!Tt())try{if($.existsSync(t)){let r=JSON.parse($.readFileSync(t,"utf8"));if(Array.isArray(r.updates)&&r.updates.length>0){let c=r.updates.length,a;if(c<=3)a=r.updates.map(d=>`${d.name} (${d.localVersion} \u2192 ${d.remoteVersion})`).join(", ");else{let d=r.updates[0];a=`${d.name} (${d.localVersion} \u2192 ${d.remoteVersion}) \u7B49 ${c} \u4E2A skill \u8981\u66F4\u65B0`}console.error(`\x1B[33m\u26A1 ${a}\uFF0C\u8FD0\u884C \`coder skills update\` \u5347\u7EA7\x1B[0m`),c>3&&console.error("\x1B[33m \u8FD0\u884C `coder skills check-updates` \u67E5\u770B\u5B8C\u6574\u5217\u8868\x1B[0m"),console.error()}}}catch{}let o=3600*1e3,n=0;try{n=JSON.parse($.readFileSync(t,"utf8")).checkedAt||0}catch{}!this.getInstalledSkills().some(r=>!r.meta?.version)&&Date.now()-n<o||setImmediate(async()=>{try{let r=await this.checkUpdates(e);$.mkdirSync(v.dirname(t),{recursive:!0}),$.writeFileSync(t,JSON.stringify({checkedAt:Date.now(),updates:r},null,2),"utf8")}catch{}})}remove(e){let t=!1;for(let o of this.getSkillDirs()){let n=v.join(o,e);$.existsSync(n)&&($.rmSync(n,{recursive:!0,force:!0}),console.log(` \u{1F5D1}\uFE0F ${n}`),t=!0)}return t?(console.log(`\u2705 ${e} \u5DF2\u5220\u9664`),0):(console.error(`\u274C \u672A\u627E\u5230\u5DF2\u5B89\u88C5\u7684 skill: ${e}`),1)}async search(e){let t=`${T}/api/web/skills?q=${encodeURIComponent(e)}&sort=relevance&page=0&size=12`;return new Promise(o=>{se.get(t,n=>{let s="";n.on("data",r=>{s+=r}),n.on("end",()=>{try{let r=JSON.parse(s);if(r.code!==0)return console.error(`\u274C \u67E5\u8BE2\u5931\u8D25: ${r.msg}`),o(1);let i=r.data.items;if(i.length===0)return console.log(`\u6CA1\u6709\u627E\u5230\u4E0E "${e}" \u76F8\u5173\u7684 skill`),o(0);console.log(`\u627E\u5230 ${r.data.total} \u4E2A\u7ED3\u679C:
27
+ `);for(let c of i)console.log(` ${c.slug.padEnd(20)} ${c.summary}`);o(0)}catch(r){console.error(`\u274C \u89E3\u6790\u54CD\u5E94\u5931\u8D25: ${r.message}`),o(1)}})}).on("error",n=>{console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${n.message}`),o(1)})})}async publish(e,t){let{execSync:o}=require("child_process"),n=require("os"),s=null,r="PUBLIC",i=null,c=null,a=null,d=null;for(let g=0;g<e.length;g++)if(e[g]==="--team"||e[g]==="-t"||e[g]==="--namespace"||e[g]==="-n")s=e[++g];else if(e[g]==="--visibility"||e[g]==="-v")r=e[++g];else if(e[g]==="--meta-data"){let b=e[++g];try{JSON.parse(b)}catch(y){return console.error(`\u274C --meta-data \u4E0D\u662F\u5408\u6CD5\u7684 JSON\uFF1A${y.message}`),1}i=b}else if(!e[g].startsWith("-")){let b=e[g];$.existsSync(b)&&$.statSync(b).isDirectory()?d=b:c=b}let u=this._resolveNamespace(s),m=u==="global";if(!t)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;m||(r="NAMESPACE_ONLY");let p=["PUBLIC","NAMESPACE_ONLY","PRIVATE"];if(!p.includes(r))return console.error(`\u274C visibility \u5FC5\u987B\u662F: ${p.join(", ")}`),1;if(c){if(!$.existsSync(c))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${c}`),1}else{let g=d?v.resolve(d):process.cwd();a=v.join(n.tmpdir(),`skill-pub-${Date.now()}.zip`),console.log(`\u{1F4E6} \u6B63\u5728\u6253\u5305 ${g}...`);try{$.existsSync(v.join(g,".git"))?(o(`git archive -o "${a}" HEAD`,{cwd:g,stdio:"pipe"}),console.log(" \u4F7F\u7528 git archive\uFF08\u5DF2\u6392\u9664 .gitignore \u6587\u4EF6\uFF09")):o(`zip -r "${a}" . -x ".git/*" -x "node_modules/*" -x ".env" -x "*.log"`,{cwd:g,stdio:"pipe"})}catch(b){return console.error(`\u274C \u6253\u5305\u5931\u8D25: ${b.message}`),1}c=a}let h=`${T}/api/v1/skills/${encodeURIComponent(u)}/publish?visibility=${encodeURIComponent(r)}`,f=t;console.log(`\u{1F680} \u6B63\u5728\u53D1\u5E03\u5230 ${T}`),console.log(` team: ${u}`),console.log(` visibility: ${r}`);try{let g=i?` -F "meta_data=${i.replace(/"/g,'\\"')}"`:"",b=`curl -s -X POST "${h}" -H "Authorization: Bearer ${f}" -F "file=@${c}"${g}`,y=o(b,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),w=JSON.parse(y);if(w.code===0){let x=w.data,k=x.namespace==="global"?`https://makecoder.com/skillhub/${x.slug}`:`https://makecoder.com/skillhub/space/${x.namespace}/${x.slug}`;return console.log(`
28
+ \u2705 \u53D1\u5E03\u6210\u529F!`),console.log(` ${x.namespace}--${x.slug}@${x.version}`),console.log(` ${k}`),x.status==="PUBLISHED"?console.log(" \u72B6\u6001: \u5DF2\u53D1\u5E03"):console.log(" \u72B6\u6001: \u5F85\u5BA1\u6838"),0}else return console.error(`
29
+ \u274C \u53D1\u5E03\u5931\u8D25: ${w.msg||JSON.stringify(w)}`),1}catch(g){let b=g.stdout;if(b)try{let y=JSON.parse(b);return console.error(`
30
+ \u274C \u53D1\u5E03\u5931\u8D25: ${y.msg||b}`),1}catch{}return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${g.message}`),1}finally{a&&$.existsSync(a)&&$.unlinkSync(a)}}async unpublish(e,t){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A skill: coder skills unpublish <slug> \u6216 coder skills unpublish <teamId>--<slug>"),1;if(!t)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;let o,n;if(e.includes("--")){let r=e.split("--");if(r.length!==2||!r[0]||!r[1])return console.error("\u274C \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <slug> \u6216 <teamId>--<slug>\uFF0C\u4F8B\u5982: my-skill \u6216 12680de5--my-skill"),1;o=this._resolveNamespace(r[0]),n=r[1]}else o=this._resolveNamespace(null),n=e;let s=`/api/v1/skills/${encodeURIComponent(o)}/${encodeURIComponent(n)}`;console.log(`\u{1F5D1}\uFE0F \u6B63\u5728\u4E0B\u67B6 ${o}--${n}`);try{let r=await this._request("DELETE",s,t),i=JSON.parse(r.body);return i.code===0?(console.log(`\u2705 \u5DF2\u4E0B\u67B6 ${o}--${n}`),0):(console.error(`\u274C \u4E0B\u67B6\u5931\u8D25: ${i.msg||JSON.stringify(i)}`),1)}catch(r){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${r.message}`),1}}async listTeamSkills(e,t){let o=0,n=20,s=null;for(let d=0;d<e.length;d++)(e[d]==="--page"||e[d]==="-p")&&e[d+1]?o=parseInt(e[++d],10):(e[d]==="--size"||e[d]==="-s")&&e[d+1]?n=parseInt(e[++d],10):(e[d]==="--team"||e[d]==="-t")&&e[d+1]&&(s=e[++d]);let r=this._resolveNamespace(s),i=r==="global",c=i?"":`&namespace=${encodeURIComponent(r)}`,a=`/api/web/skills?sort=newest&page=${o}&size=${n}${c}`;try{let d=await this._request("GET",a,t),u=JSON.parse(d.body);if(u.code!==0)return console.error(`\u274C \u83B7\u53D6\u5931\u8D25: ${u.msg}`),1;let m=u.data?.items||[],p=u.data?.total||0,h=i?"\u516C\u5171":`\u56E2\u961F ${r}`;if(m.length===0)return console.log(`${h} \u4E0B\u6682\u65E0 skill`),0;console.log(`${h} \u5171 ${p} \u4E2A skill\uFF08\u7B2C ${o+1} \u9875\uFF09:
31
+ `);for(let f of m){let g=`${f.slug}`.padEnd(28),b=`\u2B50 ${f.starCount??0}`.padEnd(8),y=`\u2193 ${f.downloadCount??0}`.padEnd(10);console.log(` ${g} ${b} ${y} ${f.summary||""}`)}return(o+1)*n<p&&console.log(`
32
+ \u4E0B\u4E00\u9875: coder skills list --page ${o+1}`),0}catch(d){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${d.message}`),1}}async listMySkills(e,t){let o=0,n=50;for(let s=0;s<e.length;s++)(e[s]==="--page"||e[s]==="-p")&&e[s+1]?o=parseInt(e[++s],10):(e[s]==="--size"||e[s]==="-s")&&e[s+1]&&(n=parseInt(e[++s],10));if(!t)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;try{let s=await this._request("GET",`/api/web/me/skills?page=${o}&size=${n}`,t),r=JSON.parse(s.body);if(r.code!==0)return console.error(`\u274C \u83B7\u53D6\u5931\u8D25: ${r.msg}`),1;let i=r.data?.items||[],c=r.data?.total||0;if(i.length===0)return console.log("\u6682\u65E0\u5DF2\u53D1\u5E03\u7684 skill"),0;console.log(`\u5171 ${c} \u4E2A skill:
33
+ `);for(let a of i){let d=`${a.namespace==="global"?"":"--"}${a.slug}`.padEnd(36),u=`\u2B50 ${a.starCount??0}`.padEnd(8),m=`\u2193 ${a.downloadCount??0}`.padEnd(10);console.log(` ${d} ${u} ${m} [${a.status}]`),a.displayName&&a.displayName!==a.slug&&console.log(` ${"".padEnd(36)} ${a.displayName}`)}return 0}catch(s){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${s.message}`),1}}showHelp(){console.log(["Usage: coder skills [subcommand] [options]","","\u2139\uFE0F Skill \u540D\u79F0\u683C\u5F0F:"," \u516C\u5171 skill \u76F4\u63A5\u7528 slug\uFF0C\u4F8B\u5982: vue"," \u56E2\u961F\u79C1\u6709 skill \u9700\u52A0\u56E2\u961F\u524D\u7F00: <teamId>--<slug>\uFF0C\u4F8B\u5982: 12680de5--my-skill"," teamId \u4E3A\u56E2\u961F ID \u524D 8 \u4F4D\uFF0C\u8FD0\u884C `coder team list` \u67E5\u770B","","Global Options:"," --team <teamId> \u6307\u5B9A\u56E2\u961F\uFF08\u9ED8\u8BA4\u4F7F\u7528 coder team use \u8BBE\u7F6E\u7684\u56E2\u961F\uFF09","","Subcommands:"," add <name> \u5B89\u88C5 skill"," remove <name> \u5378\u8F7D skill"," update [name] \u66F4\u65B0 skill\uFF08\u4E0D\u6307\u5B9A\u540D\u79F0\u5219\u66F4\u65B0\u5168\u90E8\uFF09"," check-updates \u68C0\u67E5\u5DF2\u5B89\u88C5 skill \u662F\u5426\u6709\u65B0\u7248\u672C"," search <keyword> \u641C\u7D22 skill"," list [--page <n>] [--size <n>] [--team <id>] \u5217\u51FA\u5F53\u524D\u56E2\u961F\u4E0B\u7684 skill"," my-skills [--page <n>] [--size <n>] \u67E5\u770B\u6211\u53D1\u5E03\u7684 skill"," publish [options] [<dir-or-zip>] \u53D1\u5E03 skill \u5230 skillhub"," unpublish <slug> \u4E0B\u67B6 skill\uFF08\u4F7F\u7528\u9ED8\u8BA4\u56E2\u961F\uFF09","","Publish Options:"," --team <teamId> \u76EE\u6807\u56E2\u961F\uFF08\u9ED8\u8BA4: \u5F53\u524D\u56E2\u961F\uFF0C\u65E0\u56E2\u961F\u65F6\u53D1\u5E03\u5230\u516C\u5171\uFF09"," --visibility <v> \u53EF\u89C1\u6027: PUBLIC | NAMESPACE_ONLY | PRIVATE"," \uFF08\u9ED8\u8BA4: PUBLIC\uFF0C\u56E2\u961F skill \u81EA\u52A8\u9501\u5B9A\u4E3A NAMESPACE_ONLY\uFF09"," --meta-data <json> \u9644\u52A0\u81EA\u5B9A\u4E49\u5143\u6570\u636E JSON","","Examples:"," coder skills add vue \u5B89\u88C5\u516C\u5171 skill"," coder skills add 12680de5--my-skill \u5B89\u88C5\u56E2\u961F\u79C1\u6709 skill"," coder skills search react \u641C\u7D22 skill"," coder skills list \u5217\u51FA\u5F53\u524D\u56E2\u961F\u7684 skill"," coder skills list --page 1 \u7B2C\u4E8C\u9875"," coder skills my-skills \u67E5\u770B\u6211\u53D1\u5E03\u7684 skill"," coder skills publish ./my-skill-dir \u53D1\u5E03\uFF08\u81EA\u52A8\u4F7F\u7528\u9ED8\u8BA4\u56E2\u961F\uFF09"," coder skills publish --team 12680de5 ./my-skill-dir \u53D1\u5E03\u5230\u6307\u5B9A\u56E2\u961F"," coder skills publish --visibility PRIVATE my-skill.zip",` coder skills publish --meta-data '{"category":"tool"}' ./my-skill-dir`," coder skills unpublish my-skill \u4E0B\u67B6\uFF08\u4F7F\u7528\u9ED8\u8BA4\u56E2\u961F\uFF09"," coder skills unpublish 12680de5--my-skill \u4E0B\u67B6\u6307\u5B9A\u56E2\u961F\u7684 skill"].join(`
34
+ `))}};Je.exports=ie});var He=S((So,Ve)=>{var qt=require("https"),z="https://makecoder.com/wiki",Bt=`${z}/api`,_=l=>`${z}/doc/${l}`,ce=l=>`${z}/collection/${l}`;function jt(l){return l.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}var Ut={"collection-info":{endpoint:"collections.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",buildBody:l=>({id:l}),print:l=>{let e=l.data;console.log(`ID: ${e.id}
39
35
  \u540D\u79F0: ${e.name}
40
36
  \u63CF\u8FF0: ${e.description||""}
41
- \u6743\u9650: ${e.permission||"null"}`)}},"collection-members":{endpoint:"collections.memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",buildBody:(c,e)=>{let t={id:c},o=e.indexOf("--query");o!==-1&&(t.query=e[o+1]);let n=e.indexOf("--permission");return n!==-1&&(t.permission=e[n+1]),t},print:(c,e)=>{let t=c.data?.memberships||c.data||[];if(!t.length){console.log("\u6682\u65E0\u6210\u5458");return}e.printTable(t.map(o=>({userId:o.userId||"",\u59D3\u540D:o.user?.name||"",\u6743\u9650:o.permission||""})))}},"collection-add-user":{endpoint:"collections.add_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>{let t={id:c,userId:e[1]},o=e.indexOf("--permission");return o!==-1&&(t.permission=e[o+1]),t},print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7528\u6237\u5230\u96C6\u5408")},"collection-remove-user":{endpoint:"collections.remove_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>({id:c,userId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u96C6\u5408\u79FB\u9664\u7528\u6237")},"collection-add-group":{endpoint:"collections.add_group",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>{let t={id:c,groupId:e[1]},o=e.indexOf("--permission");return o!==-1&&(t.permission=e[o+1]),t},print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7FA4\u7EC4\u5230\u96C6\u5408")},"collection-remove-group":{endpoint:"collections.remove_group",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>({id:c,groupId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u96C6\u5408\u79FB\u9664\u7FA4\u7EC4")},"collection-group-members":{endpoint:"collections.group_memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",buildBody:c=>({id:c}),print:(c,e)=>{let t=c.data?.groupMemberships||c.data||[];if(!t.length){console.log("\u6682\u65E0\u7FA4\u7EC4\u6210\u5458");return}e.printTable(t.map(o=>({groupId:o.groupId||"",\u7FA4\u7EC4\u540D:o.group?.name||"",\u6743\u9650:o.permission||""})))}},"collection-export":{endpoint:"collections.export",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",buildBody:(c,e)=>{let t={id:c},o=e.indexOf("--format");return o!==-1&&(t.format=e[o+1]),t},print:c=>console.log(`\u2705 \u5BFC\u51FA\u4EFB\u52A1\u5DF2\u521B\u5EFA: ${c.data?.id||""}`)},"export-all":{endpoint:"collections.export_all",buildBody:(c,e)=>{let t={},o=e.indexOf("--format");return o!==-1&&(t.format=e[o+1]),t},print:c=>console.log(`\u2705 \u5168\u91CF\u5BFC\u51FA\u4EFB\u52A1\u5DF2\u521B\u5EFA: ${c.data?.id||""}`)},"collection-move":{endpoint:"collections.move",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u76EE\u6807 index\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>({id:c,index:e[1]}),print:()=>console.log("\u2705 \u96C6\u5408\u5DF2\u79FB\u52A8")},archived:{endpoint:"documents.archived",buildBody:(c,e)=>{let t={},o=e.indexOf("--collection");o!==-1&&(t.collectionId=e[o+1]);let n=e.indexOf("--sort");n!==-1&&(t.sort=e[n+1]);let s=e.indexOf("--direction");return s!==-1&&(t.direction=e[s+1]),t},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u5DF2\u5F52\u6863\u6587\u6863");return}e.printTable(t.map(o=>({"ID(UUID,\u7528\u4E8EAPI)":o.id,\u6807\u9898:o.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(o.urlId||o.id)})))}},deleted:{endpoint:"documents.deleted",buildBody:(c,e)=>{let t={},o=e.indexOf("--sort");o!==-1&&(t.sort=e[o+1]);let n=e.indexOf("--direction");return n!==-1&&(t.direction=e[n+1]),t},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u5DF2\u5220\u9664\u6587\u6863");return}e.printTable(t.map(o=>({ID:o.id,\u6807\u9898:o.title,\u5220\u9664\u65F6\u95F4:o.deletedAt||""})))}},insights:{endpoint:"documents.insights",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(c,e)=>{let t={id:c},o=e.indexOf("--start-date");o!==-1&&(t.startDate=e[o+1]);let n=e.indexOf("--end-date");return n!==-1&&(t.endDate=e[n+1]),t},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u8BBF\u95EE\u6570\u636E");return}e.printTable(t.map(o=>({userId:o.userId||"",\u59D3\u540D:o.user?.name||"",\u65F6\u95F4:o.createdAt||""})))}},export:{endpoint:"documents.export",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(c,e)=>({id:c,includeChildDocuments:e.includes("--include-children")}),print:c=>{let e=c.data;console.log(typeof e=="string"?e:JSON.stringify(e,null,2))}},"search-titles":{endpoint:"documents.search_titles",requireId:"\u274C \u8BF7\u6307\u5B9A\u641C\u7D22\u5173\u952E\u8BCD",buildBody:(c,e)=>({query:[c,...e.slice(1)].join(" ")}),print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u672A\u627E\u5230\u5339\u914D\u6807\u9898");return}e.printTable(t.map(o=>({"ID(UUID,\u7528\u4E8EAPI)":o.id,\u6807\u9898:o.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(o.urlId||o.id)})))}},duplicate:{endpoint:"documents.duplicate",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(c,e)=>{let t={id:c},o=e.indexOf("--title");o!==-1&&(t.title=e[o+1]);let n=e.indexOf("--collection");n!==-1&&(t.collectionId=e[n+1]);let s=e.indexOf("--parent");return s!==-1&&(t.parentDocumentId=e[s+1]),e.includes("--recursive")&&(t.recursive=!0),e.includes("--publish")&&(t.publish=!0),t},print:c=>{let t=(c.data?.documents||[])[0];console.log(t?`\u2705 \u6587\u6863\u5DF2\u590D\u5236: ${t.id} \u2014 ${t.title}`:"\u2705 \u6587\u6863\u5DF2\u590D\u5236")}},unpublish:{endpoint:"documents.unpublish",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:c=>({id:c}),print:()=>console.log("\u2705 \u6587\u6863\u5DF2\u53D6\u6D88\u53D1\u5E03")},templatize:{endpoint:"documents.templatize",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(c,e)=>{let t={id:c,publish:!0},o=e.indexOf("--collection");return o!==-1&&(t.collectionId=e[o+1]),t},print:c=>console.log(`\u2705 \u5DF2\u8F6C\u4E3A\u6A21\u677F: ${c.data.id}`)},"doc-members":{endpoint:"documents.memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:c=>({id:c}),print:(c,e)=>{let t=c.data?.memberships||c.data||[];if(!t.length){console.log("\u6682\u65E0\u6210\u5458");return}e.printTable(t.map(o=>({userId:o.userId||"",\u59D3\u540D:o.user?.name||"",\u6743\u9650:o.permission||""})))}},"doc-add-user":{endpoint:"documents.add_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>{let t={id:c,userId:e[1]},o=e.indexOf("--permission");return o!==-1&&(t.permission=e[o+1]),t},print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7528\u6237\u5230\u6587\u6863")},"doc-remove-user":{endpoint:"documents.remove_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>({id:c,userId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u6587\u6863\u79FB\u9664\u7528\u6237")},"doc-add-group":{endpoint:"documents.add_group",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>{let t={id:c,groupId:e[1]},o=e.indexOf("--permission");return o!==-1&&(t.permission=e[o+1]),t},print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7FA4\u7EC4\u5230\u6587\u6863")},"doc-remove-group":{endpoint:"documents.remove_group",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>({id:c,groupId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u6587\u6863\u79FB\u9664\u7FA4\u7EC4")},"doc-group-members":{endpoint:"documents.group_memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:c=>({id:c}),print:(c,e)=>{let t=c.data?.groupMemberships||c.data||[];if(!t.length){console.log("\u6682\u65E0\u7FA4\u7EC4\u6210\u5458");return}e.printTable(t.map(o=>({groupId:o.groupId||"",\u7FA4\u7EC4\u540D:o.group?.name||"",\u6743\u9650:o.permission||""})))}},"empty-trash":{endpoint:"documents.empty_trash",buildBody:()=>({}),expectOk:!0,print:()=>console.log("\u2705 \u56DE\u6536\u7AD9\u5DF2\u6E05\u7A7A")},"sub-docs":{endpoint:"documents.documents",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:c=>({id:c}),print:(c,e)=>{let t=c.data?.children||[];if(!t.length){console.log("\u6682\u65E0\u5B50\u6587\u6863");return}e.printTree(t,"",1/0,0)}},shares:{endpoint:"shares.list",buildBody:(c,e)=>{let t={},o=e.indexOf("--document");return o!==-1&&(t.documentId=e[o+1]),t},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u5206\u4EAB");return}e.printTable(t.map(o=>({shareId:o.id,\u6587\u6863:o.documentTitle||o.documentId||"",\u5DF2\u53D1\u5E03:o.published?"\u662F":"\u5426",URL:o.url||""})))}},"share-info":{endpoint:"shares.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u5206\u4EAB ID",buildBody:c=>({id:c}),print:c=>{let e=c.data;console.log(`ID: ${e.id}
37
+ \u6743\u9650: ${e.permission||"null"}`)}},"collection-members":{endpoint:"collections.memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",buildBody:(l,e)=>{let t={id:l},o=e.indexOf("--query");o!==-1&&(t.query=e[o+1]);let n=e.indexOf("--permission");return n!==-1&&(t.permission=e[n+1]),t},print:(l,e)=>{let t=l.data?.memberships||l.data||[];if(!t.length){console.log("\u6682\u65E0\u6210\u5458");return}e.printTable(t.map(o=>({userId:o.userId||"",\u59D3\u540D:o.user?.name||"",\u6743\u9650:o.permission||""})))}},"collection-add-user":{endpoint:"collections.add_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>{let t={id:l,userId:e[1]},o=e.indexOf("--permission");return o!==-1&&(t.permission=e[o+1]),t},print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7528\u6237\u5230\u96C6\u5408")},"collection-remove-user":{endpoint:"collections.remove_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>({id:l,userId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u96C6\u5408\u79FB\u9664\u7528\u6237")},"collection-add-group":{endpoint:"collections.add_group",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>{let t={id:l,groupId:e[1]},o=e.indexOf("--permission");return o!==-1&&(t.permission=e[o+1]),t},print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7FA4\u7EC4\u5230\u96C6\u5408")},"collection-remove-group":{endpoint:"collections.remove_group",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>({id:l,groupId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u96C6\u5408\u79FB\u9664\u7FA4\u7EC4")},"collection-group-members":{endpoint:"collections.group_memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",buildBody:l=>({id:l}),print:(l,e)=>{let t=l.data?.groupMemberships||l.data||[];if(!t.length){console.log("\u6682\u65E0\u7FA4\u7EC4\u6210\u5458");return}e.printTable(t.map(o=>({groupId:o.groupId||"",\u7FA4\u7EC4\u540D:o.group?.name||"",\u6743\u9650:o.permission||""})))}},"collection-export":{endpoint:"collections.export",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",buildBody:(l,e)=>{let t={id:l},o=e.indexOf("--format");return o!==-1&&(t.format=e[o+1]),t},print:l=>console.log(`\u2705 \u5BFC\u51FA\u4EFB\u52A1\u5DF2\u521B\u5EFA: ${l.data?.id||""}`)},"export-all":{endpoint:"collections.export_all",buildBody:(l,e)=>{let t={},o=e.indexOf("--format");return o!==-1&&(t.format=e[o+1]),t},print:l=>console.log(`\u2705 \u5168\u91CF\u5BFC\u51FA\u4EFB\u52A1\u5DF2\u521B\u5EFA: ${l.data?.id||""}`)},"collection-move":{endpoint:"collections.move",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u76EE\u6807 index\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>({id:l,index:e[1]}),print:()=>console.log("\u2705 \u96C6\u5408\u5DF2\u79FB\u52A8")},archived:{endpoint:"documents.archived",buildBody:(l,e)=>{let t={},o=e.indexOf("--collection");o!==-1&&(t.collectionId=e[o+1]);let n=e.indexOf("--sort");n!==-1&&(t.sort=e[n+1]);let s=e.indexOf("--direction");return s!==-1&&(t.direction=e[s+1]),t},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u5DF2\u5F52\u6863\u6587\u6863");return}e.printTable(t.map(o=>({"ID(UUID,\u7528\u4E8EAPI)":o.id,\u6807\u9898:o.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(o.urlId||o.id)})))}},deleted:{endpoint:"documents.deleted",buildBody:(l,e)=>{let t={},o=e.indexOf("--sort");o!==-1&&(t.sort=e[o+1]);let n=e.indexOf("--direction");return n!==-1&&(t.direction=e[n+1]),t},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u5DF2\u5220\u9664\u6587\u6863");return}e.printTable(t.map(o=>({ID:o.id,\u6807\u9898:o.title,\u5220\u9664\u65F6\u95F4:o.deletedAt||""})))}},insights:{endpoint:"documents.insights",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(l,e)=>{let t={id:l},o=e.indexOf("--start-date");o!==-1&&(t.startDate=e[o+1]);let n=e.indexOf("--end-date");return n!==-1&&(t.endDate=e[n+1]),t},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u8BBF\u95EE\u6570\u636E");return}e.printTable(t.map(o=>({userId:o.userId||"",\u59D3\u540D:o.user?.name||"",\u65F6\u95F4:o.createdAt||""})))}},export:{endpoint:"documents.export",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(l,e)=>({id:l,includeChildDocuments:e.includes("--include-children")}),print:l=>{let e=l.data;console.log(typeof e=="string"?e:JSON.stringify(e,null,2))}},"search-titles":{endpoint:"documents.search_titles",requireId:"\u274C \u8BF7\u6307\u5B9A\u641C\u7D22\u5173\u952E\u8BCD",buildBody:(l,e)=>({query:[l,...e.slice(1)].join(" ")}),print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u672A\u627E\u5230\u5339\u914D\u6807\u9898");return}e.printTable(t.map(o=>({"ID(UUID,\u7528\u4E8EAPI)":o.id,\u6807\u9898:o.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(o.urlId||o.id)})))}},duplicate:{endpoint:"documents.duplicate",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(l,e)=>{let t={id:l},o=e.indexOf("--title");o!==-1&&(t.title=e[o+1]);let n=e.indexOf("--collection");n!==-1&&(t.collectionId=e[n+1]);let s=e.indexOf("--parent");return s!==-1&&(t.parentDocumentId=e[s+1]),e.includes("--recursive")&&(t.recursive=!0),e.includes("--publish")&&(t.publish=!0),t},print:l=>{let t=(l.data?.documents||[])[0];console.log(t?`\u2705 \u6587\u6863\u5DF2\u590D\u5236: ${t.id} \u2014 ${t.title}`:"\u2705 \u6587\u6863\u5DF2\u590D\u5236")}},unpublish:{endpoint:"documents.unpublish",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:l=>({id:l}),print:()=>console.log("\u2705 \u6587\u6863\u5DF2\u53D6\u6D88\u53D1\u5E03")},templatize:{endpoint:"documents.templatize",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(l,e)=>{let t={id:l,publish:!0},o=e.indexOf("--collection");return o!==-1&&(t.collectionId=e[o+1]),t},print:l=>console.log(`\u2705 \u5DF2\u8F6C\u4E3A\u6A21\u677F: ${l.data.id}`)},"doc-members":{endpoint:"documents.memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:l=>({id:l}),print:(l,e)=>{let t=l.data?.memberships||l.data||[];if(!t.length){console.log("\u6682\u65E0\u6210\u5458");return}e.printTable(t.map(o=>({userId:o.userId||"",\u59D3\u540D:o.user?.name||"",\u6743\u9650:o.permission||""})))}},"doc-add-user":{endpoint:"documents.add_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>{let t={id:l,userId:e[1]},o=e.indexOf("--permission");return o!==-1&&(t.permission=e[o+1]),t},print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7528\u6237\u5230\u6587\u6863")},"doc-remove-user":{endpoint:"documents.remove_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>({id:l,userId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u6587\u6863\u79FB\u9664\u7528\u6237")},"doc-add-group":{endpoint:"documents.add_group",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>{let t={id:l,groupId:e[1]},o=e.indexOf("--permission");return o!==-1&&(t.permission=e[o+1]),t},print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7FA4\u7EC4\u5230\u6587\u6863")},"doc-remove-group":{endpoint:"documents.remove_group",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>({id:l,groupId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u6587\u6863\u79FB\u9664\u7FA4\u7EC4")},"doc-group-members":{endpoint:"documents.group_memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:l=>({id:l}),print:(l,e)=>{let t=l.data?.groupMemberships||l.data||[];if(!t.length){console.log("\u6682\u65E0\u7FA4\u7EC4\u6210\u5458");return}e.printTable(t.map(o=>({groupId:o.groupId||"",\u7FA4\u7EC4\u540D:o.group?.name||"",\u6743\u9650:o.permission||""})))}},"empty-trash":{endpoint:"documents.empty_trash",buildBody:()=>({}),expectOk:!0,print:()=>console.log("\u2705 \u56DE\u6536\u7AD9\u5DF2\u6E05\u7A7A")},"sub-docs":{endpoint:"documents.documents",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:l=>({id:l}),print:(l,e)=>{let t=l.data?.children||[];if(!t.length){console.log("\u6682\u65E0\u5B50\u6587\u6863");return}e.printTree(t,"",1/0,0)}},shares:{endpoint:"shares.list",buildBody:(l,e)=>{let t={},o=e.indexOf("--document");return o!==-1&&(t.documentId=e[o+1]),t},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u5206\u4EAB");return}e.printTable(t.map(o=>({shareId:o.id,\u6587\u6863:o.documentTitle||o.documentId||"",\u5DF2\u53D1\u5E03:o.published?"\u662F":"\u5426",URL:o.url||""})))}},"share-info":{endpoint:"shares.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u5206\u4EAB ID",buildBody:l=>({id:l}),print:l=>{let e=l.data;console.log(`ID: ${e.id}
42
38
  \u6587\u6863: ${e.documentTitle||e.documentId||""}
43
39
  \u5DF2\u53D1\u5E03: ${e.published?"\u662F":"\u5426"}
44
- URL: ${e.url||""}`)}},share:{endpoint:"shares.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(c,e)=>({documentId:c,published:e.includes("--published"),includeChildDocuments:e.includes("--include-children")}),print:c=>console.log(`\u2705 \u5206\u4EAB\u5DF2\u521B\u5EFA: ${c.data.id}
45
- ${c.data.url||""}`)},"share-update":{endpoint:"shares.update",requireId:"\u274C \u8BF7\u6307\u5B9A\u5206\u4EAB ID",buildBody:(c,e)=>{let t={id:c};return e.includes("--published")&&(t.published=!0),e.includes("--no-published")&&(t.published=!1),e.includes("--include-children")&&(t.includeChildDocuments=!0),t},print:()=>console.log("\u2705 \u5206\u4EAB\u5DF2\u66F4\u65B0")},unshare:{endpoint:"shares.revoke",requireId:"\u274C \u8BF7\u6307\u5B9A\u5206\u4EAB ID",buildBody:c=>({id:c}),expectOk:!0,print:()=>console.log("\u2705 \u5206\u4EAB\u5DF2\u64A4\u9500")},users:{endpoint:"users.list",buildBody:(c,e)=>{let t={},o=e.indexOf("--query");o!==-1&&(t.query=e[o+1]);let n=e.indexOf("--filter");return n!==-1&&(t.filter=e[n+1]),t},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u7528\u6237");return}e.printTable(t.map(o=>({ID:o.id,\u59D3\u540D:o.name,\u90AE\u7BB1:o.email||"",\u89D2\u8272:o.role||""})))}},"user-info":{endpoint:"users.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID",buildBody:c=>({id:c}),print:c=>{let e=c.data;console.log(`ID: ${e.id}
40
+ URL: ${e.url||""}`)}},share:{endpoint:"shares.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(l,e)=>({documentId:l,published:e.includes("--published"),includeChildDocuments:e.includes("--include-children")}),print:l=>console.log(`\u2705 \u5206\u4EAB\u5DF2\u521B\u5EFA: ${l.data.id}
41
+ ${l.data.url||""}`)},"share-update":{endpoint:"shares.update",requireId:"\u274C \u8BF7\u6307\u5B9A\u5206\u4EAB ID",buildBody:(l,e)=>{let t={id:l};return e.includes("--published")&&(t.published=!0),e.includes("--no-published")&&(t.published=!1),e.includes("--include-children")&&(t.includeChildDocuments=!0),t},print:()=>console.log("\u2705 \u5206\u4EAB\u5DF2\u66F4\u65B0")},unshare:{endpoint:"shares.revoke",requireId:"\u274C \u8BF7\u6307\u5B9A\u5206\u4EAB ID",buildBody:l=>({id:l}),expectOk:!0,print:()=>console.log("\u2705 \u5206\u4EAB\u5DF2\u64A4\u9500")},users:{endpoint:"users.list",buildBody:(l,e)=>{let t={},o=e.indexOf("--query");o!==-1&&(t.query=e[o+1]);let n=e.indexOf("--filter");return n!==-1&&(t.filter=e[n+1]),t},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u7528\u6237");return}e.printTable(t.map(o=>({ID:o.id,\u59D3\u540D:o.name,\u90AE\u7BB1:o.email||"",\u89D2\u8272:o.role||""})))}},"user-info":{endpoint:"users.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID",buildBody:l=>({id:l}),print:l=>{let e=l.data;console.log(`ID: ${e.id}
46
42
  \u59D3\u540D: ${e.name}
47
43
  \u90AE\u7BB1: ${e.email||""}
48
- \u89D2\u8272: ${e.role||""}`)}},invite:{endpoint:"users.invite",buildBody:(c,e)=>{let t=e.indexOf("--email"),o=e.indexOf("--name"),n=e.indexOf("--role"),s=t!==-1?e[t+1]:c||e[0],r=o!==-1?e[o+1]:e[1],i=n!==-1?e[n+1]:e[2];return{invites:[{email:s,name:r,role:i}]}},requireArgs:(c,e)=>{let t=e.indexOf("--email");return!(t!==-1?e[t+1]:c||e[0])&&"\u274C \u8BF7\u6307\u5B9A\u90AE\u7BB1\uFF08\u7B2C\u4E00\u4E2A\u53C2\u6570\u6216 --email\uFF09"},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u2705 \u9080\u8BF7\u5DF2\u53D1\u9001");return}e.printTable(t.map(o=>({ID:o.id,\u90AE\u7BB1:o.email||"",\u59D3\u540D:o.name||""})))}},"user-update-role":{endpoint:"users.update_role",requireId:"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u89D2\u8272\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF1Aadmin|member|viewer\uFF09",buildBody:(c,e)=>({id:c,role:e[1]}),print:()=>console.log("\u2705 \u7528\u6237\u89D2\u8272\u5DF2\u66F4\u65B0")},"user-suspend":{endpoint:"users.suspend",requireId:"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID",buildBody:c=>({id:c}),print:()=>console.log("\u2705 \u7528\u6237\u5DF2\u6682\u505C")},"user-activate":{endpoint:"users.activate",requireId:"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID",buildBody:c=>({id:c}),print:()=>console.log("\u2705 \u7528\u6237\u5DF2\u6FC0\u6D3B")},groups:{endpoint:"groups.list",buildBody:(c,e)=>{let t={},o=e.indexOf("--query");return o!==-1&&(t.query=e[o+1]),t},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u7FA4\u7EC4");return}e.printTable(t.map(o=>({ID:o.id,\u540D\u79F0:o.name,\u6210\u5458\u6570:o.memberCount??""})))}},"group-info":{endpoint:"groups.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",buildBody:c=>({id:c}),print:c=>{let e=c.data;console.log(`ID: ${e.id}
44
+ \u89D2\u8272: ${e.role||""}`)}},invite:{endpoint:"users.invite",buildBody:(l,e)=>{let t=e.indexOf("--email"),o=e.indexOf("--name"),n=e.indexOf("--role"),s=t!==-1?e[t+1]:l||e[0],r=o!==-1?e[o+1]:e[1],i=n!==-1?e[n+1]:e[2];return{invites:[{email:s,name:r,role:i}]}},requireArgs:(l,e)=>{let t=e.indexOf("--email");return!(t!==-1?e[t+1]:l||e[0])&&"\u274C \u8BF7\u6307\u5B9A\u90AE\u7BB1\uFF08\u7B2C\u4E00\u4E2A\u53C2\u6570\u6216 --email\uFF09"},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u2705 \u9080\u8BF7\u5DF2\u53D1\u9001");return}e.printTable(t.map(o=>({ID:o.id,\u90AE\u7BB1:o.email||"",\u59D3\u540D:o.name||""})))}},"user-update-role":{endpoint:"users.update_role",requireId:"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u89D2\u8272\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF1Aadmin|member|viewer\uFF09",buildBody:(l,e)=>({id:l,role:e[1]}),print:()=>console.log("\u2705 \u7528\u6237\u89D2\u8272\u5DF2\u66F4\u65B0")},"user-suspend":{endpoint:"users.suspend",requireId:"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID",buildBody:l=>({id:l}),print:()=>console.log("\u2705 \u7528\u6237\u5DF2\u6682\u505C")},"user-activate":{endpoint:"users.activate",requireId:"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID",buildBody:l=>({id:l}),print:()=>console.log("\u2705 \u7528\u6237\u5DF2\u6FC0\u6D3B")},groups:{endpoint:"groups.list",buildBody:(l,e)=>{let t={},o=e.indexOf("--query");return o!==-1&&(t.query=e[o+1]),t},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u7FA4\u7EC4");return}e.printTable(t.map(o=>({ID:o.id,\u540D\u79F0:o.name,\u6210\u5458\u6570:o.memberCount??""})))}},"group-info":{endpoint:"groups.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",buildBody:l=>({id:l}),print:l=>{let e=l.data;console.log(`ID: ${e.id}
49
45
  \u540D\u79F0: ${e.name}
50
- \u6210\u5458: ${e.memberCount??""}`)}},"create-group":{endpoint:"groups.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4\u540D\u79F0",buildBody:(c,e)=>({name:[c,...e.slice(1)].join(" ")}),print:c=>console.log(`\u2705 \u7FA4\u7EC4\u5DF2\u521B\u5EFA: ${c.data.id} \u2014 ${c.data.name}`)},"update-group":{endpoint:"groups.update",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",buildBody:(c,e)=>{let t={id:c},o=e.indexOf("--name");return o!==-1&&(t.name=e[o+1]),t},print:()=>console.log("\u2705 \u7FA4\u7EC4\u5DF2\u66F4\u65B0")},"delete-group":{endpoint:"groups.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",buildBody:c=>({id:c}),expectOk:!0,print:()=>console.log("\u2705 \u7FA4\u7EC4\u5DF2\u5220\u9664")},"group-members":{endpoint:"groups.memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",buildBody:c=>({id:c}),print:(c,e)=>{let t=c.data?.groupMemberships||c.data||[];if(!t.length){console.log("\u6682\u65E0\u6210\u5458");return}e.printTable(t.map(o=>({userId:o.userId||o.user?.id||"",\u59D3\u540D:o.user?.name||""})))}},"group-add-user":{endpoint:"groups.add_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>({id:c,userId:e[1]}),print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7528\u6237\u5230\u7FA4\u7EC4")},"group-remove-user":{endpoint:"groups.remove_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>({id:c,userId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u7FA4\u7EC4\u79FB\u9664\u7528\u6237")},views:{endpoint:"views.list",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:c=>({documentId:c}),print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u6D4F\u89C8\u8BB0\u5F55");return}e.printTable(t.map(o=>({userId:o.userId||"",\u59D3\u540D:o.user?.name||"",\u6B21\u6570:o.count??"",\u6700\u8FD1:o.updatedAt||""})))}},view:{endpoint:"views.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:c=>({documentId:c}),print:()=>console.log("\u2705 \u6D4F\u89C8\u5DF2\u8BB0\u5F55")},subscriptions:{endpoint:"subscriptions.list",buildBody:(c,e)=>{let t={event:"documents.update"};c&&(t.documentId=c);let o=e.indexOf("--collection");return o!==-1&&(t.collectionId=e[o+1]),t},requireArgs:(c,e)=>!c&&e.indexOf("--collection")===-1&&"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID \u6216 --collection <collectionId>",print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u8BA2\u9605");return}e.printTable(t.map(o=>({ID:o.id,\u6587\u6863:o.documentId||"",\u4E8B\u4EF6:o.event||""})))}},subscribe:{endpoint:"subscriptions.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:c=>({documentId:c,event:"documents.update"}),print:c=>console.log(`\u2705 \u5DF2\u8BA2\u9605: ${c.data.id}`)},unsubscribe:{endpoint:"subscriptions.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u8BA2\u9605 ID",buildBody:c=>({id:c}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u53D6\u6D88\u8BA2\u9605")},events:{endpoint:"events.list",buildBody:(c,e)=>{let t={},o=e.indexOf("--actor");o!==-1&&(t.actorId=e[o+1]);let n=e.indexOf("--document");n!==-1&&(t.documentId=e[n+1]);let s=e.indexOf("--collection");s!==-1&&(t.collectionId=e[s+1]);let r=e.indexOf("--type");return r!==-1&&(t.name=e[r+1]),t},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u4E8B\u4EF6");return}e.printTable(t.map(o=>({\u4E8B\u4EF6:o.name||"",actorId:o.actorId||"",\u65F6\u95F4:o.createdAt||""})))}},templates:{endpoint:"templates.list",buildBody:(c,e)=>{let t={},o=e.indexOf("--collection");return o!==-1&&(t.collectionId=e[o+1]),t},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u6A21\u677F");return}e.printTable(t.map(o=>({ID:o.id,\u6807\u9898:o.title,\u96C6\u5408:o.collectionId||""})))}},"template-info":{endpoint:"templates.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F ID",buildBody:c=>({id:c}),print:c=>{let e=c.data;console.log(`ID: ${e.id}
46
+ \u6210\u5458: ${e.memberCount??""}`)}},"create-group":{endpoint:"groups.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4\u540D\u79F0",buildBody:(l,e)=>({name:[l,...e.slice(1)].join(" ")}),print:l=>console.log(`\u2705 \u7FA4\u7EC4\u5DF2\u521B\u5EFA: ${l.data.id} \u2014 ${l.data.name}`)},"update-group":{endpoint:"groups.update",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",buildBody:(l,e)=>{let t={id:l},o=e.indexOf("--name");return o!==-1&&(t.name=e[o+1]),t},print:()=>console.log("\u2705 \u7FA4\u7EC4\u5DF2\u66F4\u65B0")},"delete-group":{endpoint:"groups.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",buildBody:l=>({id:l}),expectOk:!0,print:()=>console.log("\u2705 \u7FA4\u7EC4\u5DF2\u5220\u9664")},"group-members":{endpoint:"groups.memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",buildBody:l=>({id:l}),print:(l,e)=>{let t=l.data?.groupMemberships||l.data||[];if(!t.length){console.log("\u6682\u65E0\u6210\u5458");return}e.printTable(t.map(o=>({userId:o.userId||o.user?.id||"",\u59D3\u540D:o.user?.name||""})))}},"group-add-user":{endpoint:"groups.add_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>({id:l,userId:e[1]}),print:()=>console.log("\u2705 \u5DF2\u6DFB\u52A0\u7528\u6237\u5230\u7FA4\u7EC4")},"group-remove-user":{endpoint:"groups.remove_user",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>({id:l,userId:e[1]}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u4ECE\u7FA4\u7EC4\u79FB\u9664\u7528\u6237")},views:{endpoint:"views.list",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:l=>({documentId:l}),print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u6D4F\u89C8\u8BB0\u5F55");return}e.printTable(t.map(o=>({userId:o.userId||"",\u59D3\u540D:o.user?.name||"",\u6B21\u6570:o.count??"",\u6700\u8FD1:o.updatedAt||""})))}},view:{endpoint:"views.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:l=>({documentId:l}),print:()=>console.log("\u2705 \u6D4F\u89C8\u5DF2\u8BB0\u5F55")},subscriptions:{endpoint:"subscriptions.list",buildBody:(l,e)=>{let t={event:"documents.update"};l&&(t.documentId=l);let o=e.indexOf("--collection");return o!==-1&&(t.collectionId=e[o+1]),t},requireArgs:(l,e)=>!l&&e.indexOf("--collection")===-1&&"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID \u6216 --collection <collectionId>",print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u8BA2\u9605");return}e.printTable(t.map(o=>({ID:o.id,\u6587\u6863:o.documentId||"",\u4E8B\u4EF6:o.event||""})))}},subscribe:{endpoint:"subscriptions.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:l=>({documentId:l,event:"documents.update"}),print:l=>console.log(`\u2705 \u5DF2\u8BA2\u9605: ${l.data.id}`)},unsubscribe:{endpoint:"subscriptions.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u8BA2\u9605 ID",buildBody:l=>({id:l}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u53D6\u6D88\u8BA2\u9605")},events:{endpoint:"events.list",buildBody:(l,e)=>{let t={},o=e.indexOf("--actor");o!==-1&&(t.actorId=e[o+1]);let n=e.indexOf("--document");n!==-1&&(t.documentId=e[n+1]);let s=e.indexOf("--collection");s!==-1&&(t.collectionId=e[s+1]);let r=e.indexOf("--type");return r!==-1&&(t.name=e[r+1]),t},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u4E8B\u4EF6");return}e.printTable(t.map(o=>({\u4E8B\u4EF6:o.name||"",actorId:o.actorId||"",\u65F6\u95F4:o.createdAt||""})))}},templates:{endpoint:"templates.list",buildBody:(l,e)=>{let t={},o=e.indexOf("--collection");return o!==-1&&(t.collectionId=e[o+1]),t},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u6A21\u677F");return}e.printTable(t.map(o=>({ID:o.id,\u6807\u9898:o.title,\u96C6\u5408:o.collectionId||""})))}},"template-info":{endpoint:"templates.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F ID",buildBody:l=>({id:l}),print:l=>{let e=l.data;console.log(`ID: ${e.id}
51
47
  \u6807\u9898: ${e.title}
52
- \u96C6\u5408: ${e.collectionId||""}`)}},"create-template":{endpoint:"templates.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(c,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F\u6807\u9898\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(c,e)=>{let t=e.indexOf("--text"),o=t!==-1?e[t+1]:"";return{collectionId:c,title:e[1],data:{type:"doc",content:o?[{type:"paragraph",content:[{type:"text",text:o}]}]:[]}}},print:c=>console.log(`\u2705 \u6A21\u677F\u5DF2\u521B\u5EFA: ${c.data.id} \u2014 ${c.data.title}`)},"update-template":{endpoint:"templates.update",requireId:"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F ID",buildBody:(c,e)=>{let t={id:c},o=e.indexOf("--title");o!==-1&&(t.title=e[o+1]);let n=e.indexOf("--text");return n!==-1&&(t.data={type:"doc",content:[{type:"paragraph",content:[{type:"text",text:e[n+1]}]}]}),t},print:()=>console.log("\u2705 \u6A21\u677F\u5DF2\u66F4\u65B0")},"delete-template":{endpoint:"templates.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F ID",buildBody:c=>({id:c}),expectOk:!0,print:()=>console.log("\u2705 \u6A21\u677F\u5DF2\u5220\u9664")},"duplicate-template":{endpoint:"templates.duplicate",requireId:"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F ID",buildBody:(c,e)=>{let t={id:c},o=e.indexOf("--title");return o!==-1&&(t.title=e[o+1]),t},print:c=>console.log(`\u2705 \u6A21\u677F\u5DF2\u590D\u5236: ${c.data.id} \u2014 ${c.data.title}`)},"file-ops":{endpoint:"fileOperations.list",buildBody:(c,e)=>{let t={},o=e.indexOf("--type");return o!==-1&&(t.type=e[o+1]),t},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u6587\u4EF6\u64CD\u4F5C\u8BB0\u5F55");return}e.printTable(t.map(o=>({ID:o.id,\u7C7B\u578B:o.type||"",\u72B6\u6001:o.state||"",\u65F6\u95F4:o.createdAt||""})))}},"file-op-info":{endpoint:"fileOperations.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u4EF6\u64CD\u4F5C ID",buildBody:c=>({id:c}),print:c=>{let e=c.data;console.log(`ID: ${e.id}
48
+ \u96C6\u5408: ${e.collectionId||""}`)}},"create-template":{endpoint:"templates.create",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(l,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F\u6807\u9898\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(l,e)=>{let t=e.indexOf("--text"),o=t!==-1?e[t+1]:"";return{collectionId:l,title:e[1],data:{type:"doc",content:o?[{type:"paragraph",content:[{type:"text",text:o}]}]:[]}}},print:l=>console.log(`\u2705 \u6A21\u677F\u5DF2\u521B\u5EFA: ${l.data.id} \u2014 ${l.data.title}`)},"update-template":{endpoint:"templates.update",requireId:"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F ID",buildBody:(l,e)=>{let t={id:l},o=e.indexOf("--title");o!==-1&&(t.title=e[o+1]);let n=e.indexOf("--text");return n!==-1&&(t.data={type:"doc",content:[{type:"paragraph",content:[{type:"text",text:e[n+1]}]}]}),t},print:()=>console.log("\u2705 \u6A21\u677F\u5DF2\u66F4\u65B0")},"delete-template":{endpoint:"templates.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F ID",buildBody:l=>({id:l}),expectOk:!0,print:()=>console.log("\u2705 \u6A21\u677F\u5DF2\u5220\u9664")},"duplicate-template":{endpoint:"templates.duplicate",requireId:"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F ID",buildBody:(l,e)=>{let t={id:l},o=e.indexOf("--title");return o!==-1&&(t.title=e[o+1]),t},print:l=>console.log(`\u2705 \u6A21\u677F\u5DF2\u590D\u5236: ${l.data.id} \u2014 ${l.data.title}`)},"file-ops":{endpoint:"fileOperations.list",buildBody:(l,e)=>{let t={},o=e.indexOf("--type");return o!==-1&&(t.type=e[o+1]),t},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u6587\u4EF6\u64CD\u4F5C\u8BB0\u5F55");return}e.printTable(t.map(o=>({ID:o.id,\u7C7B\u578B:o.type||"",\u72B6\u6001:o.state||"",\u65F6\u95F4:o.createdAt||""})))}},"file-op-info":{endpoint:"fileOperations.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u4EF6\u64CD\u4F5C ID",buildBody:l=>({id:l}),print:l=>{let e=l.data;console.log(`ID: ${e.id}
53
49
  \u7C7B\u578B: ${e.type||""}
54
50
  \u72B6\u6001: ${e.state||""}
55
- \u65F6\u95F4: ${e.createdAt||""}`)}},"file-op-delete":{endpoint:"fileOperations.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u4EF6\u64CD\u4F5C ID",buildBody:c=>({id:c}),expectOk:!0,print:()=>console.log("\u2705 \u6587\u4EF6\u64CD\u4F5C\u8BB0\u5F55\u5DF2\u5220\u9664")},reactions:{endpoint:"reactions.list",requireId:"\u274C \u8BF7\u6307\u5B9A\u8BC4\u8BBA ID",buildBody:c=>({commentId:c}),print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u53CD\u5E94");return}e.printTable(t.map(o=>({emoji:o.emoji||"",userId:o.userId||"",\u59D3\u540D:o.user?.name||""})))}},attachments:{endpoint:"attachments.list",buildBody:c=>c?{documentId:c}:{},print:(c,e)=>{let t=c.data||[];if(!t.length){console.log("\u6682\u65E0\u9644\u4EF6");return}e.printTable(t.map(o=>({ID:o.id,\u6587\u4EF6\u540D:o.name,\u7C7B\u578B:o.contentType||"",\u5927\u5C0F:o.size?`${Math.round(o.size/1024)}KB`:"",URL:o.url||""})))}},"delete-attachment":{endpoint:"attachments.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u9644\u4EF6 ID",buildBody:c=>({id:c}),expectOk:!0,print:()=>console.log("\u2705 \u9644\u4EF6\u5DF2\u5220\u9664")}},de=class{constructor(e){this.argParser=e||null}post(e,t,o,n){return new Promise((s,r)=>{let i=JSON.stringify(t),a=new URL(`${Kt}/${e}`),l={"Content-Type":"application/json","Content-Length":Buffer.byteLength(i),Authorization:`Bearer ${o}`};n&&(l["X-Team-Id"]=n);let d={hostname:a.hostname,port:a.port||443,path:a.pathname,method:"POST",headers:l},u=Ht.request(d,p=>{let m="";p.on("data",f=>m+=f),p.on("end",()=>s({status:p.statusCode,body:m}))});u.on("error",r),u.write(i),u.end()})}parseJson(e){try{return JSON.parse(e)}catch{return null}}extractTeamFlag(e){let t=e.indexOf("--team");if(t!==-1&&e[t+1]){let o=e[t+1],n=[...e.slice(0,t),...e.slice(t+2)];return{teamId:o,remaining:n}}return{teamId:null,remaining:e}}resolveTeamId(e){let{teamId:t}=this.extractTeamFlag(e);if(t)return t;let o=this.argParser?this.argParser.getTeam():null;return o&&o.id?o.id:null}async handle({wikiSubcommand:e,wikiArg:t,wikiRemainingArgs:o,apikey:n}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;let s=n;if(!s)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;let r=o||[],{teamId:i,remaining:a}=this.extractTeamFlag(r);if(!i&&this.argParser&&this.teamService&&!this.argParser.getTeamManual()){let p=this.argParser.getTeam();if(!p||!p.id)try{let m=encodeURIComponent(JSON.stringify({filter_is_joined:!0})),f=await this.teamService.request("GET",`/team?constraints=${m}&page=1&size=200`,s);if(f.status===200){let y=this.teamService.parseJson(f.body),g=y&&y.data&&y.data.items||[];g.length>0&&this.argParser.setTeam(g[0].id,g[0].name||"")}}catch{}}let l=i||(this.argParser?(()=>{let p=this.argParser.getTeam();return p&&p.id?p.id:null})():null),d=zt(e);if(typeof this[d]=="function")return await this[d](t,a,s,l);let u=Wt[e];return u?await this._runCommand(u,t,a,s,l):(console.error(`\u274C \u672A\u77E5\u5B50\u547D\u4EE4: ${e}`),this.showHelp(),1)}async _runCommand(e,t,o,n,s){if(e.requireId&&!t)return console.error(e.requireId),1;if(e.requireArgs){let l=e.requireArgs(t,o);if(l)return console.error(l),1}let r=e.buildBody(t,o),i=await this.post(e.endpoint,r,n,s),a=this.parseJson(i.body);return e.expectOk?a?.ok===!1||i.status>=400?(console.error("\u274C \u64CD\u4F5C\u5931\u8D25:",i.body),1):(e.print?e.print(a,this):console.log("\u2705 \u64CD\u4F5C\u6210\u529F"),0):a?.data?(e.print(a,this),0):(console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",i.body),1)}async list(e,t,o,n){let s=t.indexOf("-d"),r=s!==-1?parseInt(t[s+1],10):null;if(!e){let d=await this.post("collections.list",{},o,n),u=this.parseJson(d.body);if(!u?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",d.body),1;let p=u.data||[];return p.length?(this.printTable(p.map(m=>({"collectionId(UUID,\u7528\u4E8EAPI)":m.id,\u96C6\u5408\u540D\u79F0:m.name,\u63CF\u8FF0:m.description||"","URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":le(m.urlId||m.id)}))),0):(console.log("\u6682\u65E0\u96C6\u5408"),0)}if(r===null){let d=await this.post("documents.list",{collectionId:e,sort:"updatedAt",direction:"DESC"},o,n),u=this.parseJson(d.body);if(!u?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",d.body),1;let p=u.data||[];return p.length?(this.printTable(p.map(m=>({"docId(UUID,\u7528\u4E8EAPI)":m.id,\u6807\u9898:m.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(m.urlId||m.id)}))),0):(console.log("\u6682\u65E0\u6587\u6863"),0)}let i=await this.post("collections.documents",{id:e},o,n),a=this.parseJson(i.body);if(!a?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",i.body),1;let l=r===-1?1/0:r;return this.printTree(a.data,"",l,0),0}async createCollection(e,t,o,n){let s=t.indexOf("--permission"),r="read_write";s!==-1&&(r=t[s+1]||"read_write",t.splice(s,2));let i=t.indexOf("--icon"),a;i!==-1&&(a=t[i+1],t.splice(i,2));let l=t.indexOf("--color"),d;l!==-1&&(d=t[l+1],t.splice(l,2));let u=t.indexOf("--sort-field"),p;u!==-1&&(p=t[u+1],t.splice(u,2));let m=t.indexOf("--sort-direction"),f;m!==-1&&(f=t[m+1],t.splice(m,2));let y=t.indexOf("--index"),g;y!==-1&&(g=t[y+1],t.splice(y,2));let h=e||t[0];if(!h)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408\u540D\u79F0"),1;let w=t.slice(1).filter(T=>!T.startsWith("--")).join(" "),$={name:h,description:w,sharing:!0};$.permission=r==="null"||r==="none"?null:r,a&&($.icon=a),d&&($.color=d),(p||f)&&($.sort={field:p||"index",direction:f||"asc"}),g&&($.index=g);let b=await this.post("collections.create",$,o,n),S=this.parseJson(b.body);return S?.data?(console.log(`\u2705 \u96C6\u5408\u5DF2\u521B\u5EFA: ${S.data.id} \u2014 ${S.data.name}
56
- ${le(S.data.urlId||S.data.id)}`),0):(console.error("\u274C \u521B\u5EFA\u5931\u8D25:",b.body),1)}async updateCollection(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s={id:e},r=t.indexOf("--name");r!==-1&&(s.name=t[r+1]);let i=t.indexOf("--description");i!==-1&&(s.description=t[i+1]);let a=t.indexOf("--permission");if(a!==-1){let m=t[a+1];s.permission=m==="null"||m==="none"?null:m}let l=t.indexOf("--color");l!==-1&&(s.color=t[l+1]);let d=t.indexOf("--sharing");if(d!==-1&&(s.sharing=t[d+1]==="true"),Object.keys(s).length<=1)return console.error("\u274C \u8BF7\u81F3\u5C11\u6307\u5B9A\u4E00\u4E2A\u8981\u66F4\u65B0\u7684\u5B57\u6BB5\uFF08--name, --description, --permission, --color, --sharing\uFF09"),1;let u=await this.post("collections.update",s,o,n),p=this.parseJson(u.body);return p?.data?(console.log(`\u2705 \u96C6\u5408\u5DF2\u66F4\u65B0: ${p.data.id} \u2014 ${p.data.name}`),0):(console.error("\u274C \u66F4\u65B0\u96C6\u5408\u5931\u8D25:",u.body),1)}async deleteCollection(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.delete",{id:e},o,n);return this.parseJson(s.body)?.ok===!1||s.status>=400?(console.error("\u274C \u5220\u9664\u96C6\u5408\u5931\u8D25:",s.body),1):(console.log("\u2705 \u96C6\u5408\u5DF2\u5220\u9664"),0)}async archiveCollection(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.archive",{id:e},o,n);return this.parseJson(s.body)?.data?(console.log("\u2705 \u96C6\u5408\u5DF2\u5F52\u6863"),0):(console.error("\u274C \u5F52\u6863\u96C6\u5408\u5931\u8D25:",s.body),1)}async restoreCollection(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.restore",{id:e},o,n);return this.parseJson(s.body)?.data?(console.log("\u2705 \u96C6\u5408\u5DF2\u6062\u590D"),0):(console.error("\u274C \u6062\u590D\u96C6\u5408\u5931\u8D25:",s.body),1)}async get(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("documents.info",{id:e},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data;return console.log(`\u6807\u9898: ${i.title}
51
+ \u65F6\u95F4: ${e.createdAt||""}`)}},"file-op-delete":{endpoint:"fileOperations.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u4EF6\u64CD\u4F5C ID",buildBody:l=>({id:l}),expectOk:!0,print:()=>console.log("\u2705 \u6587\u4EF6\u64CD\u4F5C\u8BB0\u5F55\u5DF2\u5220\u9664")},reactions:{endpoint:"reactions.list",requireId:"\u274C \u8BF7\u6307\u5B9A\u8BC4\u8BBA ID",buildBody:l=>({commentId:l}),print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u53CD\u5E94");return}e.printTable(t.map(o=>({emoji:o.emoji||"",userId:o.userId||"",\u59D3\u540D:o.user?.name||""})))}},attachments:{endpoint:"attachments.list",buildBody:l=>l?{documentId:l}:{},print:(l,e)=>{let t=l.data||[];if(!t.length){console.log("\u6682\u65E0\u9644\u4EF6");return}e.printTable(t.map(o=>({ID:o.id,\u6587\u4EF6\u540D:o.name,\u7C7B\u578B:o.contentType||"",\u5927\u5C0F:o.size?`${Math.round(o.size/1024)}KB`:"",URL:o.url||""})))}},"delete-attachment":{endpoint:"attachments.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u9644\u4EF6 ID",buildBody:l=>({id:l}),expectOk:!0,print:()=>console.log("\u2705 \u9644\u4EF6\u5DF2\u5220\u9664")}},le=class{constructor(e){this.argParser=e||null}post(e,t,o,n){return new Promise((s,r)=>{let i=JSON.stringify(t),c=new URL(`${Bt}/${e}`),a={"Content-Type":"application/json","Content-Length":Buffer.byteLength(i),Authorization:`Bearer ${o}`};n&&(a["X-Team-Id"]=n);let d={hostname:c.hostname,port:c.port||443,path:c.pathname,method:"POST",headers:a},u=qt.request(d,m=>{let p="";m.on("data",h=>p+=h),m.on("end",()=>s({status:m.statusCode,body:p}))});u.on("error",r),u.write(i),u.end()})}parseJson(e){try{return JSON.parse(e)}catch{return null}}extractTeamFlag(e){let t=e.indexOf("--team");if(t!==-1&&e[t+1]){let o=e[t+1],n=[...e.slice(0,t),...e.slice(t+2)];return{teamId:o,remaining:n}}return{teamId:null,remaining:e}}resolveTeamId(e){let{teamId:t}=this.extractTeamFlag(e);if(t)return t;let o=this.argParser?this.argParser.getTeam():null;return o&&o.id?o.id:null}async handle({wikiSubcommand:e,wikiArg:t,wikiRemainingArgs:o,apikey:n}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;let s=n;if(!s)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;let r=o||[],{teamId:i,remaining:c}=this.extractTeamFlag(r);if(!i&&this.argParser&&this.teamService&&!this.argParser.getTeamManual()){let m=this.argParser.getTeam();if(!m||!m.id)try{let p=encodeURIComponent(JSON.stringify({filter_is_joined:!0})),h=await this.teamService.request("GET",`/team?constraints=${p}&page=1&size=200`,s);if(h.status===200){let f=this.teamService.parseJson(h.body),g=f&&f.data&&f.data.items||[];g.length>0&&this.argParser.setTeam(g[0].id,g[0].name||"")}}catch{}}let a=i||(this.argParser?(()=>{let m=this.argParser.getTeam();return m&&m.id?m.id:null})():null),d=jt(e);if(typeof this[d]=="function")return await this[d](t,c,s,a);let u=Ut[e];return u?await this._runCommand(u,t,c,s,a):(console.error(`\u274C \u672A\u77E5\u5B50\u547D\u4EE4: ${e}`),this.showHelp(),1)}async _runCommand(e,t,o,n,s){if(e.requireId&&!t)return console.error(e.requireId),1;if(e.requireArgs){let a=e.requireArgs(t,o);if(a)return console.error(a),1}let r=e.buildBody(t,o),i=await this.post(e.endpoint,r,n,s),c=this.parseJson(i.body);return e.expectOk?c?.ok===!1||i.status>=400?(console.error("\u274C \u64CD\u4F5C\u5931\u8D25:",i.body),1):(e.print?e.print(c,this):console.log("\u2705 \u64CD\u4F5C\u6210\u529F"),0):c?.data?(e.print(c,this),0):(console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",i.body),1)}async list(e,t,o,n){let s=t.indexOf("-d"),r=s!==-1?parseInt(t[s+1],10):null;if(!e){let d=await this.post("collections.list",{},o,n),u=this.parseJson(d.body);if(!u?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",d.body),1;let m=u.data||[];return m.length?(this.printTable(m.map(p=>({"collectionId(UUID,\u7528\u4E8EAPI)":p.id,\u96C6\u5408\u540D\u79F0:p.name,\u63CF\u8FF0:p.description||"","URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":ce(p.urlId||p.id)}))),0):(console.log("\u6682\u65E0\u96C6\u5408"),0)}if(r===null){let d=await this.post("documents.list",{collectionId:e,sort:"updatedAt",direction:"DESC"},o,n),u=this.parseJson(d.body);if(!u?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",d.body),1;let m=u.data||[];return m.length?(this.printTable(m.map(p=>({"docId(UUID,\u7528\u4E8EAPI)":p.id,\u6807\u9898:p.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(p.urlId||p.id)}))),0):(console.log("\u6682\u65E0\u6587\u6863"),0)}let i=await this.post("collections.documents",{id:e},o,n),c=this.parseJson(i.body);if(!c?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",i.body),1;let a=r===-1?1/0:r;return this.printTree(c.data,"",a,0),0}async createCollection(e,t,o,n){let s=t.indexOf("--permission"),r="read_write";s!==-1&&(r=t[s+1]||"read_write",t.splice(s,2));let i=t.indexOf("--icon"),c;i!==-1&&(c=t[i+1],t.splice(i,2));let a=t.indexOf("--color"),d;a!==-1&&(d=t[a+1],t.splice(a,2));let u=t.indexOf("--sort-field"),m;u!==-1&&(m=t[u+1],t.splice(u,2));let p=t.indexOf("--sort-direction"),h;p!==-1&&(h=t[p+1],t.splice(p,2));let f=t.indexOf("--index"),g;f!==-1&&(g=t[f+1],t.splice(f,2));let b=e||t[0];if(!b)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408\u540D\u79F0"),1;let w=t.slice(1).filter(E=>!E.startsWith("--")).join(" "),x={name:b,description:w,sharing:!0};x.permission=r==="null"||r==="none"?null:r,c&&(x.icon=c),d&&(x.color=d),(m||h)&&(x.sort={field:m||"index",direction:h||"asc"}),g&&(x.index=g);let I=await this.post("collections.create",x,o,n),k=this.parseJson(I.body);return k?.data?(console.log(`\u2705 \u96C6\u5408\u5DF2\u521B\u5EFA: ${k.data.id} \u2014 ${k.data.name}
52
+ ${ce(k.data.urlId||k.data.id)}`),0):(console.error("\u274C \u521B\u5EFA\u5931\u8D25:",I.body),1)}async updateCollection(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s={id:e},r=t.indexOf("--name");r!==-1&&(s.name=t[r+1]);let i=t.indexOf("--description");i!==-1&&(s.description=t[i+1]);let c=t.indexOf("--permission");if(c!==-1){let p=t[c+1];s.permission=p==="null"||p==="none"?null:p}let a=t.indexOf("--color");a!==-1&&(s.color=t[a+1]);let d=t.indexOf("--sharing");if(d!==-1&&(s.sharing=t[d+1]==="true"),Object.keys(s).length<=1)return console.error("\u274C \u8BF7\u81F3\u5C11\u6307\u5B9A\u4E00\u4E2A\u8981\u66F4\u65B0\u7684\u5B57\u6BB5\uFF08--name, --description, --permission, --color, --sharing\uFF09"),1;let u=await this.post("collections.update",s,o,n),m=this.parseJson(u.body);return m?.data?(console.log(`\u2705 \u96C6\u5408\u5DF2\u66F4\u65B0: ${m.data.id} \u2014 ${m.data.name}`),0):(console.error("\u274C \u66F4\u65B0\u96C6\u5408\u5931\u8D25:",u.body),1)}async deleteCollection(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.delete",{id:e},o,n);return this.parseJson(s.body)?.ok===!1||s.status>=400?(console.error("\u274C \u5220\u9664\u96C6\u5408\u5931\u8D25:",s.body),1):(console.log("\u2705 \u96C6\u5408\u5DF2\u5220\u9664"),0)}async archiveCollection(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.archive",{id:e},o,n);return this.parseJson(s.body)?.data?(console.log("\u2705 \u96C6\u5408\u5DF2\u5F52\u6863"),0):(console.error("\u274C \u5F52\u6863\u96C6\u5408\u5931\u8D25:",s.body),1)}async restoreCollection(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.restore",{id:e},o,n);return this.parseJson(s.body)?.data?(console.log("\u2705 \u96C6\u5408\u5DF2\u6062\u590D"),0):(console.error("\u274C \u6062\u590D\u96C6\u5408\u5931\u8D25:",s.body),1)}async get(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("documents.info",{id:e},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data;return console.log(`\u6807\u9898: ${i.title}
57
53
  ID: ${i.id}
58
54
  \u96C6\u5408: ${i.collectionId}
59
55
  \u66F4\u65B0: ${i.updatedAt}`),i.text&&console.log(`
60
56
  ${i.text}`),0}_findDocPositionInTree(e,t,o=null){for(let n=0;n<e.length;n++){if(e[n].id===t)return{index:n,parentDocumentId:o};if(e[n].children?.length){let s=this._findDocPositionInTree(e[n].children,t,e[n].id);if(s)return s}}return null}async publish(e,t,o,n){let s=require("fs"),r=require("path");if(!e)return console.error(`\u274C \u7528\u6CD5: wiki publish <collectionId> <title> [text]
61
- wiki publish <collectionId> --file <path> [--parent <parentDocId>] [--index <n>] [--after <docId>]`),1;let i,a,l,d=t.indexOf("--file"),u=t.indexOf("--parent");u!==-1&&(l=t[u+1]);let p=t.indexOf("--index"),m=p!==-1?parseInt(t[p+1],10):void 0,f=t.indexOf("--after");if(f!==-1){let b=t[f+1];if(!b)return console.error("\u274C \u8BF7\u6307\u5B9A --after \u7684\u6587\u6863 UUID"),1;let S=await this.post("collections.documents",{id:e},o,n),T=this.parseJson(S.body);if(!T?.data)return console.error("\u274C \u83B7\u53D6\u96C6\u5408\u7ED3\u6784\u5931\u8D25:",S.body),1;let K=this._findDocPositionInTree(T.data,b);if(!K)return console.error(`\u274C \u5728\u96C6\u5408\u4E2D\u672A\u627E\u5230\u6587\u6863 ${b}\uFF0C\u8BF7\u786E\u8BA4 UUID \u6B63\u786E\u4E14\u6587\u6863\u5C5E\u4E8E\u8BE5\u96C6\u5408`),1;m=K.index+1,K.parentDocumentId&&!l&&(l=K.parentDocumentId)}if(d!==-1){let b=t[d+1];if(!b)return console.error("\u274C \u8BF7\u6307\u5B9A --file \u8DEF\u5F84"),1;let S=r.resolve(b);if(!s.existsSync(S))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${S}`),1;a=s.readFileSync(S,"utf8");let T=a.match(/^#\s+(.+)/m);if(!T)return console.error("\u274C \u6587\u4EF6\u7F3A\u5C11 H1 \u6807\u9898\uFF08# \u6807\u9898\uFF09\uFF0C\u8BF7\u6DFB\u52A0\u540E\u91CD\u8BD5"),1;i=T[1].trim(),a=a.replace(/^#\s+.+\n?/,"").trimStart()}else if(i=t[1],a=t.slice(2).join(" "),!i)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863\u6807\u9898"),1;let y={collectionId:e,title:i,text:"",publish:!0};l&&(y.parentDocumentId=l),m!==void 0&&!isNaN(m)&&(y.index=m);let g=await this.post("documents.create",y,o,n),h=this.parseJson(g.body);if(!h?.data)return console.error("\u274C \u521B\u5EFA\u6587\u6863\u5931\u8D25:",g.body),1;let I=h.data.id;console.log(` \u521B\u5EFA\u6587\u6863: ${I}`);let w=await this.post("documents.update",{id:I,title:i,text:a,publish:!0},o,n),$=this.parseJson(w.body);return $?.data?(console.log(`\u2705 \u6587\u6863\u5DF2\u53D1\u5E03: ${$.data.title}
62
- ${_($.data.urlId||I)}`),0):(console.error("\u274C \u66F4\u65B0\u5185\u5BB9\u5931\u8D25:",w.body),1)}async update(e,t,o,n){let s=require("fs"),r=require("path");if(!e)return console.error("\u274C \u7528\u6CD5: wiki update <docId> <title> [text] | <docId> --file <path>"),1;let i,a,l=t.indexOf("--file");if(l!==-1){let m=t[l+1];if(!m)return console.error("\u274C \u8BF7\u6307\u5B9A --file \u8DEF\u5F84"),1;let f=r.resolve(m);if(!s.existsSync(f))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${f}`),1;a=s.readFileSync(f,"utf8");let y=a.match(/^#\s+(.+)/m);if(!y)return console.error("\u274C \u6587\u4EF6\u7F3A\u5C11 H1 \u6807\u9898\uFF08# \u6807\u9898\uFF09\uFF0C\u8BF7\u6DFB\u52A0\u540E\u91CD\u8BD5"),1;i=y[1].trim(),a=a.replace(/^#\s+.+\n?/,"").trimStart()}else if(i=t[1],a=t.slice(2).join(" "),!i)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863\u6807\u9898"),1;let d={id:e,title:i,publish:!0};a&&(d.text=a);let u=await this.post("documents.update",d,o,n),p=this.parseJson(u.body);return p?.data?(console.log(`\u2705 \u6587\u6863\u5DF2\u66F4\u65B0: ${p.data.title}`),0):(console.error("\u274C \u66F4\u65B0\u5931\u8D25:",u.body),1)}async delete(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=t.includes("--permanent"),r=await this.post("documents.delete",{id:e,...s?{permanent:!0}:{}},o,n);return this.parseJson(r.body)?.ok===!1||r.status>=400?(console.error("\u274C \u5220\u9664\u5931\u8D25:",r.body),1):(console.log(`\u2705 \u6587\u6863\u5DF2${s?"\u6C38\u4E45":""}\u5220\u9664`),0)}async move(e,t,o,n){if(!e)return console.error("\u274C \u7528\u6CD5: wiki move <docId> [collectionId] [parentDocId]"),1;let s={id:e,index:0};t[1]&&(s.collectionId=t[1]),t[2]&&(s.parentDocumentId=t[2]);let r=await this.post("documents.move",s,o,n);return this.parseJson(r.body)?.data?(console.log("\u2705 \u6587\u6863\u5DF2\u79FB\u52A8"),0):(console.error("\u274C \u79FB\u52A8\u5931\u8D25:",r.body),1)}async archive(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("documents.archive",{id:e},o,n);return this.parseJson(s.body)?.data?(console.log("\u2705 \u6587\u6863\u5DF2\u5F52\u6863"),0):(console.error("\u274C \u5F52\u6863\u5931\u8D25:",s.body),1)}async restore(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s={id:e},r=t.indexOf("--revision");r!==-1&&t[r+1]&&(s.revisionId=t[r+1]);let i=t.indexOf("--collection");i!==-1&&t[i+1]&&(s.collectionId=t[i+1]);let a=await this.post("documents.restore",s,o,n);return this.parseJson(a.body)?.data?(console.log("\u2705 \u6587\u6863\u5DF2\u6062\u590D"),0):(console.error("\u274C \u6062\u590D\u5931\u8D25:",a.body),1)}async revisions(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("revisions.list",{documentId:e,sort:"createdAt",direction:"DESC"},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data||[];return i.length?(this.printTable(i.map(a=>({revisionId:a.id,\u7248\u672C\u540D:a.name||"",\u521B\u5EFA\u65F6\u95F4:a.createdAt}))),0):(console.log("\u6682\u65E0\u5386\u53F2\u7248\u672C"),0)}async revision(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u7248\u672C ID"),1;let s=await this.post("revisions.info",{id:e},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data;return console.log(`\u7248\u672C ID: ${i.id}
57
+ wiki publish <collectionId> --file <path> [--parent <parentDocId>] [--index <n>] [--after <docId>]`),1;let i,c,a,d=t.indexOf("--file"),u=t.indexOf("--parent");u!==-1&&(a=t[u+1]);let m=t.indexOf("--index"),p=m!==-1?parseInt(t[m+1],10):void 0,h=t.indexOf("--after");if(h!==-1){let I=t[h+1];if(!I)return console.error("\u274C \u8BF7\u6307\u5B9A --after \u7684\u6587\u6863 UUID"),1;let k=await this.post("collections.documents",{id:e},o,n),E=this.parseJson(k.body);if(!E?.data)return console.error("\u274C \u83B7\u53D6\u96C6\u5408\u7ED3\u6784\u5931\u8D25:",k.body),1;let J=this._findDocPositionInTree(E.data,I);if(!J)return console.error(`\u274C \u5728\u96C6\u5408\u4E2D\u672A\u627E\u5230\u6587\u6863 ${I}\uFF0C\u8BF7\u786E\u8BA4 UUID \u6B63\u786E\u4E14\u6587\u6863\u5C5E\u4E8E\u8BE5\u96C6\u5408`),1;p=J.index+1,J.parentDocumentId&&!a&&(a=J.parentDocumentId)}if(d!==-1){let I=t[d+1];if(!I)return console.error("\u274C \u8BF7\u6307\u5B9A --file \u8DEF\u5F84"),1;let k=r.resolve(I);if(!s.existsSync(k))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${k}`),1;c=s.readFileSync(k,"utf8");let E=c.match(/^#\s+(.+)/m);if(!E)return console.error("\u274C \u6587\u4EF6\u7F3A\u5C11 H1 \u6807\u9898\uFF08# \u6807\u9898\uFF09\uFF0C\u8BF7\u6DFB\u52A0\u540E\u91CD\u8BD5"),1;i=E[1].trim(),c=c.replace(/^#\s+.+\n?/,"").trimStart()}else if(i=t[1],c=t.slice(2).join(" "),!i)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863\u6807\u9898"),1;let f={collectionId:e,title:i,text:"",publish:!0};a&&(f.parentDocumentId=a),p!==void 0&&!isNaN(p)&&(f.index=p);let g=await this.post("documents.create",f,o,n),b=this.parseJson(g.body);if(!b?.data)return console.error("\u274C \u521B\u5EFA\u6587\u6863\u5931\u8D25:",g.body),1;let y=b.data.id;console.log(` \u521B\u5EFA\u6587\u6863: ${y}`);let w=await this.post("documents.update",{id:y,title:i,text:c,publish:!0},o,n),x=this.parseJson(w.body);return x?.data?(console.log(`\u2705 \u6587\u6863\u5DF2\u53D1\u5E03: ${x.data.title}
58
+ ${_(x.data.urlId||y)}`),0):(console.error("\u274C \u66F4\u65B0\u5185\u5BB9\u5931\u8D25:",w.body),1)}async update(e,t,o,n){let s=require("fs"),r=require("path");if(!e)return console.error("\u274C \u7528\u6CD5: wiki update <docId> <title> [text] | <docId> --file <path>"),1;let i,c,a=t.indexOf("--file");if(a!==-1){let p=t[a+1];if(!p)return console.error("\u274C \u8BF7\u6307\u5B9A --file \u8DEF\u5F84"),1;let h=r.resolve(p);if(!s.existsSync(h))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${h}`),1;c=s.readFileSync(h,"utf8");let f=c.match(/^#\s+(.+)/m);if(!f)return console.error("\u274C \u6587\u4EF6\u7F3A\u5C11 H1 \u6807\u9898\uFF08# \u6807\u9898\uFF09\uFF0C\u8BF7\u6DFB\u52A0\u540E\u91CD\u8BD5"),1;i=f[1].trim(),c=c.replace(/^#\s+.+\n?/,"").trimStart()}else if(i=t[1],c=t.slice(2).join(" "),!i)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863\u6807\u9898"),1;let d={id:e,title:i,publish:!0};c&&(d.text=c);let u=await this.post("documents.update",d,o,n),m=this.parseJson(u.body);return m?.data?(console.log(`\u2705 \u6587\u6863\u5DF2\u66F4\u65B0: ${m.data.title}`),0):(console.error("\u274C \u66F4\u65B0\u5931\u8D25:",u.body),1)}async delete(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=t.includes("--permanent"),r=await this.post("documents.delete",{id:e,...s?{permanent:!0}:{}},o,n);return this.parseJson(r.body)?.ok===!1||r.status>=400?(console.error("\u274C \u5220\u9664\u5931\u8D25:",r.body),1):(console.log(`\u2705 \u6587\u6863\u5DF2${s?"\u6C38\u4E45":""}\u5220\u9664`),0)}async move(e,t,o,n){if(!e)return console.error("\u274C \u7528\u6CD5: wiki move <docId> [collectionId] [parentDocId]"),1;let s={id:e,index:0};t[1]&&(s.collectionId=t[1]),t[2]&&(s.parentDocumentId=t[2]);let r=await this.post("documents.move",s,o,n);return this.parseJson(r.body)?.data?(console.log("\u2705 \u6587\u6863\u5DF2\u79FB\u52A8"),0):(console.error("\u274C \u79FB\u52A8\u5931\u8D25:",r.body),1)}async archive(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("documents.archive",{id:e},o,n);return this.parseJson(s.body)?.data?(console.log("\u2705 \u6587\u6863\u5DF2\u5F52\u6863"),0):(console.error("\u274C \u5F52\u6863\u5931\u8D25:",s.body),1)}async restore(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s={id:e},r=t.indexOf("--revision");r!==-1&&t[r+1]&&(s.revisionId=t[r+1]);let i=t.indexOf("--collection");i!==-1&&t[i+1]&&(s.collectionId=t[i+1]);let c=await this.post("documents.restore",s,o,n);return this.parseJson(c.body)?.data?(console.log("\u2705 \u6587\u6863\u5DF2\u6062\u590D"),0):(console.error("\u274C \u6062\u590D\u5931\u8D25:",c.body),1)}async revisions(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("revisions.list",{documentId:e,sort:"createdAt",direction:"DESC"},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data||[];return i.length?(this.printTable(i.map(c=>({revisionId:c.id,\u7248\u672C\u540D:c.name||"",\u521B\u5EFA\u65F6\u95F4:c.createdAt}))),0):(console.log("\u6682\u65E0\u5386\u53F2\u7248\u672C"),0)}async revision(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u7248\u672C ID"),1;let s=await this.post("revisions.info",{id:e},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data;return console.log(`\u7248\u672C ID: ${i.id}
63
59
  \u7248\u672C\u540D: ${i.name||""}
64
60
  \u6587\u6863 ID: ${i.documentId}
65
61
  \u521B\u5EFA\u65F6\u95F4: ${i.createdAt}`),i.text&&console.log(`
66
- ${i.text}`),0}async drafts(e,t,o,n){let s=await this.post("documents.drafts",{sort:"updatedAt",direction:"DESC"},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data||[];return i.length?(this.printTable(i.map(a=>({"ID(UUID,\u7528\u4E8EAPI)":a.id,\u6807\u9898:a.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(a.urlId||a.id)}))),0):(console.log("\u6682\u65E0\u8349\u7A3F"),0)}async recent(e,t,o,n){let s=await this.post("documents.viewed",{sort:"updatedAt",direction:"DESC"},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data||[];return i.length?(this.printTable(i.map(a=>({"ID(UUID,\u7528\u4E8EAPI)":a.id,\u6807\u9898:a.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(a.urlId||a.id)}))),0):(console.log("\u6682\u65E0\u6D4F\u89C8\u8BB0\u5F55"),0)}async search(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u641C\u7D22\u5173\u952E\u8BCD"),1;let s=[e,...t.slice(1)].join(" "),r=await this.post("documents.search",{query:s,snippetMinWords:20,snippetMaxWords:30},o,n),i=this.parseJson(r.body);if(!i?.data)return console.error("\u274C \u641C\u7D22\u5931\u8D25:",r.body),1;let a=i.data||[];return a.length?(console.log(`\u627E\u5230 ${a.length} \u4E2A\u7ED3\u679C:
67
- `),this.printTable(a.map(l=>{let d=l.document||l;return{"docId(UUID,\u7528\u4E8EAPI)":d.id,\u6807\u9898:d.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(d.urlId||d.id)}})),0):(console.log(`\u6CA1\u6709\u627E\u5230\u4E0E "${s}" \u76F8\u5173\u7684\u6587\u6863`),0)}async stars(e,t,o,n){let s=await this.post("stars.list",{},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data.stars||[];if(!i.length)return console.log("\u6682\u65E0\u6536\u85CF"),0;let a={};for(let l of r.data.documents||[])a[l.id]=l;return this.printTable(i.map(l=>{let d=l.documentId?a[l.documentId]:null,u=l.collectionId?{urlId:l.collectionId}:null;return{starId:l.id,\u6807\u9898:d?.title||l.collectionId||l.documentId||"",URL:d?_(d.urlId||d.id):u?le(u.urlId):l.documentId?_(l.documentId):""}})),0}async star(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863\u6216\u96C6\u5408 ID"),1;let r=t.includes("--collection")?{collectionId:e}:{documentId:e},i=await this.post("stars.create",r,o,n);return this.parseJson(i.body)?.data?(console.log("\u2705 \u5DF2\u6536\u85CF"),0):(console.error("\u274C \u6536\u85CF\u5931\u8D25:",i.body),1)}async unstar(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6536\u85CF ID"),1;let s=await this.post("stars.delete",{id:e},o,n);return s.status>=400?(console.error("\u274C \u53D6\u6D88\u6536\u85CF\u5931\u8D25:",s.body),1):(console.log("\u2705 \u5DF2\u53D6\u6D88\u6536\u85CF"),0)}async pins(e,t,o,n){let s=e?{collectionId:e}:{},r=await this.post("pins.list",s,o,n),i=this.parseJson(r.body);if(!i?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",r.body),1;let a=i.data.pins||[];if(!a.length)return console.log("\u6682\u65E0\u7F6E\u9876"),0;let l={};for(let d of i.data.documents||[])l[d.id]=d;return this.printTable(a.map(d=>{let u=d.documentId?l[d.documentId]:null;return{pinId:d.id,\u6807\u9898:u?.title||d.documentId,URL:_(u?.urlId||d.documentId)}})),0}async pin(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s={documentId:e,...t[1]?{collectionId:t[1]}:{}},r=await this.post("pins.create",s,o,n),i=this.parseJson(r.body);return i?.data?(console.log(`\u2705 \u5DF2\u7F6E\u9876: ${i.data.id}`),0):(console.error("\u274C \u7F6E\u9876\u5931\u8D25:",r.body),1)}async unpin(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u7F6E\u9876 ID"),1;let s=await this.post("pins.delete",{id:e},o,n);return s.status>=400?(console.error("\u274C \u53D6\u6D88\u7F6E\u9876\u5931\u8D25:",s.body),1):(console.log("\u2705 \u5DF2\u53D6\u6D88\u7F6E\u9876"),0)}async comments(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("comments.list",{documentId:e,sort:"createdAt",direction:"ASC"},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data||[];if(!i.length)return console.log("\u6682\u65E0\u8BC4\u8BBA"),0;for(let a of i){let l=this.extractCommentText(a.data);console.log(` [${a.id}] ${a.createdBy?.name||"?"}: ${l}`)}return 0}async comment(e,t,o,n){let s=t.slice(1).join(" ");if(!e||!s)return console.error("\u274C \u7528\u6CD5: wiki comment <docId> <text>"),1;let r=await this.post("comments.create",{documentId:e,text:s},o,n),i=this.parseJson(r.body);return i?.data?(console.log(`\u2705 \u8BC4\u8BBA\u5DF2\u53D1\u5E03: ${i.data.id}`),0):(console.error("\u274C \u8BC4\u8BBA\u5931\u8D25:",r.body),1)}printTree(e,t,o,n){if(Array.isArray(e))for(let s=0;s<e.length;s++){let r=e[s],i=s===e.length-1,a=i?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",l=r.url?`${Y}${r.url}`:_(r.id);console.log(`${t}${a}${r.title||r.id} \x1B[90m${l}\x1B[0m`),r.children?.length&&n+1<o&&this.printTree(r.children,t+(i?" ":"\u2502 "),o,n+1)}}printTable(e){if(!e.length)return;let t=Object.keys(e[0]),o=i=>[...String(i)].reduce((a,l)=>a+(l.charCodeAt(0)>127?2:1),0),n=(i,a)=>i+" ".repeat(Math.max(0,a-o(i))),s=t.map(i=>Math.max(o(i),...e.map(a=>o(a[i]||"")))),r=s.map(i=>"-".repeat(i)).join("-+-");console.log(t.map((i,a)=>n(i,s[a])).join(" | ")),console.log(r);for(let i of e)console.log(t.map((a,l)=>n(String(i[a]||""),s[l])).join(" | "))}icons(e,t){let o=[{name:"academicCap",keywords:"\u5B66\u4E60 \u6559\u5B66 \u8BFE\u7A0B \u6307\u5357 \u6559\u7A0B \u57F9\u8BAD \u5165\u95E8"},{name:"beaker",keywords:"\u5B9E\u9A8C\u5BA4 \u7814\u7A76 \u5B9E\u9A8C \u6D4B\u8BD5"},{name:"bicycle",keywords:"\u81EA\u884C\u8F66 \u9A91\u884C"},{name:"bookmark",keywords:"\u4E66\u7B7E \u6536\u85CF"},{name:"browser",keywords:"\u6D4F\u89C8\u5668 \u7F51\u9875 \u5E94\u7528"},{name:"buildingBlocks",keywords:"\u79EF\u6728 \u6A21\u5757 \u4EA7\u54C1 \u539F\u578B"},{name:"camera",keywords:"\u76F8\u673A \u7167\u7247 \u56FE\u7247"},{name:"carrot",keywords:"\u98DF\u7269 \u852C\u83DC \u519C\u4EA7\u54C1"},{name:"clock",keywords:"\u65F6\u949F \u65F6\u95F4"},{name:"cloud",keywords:"\u4E91 \u4E91\u670D\u52A1 \u57FA\u7840\u8BBE\u65BD"},{name:"code",keywords:"\u4EE3\u7801 \u5F00\u53D1 \u7F16\u7A0B \u5DE5\u7A0B API"},{name:"coins",keywords:"\u91D1\u5E01 \u91D1\u94B1 \u8D22\u52A1 \u9500\u552E \u6536\u5165 \u73B0\u91D1"},{name:"collection",keywords:"\u96C6\u5408 \u6587\u4EF6\u5939"},{name:"database",keywords:"\u6570\u636E\u5E93 \u670D\u52A1\u5668 \u8FD0\u7EF4"},{name:"done",keywords:"\u5B8C\u6210 \u6210\u529F \u52FE\u9009 \u7ED3\u675F"},{name:"email",keywords:"\u90AE\u4EF6 \u90AE\u7BB1"},{name:"eye",keywords:"\u773C\u775B \u67E5\u770B \u9884\u89C8"},{name:"feedback",keywords:"\u53CD\u9988 \u5E2E\u52A9 \u652F\u6301 FAQ"},{name:"flame",keywords:"\u706B\u7130 \u70ED\u95E8"},{name:"globe",keywords:"\u5730\u7403 \u7FFB\u8BD1 \u56FD\u9645\u5316"},{name:"graph",keywords:"\u56FE\u8868 \u5206\u6790 \u6570\u636E \u7EDF\u8BA1"},{name:"hashtag",keywords:"\u6807\u7B7E \u8BDD\u9898 \u793E\u4EA4\u5A92\u4F53"},{name:"icecream",keywords:"\u51B0\u6DC7\u6DCB \u751C\u70B9 \u98DF\u7269"},{name:"image",keywords:"\u56FE\u7247 \u56FE\u50CF \u7167\u7247"},{name:"info",keywords:"\u4FE1\u606F \u8BF4\u660E"},{name:"internet",keywords:"\u7F51\u7EDC \u5168\u7403 \u4E92\u8054\u7F51"},{name:"leaf",keywords:"\u53F6\u5B50 \u690D\u7269 \u81EA\u7136 \u751F\u6001 \u73AF\u5883"},{name:"letter",keywords:"\u5B57\u6BCD \u4FE1\u4EF6"},{name:"library",keywords:"\u56FE\u4E66\u9986 \u6587\u5E93 \u5F52\u6863"},{name:"lightbulb",keywords:"\u706F\u6CE1 \u60F3\u6CD5 \u521B\u610F"},{name:"lightning",keywords:"\u95EA\u7535 \u5FEB\u901F"},{name:"math",keywords:"\u6570\u5B66 \u516C\u5F0F"},{name:"moon",keywords:"\u6708\u4EAE \u591C\u665A \u6697\u8272"},{name:"notepad",keywords:"\u8BB0\u4E8B\u672C \u7B14\u8BB0 \u65E5\u5FD7 \u5199\u4F5C"},{name:"padlock",keywords:"\u9501 \u79C1\u5BC6 \u5B89\u5168 \u8BA4\u8BC1 \u6743\u9650"},{name:"palette",keywords:"\u8C03\u8272\u677F \u8BBE\u8BA1 \u827A\u672F \u54C1\u724C"},{name:"pencil",keywords:"\u94C5\u7B14 \u5199\u4F5C \u535A\u5BA2 \u6587\u7AE0"},{name:"plane",keywords:"\u98DE\u673A \u65C5\u884C \u51FA\u884C \u5047\u671F"},{name:"promote",keywords:"\u63A8\u5E7F \u8425\u9500 \u5BA3\u4F20"},{name:"question",keywords:"\u95EE\u9898 \u5E2E\u52A9 \u652F\u6301 FAQ"},{name:"ramen",keywords:"\u62C9\u9762 \u6C64 \u98DF\u7269 \u9910\u996E"},{name:"server",keywords:"\u670D\u52A1\u5668 \u8FD0\u7EF4 \u57FA\u7840\u8BBE\u65BD"},{name:"shapes",keywords:"\u5F62\u72B6 \u79EF\u6728 \u73A9\u5177"},{name:"smiley",keywords:"\u7B11\u8138 \u8868\u60C5 \u5F00\u5FC3"},{name:"sport",keywords:"\u8FD0\u52A8 \u6237\u5916 \u6E38\u620F"},{name:"sun",keywords:"\u592A\u9633 \u767D\u5929 \u5929\u6C14"},{name:"target",keywords:"\u76EE\u6807 \u9500\u552E \u6307\u6807"},{name:"team",keywords:"\u56E2\u961F \u7EC4\u7EC7 \u529E\u516C\u5BA4"},{name:"terminal",keywords:"\u7EC8\u7AEF \u547D\u4EE4\u884C \u4EE3\u7801"},{name:"thumbsup",keywords:"\u70B9\u8D5E \u6536\u85CF \u793E\u4EA4 \u6295\u7968"},{name:"tools",keywords:"\u5DE5\u5177 \u8BBE\u7F6E \u914D\u7F6E"},{name:"truck",keywords:"\u5361\u8F66 \u8FD0\u8F93 \u7269\u6D41"},{name:"vehicle",keywords:"\u8F66\u8F86 \u4EA4\u901A \u51FA\u884C"},{name:"warning",keywords:"\u8B66\u544A \u63D0\u793A \u9519\u8BEF"}],n=t.indexOf("--query"),s=n!==-1?t[n+1]:e||"",r=s?o.filter(i=>i.name.toLowerCase().includes(s.toLowerCase())||i.keywords.toLowerCase().includes(s.toLowerCase())):o;return r.length?(console.log(`\u5171 ${r.length} \u4E2A\u56FE\u6807${s?`\uFF08\u5173\u952E\u8BCD: "${s}"\uFF09`:""}:
62
+ ${i.text}`),0}async drafts(e,t,o,n){let s=await this.post("documents.drafts",{sort:"updatedAt",direction:"DESC"},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data||[];return i.length?(this.printTable(i.map(c=>({"ID(UUID,\u7528\u4E8EAPI)":c.id,\u6807\u9898:c.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(c.urlId||c.id)}))),0):(console.log("\u6682\u65E0\u8349\u7A3F"),0)}async recent(e,t,o,n){let s=await this.post("documents.viewed",{sort:"updatedAt",direction:"DESC"},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data||[];return i.length?(this.printTable(i.map(c=>({"ID(UUID,\u7528\u4E8EAPI)":c.id,\u6807\u9898:c.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(c.urlId||c.id)}))),0):(console.log("\u6682\u65E0\u6D4F\u89C8\u8BB0\u5F55"),0)}async search(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u641C\u7D22\u5173\u952E\u8BCD"),1;let s=[e,...t.slice(1)].join(" "),r=await this.post("documents.search",{query:s,snippetMinWords:20,snippetMaxWords:30},o,n),i=this.parseJson(r.body);if(!i?.data)return console.error("\u274C \u641C\u7D22\u5931\u8D25:",r.body),1;let c=i.data||[];return c.length?(console.log(`\u627E\u5230 ${c.length} \u4E2A\u7ED3\u679C:
63
+ `),this.printTable(c.map(a=>{let d=a.document||a;return{"docId(UUID,\u7528\u4E8EAPI)":d.id,\u6807\u9898:d.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":_(d.urlId||d.id)}})),0):(console.log(`\u6CA1\u6709\u627E\u5230\u4E0E "${s}" \u76F8\u5173\u7684\u6587\u6863`),0)}async stars(e,t,o,n){let s=await this.post("stars.list",{},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data.stars||[];if(!i.length)return console.log("\u6682\u65E0\u6536\u85CF"),0;let c={};for(let a of r.data.documents||[])c[a.id]=a;return this.printTable(i.map(a=>{let d=a.documentId?c[a.documentId]:null,u=a.collectionId?{urlId:a.collectionId}:null;return{starId:a.id,\u6807\u9898:d?.title||a.collectionId||a.documentId||"",URL:d?_(d.urlId||d.id):u?ce(u.urlId):a.documentId?_(a.documentId):""}})),0}async star(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863\u6216\u96C6\u5408 ID"),1;let r=t.includes("--collection")?{collectionId:e}:{documentId:e},i=await this.post("stars.create",r,o,n);return this.parseJson(i.body)?.data?(console.log("\u2705 \u5DF2\u6536\u85CF"),0):(console.error("\u274C \u6536\u85CF\u5931\u8D25:",i.body),1)}async unstar(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6536\u85CF ID"),1;let s=await this.post("stars.delete",{id:e},o,n);return s.status>=400?(console.error("\u274C \u53D6\u6D88\u6536\u85CF\u5931\u8D25:",s.body),1):(console.log("\u2705 \u5DF2\u53D6\u6D88\u6536\u85CF"),0)}async pins(e,t,o,n){let s=e?{collectionId:e}:{},r=await this.post("pins.list",s,o,n),i=this.parseJson(r.body);if(!i?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",r.body),1;let c=i.data.pins||[];if(!c.length)return console.log("\u6682\u65E0\u7F6E\u9876"),0;let a={};for(let d of i.data.documents||[])a[d.id]=d;return this.printTable(c.map(d=>{let u=d.documentId?a[d.documentId]:null;return{pinId:d.id,\u6807\u9898:u?.title||d.documentId,URL:_(u?.urlId||d.documentId)}})),0}async pin(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s={documentId:e,...t[1]?{collectionId:t[1]}:{}},r=await this.post("pins.create",s,o,n),i=this.parseJson(r.body);return i?.data?(console.log(`\u2705 \u5DF2\u7F6E\u9876: ${i.data.id}`),0):(console.error("\u274C \u7F6E\u9876\u5931\u8D25:",r.body),1)}async unpin(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u7F6E\u9876 ID"),1;let s=await this.post("pins.delete",{id:e},o,n);return s.status>=400?(console.error("\u274C \u53D6\u6D88\u7F6E\u9876\u5931\u8D25:",s.body),1):(console.log("\u2705 \u5DF2\u53D6\u6D88\u7F6E\u9876"),0)}async comments(e,t,o,n){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("comments.list",{documentId:e,sort:"createdAt",direction:"ASC"},o,n),r=this.parseJson(s.body);if(!r?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=r.data||[];if(!i.length)return console.log("\u6682\u65E0\u8BC4\u8BBA"),0;for(let c of i){let a=this.extractCommentText(c.data);console.log(` [${c.id}] ${c.createdBy?.name||"?"}: ${a}`)}return 0}async comment(e,t,o,n){let s=t.slice(1).join(" ");if(!e||!s)return console.error("\u274C \u7528\u6CD5: wiki comment <docId> <text>"),1;let r=await this.post("comments.create",{documentId:e,text:s},o,n),i=this.parseJson(r.body);return i?.data?(console.log(`\u2705 \u8BC4\u8BBA\u5DF2\u53D1\u5E03: ${i.data.id}`),0):(console.error("\u274C \u8BC4\u8BBA\u5931\u8D25:",r.body),1)}printTree(e,t,o,n){if(Array.isArray(e))for(let s=0;s<e.length;s++){let r=e[s],i=s===e.length-1,c=i?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",a=r.url?`${z}${r.url}`:_(r.id);console.log(`${t}${c}${r.title||r.id} \x1B[90m${a}\x1B[0m`),r.children?.length&&n+1<o&&this.printTree(r.children,t+(i?" ":"\u2502 "),o,n+1)}}printTable(e){if(!e.length)return;let t=Object.keys(e[0]),o=i=>[...String(i)].reduce((c,a)=>c+(a.charCodeAt(0)>127?2:1),0),n=(i,c)=>i+" ".repeat(Math.max(0,c-o(i))),s=t.map(i=>Math.max(o(i),...e.map(c=>o(c[i]||"")))),r=s.map(i=>"-".repeat(i)).join("-+-");console.log(t.map((i,c)=>n(i,s[c])).join(" | ")),console.log(r);for(let i of e)console.log(t.map((c,a)=>n(String(i[c]||""),s[a])).join(" | "))}icons(e,t){let o=[{name:"academicCap",keywords:"\u5B66\u4E60 \u6559\u5B66 \u8BFE\u7A0B \u6307\u5357 \u6559\u7A0B \u57F9\u8BAD \u5165\u95E8"},{name:"beaker",keywords:"\u5B9E\u9A8C\u5BA4 \u7814\u7A76 \u5B9E\u9A8C \u6D4B\u8BD5"},{name:"bicycle",keywords:"\u81EA\u884C\u8F66 \u9A91\u884C"},{name:"bookmark",keywords:"\u4E66\u7B7E \u6536\u85CF"},{name:"browser",keywords:"\u6D4F\u89C8\u5668 \u7F51\u9875 \u5E94\u7528"},{name:"buildingBlocks",keywords:"\u79EF\u6728 \u6A21\u5757 \u4EA7\u54C1 \u539F\u578B"},{name:"camera",keywords:"\u76F8\u673A \u7167\u7247 \u56FE\u7247"},{name:"carrot",keywords:"\u98DF\u7269 \u852C\u83DC \u519C\u4EA7\u54C1"},{name:"clock",keywords:"\u65F6\u949F \u65F6\u95F4"},{name:"cloud",keywords:"\u4E91 \u4E91\u670D\u52A1 \u57FA\u7840\u8BBE\u65BD"},{name:"code",keywords:"\u4EE3\u7801 \u5F00\u53D1 \u7F16\u7A0B \u5DE5\u7A0B API"},{name:"coins",keywords:"\u91D1\u5E01 \u91D1\u94B1 \u8D22\u52A1 \u9500\u552E \u6536\u5165 \u73B0\u91D1"},{name:"collection",keywords:"\u96C6\u5408 \u6587\u4EF6\u5939"},{name:"database",keywords:"\u6570\u636E\u5E93 \u670D\u52A1\u5668 \u8FD0\u7EF4"},{name:"done",keywords:"\u5B8C\u6210 \u6210\u529F \u52FE\u9009 \u7ED3\u675F"},{name:"email",keywords:"\u90AE\u4EF6 \u90AE\u7BB1"},{name:"eye",keywords:"\u773C\u775B \u67E5\u770B \u9884\u89C8"},{name:"feedback",keywords:"\u53CD\u9988 \u5E2E\u52A9 \u652F\u6301 FAQ"},{name:"flame",keywords:"\u706B\u7130 \u70ED\u95E8"},{name:"globe",keywords:"\u5730\u7403 \u7FFB\u8BD1 \u56FD\u9645\u5316"},{name:"graph",keywords:"\u56FE\u8868 \u5206\u6790 \u6570\u636E \u7EDF\u8BA1"},{name:"hashtag",keywords:"\u6807\u7B7E \u8BDD\u9898 \u793E\u4EA4\u5A92\u4F53"},{name:"icecream",keywords:"\u51B0\u6DC7\u6DCB \u751C\u70B9 \u98DF\u7269"},{name:"image",keywords:"\u56FE\u7247 \u56FE\u50CF \u7167\u7247"},{name:"info",keywords:"\u4FE1\u606F \u8BF4\u660E"},{name:"internet",keywords:"\u7F51\u7EDC \u5168\u7403 \u4E92\u8054\u7F51"},{name:"leaf",keywords:"\u53F6\u5B50 \u690D\u7269 \u81EA\u7136 \u751F\u6001 \u73AF\u5883"},{name:"letter",keywords:"\u5B57\u6BCD \u4FE1\u4EF6"},{name:"library",keywords:"\u56FE\u4E66\u9986 \u6587\u5E93 \u5F52\u6863"},{name:"lightbulb",keywords:"\u706F\u6CE1 \u60F3\u6CD5 \u521B\u610F"},{name:"lightning",keywords:"\u95EA\u7535 \u5FEB\u901F"},{name:"math",keywords:"\u6570\u5B66 \u516C\u5F0F"},{name:"moon",keywords:"\u6708\u4EAE \u591C\u665A \u6697\u8272"},{name:"notepad",keywords:"\u8BB0\u4E8B\u672C \u7B14\u8BB0 \u65E5\u5FD7 \u5199\u4F5C"},{name:"padlock",keywords:"\u9501 \u79C1\u5BC6 \u5B89\u5168 \u8BA4\u8BC1 \u6743\u9650"},{name:"palette",keywords:"\u8C03\u8272\u677F \u8BBE\u8BA1 \u827A\u672F \u54C1\u724C"},{name:"pencil",keywords:"\u94C5\u7B14 \u5199\u4F5C \u535A\u5BA2 \u6587\u7AE0"},{name:"plane",keywords:"\u98DE\u673A \u65C5\u884C \u51FA\u884C \u5047\u671F"},{name:"promote",keywords:"\u63A8\u5E7F \u8425\u9500 \u5BA3\u4F20"},{name:"question",keywords:"\u95EE\u9898 \u5E2E\u52A9 \u652F\u6301 FAQ"},{name:"ramen",keywords:"\u62C9\u9762 \u6C64 \u98DF\u7269 \u9910\u996E"},{name:"server",keywords:"\u670D\u52A1\u5668 \u8FD0\u7EF4 \u57FA\u7840\u8BBE\u65BD"},{name:"shapes",keywords:"\u5F62\u72B6 \u79EF\u6728 \u73A9\u5177"},{name:"smiley",keywords:"\u7B11\u8138 \u8868\u60C5 \u5F00\u5FC3"},{name:"sport",keywords:"\u8FD0\u52A8 \u6237\u5916 \u6E38\u620F"},{name:"sun",keywords:"\u592A\u9633 \u767D\u5929 \u5929\u6C14"},{name:"target",keywords:"\u76EE\u6807 \u9500\u552E \u6307\u6807"},{name:"team",keywords:"\u56E2\u961F \u7EC4\u7EC7 \u529E\u516C\u5BA4"},{name:"terminal",keywords:"\u7EC8\u7AEF \u547D\u4EE4\u884C \u4EE3\u7801"},{name:"thumbsup",keywords:"\u70B9\u8D5E \u6536\u85CF \u793E\u4EA4 \u6295\u7968"},{name:"tools",keywords:"\u5DE5\u5177 \u8BBE\u7F6E \u914D\u7F6E"},{name:"truck",keywords:"\u5361\u8F66 \u8FD0\u8F93 \u7269\u6D41"},{name:"vehicle",keywords:"\u8F66\u8F86 \u4EA4\u901A \u51FA\u884C"},{name:"warning",keywords:"\u8B66\u544A \u63D0\u793A \u9519\u8BEF"}],n=t.indexOf("--query"),s=n!==-1?t[n+1]:e||"",r=s?o.filter(i=>i.name.toLowerCase().includes(s.toLowerCase())||i.keywords.toLowerCase().includes(s.toLowerCase())):o;return r.length?(console.log(`\u5171 ${r.length} \u4E2A\u56FE\u6807${s?`\uFF08\u5173\u952E\u8BCD: "${s}"\uFF09`:""}:
68
64
  `),this.printTable(r.map(i=>({\u56FE\u6807\u540D:i.name,\u5173\u952E\u8BCD:i.keywords}))),console.log(`
69
65
  \u7528\u6CD5\u793A\u4F8B:`),console.log(` coder wiki create-collection "\u6211\u7684\u96C6\u5408" --icon ${r[0].name}`),console.log(` coder wiki update-collection <id> --icon ${r[0].name}`),console.log(`
70
- \u63D0\u793A: \u4E5F\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 emoji\uFF0C\u5982 --icon \u{1F4DA}`),0):(console.log(`\u6CA1\u6709\u627E\u5230\u4E0E "${s}" \u76F8\u5173\u7684\u56FE\u6807`),0)}async upload(e,t,o,n){let s=require("fs"),r=require("path"),i=t[1];if(!e||!i)return console.error("\u274C \u7528\u6CD5: wiki upload <docId> <filePath>"),1;let a=r.resolve(i);if(!s.existsSync(a))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${a}`),1;let l=s.readFileSync(a),d=r.basename(a),u=l.length,p=this._getContentType(a),m=await this.post("attachments.create",{name:d,documentId:e,size:u,contentType:p,preset:"documentAttachment"},o,n),f=this.parseJson(m.body);if(!f?.data)return console.error("\u274C \u521B\u5EFA\u9644\u4EF6\u5931\u8D25:",m.body),1;let{uploadUrl:y,form:g,attachment:h}=f.data;console.log(` \u4E0A\u4F20\u4E2D: ${d} (${Math.round(u/1024)}KB)`);let I=await this._uploadToS3(y,g,l,d,p);if(I.status>=300)return console.error(`\u274C \u4E0A\u4F20\u5931\u8D25 (HTTP ${I.status}):`,I.body.slice(0,300)),1;console.log(`\u2705 \u6587\u4EF6\u5DF2\u4E0A\u4F20: ${h.name}`),console.log(` ID: ${h.id}`),console.log(` URL: ${h.url}`);let w=p.startsWith("image/")?`![${h.name}](${h.url})`:`[${h.name}](${h.url})`;return console.log(`
66
+ \u63D0\u793A: \u4E5F\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 emoji\uFF0C\u5982 --icon \u{1F4DA}`),0):(console.log(`\u6CA1\u6709\u627E\u5230\u4E0E "${s}" \u76F8\u5173\u7684\u56FE\u6807`),0)}async upload(e,t,o,n){let s=require("fs"),r=require("path"),i=t[1];if(!e||!i)return console.error("\u274C \u7528\u6CD5: wiki upload <docId> <filePath>"),1;let c=r.resolve(i);if(!s.existsSync(c))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${c}`),1;let a=s.readFileSync(c),d=r.basename(c),u=a.length,m=this._getContentType(c),p=await this.post("attachments.create",{name:d,documentId:e,size:u,contentType:m,preset:"documentAttachment"},o,n),h=this.parseJson(p.body);if(!h?.data)return console.error("\u274C \u521B\u5EFA\u9644\u4EF6\u5931\u8D25:",p.body),1;let{uploadUrl:f,form:g,attachment:b}=h.data;console.log(` \u4E0A\u4F20\u4E2D: ${d} (${Math.round(u/1024)}KB)`);let y=await this._uploadToS3(f,g,a,d,m);if(y.status>=300)return console.error(`\u274C \u4E0A\u4F20\u5931\u8D25 (HTTP ${y.status}):`,y.body.slice(0,300)),1;console.log(`\u2705 \u6587\u4EF6\u5DF2\u4E0A\u4F20: ${b.name}`),console.log(` ID: ${b.id}`),console.log(` URL: ${b.url}`);let w=m.startsWith("image/")?`![${b.name}](${b.url})`:`[${b.name}](${b.url})`;return console.log(`
71
67
  \u5728 Markdown \u4E2D\u4F7F\u7528:
72
- ${w}`),0}async uploadUrl(e,t,o,n){let s=t[1];if(!e||!s)return console.error("\u274C \u7528\u6CD5: wiki upload-url <docId> <url>"),1;let r=await this.post("attachments.createFromUrl",{url:s,documentId:e,preset:"documentAttachment"},o,n),i=this.parseJson(r.body);if(!i?.data)return console.error("\u274C \u4ECE URL \u521B\u5EFA\u9644\u4EF6\u5931\u8D25:",r.body),1;let a=i.data;console.log(`\u2705 \u9644\u4EF6\u5DF2\u521B\u5EFA: ${a.name}`),console.log(` ID: ${a.id}`),console.log(` URL: ${a.url}`);let l=a.contentType?.startsWith("image/")?`![${a.name}](${a.url})`:`[${a.name}](${a.url})`;return console.log(`
68
+ ${w}`),0}async uploadUrl(e,t,o,n){let s=t[1];if(!e||!s)return console.error("\u274C \u7528\u6CD5: wiki upload-url <docId> <url>"),1;let r=await this.post("attachments.createFromUrl",{url:s,documentId:e,preset:"documentAttachment"},o,n),i=this.parseJson(r.body);if(!i?.data)return console.error("\u274C \u4ECE URL \u521B\u5EFA\u9644\u4EF6\u5931\u8D25:",r.body),1;let c=i.data;console.log(`\u2705 \u9644\u4EF6\u5DF2\u521B\u5EFA: ${c.name}`),console.log(` ID: ${c.id}`),console.log(` URL: ${c.url}`);let a=c.contentType?.startsWith("image/")?`![${c.name}](${c.url})`:`[${c.name}](${c.url})`;return console.log(`
73
69
  \u5728 Markdown \u4E2D\u4F7F\u7528:
74
- ${l}`),0}_getContentType(e){let t=e.split(".").pop().toLowerCase();return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",bmp:"image/bmp",ico:"image/x-icon",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"application/vnd.ms-excel",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"application/vnd.ms-powerpoint",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation",txt:"text/plain",md:"text/markdown",csv:"text/csv",zip:"application/zip",tar:"application/x-tar",gz:"application/gzip",mp4:"video/mp4",mov:"video/quicktime",avi:"video/x-msvideo",mp3:"audio/mpeg",wav:"audio/wav",json:"application/json",xml:"application/xml"}[t]||"application/octet-stream"}_uploadToS3(e,t,o,n,s){return new Promise((r,i)=>{let a=`----FormBoundary${Math.random().toString(36).slice(2)}${Date.now()}`,l=[];for(let[h,I]of Object.entries(t))l.push(Buffer.from(`--${a}\r
75
- Content-Disposition: form-data; name="${h}"\r
70
+ ${a}`),0}_getContentType(e){let t=e.split(".").pop().toLowerCase();return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",bmp:"image/bmp",ico:"image/x-icon",pdf:"application/pdf",doc:"application/msword",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"application/vnd.ms-excel",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"application/vnd.ms-powerpoint",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation",txt:"text/plain",md:"text/markdown",csv:"text/csv",zip:"application/zip",tar:"application/x-tar",gz:"application/gzip",mp4:"video/mp4",mov:"video/quicktime",avi:"video/x-msvideo",mp3:"audio/mpeg",wav:"audio/wav",json:"application/json",xml:"application/xml"}[t]||"application/octet-stream"}_uploadToS3(e,t,o,n,s){return new Promise((r,i)=>{let c=`----FormBoundary${Math.random().toString(36).slice(2)}${Date.now()}`,a=[];for(let[b,y]of Object.entries(t))a.push(Buffer.from(`--${c}\r
71
+ Content-Disposition: form-data; name="${b}"\r
76
72
  \r
77
- ${I}\r
78
- `));let d=Buffer.from(`--${a}\r
73
+ ${y}\r
74
+ `));let d=Buffer.from(`--${c}\r
79
75
  Content-Disposition: form-data; name="file"; filename="${n}"\r
80
76
  Content-Type: ${s}\r
81
77
  \r
82
78
  `),u=Buffer.from(`\r
83
- --${a}--\r
84
- `),p=Buffer.concat([...l,d,o,u]),m=new URL(e),f=m.protocol==="https:"?require("https"):require("http"),y={hostname:m.hostname,port:m.port||(m.protocol==="https:"?443:80),path:m.pathname+m.search,method:"POST",headers:{"Content-Type":`multipart/form-data; boundary=${a}`,"Content-Length":p.length}},g=f.request(y,h=>{let I="";h.on("data",w=>I+=w),h.on("end",()=>r({status:h.statusCode,body:I}))});g.on("error",i),g.write(p),g.end()})}extractCommentText(e){return e?.content?e.content.flatMap(t=>t.content||[]).filter(t=>t.type==="text").map(t=>t.text).join(""):""}showHelp(){console.log(["Usage: coder wiki [subcommand] [options]","","\u26A0\uFE0F ID \u4F7F\u7528\u89C4\u5219\uFF08\u91CD\u8981\uFF09:"," \u6240\u6709\u547D\u4EE4\u7684 <id> \u53C2\u6570\u5FC5\u987B\u4F7F\u7528 UUID\uFF08\u683C\u5F0F: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\uFF09\u3002"," \u6D4F\u89C8\u5668 URL \u4E2D\u7684\u77ED ID\uFF08urlId\uFF0C\u5982 https://makecoder.com/wiki/doc/kTI1eTPs7o \u4E2D\u7684 kTI1eTPs7o"," \u4EC5\u4EE5\u4E0B\u4E24\u4E2A\u547D\u4EE4\u652F\u6301 urlId\uFF1Aget\u3001collection-info\u3002"," \u5176\u4ED6\u6240\u6709\u547D\u4EE4\uFF08update\u3001delete\u3001move\u3001publish\u3001revisions \u7B49\uFF09\u4F20\u5165 urlId \u4F1A\u62A5\u9519\u3002",' \u5982\u679C\u53EA\u6709 URL\uFF0C\u5148\u7528 "coder wiki get <urlId>" \u67E5\u51FA\u6587\u6863 UUID\uFF0C\u518D\u6267\u884C\u540E\u7EED\u64CD\u4F5C\u3002'," list \u8F93\u51FA\u8868\u683C\u4E2D docId/collectionId \u5217\u7684\u503C\u5373\u4E3A UUID\uFF0C\u53EF\u76F4\u63A5\u4F7F\u7528\u3002","","Global Options:"," --team <teamId> \u6307\u5B9A\u56E2\u961F\u4E0A\u4E0B\u6587\uFF08X-Team-Id\uFF09\uFF0C\u9ED8\u8BA4\u4F7F\u7528 coder team use \u8BBE\u7F6E\u7684\u56E2\u961F","","Collection Management:"," list \u5217\u51FA\u6240\u6709\u96C6\u5408"," list <collectionId> \u5217\u51FA\u96C6\u5408\u4E0B\u7684\u6839\u6587\u6863\uFF08\u8868\u683C\uFF09"," list <collectionId> -d <depth> \u5C55\u5F00\u6587\u6863\u6811\uFF08-d -1 \u5168\u90E8\u5C55\u5F00\uFF09"," create-collection <name> [desc] [--permission <perm>] [--icon <icon>] [--color <color>] [--sort-field title|index] [--sort-direction asc|desc] [--index <fractional-index>]"," \u521B\u5EFA\u96C6\u5408 (perm: read_write|read|null; icon: emoji \u6216\u56FE\u6807\u540D; color: \u5341\u516D\u8FDB\u5236\u989C\u8272\u5982 #4A90E2; sort-field: \u96C6\u5408\u5185\u6587\u6863\u9ED8\u8BA4\u6392\u5E8F\u5B57\u6BB5; index: \u96C6\u5408\u5728\u4FA7\u8FB9\u680F\u4E2D\u7684\u4F4D\u7F6E)"," icons [keyword] \u5217\u51FA\u6240\u6709\u652F\u6301\u7684\u56FE\u6807\u540D\uFF08\u53EF\u6309\u5173\u952E\u8BCD\u8FC7\u6EE4\uFF09"," update-collection <id> [--name <n>] [--description <d>] [--permission <p>] [--color <c>] [--sharing <bool>]"," \u66F4\u65B0\u96C6\u5408"," archive-collection <id> \u5F52\u6863\u96C6\u5408"," restore-collection <id> \u6062\u590D\u5DF2\u5F52\u6863\u96C6\u5408"," delete-collection <id> \u5220\u9664\u96C6\u5408"," collection-info <id> \u67E5\u770B\u96C6\u5408\u8BE6\u60C5"," collection-members <id> [--query <q>] [--permission <p>] \u96C6\u5408\u6210\u5458\u5217\u8868"," collection-add-user <id> <userId> [--permission <p>] \u6DFB\u52A0\u7528\u6237\u5230\u96C6\u5408"," collection-remove-user <id> <userId> \u4ECE\u96C6\u5408\u79FB\u9664\u7528\u6237"," collection-add-group <id> <groupId> [--permission <p>] \u6DFB\u52A0\u7FA4\u7EC4\u5230\u96C6\u5408"," collection-remove-group <id> <groupId> \u4ECE\u96C6\u5408\u79FB\u9664\u7FA4\u7EC4"," collection-group-members <id> \u96C6\u5408\u7FA4\u7EC4\u6210\u5458\u5217\u8868"," collection-export <id> [--format outline|markdown_zip] \u5BFC\u51FA\u96C6\u5408"," export-all [--format outline|markdown_zip] \u5BFC\u51FA\u6240\u6709\u96C6\u5408"," collection-move <id> <index> \u79FB\u52A8\u96C6\u5408\u4F4D\u7F6E","","Document Management:"," get <docId> \u67E5\u770B\u6587\u6863"," publish <collectionId> <title> [text] \u521B\u5EFA\u5E76\u53D1\u5E03\u6587\u6863"," publish <collectionId> --file <path> [--parent <parentDocId>] [--index <n>] [--after <docId>]"," \u4ECE Markdown \u6587\u4EF6\u53D1\u5E03\uFF08\u9700\u542B H1 \u6807\u9898\uFF1B--index \u6307\u5B9A\u4F4D\u7F6E\uFF0C0 \u4E3A\u6700\u524D\uFF1B--after <docId> \u63D2\u5165\u5230\u6307\u5B9A\u6587\u6863\u4E4B\u540E\uFF0C\u81EA\u52A8\u7EE7\u627F\u540C\u7EA7\u7236\u6587\u6863\uFF09"," update <docId> <title> [text] \u66F4\u65B0\u6587\u6863"," update <docId> --file <path> \u4ECE Markdown \u6587\u4EF6\u66F4\u65B0\u6587\u6863"," delete <docId> [--permanent] \u5220\u9664\u6587\u6863"," move <docId> [collectionId] [parentId] \u79FB\u52A8\u6587\u6863"," archive <docId> \u5F52\u6863\u6587\u6863"," restore <docId> [--revision <revisionId>] [--collection <collectionId>]"," \u6062\u590D\u6587\u6863"," archived [--collection <id>] \u5DF2\u5F52\u6863\u6587\u6863\u5217\u8868"," deleted \u5DF2\u5220\u9664\u6587\u6863\u5217\u8868"," insights <id> [--start-date <d>] [--end-date <d>] \u6587\u6863\u8BBF\u95EE\u7EDF\u8BA1"," export <id> [--include-children] \u5BFC\u51FA\u6587\u6863"," search-titles <query> \u6309\u6807\u9898\u641C\u7D22"," duplicate <id> [--title <t>] [--recursive] [--publish] [--collection <id>] [--parent <id>]"," \u590D\u5236\u6587\u6863"," unpublish <id> \u53D6\u6D88\u53D1\u5E03"," templatize <id> [--collection <collectionId>] \u8F6C\u4E3A\u6A21\u677F\uFF08\u9700\u6307\u5B9A\u96C6\u5408\u6216\u7BA1\u7406\u5458\u6743\u9650\uFF09"," doc-members <id> \u6587\u6863\u6210\u5458\u5217\u8868"," doc-add-user <id> <userId> [--permission <p>] \u6DFB\u52A0\u7528\u6237\u5230\u6587\u6863"," doc-remove-user <id> <userId> \u4ECE\u6587\u6863\u79FB\u9664\u7528\u6237"," doc-add-group <id> <groupId> [--permission <p>] \u6DFB\u52A0\u7FA4\u7EC4\u5230\u6587\u6863"," doc-remove-group <id> <groupId> \u4ECE\u6587\u6863\u79FB\u9664\u7FA4\u7EC4"," doc-group-members <id> \u6587\u6863\u7FA4\u7EC4\u6210\u5458\u5217\u8868"," empty-trash \u6E05\u7A7A\u56DE\u6536\u7AD9"," sub-docs <id> \u5B50\u6587\u6863\u5217\u8868","","Revision History:"," revisions <docId> \u5217\u51FA\u6587\u6863\u5386\u53F2\u7248\u672C"," revision <revisionId> \u67E5\u770B\u6307\u5B9A\u5386\u53F2\u7248\u672C\u5185\u5BB9","","Discovery:"," drafts \u8349\u7A3F\u5217\u8868"," recent \u6700\u8FD1\u6D4F\u89C8"," search <keyword> \u5168\u6587\u641C\u7D22","","Favorites & Pins:"," stars \u6536\u85CF\u5217\u8868"," star <id> [--collection] \u6536\u85CF\u6587\u6863\u6216\u96C6\u5408"," unstar <starId> \u53D6\u6D88\u6536\u85CF"," pins [collectionId] \u7F6E\u9876\u5217\u8868"," pin <docId> [collectionId] \u7F6E\u9876\u6587\u6863"," unpin <pinId> \u53D6\u6D88\u7F6E\u9876","","Comments:"," comments <docId> \u67E5\u770B\u8BC4\u8BBA"," comment <docId> <text> \u53D1\u8868\u8BC4\u8BBA","","Shares:"," shares [--document <id>] \u5206\u4EAB\u5217\u8868"," share-info <id> \u67E5\u770B\u5206\u4EAB\u8BE6\u60C5"," share <documentId> [--published] [--include-children] \u521B\u5EFA\u5206\u4EAB"," share-update <id> [--published] [--no-published] [--include-children] \u66F4\u65B0\u5206\u4EAB"," unshare <id> \u64A4\u9500\u5206\u4EAB","","Users:"," users [--query <q>] [--filter invited|viewers|admins|members|active|all|suspended]"," \u7528\u6237\u5217\u8868"," user-info <id> \u67E5\u770B\u7528\u6237\u8BE6\u60C5"," invite <email> <name> <role> \u9080\u8BF7\u7528\u6237"," user-update-role <id> <role> \u66F4\u65B0\u7528\u6237\u89D2\u8272 (admin|member|viewer)"," user-suspend <id> \u6682\u505C\u7528\u6237"," user-activate <id> \u6FC0\u6D3B\u7528\u6237","","Groups:"," groups [--query <q>] \u7FA4\u7EC4\u5217\u8868"," group-info <id> \u67E5\u770B\u7FA4\u7EC4\u8BE6\u60C5"," create-group <name> \u521B\u5EFA\u7FA4\u7EC4"," update-group <id> --name <name> \u66F4\u65B0\u7FA4\u7EC4"," delete-group <id> \u5220\u9664\u7FA4\u7EC4"," group-members <id> \u7FA4\u7EC4\u6210\u5458\u5217\u8868"," group-add-user <id> <userId> \u6DFB\u52A0\u7528\u6237\u5230\u7FA4\u7EC4"," group-remove-user <id> <userId> \u4ECE\u7FA4\u7EC4\u79FB\u9664\u7528\u6237","","Views / Subscriptions / Events:"," views <documentId> \u6587\u6863\u6D4F\u89C8\u8BB0\u5F55"," view <documentId> \u8BB0\u5F55\u6587\u6863\u6D4F\u89C8"," subscriptions <documentId> \u8BA2\u9605\u5217\u8868\uFF08\u6216 --collection <id>\uFF09"," subscribe <documentId> \u8BA2\u9605\u6587\u6863\u66F4\u65B0"," unsubscribe <subscriptionId> \u53D6\u6D88\u8BA2\u9605"," events [--actor <id>] [--document <id>] [--collection <id>] [--type <t>]"," \u4E8B\u4EF6\u5217\u8868","","Templates:"," templates [--collection <id>] \u6A21\u677F\u5217\u8868"," template-info <id> \u67E5\u770B\u6A21\u677F\u8BE6\u60C5"," create-template <collectionId> <title> [--text <t>] \u521B\u5EFA\u6A21\u677F"," update-template <id> [--title <t>] [--text <t>] \u66F4\u65B0\u6A21\u677F"," delete-template <id> \u5220\u9664\u6A21\u677F"," duplicate-template <id> [--title <t>] \u590D\u5236\u6A21\u677F","","File Operations:"," file-ops [--type import|export] \u6587\u4EF6\u64CD\u4F5C\u5217\u8868"," file-op-info <id> \u67E5\u770B\u6587\u4EF6\u64CD\u4F5C\u8BE6\u60C5"," file-op-delete <id> \u5220\u9664\u6587\u4EF6\u64CD\u4F5C\u8BB0\u5F55","","Reactions:"," reactions <commentId> \u67E5\u770B\u8BC4\u8BBA\u53CD\u5E94\u5217\u8868","","Attachments:"," attachments [docId] \u9644\u4EF6\u5217\u8868\uFF08\u53EF\u6309\u6587\u6863\u8FC7\u6EE4\uFF09"," upload <docId> <filePath> \u4E0A\u4F20\u672C\u5730\u6587\u4EF6\uFF08\u56FE\u7247/PDF/PPT \u7B49\uFF09\u5230\u6587\u6863"," upload-url <docId> <url> \u4ECE\u8FDC\u7A0B URL \u521B\u5EFA\u9644\u4EF6"," delete-attachment <id> \u5220\u9664\u9644\u4EF6","","Examples:"," coder wiki list \u5217\u51FA\u9ED8\u8BA4\u56E2\u961F\u7684\u6240\u6709\u96C6\u5408"," coder wiki list --team <teamId> \u5217\u51FA\u6307\u5B9A\u56E2\u961F\u7684\u96C6\u5408"," coder wiki list <collectionId> -d -1 \u5C55\u5F00\u5B8C\u6574\u6811",' coder wiki publish <collectionId> "\u6807\u9898" "\u5185\u5BB9"'," coder wiki publish <collectionId> --file ./doc.md",' coder wiki search "\u5173\u952E\u8BCD"',' coder wiki comment <docId> "\u5F88\u6709\u5E2E\u52A9\uFF01"'," coder wiki upload <docId> ./screenshot.png \u4E0A\u4F20\u56FE\u7247\u5E76\u83B7\u53D6 Markdown \u94FE\u63A5"," coder wiki upload <docId> ./report.pptx \u4E0A\u4F20 PPT \u6587\u4EF6"].join(`
85
- `))}};We.exports=de});var tt=k((Lo,et)=>{var j=require("fs"),N=require("path"),Qe=require("os"),Yt=require("readline"),X=N.join(Qe.homedir(),".coder","config.json"),Xe=process.env.MCP_CHANNEL_DIR||N.join(Qe.homedir(),".coder","mcp-channel"),Ze=["wecom"];function Z(c){return!c||c.length<=8?"****":c.slice(0,3)+"****"+c.slice(-3)}var ue=class{load(){try{return JSON.parse(j.readFileSync(X,"utf8"))}catch{return{}}}save(e){let t=N.dirname(X);j.existsSync(t)||j.mkdirSync(t,{recursive:!0}),j.writeFileSync(X,JSON.stringify(e,null,2)+`
86
- `)}getChannels(){return this.load().channels??[]}saveChannels(e){let t=this.load();t.channels=e,this.save(t)}async handle({channelSubcommand:e,channelArg:t,channelRemainingArgs:o,remainingArgs:n,claudeLauncher:s,parsedArgs:r}){return e?e==="--help"||e==="-h"?(this.showHelp(),0):e==="list"?this.list(t):e==="show"?this.show(t):e==="add"?this.add(t,o||[]):e==="remove"?this.remove(t):e==="update"?this.update(t,o||[]):(console.error(`\u274C \u672A\u77E5\u5B50\u547D\u4EE4: ${e}`),this.showHelp(),1):this.launch(o||[],s,r)}async launch(e,t,o){let n=this.getChannels().filter(m=>m.enabled!==!1);if(!n.length&&(console.log(`\u5C1A\u672A\u7ED1\u5B9A\u4EFB\u4F55\u6E20\u9053\uFF0C\u5F00\u59CB\u5F15\u5BFC\u914D\u7F6E...
87
- `),!await this.promptSetupChannel()||(n=this.getChannels().filter(f=>f.enabled!==!1),!n.length)))return 1;let s=null,r=e.indexOf("--channel-id");r!==-1&&(s=e[r+1],e=e.filter((m,f)=>f!==r&&f!==r+1));let i;if(s){if(i=n.find(m=>m.id===s),!i)return console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${s}`),1}else if(n.length===1)i=n[0];else if(i=await this.promptSelectChannel(n),!i)return 1;let a=N.join(Xe,i.type);if(!j.existsSync(a))return console.error(`\u274C MCP \u76EE\u5F55\u4E0D\u5B58\u5728: ${a}`),1;let l=["--plugin-dir",a,"--dangerously-load-development-channels",`plugin:${i.type}@${i.type}`],d={WECOM_CHANNEL_FILE:X,WECOM_CHANNEL_KEY:i.id};i.botId&&(d.WECOM_BOT_ID=i.botId),i.secret&&(d.WECOM_BOT_SECRET=i.secret),o.remainingArgs=[...l,...e,...o.remainingArgs||[]],o.extraEnv={...o.extraEnv||{},...d};let u=i.name||i.id,p=i.botId?Z(i.botId):"(\u672A\u914D\u7F6E)";return console.log(`
88
- \u6E20\u9053\u5DF2\u5C31\u7EEA: [${i.type}] ${u} Bot ID: ${p}`),console.log(`\u6B63\u5728\u542F\u52A8 Claude\uFF0C\u7B49\u5F85\u4F01\u4E1A\u5FAE\u4FE1\u6D88\u606F...
89
- `),await t.launch(o)}async promptSetupChannel(){let e=Yt.createInterface({input:process.stdin,output:process.stdout}),t=o=>new Promise(n=>e.question(o,n));try{for(;;){console.log(`\u8BF7\u914D\u7F6E\u4F01\u4E1A\u5FAE\u4FE1 AI Bot \u6E20\u9053\uFF1A
79
+ --${c}--\r
80
+ `),m=Buffer.concat([...a,d,o,u]),p=new URL(e),h=p.protocol==="https:"?require("https"):require("http"),f={hostname:p.hostname,port:p.port||(p.protocol==="https:"?443:80),path:p.pathname+p.search,method:"POST",headers:{"Content-Type":`multipart/form-data; boundary=${c}`,"Content-Length":m.length}},g=h.request(f,b=>{let y="";b.on("data",w=>y+=w),b.on("end",()=>r({status:b.statusCode,body:y}))});g.on("error",i),g.write(m),g.end()})}extractCommentText(e){return e?.content?e.content.flatMap(t=>t.content||[]).filter(t=>t.type==="text").map(t=>t.text).join(""):""}showHelp(){console.log(["Usage: coder wiki [subcommand] [options]","","\u26A0\uFE0F ID \u4F7F\u7528\u89C4\u5219\uFF08\u91CD\u8981\uFF09:"," \u6240\u6709\u547D\u4EE4\u7684 <id> \u53C2\u6570\u5FC5\u987B\u4F7F\u7528 UUID\uFF08\u683C\u5F0F: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\uFF09\u3002"," \u6D4F\u89C8\u5668 URL \u4E2D\u7684\u77ED ID\uFF08urlId\uFF0C\u5982 https://makecoder.com/wiki/doc/kTI1eTPs7o \u4E2D\u7684 kTI1eTPs7o"," \u4EC5\u4EE5\u4E0B\u4E24\u4E2A\u547D\u4EE4\u652F\u6301 urlId\uFF1Aget\u3001collection-info\u3002"," \u5176\u4ED6\u6240\u6709\u547D\u4EE4\uFF08update\u3001delete\u3001move\u3001publish\u3001revisions \u7B49\uFF09\u4F20\u5165 urlId \u4F1A\u62A5\u9519\u3002",' \u5982\u679C\u53EA\u6709 URL\uFF0C\u5148\u7528 "coder wiki get <urlId>" \u67E5\u51FA\u6587\u6863 UUID\uFF0C\u518D\u6267\u884C\u540E\u7EED\u64CD\u4F5C\u3002'," list \u8F93\u51FA\u8868\u683C\u4E2D docId/collectionId \u5217\u7684\u503C\u5373\u4E3A UUID\uFF0C\u53EF\u76F4\u63A5\u4F7F\u7528\u3002","","Global Options:"," --team <teamId> \u6307\u5B9A\u56E2\u961F\u4E0A\u4E0B\u6587\uFF08X-Team-Id\uFF09\uFF0C\u9ED8\u8BA4\u4F7F\u7528 coder team use \u8BBE\u7F6E\u7684\u56E2\u961F","","Collection Management:"," list \u5217\u51FA\u6240\u6709\u96C6\u5408"," list <collectionId> \u5217\u51FA\u96C6\u5408\u4E0B\u7684\u6839\u6587\u6863\uFF08\u8868\u683C\uFF09"," list <collectionId> -d <depth> \u5C55\u5F00\u6587\u6863\u6811\uFF08-d -1 \u5168\u90E8\u5C55\u5F00\uFF09"," create-collection <name> [desc] [--permission <perm>] [--icon <icon>] [--color <color>] [--sort-field title|index] [--sort-direction asc|desc] [--index <fractional-index>]"," \u521B\u5EFA\u96C6\u5408 (perm: read_write|read|null; icon: emoji \u6216\u56FE\u6807\u540D; color: \u5341\u516D\u8FDB\u5236\u989C\u8272\u5982 #4A90E2; sort-field: \u96C6\u5408\u5185\u6587\u6863\u9ED8\u8BA4\u6392\u5E8F\u5B57\u6BB5; index: \u96C6\u5408\u5728\u4FA7\u8FB9\u680F\u4E2D\u7684\u4F4D\u7F6E)"," icons [keyword] \u5217\u51FA\u6240\u6709\u652F\u6301\u7684\u56FE\u6807\u540D\uFF08\u53EF\u6309\u5173\u952E\u8BCD\u8FC7\u6EE4\uFF09"," update-collection <id> [--name <n>] [--description <d>] [--permission <p>] [--color <c>] [--sharing <bool>]"," \u66F4\u65B0\u96C6\u5408"," archive-collection <id> \u5F52\u6863\u96C6\u5408"," restore-collection <id> \u6062\u590D\u5DF2\u5F52\u6863\u96C6\u5408"," delete-collection <id> \u5220\u9664\u96C6\u5408"," collection-info <id> \u67E5\u770B\u96C6\u5408\u8BE6\u60C5"," collection-members <id> [--query <q>] [--permission <p>] \u96C6\u5408\u6210\u5458\u5217\u8868"," collection-add-user <id> <userId> [--permission <p>] \u6DFB\u52A0\u7528\u6237\u5230\u96C6\u5408"," collection-remove-user <id> <userId> \u4ECE\u96C6\u5408\u79FB\u9664\u7528\u6237"," collection-add-group <id> <groupId> [--permission <p>] \u6DFB\u52A0\u7FA4\u7EC4\u5230\u96C6\u5408"," collection-remove-group <id> <groupId> \u4ECE\u96C6\u5408\u79FB\u9664\u7FA4\u7EC4"," collection-group-members <id> \u96C6\u5408\u7FA4\u7EC4\u6210\u5458\u5217\u8868"," collection-export <id> [--format outline|markdown_zip] \u5BFC\u51FA\u96C6\u5408"," export-all [--format outline|markdown_zip] \u5BFC\u51FA\u6240\u6709\u96C6\u5408"," collection-move <id> <index> \u79FB\u52A8\u96C6\u5408\u4F4D\u7F6E","","Document Management:"," get <docId> \u67E5\u770B\u6587\u6863"," publish <collectionId> <title> [text] \u521B\u5EFA\u5E76\u53D1\u5E03\u6587\u6863"," publish <collectionId> --file <path> [--parent <parentDocId>] [--index <n>] [--after <docId>]"," \u4ECE Markdown \u6587\u4EF6\u53D1\u5E03\uFF08\u9700\u542B H1 \u6807\u9898\uFF1B--index \u6307\u5B9A\u4F4D\u7F6E\uFF0C0 \u4E3A\u6700\u524D\uFF1B--after <docId> \u63D2\u5165\u5230\u6307\u5B9A\u6587\u6863\u4E4B\u540E\uFF0C\u81EA\u52A8\u7EE7\u627F\u540C\u7EA7\u7236\u6587\u6863\uFF09"," update <docId> <title> [text] \u66F4\u65B0\u6587\u6863"," update <docId> --file <path> \u4ECE Markdown \u6587\u4EF6\u66F4\u65B0\u6587\u6863"," delete <docId> [--permanent] \u5220\u9664\u6587\u6863"," move <docId> [collectionId] [parentId] \u79FB\u52A8\u6587\u6863"," archive <docId> \u5F52\u6863\u6587\u6863"," restore <docId> [--revision <revisionId>] [--collection <collectionId>]"," \u6062\u590D\u6587\u6863"," archived [--collection <id>] \u5DF2\u5F52\u6863\u6587\u6863\u5217\u8868"," deleted \u5DF2\u5220\u9664\u6587\u6863\u5217\u8868"," insights <id> [--start-date <d>] [--end-date <d>] \u6587\u6863\u8BBF\u95EE\u7EDF\u8BA1"," export <id> [--include-children] \u5BFC\u51FA\u6587\u6863"," search-titles <query> \u6309\u6807\u9898\u641C\u7D22"," duplicate <id> [--title <t>] [--recursive] [--publish] [--collection <id>] [--parent <id>]"," \u590D\u5236\u6587\u6863"," unpublish <id> \u53D6\u6D88\u53D1\u5E03"," templatize <id> [--collection <collectionId>] \u8F6C\u4E3A\u6A21\u677F\uFF08\u9700\u6307\u5B9A\u96C6\u5408\u6216\u7BA1\u7406\u5458\u6743\u9650\uFF09"," doc-members <id> \u6587\u6863\u6210\u5458\u5217\u8868"," doc-add-user <id> <userId> [--permission <p>] \u6DFB\u52A0\u7528\u6237\u5230\u6587\u6863"," doc-remove-user <id> <userId> \u4ECE\u6587\u6863\u79FB\u9664\u7528\u6237"," doc-add-group <id> <groupId> [--permission <p>] \u6DFB\u52A0\u7FA4\u7EC4\u5230\u6587\u6863"," doc-remove-group <id> <groupId> \u4ECE\u6587\u6863\u79FB\u9664\u7FA4\u7EC4"," doc-group-members <id> \u6587\u6863\u7FA4\u7EC4\u6210\u5458\u5217\u8868"," empty-trash \u6E05\u7A7A\u56DE\u6536\u7AD9"," sub-docs <id> \u5B50\u6587\u6863\u5217\u8868","","Revision History:"," revisions <docId> \u5217\u51FA\u6587\u6863\u5386\u53F2\u7248\u672C"," revision <revisionId> \u67E5\u770B\u6307\u5B9A\u5386\u53F2\u7248\u672C\u5185\u5BB9","","Discovery:"," drafts \u8349\u7A3F\u5217\u8868"," recent \u6700\u8FD1\u6D4F\u89C8"," search <keyword> \u5168\u6587\u641C\u7D22","","Favorites & Pins:"," stars \u6536\u85CF\u5217\u8868"," star <id> [--collection] \u6536\u85CF\u6587\u6863\u6216\u96C6\u5408"," unstar <starId> \u53D6\u6D88\u6536\u85CF"," pins [collectionId] \u7F6E\u9876\u5217\u8868"," pin <docId> [collectionId] \u7F6E\u9876\u6587\u6863"," unpin <pinId> \u53D6\u6D88\u7F6E\u9876","","Comments:"," comments <docId> \u67E5\u770B\u8BC4\u8BBA"," comment <docId> <text> \u53D1\u8868\u8BC4\u8BBA","","Shares:"," shares [--document <id>] \u5206\u4EAB\u5217\u8868"," share-info <id> \u67E5\u770B\u5206\u4EAB\u8BE6\u60C5"," share <documentId> [--published] [--include-children] \u521B\u5EFA\u5206\u4EAB"," share-update <id> [--published] [--no-published] [--include-children] \u66F4\u65B0\u5206\u4EAB"," unshare <id> \u64A4\u9500\u5206\u4EAB","","Users:"," users [--query <q>] [--filter invited|viewers|admins|members|active|all|suspended]"," \u7528\u6237\u5217\u8868"," user-info <id> \u67E5\u770B\u7528\u6237\u8BE6\u60C5"," invite <email> <name> <role> \u9080\u8BF7\u7528\u6237"," user-update-role <id> <role> \u66F4\u65B0\u7528\u6237\u89D2\u8272 (admin|member|viewer)"," user-suspend <id> \u6682\u505C\u7528\u6237"," user-activate <id> \u6FC0\u6D3B\u7528\u6237","","Groups:"," groups [--query <q>] \u7FA4\u7EC4\u5217\u8868"," group-info <id> \u67E5\u770B\u7FA4\u7EC4\u8BE6\u60C5"," create-group <name> \u521B\u5EFA\u7FA4\u7EC4"," update-group <id> --name <name> \u66F4\u65B0\u7FA4\u7EC4"," delete-group <id> \u5220\u9664\u7FA4\u7EC4"," group-members <id> \u7FA4\u7EC4\u6210\u5458\u5217\u8868"," group-add-user <id> <userId> \u6DFB\u52A0\u7528\u6237\u5230\u7FA4\u7EC4"," group-remove-user <id> <userId> \u4ECE\u7FA4\u7EC4\u79FB\u9664\u7528\u6237","","Views / Subscriptions / Events:"," views <documentId> \u6587\u6863\u6D4F\u89C8\u8BB0\u5F55"," view <documentId> \u8BB0\u5F55\u6587\u6863\u6D4F\u89C8"," subscriptions <documentId> \u8BA2\u9605\u5217\u8868\uFF08\u6216 --collection <id>\uFF09"," subscribe <documentId> \u8BA2\u9605\u6587\u6863\u66F4\u65B0"," unsubscribe <subscriptionId> \u53D6\u6D88\u8BA2\u9605"," events [--actor <id>] [--document <id>] [--collection <id>] [--type <t>]"," \u4E8B\u4EF6\u5217\u8868","","Templates:"," templates [--collection <id>] \u6A21\u677F\u5217\u8868"," template-info <id> \u67E5\u770B\u6A21\u677F\u8BE6\u60C5"," create-template <collectionId> <title> [--text <t>] \u521B\u5EFA\u6A21\u677F"," update-template <id> [--title <t>] [--text <t>] \u66F4\u65B0\u6A21\u677F"," delete-template <id> \u5220\u9664\u6A21\u677F"," duplicate-template <id> [--title <t>] \u590D\u5236\u6A21\u677F","","File Operations:"," file-ops [--type import|export] \u6587\u4EF6\u64CD\u4F5C\u5217\u8868"," file-op-info <id> \u67E5\u770B\u6587\u4EF6\u64CD\u4F5C\u8BE6\u60C5"," file-op-delete <id> \u5220\u9664\u6587\u4EF6\u64CD\u4F5C\u8BB0\u5F55","","Reactions:"," reactions <commentId> \u67E5\u770B\u8BC4\u8BBA\u53CD\u5E94\u5217\u8868","","Attachments:"," attachments [docId] \u9644\u4EF6\u5217\u8868\uFF08\u53EF\u6309\u6587\u6863\u8FC7\u6EE4\uFF09"," upload <docId> <filePath> \u4E0A\u4F20\u672C\u5730\u6587\u4EF6\uFF08\u56FE\u7247/PDF/PPT \u7B49\uFF09\u5230\u6587\u6863"," upload-url <docId> <url> \u4ECE\u8FDC\u7A0B URL \u521B\u5EFA\u9644\u4EF6"," delete-attachment <id> \u5220\u9664\u9644\u4EF6","","Examples:"," coder wiki list \u5217\u51FA\u9ED8\u8BA4\u56E2\u961F\u7684\u6240\u6709\u96C6\u5408"," coder wiki list --team <teamId> \u5217\u51FA\u6307\u5B9A\u56E2\u961F\u7684\u96C6\u5408"," coder wiki list <collectionId> -d -1 \u5C55\u5F00\u5B8C\u6574\u6811",' coder wiki publish <collectionId> "\u6807\u9898" "\u5185\u5BB9"'," coder wiki publish <collectionId> --file ./doc.md",' coder wiki search "\u5173\u952E\u8BCD"',' coder wiki comment <docId> "\u5F88\u6709\u5E2E\u52A9\uFF01"'," coder wiki upload <docId> ./screenshot.png \u4E0A\u4F20\u56FE\u7247\u5E76\u83B7\u53D6 Markdown \u94FE\u63A5"," coder wiki upload <docId> ./report.pptx \u4E0A\u4F20 PPT \u6587\u4EF6"].join(`
81
+ `))}};Ve.exports=le});var Xe=S((vo,Ye)=>{var q=require("fs"),j=require("path"),We=require("os"),Lt=require("readline"),K=j.join(We.homedir(),".coder","config.json"),ze=process.env.MCP_CHANNEL_DIR||j.join(We.homedir(),".coder","mcp-channel"),Ke=["wecom"];function W(l){return!l||l.length<=8?"****":l.slice(0,3)+"****"+l.slice(-3)}var ae=class{load(){try{return JSON.parse(q.readFileSync(K,"utf8"))}catch{return{}}}save(e){let t=j.dirname(K);q.existsSync(t)||q.mkdirSync(t,{recursive:!0}),q.writeFileSync(K,JSON.stringify(e,null,2)+`
82
+ `)}getChannels(){return this.load().channels??[]}saveChannels(e){let t=this.load();t.channels=e,this.save(t)}async handle({channelSubcommand:e,channelArg:t,channelRemainingArgs:o,remainingArgs:n,claudeLauncher:s,parsedArgs:r}){return e?e==="--help"||e==="-h"?(this.showHelp(),0):e==="list"?this.list(t):e==="show"?this.show(t):e==="add"?this.add(t,o||[]):e==="remove"?this.remove(t):e==="update"?this.update(t,o||[]):(console.error(`\u274C \u672A\u77E5\u5B50\u547D\u4EE4: ${e}`),this.showHelp(),1):this.launch(o||[],s,r)}async launch(e,t,o){let n=this.getChannels().filter(p=>p.enabled!==!1);if(!n.length&&(console.log(`\u5C1A\u672A\u7ED1\u5B9A\u4EFB\u4F55\u6E20\u9053\uFF0C\u5F00\u59CB\u5F15\u5BFC\u914D\u7F6E...
83
+ `),!await this.promptSetupChannel()||(n=this.getChannels().filter(h=>h.enabled!==!1),!n.length)))return 1;let s=null,r=e.indexOf("--channel-id");r!==-1&&(s=e[r+1],e=e.filter((p,h)=>h!==r&&h!==r+1));let i;if(s){if(i=n.find(p=>p.id===s),!i)return console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${s}`),1}else if(n.length===1)i=n[0];else if(i=await this.promptSelectChannel(n),!i)return 1;let c=j.join(ze,i.type);if(!q.existsSync(c))return console.error(`\u274C MCP \u76EE\u5F55\u4E0D\u5B58\u5728: ${c}`),1;let a=["--plugin-dir",c,"--dangerously-load-development-channels",`plugin:${i.type}@${i.type}`],d={WECOM_CHANNEL_FILE:K,WECOM_CHANNEL_KEY:i.id};i.botId&&(d.WECOM_BOT_ID=i.botId),i.secret&&(d.WECOM_BOT_SECRET=i.secret),o.remainingArgs=[...a,...e,...o.remainingArgs||[]],o.extraEnv={...o.extraEnv||{},...d};let u=i.name||i.id,m=i.botId?W(i.botId):"(\u672A\u914D\u7F6E)";return console.log(`
84
+ \u6E20\u9053\u5DF2\u5C31\u7EEA: [${i.type}] ${u} Bot ID: ${m}`),console.log(`\u6B63\u5728\u542F\u52A8 Claude\uFF0C\u7B49\u5F85\u4F01\u4E1A\u5FAE\u4FE1\u6D88\u606F...
85
+ `),await t.launch(o)}async promptSetupChannel(){let e=Lt.createInterface({input:process.stdin,output:process.stdout}),t=o=>new Promise(n=>e.question(o,n));try{for(;;){console.log(`\u8BF7\u914D\u7F6E\u4F01\u4E1A\u5FAE\u4FE1 AI Bot \u6E20\u9053\uFF1A
90
86
  `);let o=(await t(" 1. \u8BF7\u7C98\u8D34 Bot ID: ")).trim();if(!o){console.error(`\u274C Bot ID \u4E0D\u80FD\u4E3A\u7A7A
91
87
  `);continue}let n=(await t(" 2. \u8BF7\u7C98\u8D34 Secret: ")).trim();if(!n){console.error(`\u274C Secret \u4E0D\u80FD\u4E3A\u7A7A
92
- `);continue}if(process.stdout.write(`\x1B[1A\x1B[2K 2. \u8BF7\u7C98\u8D34 Secret: ${Z(n)}
88
+ `);continue}if(process.stdout.write(`\x1B[1A\x1B[2K 2. \u8BF7\u7C98\u8D34 Secret: ${W(n)}
93
89
  `),console.log(`
94
90
  \u6B63\u5728\u9A8C\u8BC1\u8FDE\u63A5...`),!await this.testWecomConnection(o,n)){console.error(`\u274C \u8FDE\u63A5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5 Bot ID \u548C Secret \u662F\u5426\u6B63\u786E\uFF0C\u91CD\u65B0\u8F93\u5165\u3002
95
- `);continue}let r=`wecom-${Date.now()}`,i={id:r,type:"wecom",enabled:!0,botId:o,secret:n,createdAt:new Date().toISOString()},a=this.getChannels();return a.push(i),this.saveChannels(a),console.log(`\u2705 \u6E20\u9053\u7ED1\u5B9A\u6210\u529F: ${r}
96
- `),i}}finally{e.close()}}async testWecomConnection(e,t){let o=N.join(Xe,"wecom"),n=N.join(o,"node_modules","@wecom","aibot-node-sdk");if(!j.existsSync(n))return!0;let s;try{({WSClient:s}=require(n))}catch{return this._testWecomConnectionSubprocess(e,t,n)}return this._runWecomClient(s,e,t)}_runWecomClient(e,t,o){return new Promise(n=>{let s=setTimeout(()=>{try{r.disconnect()}catch{}n(!1)},1e4),r=new e({botId:t,secret:o,maxReconnectAttempts:0,maxAuthFailureAttempts:0,logger:{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}}});r.on("authenticated",()=>{clearTimeout(s);try{r.disconnect()}catch{}n(!0)}),r.on("error",()=>{clearTimeout(s);try{r.disconnect()}catch{}n(!1)}),r.connect()})}_testWecomConnectionSubprocess(e,t,o){let{execSync:n,spawn:s}=require("child_process"),r;try{r=n("which node",{encoding:"utf8"}).trim()}catch{}if(!r)try{r=n("which bun",{encoding:"utf8"}).trim()}catch{}if(!r)return!0;let i=`
91
+ `);continue}let r=`wecom-${Date.now()}`,i={id:r,type:"wecom",enabled:!0,botId:o,secret:n,createdAt:new Date().toISOString()},c=this.getChannels();return c.push(i),this.saveChannels(c),console.log(`\u2705 \u6E20\u9053\u7ED1\u5B9A\u6210\u529F: ${r}
92
+ `),i}}finally{e.close()}}async testWecomConnection(e,t){let o=j.join(ze,"wecom"),n=j.join(o,"node_modules","@wecom","aibot-node-sdk");if(!q.existsSync(n))return!0;let s;try{({WSClient:s}=require(n))}catch{return this._testWecomConnectionSubprocess(e,t,n)}return this._runWecomClient(s,e,t)}_runWecomClient(e,t,o){return new Promise(n=>{let s=setTimeout(()=>{try{r.disconnect()}catch{}n(!1)},1e4),r=new e({botId:t,secret:o,maxReconnectAttempts:0,maxAuthFailureAttempts:0,logger:{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}}});r.on("authenticated",()=>{clearTimeout(s);try{r.disconnect()}catch{}n(!0)}),r.on("error",()=>{clearTimeout(s);try{r.disconnect()}catch{}n(!1)}),r.connect()})}_testWecomConnectionSubprocess(e,t,o){let{execSync:n,spawn:s}=require("child_process"),r;try{r=n("which node",{encoding:"utf8"}).trim()}catch{}if(!r)try{r=n("which bun",{encoding:"utf8"}).trim()}catch{}if(!r)return!0;let i=`
97
93
  const { WSClient } = require(${JSON.stringify(o)});
98
94
  const client = new WSClient({
99
95
  botId: ${JSON.stringify(e)}, secret: ${JSON.stringify(t)},
@@ -104,15 +100,15 @@ const t = setTimeout(() => { try { client.disconnect(); } catch {} process.exit(
104
100
  client.on("authenticated", () => { clearTimeout(t); try { client.disconnect(); } catch {} process.exit(0); });
105
101
  client.on("error", () => { clearTimeout(t); try { client.disconnect(); } catch {} process.exit(1); });
106
102
  client.connect();
107
- `;return new Promise(a=>{let l=s(r,["-e",i],{stdio:"ignore"}),d=setTimeout(()=>{l.kill(),a(!1)},12e3);l.on("close",u=>{clearTimeout(d),a(u===0)}),l.on("error",()=>{clearTimeout(d),a(!1)})})}async promptSelectChannel(e){return new Promise(t=>{let o=0,n=()=>{process.stdout.write("\x1B[?25l"),process.stdout.write(`
103
+ `;return new Promise(c=>{let a=s(r,["-e",i],{stdio:"ignore"}),d=setTimeout(()=>{a.kill(),c(!1)},12e3);a.on("close",u=>{clearTimeout(d),c(u===0)}),a.on("error",()=>{clearTimeout(d),c(!1)})})}async promptSelectChannel(e){return new Promise(t=>{let o=0,n=()=>{process.stdout.write("\x1B[?25l"),process.stdout.write(`
108
104
  \u8BF7\u9009\u62E9\u8981\u542F\u52A8\u7684\u6E20\u9053 (\u2191\u2193 \u79FB\u52A8, Enter \u786E\u8BA4):
109
105
 
110
- `),e.forEach((i,a)=>{let l=i.botId?Z(i.botId):"(\u672A\u914D\u7F6E)",d=`[${i.type}] ${i.name||i.id} botId: ${l}`;a===o?process.stdout.write(` \x1B[38;2;231;76;60m\u276F ${d}\x1B[0m
106
+ `),e.forEach((i,c)=>{let a=i.botId?W(i.botId):"(\u672A\u914D\u7F6E)",d=`[${i.type}] ${i.name||i.id} botId: ${a}`;c===o?process.stdout.write(` \x1B[38;2;231;76;60m\u276F ${d}\x1B[0m
111
107
  `):process.stdout.write(` ${d}
112
108
  `)}),process.stdout.write(`
113
109
  `)},s=()=>{let i=e.length+4;process.stdout.write(`\x1B[${i}A\x1B[0J`)};n(),process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.setEncoding("utf8");let r=i=>{i==="\x1B[A"||i==="\x1B[D"?(o=(o-1+e.length)%e.length,s(),n()):i==="\x1B[B"||i==="\x1B[C"?(o=(o+1)%e.length,s(),n()):i==="\r"||i===`
114
- `?(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdin.removeListener("data",r),process.stdout.write("\x1B[?25h"),t(e[o])):i===""&&(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdin.removeListener("data",r),process.stdout.write("\x1B[?25h"),t(null))};process.stdin.on("data",r)})}list(e){let t=this.getChannels();return e&&(t=t.filter(o=>o.type===e)),t.length?(this.printTable(t.map(o=>({id:o.id,type:o.type,name:o.name||"",enabled:o.enabled!==!1?"\u2713":"\u2717",botId:o.botId?Z(o.botId):"",allowFrom:(o.allowFrom??[]).join(", "),updatedAt:o.updatedAt||o.createdAt||""}))),0):(console.log(e?`\u6682\u65E0 ${e} \u6E20\u9053`:"\u6682\u65E0\u6E20\u9053\u7ED1\u5B9A"),0)}show(e){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053 ID"),1;let t=this.getChannels().find(o=>o.id===e);return t?(console.log(JSON.stringify(t,null,2)),0):(console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${e}`),1)}add(e,t){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053\u7C7B\u578B\uFF0C\u4F8B\u5982: coder channel add wecom --bot-id xxx --secret yyy"),1;if(!Ze.includes(e))return console.error(`\u274C \u4E0D\u652F\u6301\u7684\u6E20\u9053\u7C7B\u578B: ${e}\uFF0C\u652F\u6301: ${Ze.join(", ")}`),1;let o=t.indexOf("--id"),n=(o!==-1?t[o+1]:void 0)||`${e}-${Date.now()}`,s=this.getChannels();if(s.find(i=>i.id===n))return console.error(`\u274C \u6E20\u9053 ID \u5DF2\u5B58\u5728: ${n}`),1;let r={id:n,type:e,enabled:!0,createdAt:new Date().toISOString()};return this._applyArgs(r,t),s.push(r),this.saveChannels(s),console.log(`\u2705 \u6E20\u9053\u5DF2\u6DFB\u52A0: ${n} (${e})`),0}remove(e){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053 ID"),1;let t=this.getChannels(),o=t.findIndex(n=>n.id===e);return o===-1?(console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${e}`),1):(t.splice(o,1),this.saveChannels(t),console.log(`\u2705 \u6E20\u9053\u5DF2\u5220\u9664: ${e}`),0)}update(e,t){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053 ID"),1;let o=this.getChannels(),n=o.find(s=>s.id===e);return n?(t.includes("--enable")&&(n.enabled=!0),t.includes("--disable")&&(n.enabled=!1),this._applyArgs(n,t),n.updatedAt=new Date().toISOString(),this.saveChannels(o),console.log(`\u2705 \u6E20\u9053\u5DF2\u66F4\u65B0: ${e}`),0):(console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${e}`),1)}_applyArgs(e,t){let o=r=>{let i=t.indexOf(r);return i!==-1?t[i+1]:void 0},n=r=>{if(r&&r.startsWith("@")){let i=r.slice(1);try{return j.readFileSync(i,"utf8").trim()}catch{console.error(`\u274C \u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6: ${i}`);return}}return r},s=o("--name");if(s!==void 0&&(e.name=s),e.type==="wecom"){let r=n(o("--bot-id"));r!==void 0&&(e.botId=r);let i=n(o("--secret"));i!==void 0&&(e.secret=i);let a=o("--allow");a!==void 0&&(e.allowFrom=e.allowFrom??[],e.allowFrom.includes(a)||e.allowFrom.push(a));let l=o("--deny");l!==void 0&&(e.allowFrom=(e.allowFrom??[]).filter(d=>d!==l))}}printTable(e){if(!e.length)return;let t=Object.keys(e[0]),o=i=>[...String(i)].reduce((a,l)=>a+(l.charCodeAt(0)>127?2:1),0),n=(i,a)=>i+" ".repeat(Math.max(0,a-o(i))),s=t.map(i=>Math.max(o(i),...e.map(a=>o(String(a[i]||""))))),r=s.map(i=>"-".repeat(i)).join("-+-");console.log(t.map((i,a)=>n(i,s[a])).join(" | ")),console.log(r);for(let i of e)console.log(t.map((a,l)=>n(String(i[a]||""),s[l])).join(" | "))}showHelp(){console.log(["Usage: coder channel [subcommand] [options]","","Subcommands:"," (no subcommand) \u542F\u52A8 Claude\uFF08\u81EA\u52A8\u9009\u62E9\u6216\u4EA4\u4E92\u9009\u62E9\u6E20\u9053\uFF09"," --channel-id <id> \u542F\u52A8\u6307\u5B9A\u6E20\u9053"," list [type] \u5217\u51FA\u6E20\u9053"," show <id> \u67E5\u770B\u6E20\u9053\u8BE6\u60C5"," add <type> [options] \u6DFB\u52A0\u6E20\u9053"," update <id> [options] \u66F4\u65B0\u6E20\u9053"," remove <id> \u5220\u9664\u6E20\u9053","","Supported Channel Types:"," wecom \u4F01\u4E1A\u5FAE\u4FE1 AI Bot","","WeChat Work Options:"," --bot-id <botId> \u4F01\u4E1A\u5FAE\u4FE1 AI Bot ID"," --secret <secret> \u4F01\u4E1A\u5FAE\u4FE1 AI Bot Secret\uFF08\u660E\u6587\uFF0C\u4F1A\u8BB0\u5F55\u5230 shell \u5386\u53F2\uFF09"," --secret @<file> \u4ECE\u6587\u4EF6\u8BFB\u53D6 Secret\uFF0C\u907F\u514D\u6CC4\u9732\u5230 shell \u5386\u53F2"," --allow <userId> \u5C06\u7528\u6237\u52A0\u5165\u767D\u540D\u5355"," --deny <userId> \u5C06\u7528\u6237\u79FB\u51FA\u767D\u540D\u5355"," --enable / --disable \u542F\u7528\u6216\u7981\u7528\u6E20\u9053"," --id <id> \u81EA\u5B9A\u4E49\u6E20\u9053 ID\uFF08add \u65F6\u4F7F\u7528\uFF09"," --name <name> \u6E20\u9053\u663E\u793A\u540D\u79F0","","Examples:",' coder channel add wecom --bot-id xxx --secret yyy --name "\u4E3B\u6E20\u9053"'," coder channel add wecom --bot-id xxx --secret @~/.coder/secret.txt",' coder channel add wecom --bot-id zzz --secret www --name "\u5907\u7528\u6E20\u9053"'," coder channel update wecom-xxx --allow zhangsan"," coder channel list \u5217\u51FA\u6240\u6709\u6E20\u9053"," coder channel \u591A\u6E20\u9053\u65F6\u4EA4\u4E92\u9009\u62E9"," coder channel --channel-id wecom-xxx \u76F4\u63A5\u542F\u52A8\u6307\u5B9A\u6E20\u9053","","\u914D\u7F6E\u6587\u4EF6: ~/.coder/config.json"].join(`
115
- `))}};et.exports=ue});var nt=k((No,ot)=>{var Xt=require("http"),me=class{constructor(e={}){this.port=e.port||9380,this.timeout=e.timeout||300*1e3,this.server=null,this.timeoutId=null}validateTokenFormat(e){if(!e||typeof e!="string")return!1;let t=e.split(".");if(t.length!==2)return!1;let[o,n]=t;return o&&o.length>0&&n&&n.length>0}async waitForCallback(e){return new Promise((t,o)=>{let n=!1;this.server=Xt.createServer((s,r)=>{let i=new URL(s.url,`http://localhost:${this.port}`);if(i.pathname==="/callback"){let a=i.searchParams.get("token"),l=i.searchParams.get("state"),d=i.searchParams.get("error");if(d){r.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
110
+ `?(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdin.removeListener("data",r),process.stdout.write("\x1B[?25h"),t(e[o])):i===""&&(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdin.removeListener("data",r),process.stdout.write("\x1B[?25h"),t(null))};process.stdin.on("data",r)})}list(e){let t=this.getChannels();return e&&(t=t.filter(o=>o.type===e)),t.length?(this.printTable(t.map(o=>({id:o.id,type:o.type,name:o.name||"",enabled:o.enabled!==!1?"\u2713":"\u2717",botId:o.botId?W(o.botId):"",allowFrom:(o.allowFrom??[]).join(", "),updatedAt:o.updatedAt||o.createdAt||""}))),0):(console.log(e?`\u6682\u65E0 ${e} \u6E20\u9053`:"\u6682\u65E0\u6E20\u9053\u7ED1\u5B9A"),0)}show(e){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053 ID"),1;let t=this.getChannels().find(o=>o.id===e);return t?(console.log(JSON.stringify(t,null,2)),0):(console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${e}`),1)}add(e,t){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053\u7C7B\u578B\uFF0C\u4F8B\u5982: coder channel add wecom --bot-id xxx --secret yyy"),1;if(!Ke.includes(e))return console.error(`\u274C \u4E0D\u652F\u6301\u7684\u6E20\u9053\u7C7B\u578B: ${e}\uFF0C\u652F\u6301: ${Ke.join(", ")}`),1;let o=t.indexOf("--id"),n=(o!==-1?t[o+1]:void 0)||`${e}-${Date.now()}`,s=this.getChannels();if(s.find(i=>i.id===n))return console.error(`\u274C \u6E20\u9053 ID \u5DF2\u5B58\u5728: ${n}`),1;let r={id:n,type:e,enabled:!0,createdAt:new Date().toISOString()};return this._applyArgs(r,t),s.push(r),this.saveChannels(s),console.log(`\u2705 \u6E20\u9053\u5DF2\u6DFB\u52A0: ${n} (${e})`),0}remove(e){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053 ID"),1;let t=this.getChannels(),o=t.findIndex(n=>n.id===e);return o===-1?(console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${e}`),1):(t.splice(o,1),this.saveChannels(t),console.log(`\u2705 \u6E20\u9053\u5DF2\u5220\u9664: ${e}`),0)}update(e,t){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053 ID"),1;let o=this.getChannels(),n=o.find(s=>s.id===e);return n?(t.includes("--enable")&&(n.enabled=!0),t.includes("--disable")&&(n.enabled=!1),this._applyArgs(n,t),n.updatedAt=new Date().toISOString(),this.saveChannels(o),console.log(`\u2705 \u6E20\u9053\u5DF2\u66F4\u65B0: ${e}`),0):(console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${e}`),1)}_applyArgs(e,t){let o=r=>{let i=t.indexOf(r);return i!==-1?t[i+1]:void 0},n=r=>{if(r&&r.startsWith("@")){let i=r.slice(1);try{return q.readFileSync(i,"utf8").trim()}catch{console.error(`\u274C \u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6: ${i}`);return}}return r},s=o("--name");if(s!==void 0&&(e.name=s),e.type==="wecom"){let r=n(o("--bot-id"));r!==void 0&&(e.botId=r);let i=n(o("--secret"));i!==void 0&&(e.secret=i);let c=o("--allow");c!==void 0&&(e.allowFrom=e.allowFrom??[],e.allowFrom.includes(c)||e.allowFrom.push(c));let a=o("--deny");a!==void 0&&(e.allowFrom=(e.allowFrom??[]).filter(d=>d!==a))}}printTable(e){if(!e.length)return;let t=Object.keys(e[0]),o=i=>[...String(i)].reduce((c,a)=>c+(a.charCodeAt(0)>127?2:1),0),n=(i,c)=>i+" ".repeat(Math.max(0,c-o(i))),s=t.map(i=>Math.max(o(i),...e.map(c=>o(String(c[i]||""))))),r=s.map(i=>"-".repeat(i)).join("-+-");console.log(t.map((i,c)=>n(i,s[c])).join(" | ")),console.log(r);for(let i of e)console.log(t.map((c,a)=>n(String(i[c]||""),s[a])).join(" | "))}showHelp(){console.log(["Usage: coder channel [subcommand] [options]","","Subcommands:"," (no subcommand) \u542F\u52A8 Claude\uFF08\u81EA\u52A8\u9009\u62E9\u6216\u4EA4\u4E92\u9009\u62E9\u6E20\u9053\uFF09"," --channel-id <id> \u542F\u52A8\u6307\u5B9A\u6E20\u9053"," list [type] \u5217\u51FA\u6E20\u9053"," show <id> \u67E5\u770B\u6E20\u9053\u8BE6\u60C5"," add <type> [options] \u6DFB\u52A0\u6E20\u9053"," update <id> [options] \u66F4\u65B0\u6E20\u9053"," remove <id> \u5220\u9664\u6E20\u9053","","Supported Channel Types:"," wecom \u4F01\u4E1A\u5FAE\u4FE1 AI Bot","","WeChat Work Options:"," --bot-id <botId> \u4F01\u4E1A\u5FAE\u4FE1 AI Bot ID"," --secret <secret> \u4F01\u4E1A\u5FAE\u4FE1 AI Bot Secret\uFF08\u660E\u6587\uFF0C\u4F1A\u8BB0\u5F55\u5230 shell \u5386\u53F2\uFF09"," --secret @<file> \u4ECE\u6587\u4EF6\u8BFB\u53D6 Secret\uFF0C\u907F\u514D\u6CC4\u9732\u5230 shell \u5386\u53F2"," --allow <userId> \u5C06\u7528\u6237\u52A0\u5165\u767D\u540D\u5355"," --deny <userId> \u5C06\u7528\u6237\u79FB\u51FA\u767D\u540D\u5355"," --enable / --disable \u542F\u7528\u6216\u7981\u7528\u6E20\u9053"," --id <id> \u81EA\u5B9A\u4E49\u6E20\u9053 ID\uFF08add \u65F6\u4F7F\u7528\uFF09"," --name <name> \u6E20\u9053\u663E\u793A\u540D\u79F0","","Examples:",' coder channel add wecom --bot-id xxx --secret yyy --name "\u4E3B\u6E20\u9053"'," coder channel add wecom --bot-id xxx --secret @~/.coder/secret.txt",' coder channel add wecom --bot-id zzz --secret www --name "\u5907\u7528\u6E20\u9053"'," coder channel update wecom-xxx --allow zhangsan"," coder channel list \u5217\u51FA\u6240\u6709\u6E20\u9053"," coder channel \u591A\u6E20\u9053\u65F6\u4EA4\u4E92\u9009\u62E9"," coder channel --channel-id wecom-xxx \u76F4\u63A5\u542F\u52A8\u6307\u5B9A\u6E20\u9053","","\u914D\u7F6E\u6587\u4EF6: ~/.coder/config.json"].join(`
111
+ `))}};Ye.exports=ae});var Qe=S((Co,Ze)=>{var Nt=require("http"),de=class{constructor(e={}){this.port=e.port||9380,this.timeout=e.timeout||300*1e3,this.server=null,this.timeoutId=null}validateTokenFormat(e){if(!e||typeof e!="string")return!1;let t=e.split(".");if(t.length!==2)return!1;let[o,n]=t;return o&&o.length>0&&n&&n.length>0}async waitForCallback(e){return new Promise((t,o)=>{let n=!1;this.server=Nt.createServer((s,r)=>{let i=new URL(s.url,`http://localhost:${this.port}`);if(i.pathname==="/callback"){let c=i.searchParams.get("token"),a=i.searchParams.get("state"),d=i.searchParams.get("error");if(d){r.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
116
112
  <!DOCTYPE html>
117
113
  <html>
118
114
  <head>
@@ -137,7 +133,7 @@ client.connect();
137
133
  </div>
138
134
  </body>
139
135
  </html>
140
- `),n||(n=!0,this.cleanup(),o(new Error(`OAuth error: ${d}`)));return}if(l!==e){r.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
136
+ `),n||(n=!0,this.cleanup(),o(new Error(`OAuth error: ${d}`)));return}if(a!==e){r.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
141
137
  <!DOCTYPE html>
142
138
  <html>
143
139
  <head>
@@ -159,7 +155,7 @@ client.connect();
159
155
  </div>
160
156
  </body>
161
157
  </html>
162
- `),n||(n=!0,this.cleanup(),o(new Error("Invalid state parameter - possible CSRF attack")));return}if(!a){r.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
158
+ `),n||(n=!0,this.cleanup(),o(new Error("Invalid state parameter - possible CSRF attack")));return}if(!c){r.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
163
159
  <!DOCTYPE html>
164
160
  <html>
165
161
  <head>
@@ -181,7 +177,7 @@ client.connect();
181
177
  </div>
182
178
  </body>
183
179
  </html>
184
- `),n||(n=!0,this.cleanup(),o(new Error("No token received from OAuth callback")));return}if(!this.validateTokenFormat(a)){r.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
180
+ `),n||(n=!0,this.cleanup(),o(new Error("No token received from OAuth callback")));return}if(!this.validateTokenFormat(c)){r.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
185
181
  <!DOCTYPE html>
186
182
  <html>
187
183
  <head>
@@ -205,7 +201,7 @@ client.connect();
205
201
  </div>
206
202
  </body>
207
203
  </html>
208
- `),n||(n=!0,this.cleanup(),o(new Error("Invalid token format - expected ak.sk format")));return}let[u,p]=a.split(".");r.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
204
+ `),n||(n=!0,this.cleanup(),o(new Error("Invalid token format - expected ak.sk format")));return}let[u,m]=c.split(".");r.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),r.end(`
209
205
  <!DOCTYPE html>
210
206
  <html>
211
207
  <head>
@@ -237,7 +233,7 @@ client.connect();
237
233
  </script>
238
234
  </body>
239
235
  </html>
240
- `),n||(n=!0,this.cleanup(),t({ak:u,sk:p}))}else r.writeHead(404,{"Content-Type":"text/plain"}),r.end("Not Found")}),this.server.on("error",s=>{if(s.code==="EADDRINUSE"){if(this.port++,this.port>9390){n||(n=!0,o(new Error("Could not find available port for OAuth callback server")));return}this.server.close(),this.server.listen(this.port)}else n||(n=!0,this.cleanup(),o(s))}),this.server.listen(this.port,()=>{process.env.CODEV_DEBUG&&console.log(`OAuth callback server listening on port ${this.port}`)}),this.timeoutId=setTimeout(()=>{n||(n=!0,this.cleanup(),o(new Error("OAuth login timeout - no response received within 5 minutes")))},this.timeout)})}getCallbackUrl(){return`http://localhost:${this.port}/callback`}cleanup(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null),this.server&&(this.server.close(),this.server=null)}};ot.exports=me});var st=k((Ro,rt)=>{var Zt=require("crypto"),Qt=nt(),pe=class{constructor(e={}){this.baseUrl=e.baseUrl||"https://makecoder.com",this.callbackServer=null}generateState(){return Zt.randomBytes(16).toString("hex")}buildAuthorizationUrl(e,t){let o=new URLSearchParams({redirect_uri:e,state:t,response_type:"token"});return`${this.baseUrl}/oauth/authorize?${o.toString()}`}async startOAuthFlow(){let e=this.generateState();this.callbackServer=new Qt;let t=this.callbackServer.getCallbackUrl(),o=this.buildAuthorizationUrl(t,e),n=!1;try{let r=(await import("open")).default;await r(o),n=!0}catch(r){process.env.CODEV_DEBUG&&console.error("Browser open error:",r)}let s=this.callbackServer.waitForCallback(e);return{authUrl:o,waitPromise:s,browserOpened:n}}async login(){try{let{authUrl:e,waitPromise:t,browserOpened:o}=await this.startOAuthFlow();console.log(`
236
+ `),n||(n=!0,this.cleanup(),t({ak:u,sk:m}))}else r.writeHead(404,{"Content-Type":"text/plain"}),r.end("Not Found")}),this.server.on("error",s=>{if(s.code==="EADDRINUSE"){if(this.port++,this.port>9390){n||(n=!0,o(new Error("Could not find available port for OAuth callback server")));return}this.server.close(),this.server.listen(this.port)}else n||(n=!0,this.cleanup(),o(s))}),this.server.listen(this.port,()=>{process.env.CODEV_DEBUG&&console.log(`OAuth callback server listening on port ${this.port}`)}),this.timeoutId=setTimeout(()=>{n||(n=!0,this.cleanup(),o(new Error("OAuth login timeout - no response received within 5 minutes")))},this.timeout)})}getCallbackUrl(){return`http://localhost:${this.port}/callback`}cleanup(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null),this.server&&(this.server.close(),this.server=null)}};Ze.exports=de});var tt=S((_o,et)=>{var Rt=require("crypto"),Ft=Qe(),ue=class{constructor(e={}){this.baseUrl=e.baseUrl||"https://makecoder.com",this.callbackServer=null}generateState(){return Rt.randomBytes(16).toString("hex")}buildAuthorizationUrl(e,t){let o=new URLSearchParams({redirect_uri:e,state:t,response_type:"token"});return`${this.baseUrl}/oauth/authorize?${o.toString()}`}async startOAuthFlow(){let e=this.generateState();this.callbackServer=new Ft;let t=this.callbackServer.getCallbackUrl(),o=this.buildAuthorizationUrl(t,e),n=!1;try{let r=(await import("open")).default;await r(o),n=!0}catch(r){process.env.CODEV_DEBUG&&console.error("Browser open error:",r)}let s=this.callbackServer.waitForCallback(e);return{authUrl:o,waitPromise:s,browserOpened:n}}async login(){try{let{authUrl:e,waitPromise:t,browserOpened:o}=await this.startOAuthFlow();console.log(`
241
237
  \u{1F510} \u5F00\u59CB OAuth \u767B\u5F55\u6D41\u7A0B...
242
238
  `),console.log(`\u{1F4CB} \u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u767B\u5F55
243
239
  `),console.log(`\u{1F310} \u6388\u6743\u5730\u5740: ${e}
@@ -245,19 +241,19 @@ client.connect();
245
241
  `),o||console.warn("\u26A0\uFE0F \u65E0\u6CD5\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668,\u8BF7\u624B\u52A8\u590D\u5236\u4E0A\u8FF0\u94FE\u63A5\u5230\u6D4F\u89C8\u5668\u6253\u5F00");let n=await t;return console.log(`\u2705 API Key \u83B7\u53D6\u6210\u529F!
246
242
  `),n}catch(e){throw console.error(`
247
243
  \u274C OAuth \u767B\u5F55\u5931\u8D25: ${e.message}
248
- `),e}finally{this.callbackServer&&this.callbackServer.cleanup()}}cleanup(){this.callbackServer&&this.callbackServer.cleanup()}};rt.exports=pe});var at=k((Mo,ct)=>{var it=require("readline"),eo=st(),he=class{constructor(e){this.argParser=e}async handle(e){let{authSubcommand:t,authRemainingArgs:o=[],codevServer:n}=e;if(t==="--help"||t===void 0)return this.showHelp(),0;switch(t){case"login":return await this.handleLogin(o,n);case"logout":return this.logout();case"status":return await this.status();default:return this.showHelp(),1}}async handleLogin(e,t){let o=null;for(let n=0;n<e.length;n++)if(e[n]==="--apikey"){o=e[n+1]||null;break}return o?this.loginWithApiKey(o):await this.dualLogin(t)}loginWithApiKey(e){let t=e.indexOf(".");if(t<=0||t===e.length-1)return console.error("\u274C API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"),1;let o=e.substring(0,t).trim(),n=e.substring(t+1).trim();return!o||!n?(console.error("\u274C API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"),1):this.argParser.saveAuthToConfig(e.trim())?(console.log(`\u2705 API Key \u5DF2\u4FDD\u5B58\u5230 ${this.argParser.configPath}`),0):(console.error("\u274C \u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650"),1)}async dualLogin(e){let t=new eo({baseUrl:"https://makecoder.com"}),o,n,s;try{({authUrl:o,waitPromise:n,browserOpened:s}=await t.startOAuthFlow())}catch(l){return console.error(`\u274C \u542F\u52A8\u767B\u5F55\u6D41\u7A0B\u5931\u8D25: ${l.message}`),console.log(`
244
+ `),e}finally{this.callbackServer&&this.callbackServer.cleanup()}}cleanup(){this.callbackServer&&this.callbackServer.cleanup()}};et.exports=ue});var rt=S((Eo,nt)=>{var ot=require("readline"),Mt=tt(),me=class{constructor(e){this.argParser=e}async handle(e){let{authSubcommand:t,authRemainingArgs:o=[],codevServer:n}=e;if(t==="--help"||t===void 0)return this.showHelp(),0;switch(t){case"login":return await this.handleLogin(o,n);case"logout":return this.logout();case"status":return await this.status();default:return this.showHelp(),1}}async handleLogin(e,t){let o=null;for(let n=0;n<e.length;n++)if(e[n]==="--apikey"){o=e[n+1]||null;break}return o?this.loginWithApiKey(o):await this.dualLogin(t)}loginWithApiKey(e){let t=e.indexOf(".");if(t<=0||t===e.length-1)return console.error("\u274C API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"),1;let o=e.substring(0,t).trim(),n=e.substring(t+1).trim();return!o||!n?(console.error("\u274C API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"),1):this.argParser.saveAuthToConfig(e.trim())?(console.log(`\u2705 API Key \u5DF2\u4FDD\u5B58\u5230 ${this.argParser.configPath}`),0):(console.error("\u274C \u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650"),1)}async dualLogin(e){let t=new Mt({baseUrl:"https://makecoder.com"}),o,n,s;try{({authUrl:o,waitPromise:n,browserOpened:s}=await t.startOAuthFlow())}catch(a){return console.error(`\u274C \u542F\u52A8\u767B\u5F55\u6D41\u7A0B\u5931\u8D25: ${a.message}`),console.log(`
249
245
  \u8BF7\u624B\u52A8\u8F93\u5165 API Key\uFF08\u83B7\u53D6\u5730\u5740: https://makecoder.com/my/apikeys\uFF09
250
246
  `),await this.terminalOnlyLogin()}console.log(`
251
247
  \u{1F510} \u767B\u5F55 MakeCoder
252
248
  `),console.log(s?" \u65B9\u5F0F\u4E00\uFF1A\u6D4F\u89C8\u5668\u5DF2\u6253\u5F00\u6388\u6743\u9875\u9762\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u767B\u5F55":" \u65B9\u5F0F\u4E00\uFF1A\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u4EE5\u4E0B\u5730\u5740\u5B8C\u6210\u767B\u5F55"),console.log(` ${o}
253
249
  `),console.log(` \u65B9\u5F0F\u4E8C\uFF1A\u7C98\u8D34 API Key\uFF08\u83B7\u53D6\u5730\u5740: https://makecoder.com/my/apikeys\uFF09
254
- `);let r=it.createInterface({input:process.stdin,output:process.stdout}),i=new Promise((l,d)=>{r.question("\u8BF7\u8F93\u5165 API Key\uFF08\u7559\u7A7A\u5219\u7B49\u5F85\u6D4F\u89C8\u5668\u767B\u5F55\uFF09: ",u=>{let p=u.trim();if(!p){d(new Error("__empty_input__"));return}let m=p.indexOf(".");if(m<=0||m===p.length-1){d(new Error("API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"));return}l(p)})}),a;try{a=await Promise.race([n.then(l=>(r.close(),`${l.ak}.${l.sk}`)),i.then(l=>(t.cleanup(),l))])}catch(l){if(l.message==="__empty_input__"){console.log(`
250
+ `);let r=ot.createInterface({input:process.stdin,output:process.stdout}),i=new Promise((a,d)=>{r.question("\u8BF7\u8F93\u5165 API Key\uFF08\u7559\u7A7A\u5219\u7B49\u5F85\u6D4F\u89C8\u5668\u767B\u5F55\uFF09: ",u=>{let m=u.trim();if(!m){d(new Error("__empty_input__"));return}let p=m.indexOf(".");if(p<=0||p===m.length-1){d(new Error("API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"));return}a(m)})}),c;try{c=await Promise.race([n.then(a=>(r.close(),`${a.ak}.${a.sk}`)),i.then(a=>(t.cleanup(),a))])}catch(a){if(a.message==="__empty_input__"){console.log(`
255
251
  \u23F3 \u7B49\u5F85\u6D4F\u89C8\u5668\u6388\u6743\u5B8C\u6210...\uFF08\u8D85\u65F6\u65F6\u95F4: 5\u5206\u949F\uFF09
256
- `);try{let d=await n;a=`${d.ak}.${d.sk}`}catch(d){return t.cleanup(),console.error(`
252
+ `);try{let d=await n;c=`${d.ak}.${d.sk}`}catch(d){return t.cleanup(),console.error(`
257
253
  \u274C \u767B\u5F55\u5931\u8D25: ${d.message}`),1}}else return r.close(),t.cleanup(),console.error(`
258
- \u274C ${l.message}`),1}return t.cleanup(),this.argParser.saveAuthToConfig(a)?(console.log(`
254
+ \u274C ${a.message}`),1}return t.cleanup(),this.argParser.saveAuthToConfig(c)?(console.log(`
259
255
  \u2705 \u767B\u5F55\u6210\u529F\uFF01API Key \u5DF2\u4FDD\u5B58\u5230 ${this.argParser.configPath}`),0):(console.error(`
260
- \u26A0\uFE0F \u767B\u5F55\u6210\u529F\u4F46\u4FDD\u5B58\u914D\u7F6E\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650`),1)}async terminalOnlyLogin(){let e=it.createInterface({input:process.stdin,output:process.stdout});return new Promise(t=>{e.question("\u8BF7\u8F93\u5165 API Key: ",o=>{e.close();let n=o.trim();if(!n){console.error("\u274C \u672A\u8F93\u5165 API Key"),t(1);return}let s=n.indexOf(".");if(s<=0||s===n.length-1){console.error("\u274C API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"),t(1);return}this.argParser.saveAuthToConfig(n)?(console.log(`\u2705 \u767B\u5F55\u6210\u529F\uFF01API Key \u5DF2\u4FDD\u5B58\u5230 ${this.argParser.configPath}`),t(0)):(console.error("\u274C \u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650"),t(1))})})}logout(){return this.argParser.clearAuthFromConfig()?(console.log("\u2705 \u5DF2\u9000\u51FA\u767B\u5F55\uFF0CAPI Key \u5DF2\u6E05\u9664"),0):(console.error("\u274C \u9000\u51FA\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650"),1)}async status(){let e=this.argParser.loadConfig(),t=this.argParser.getApiKeyFromConfig(e);if(!t)return console.log("\u274C \u672A\u767B\u5F55"),console.log(" \u8FD0\u884C coder auth login \u5F00\u59CB\u767B\u5F55"),0;let o=t.substring(0,4)+"****";console.log(`\u2705 \u5DF2\u767B\u5F55 (${o})`),console.log(` \u914D\u7F6E\u6587\u4EF6: ${this.argParser.configPath}`);try{let n=require("https"),s=require("http"),r=new URL("https://makecoder.com/bigapis/auth/v1/users/me"),i=r.protocol==="https:"?n:s,a=await new Promise((l,d)=>{let u=i.request(r,{method:"GET",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},timeout:5e3},p=>{let m="";p.on("data",f=>{m+=f}),p.on("end",()=>{if(p.statusCode===200)try{l(JSON.parse(m))}catch{d(new Error("\u89E3\u6790\u54CD\u5E94\u5931\u8D25"))}else p.statusCode===401?d(new Error("unauthorized")):d(new Error(`HTTP ${p.statusCode}`))})});u.on("error",d),u.on("timeout",()=>{u.destroy(),d(new Error("\u8BF7\u6C42\u8D85\u65F6"))}),u.end()});a.data?.id&&console.log(` \u7528\u6237 ID: ${a.data.id}`),a.data?.username&&console.log(` \u7528\u6237\u540D: ${a.data.username}`)}catch(n){n.message==="unauthorized"&&console.log(" \u26A0\uFE0F API Key \u53EF\u80FD\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55: coder auth login")}return 0}showHelp(){console.log(`
256
+ \u26A0\uFE0F \u767B\u5F55\u6210\u529F\u4F46\u4FDD\u5B58\u914D\u7F6E\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650`),1)}async terminalOnlyLogin(){let e=ot.createInterface({input:process.stdin,output:process.stdout});return new Promise(t=>{e.question("\u8BF7\u8F93\u5165 API Key: ",o=>{e.close();let n=o.trim();if(!n){console.error("\u274C \u672A\u8F93\u5165 API Key"),t(1);return}let s=n.indexOf(".");if(s<=0||s===n.length-1){console.error("\u274C API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"),t(1);return}this.argParser.saveAuthToConfig(n)?(console.log(`\u2705 \u767B\u5F55\u6210\u529F\uFF01API Key \u5DF2\u4FDD\u5B58\u5230 ${this.argParser.configPath}`),t(0)):(console.error("\u274C \u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650"),t(1))})})}logout(){return this.argParser.clearAuthFromConfig()?(console.log("\u2705 \u5DF2\u9000\u51FA\u767B\u5F55\uFF0CAPI Key \u5DF2\u6E05\u9664"),0):(console.error("\u274C \u9000\u51FA\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u6743\u9650"),1)}async status(){let e=this.argParser.loadConfig(),t=this.argParser.getApiKeyFromConfig(e);if(!t)return console.log("\u274C \u672A\u767B\u5F55"),console.log(" \u8FD0\u884C coder auth login \u5F00\u59CB\u767B\u5F55"),0;let o=t.substring(0,4)+"****";console.log(`\u2705 \u5DF2\u767B\u5F55 (${o})`),console.log(` \u914D\u7F6E\u6587\u4EF6: ${this.argParser.configPath}`);try{let n=require("https"),s=require("http"),r=new URL("https://makecoder.com/bigapis/auth/v1/users/me"),i=r.protocol==="https:"?n:s,c=await new Promise((a,d)=>{let u=i.request(r,{method:"GET",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},timeout:5e3},m=>{let p="";m.on("data",h=>{p+=h}),m.on("end",()=>{if(m.statusCode===200)try{a(JSON.parse(p))}catch{d(new Error("\u89E3\u6790\u54CD\u5E94\u5931\u8D25"))}else m.statusCode===401?d(new Error("unauthorized")):d(new Error(`HTTP ${m.statusCode}`))})});u.on("error",d),u.on("timeout",()=>{u.destroy(),d(new Error("\u8BF7\u6C42\u8D85\u65F6"))}),u.end()});c.data?.id&&console.log(` \u7528\u6237 ID: ${c.data.id}`),c.data?.username&&console.log(` \u7528\u6237\u540D: ${c.data.username}`)}catch(n){n.message==="unauthorized"&&console.log(" \u26A0\uFE0F API Key \u53EF\u80FD\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55: coder auth login")}return 0}showHelp(){console.log(`
261
257
  \u7528\u6CD5:
262
258
  coder auth <command>
263
259
 
@@ -276,41 +272,38 @@ client.connect();
276
272
  coder auth status # \u67E5\u770B\u767B\u5F55\u72B6\u6001
277
273
 
278
274
  \u83B7\u53D6 API Key: https://makecoder.com/my/apikeys
279
- `)}};ct.exports=he});var dt=k((Fo,lt)=>{var fe=require("crypto"),{URL:to}=require("url"),ge=class{static generateSignature(e,t,o,n){try{let s=new to(e),r=Buffer.from(s.pathname),i=Buffer.from(r),a=t?typeof t=="string"?Buffer.from(t):Buffer.from(JSON.stringify(t)):Buffer.alloc(0),l=Buffer.concat([i,a,Buffer.from(n)]),d=fe.createHmac("sha256",o);return d.update(l),d.digest("hex")}catch(s){throw new Error(`Failed to generate signature: ${s.message}`)}}static validateSignature(e,t,o,n,s){return this.generateSignature(e,t,o,n)===s}static generateTimestamp(){return Date.now().toString()}static generateStrongPassword(e=16){let t="abcdefghijkmnpqrstuvwxyz",o="ABCDEFGHJKLMNPQRSTUVWXYZ",n="23456789",s="!@#$%^&*-_=+",r=t+o+n+s;e<8&&(e=8);let i=l=>l[fe.randomBytes(1)[0]%l.length],a=[i(t),i(o),i(n),i(s)];for(;a.length<e;)a.push(i(r));for(let l=a.length-1;l>0;l--){let d=fe.randomBytes(1)[0]%(l+1);[a[l],a[d]]=[a[d],a[l]]}return a.join("")}};lt.exports=ge});var pt=k((Jo,mt)=>{var oo=require("https"),{URL:no}=require("url"),H=require("fs"),U=require("path"),ro=dt(),so="https://makecoder.com/bigapis/auth/v1",io="https://makecoder.com/bigapis/kbb2/v1",Ie=class{constructor(e){this.argParser=e||null}request(e,t,o,n,s){return new Promise((r,i)=>{let a=s||so,l=new no(`${a}${t}`),d={"Content-Type":"application/json",Authorization:`Bearer ${o}`},u=null;n!=null&&(u=JSON.stringify(n),d["Content-Length"]=Buffer.byteLength(u));let p={hostname:l.hostname,port:l.port||443,path:l.pathname+l.search,method:e,headers:d},m=oo.request(p,f=>{let y="";f.on("data",g=>y+=g),f.on("end",()=>r({status:f.statusCode,body:y}))});m.on("error",i),u&&m.write(u),m.end()})}parseJson(e){try{return JSON.parse(e)}catch{return null}}exitCodeForStatus(e){return e===401?2:e===403?5:e===404?4:e===409?6:1}parseOutputFlags(e){let t={json:!1,quiet:!1,field:null},o=[];for(let n=0;n<e.length;n++){let s=e[n];if(s==="--json"){t.json=!0;continue}if(s==="--quiet"){t.quiet=!0;continue}if(s!=="--no-color"){if(s==="--field"){t.field=e[n+1],n++;continue}o.push(s)}}return{out:t,remaining:o}}async handle({teamSubcommand:e,teamArg:t,teamRemainingArgs:o,apikey:n}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;let s=n;if(!s)return console.error("\u274C 2: \u672A\u767B\u5F55\uFF0C\u8BF7\u5148\u8FD0\u884C coder auth login"),2;let r=o||[];return e==="list"||e==="ls"?await this.list(r,s):e==="current"?await this.current(r,s):e==="use"?await this.use(t,r,s):e==="info"?await this.info(t,r,s):e==="members"?await this.members(t,r,s):e==="member-get"?await this.memberGet(t,r,s):e==="search-member"?await this.searchMember(t,r,s):e==="member-create"?await this.memberCreate(t,r,s):e==="member-delete"?await this.memberDelete(t,r,s):e==="member-update"?await this.memberUpdate(t,r,s):e==="set-points"?await this.setPoints(t,r,s):(console.error(`\u274C 3: \u672A\u77E5\u5B50\u547D\u4EE4: ${e}`),this.showHelp(),3)}async list(e,t){let{out:o}=this.parseOutputFlags(e),s=`/team?constraints=${encodeURIComponent(JSON.stringify({filter_is_joined:!0}))}&page=1&size=200`,r;try{r=await this.request("GET",s,t)}catch(d){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${d.message}`),1}if(r.status!==200)return console.error(`\u274C ${this.exitCodeForStatus(r.status)}: HTTP ${r.status}`),r.body&&console.error(r.body),this.exitCodeForStatus(r.status);let i=this.parseJson(r.body);if(!i||!i.data)return console.error("\u274C 1: \u54CD\u5E94\u89E3\u6790\u5931\u8D25"),1;let a=i.data.items||[];if(o.json){let d={items:a,total:i.data.total??a.length};if(o.field){let u=P(d,o.field);process.stdout.write(A(u)+`
275
+ `)}};nt.exports=me});var it=S((Do,st)=>{var pe=require("crypto"),{URL:Jt}=require("url"),he=class{static generateSignature(e,t,o,n){try{let s=new Jt(e),r=Buffer.from(s.pathname),i=Buffer.from(r),c=t?typeof t=="string"?Buffer.from(t):Buffer.from(JSON.stringify(t)):Buffer.alloc(0),a=Buffer.concat([i,c,Buffer.from(n)]),d=pe.createHmac("sha256",o);return d.update(a),d.digest("hex")}catch(s){throw new Error(`Failed to generate signature: ${s.message}`)}}static validateSignature(e,t,o,n,s){return this.generateSignature(e,t,o,n)===s}static generateTimestamp(){return Date.now().toString()}static generateStrongPassword(e=16){let t="abcdefghijkmnpqrstuvwxyz",o="ABCDEFGHJKLMNPQRSTUVWXYZ",n="23456789",s="!@#$%^&*-_=+",r=t+o+n+s;e<8&&(e=8);let i=a=>a[pe.randomBytes(1)[0]%a.length],c=[i(t),i(o),i(n),i(s)];for(;c.length<e;)c.push(i(r));for(let a=c.length-1;a>0;a--){let d=pe.randomBytes(1)[0]%(a+1);[c[a],c[d]]=[c[d],c[a]]}return c.join("")}};st.exports=he});var lt=S((Oo,ct)=>{var Gt=require("https"),{URL:Vt}=require("url"),M=require("fs"),B=require("path"),Ht=it(),zt="https://makecoder.com/bigapis/auth/v1",Kt="https://makecoder.com/bigapis/kbb2/v1",be=class{constructor(e){this.argParser=e||null}request(e,t,o,n,s){return new Promise((r,i)=>{let c=s||zt,a=new Vt(`${c}${t}`),d={"Content-Type":"application/json",Authorization:`Bearer ${o}`},u=null;n!=null&&(u=JSON.stringify(n),d["Content-Length"]=Buffer.byteLength(u));let m={hostname:a.hostname,port:a.port||443,path:a.pathname+a.search,method:e,headers:d},p=Gt.request(m,h=>{let f="";h.on("data",g=>f+=g),h.on("end",()=>r({status:h.statusCode,body:f}))});p.on("error",i),u&&p.write(u),p.end()})}parseJson(e){try{return JSON.parse(e)}catch{return null}}exitCodeForStatus(e){return e===401?2:e===403?5:e===404?4:e===409?6:1}parseOutputFlags(e){let t={json:!1,quiet:!1,field:null},o=[];for(let n=0;n<e.length;n++){let s=e[n];if(s==="--json"){t.json=!0;continue}if(s==="--quiet"){t.quiet=!0;continue}if(s!=="--no-color"){if(s==="--field"){t.field=e[n+1],n++;continue}o.push(s)}}return{out:t,remaining:o}}async handle({teamSubcommand:e,teamArg:t,teamRemainingArgs:o,apikey:n}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;let s=n;if(!s)return console.error("\u274C 2: \u672A\u767B\u5F55\uFF0C\u8BF7\u5148\u8FD0\u884C coder auth login"),2;let r=o||[];return e==="list"||e==="ls"?await this.list(r,s):e==="current"?await this.current(r,s):e==="use"?await this.use(t,r,s):e==="info"?await this.info(t,r,s):e==="members"?await this.members(t,r,s):e==="member-get"?await this.memberGet(t,r,s):e==="search-member"?await this.searchMember(t,r,s):e==="member-create"?await this.memberCreate(t,r,s):e==="member-delete"?await this.memberDelete(t,r,s):e==="member-update"?await this.memberUpdate(t,r,s):e==="set-points"?await this.setPoints(t,r,s):(console.error(`\u274C 3: \u672A\u77E5\u5B50\u547D\u4EE4: ${e}`),this.showHelp(),3)}async list(e,t){let{out:o}=this.parseOutputFlags(e),s=`/team?constraints=${encodeURIComponent(JSON.stringify({filter_is_joined:!0}))}&page=1&size=200`,r;try{r=await this.request("GET",s,t)}catch(d){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${d.message}`),1}if(r.status!==200)return console.error(`\u274C ${this.exitCodeForStatus(r.status)}: HTTP ${r.status}`),r.body&&console.error(r.body),this.exitCodeForStatus(r.status);let i=this.parseJson(r.body);if(!i||!i.data)return console.error("\u274C 1: \u54CD\u5E94\u89E3\u6790\u5931\u8D25"),1;let c=i.data.items||[];if(o.json){let d={items:c,total:i.data.total??c.length};if(o.field){let u=O(d,o.field);process.stdout.write(A(u)+`
280
276
  `)}else process.stdout.write(JSON.stringify(d,null,2)+`
281
- `);return 0}if(o.quiet){for(let d of a)console.log(d.id);return 0}if(!a.length)return console.log("\uFF08\u4F60\u8FD8\u6CA1\u6709\u52A0\u5165\u4EFB\u4F55\u56E2\u961F\uFF09"),0;let l=a.map(d=>({id:d.id||"",name:d.name||"",members:(d.members_count??d.member_count??"")+"",points:d.points!=null?String(d.points):""}));return be(["id","name","members","points"],l),0}resolveTeamId(e,t){if(e&&!e.startsWith("--"))return e;let o=t.indexOf("--team");if(o>=0&&t[o+1])return t[o+1];let n=this.argParser?this.argParser.getTeam():null;return n&&n.id?n.id:null}async fetchTeam(e,t){let n=`/team?constraints=${encodeURIComponent(JSON.stringify({id__in:[e]}))}`,s=await this.request("GET",n,t);if(s.status!==200)return{error:{code:this.exitCodeForStatus(s.status),status:s.status,body:s.body}};let r=this.parseJson(s.body),i=r&&r.data&&r.data.items||[];return i.length?{team:i[0]}:{error:{code:4,status:404,body:`team ${e} not found`}}}filterMembersByType(e,t){return t?e.filter(o=>o.user_type===t):e}async info(e,t,o){let{out:n}=this.parseOutputFlags(t),s=this.resolveTeamId(e,t);if(!s)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u5E26 [teamId] \u53C2\u6570"),3;let r;try{r=await this.fetchTeam(s,o)}catch(u){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${u.message}`),1}if(r.error)return console.error(`\u274C ${r.error.code}: HTTP ${r.error.status}`),r.error.body&&console.error(r.error.body),r.error.code;let i=r.team,a=Array.isArray(i.members)?i.members:[],l=a.filter(u=>u.user_type==="ai").length,d=a.filter(u=>u.user_type==="human").length;if(n.json){let u={id:i.id,name:i.name,description:i.description||"",points:i.points,points_expire_at:i.points_expire_at||null,is_active:!!i.is_active,members_total:a.length,members_ai:l,members_human:d};return n.field?process.stdout.write(A(P(u,n.field))+`
277
+ `);return 0}if(o.quiet){for(let d of c)console.log(d.id);return 0}if(!c.length)return console.log("\uFF08\u4F60\u8FD8\u6CA1\u6709\u52A0\u5165\u4EFB\u4F55\u56E2\u961F\uFF09"),0;let a=c.map(d=>({id:d.id||"",name:d.name||"",members:(d.members_count??d.member_count??"")+"",points:d.points!=null?String(d.points):""}));return ge([["id","ID"],["name","\u540D\u79F0"],["members","\u6210\u5458\u6570"],["points","\u79EF\u5206"]],a),0}resolveTeamId(e,t){if(e&&!e.startsWith("--"))return e;let o=t.indexOf("--team");if(o>=0&&t[o+1])return t[o+1];let n=this.argParser?this.argParser.getTeam():null;return n&&n.id?n.id:null}async fetchTeam(e,t){let n=`/team?constraints=${encodeURIComponent(JSON.stringify({id__in:[e]}))}`,s=await this.request("GET",n,t);if(s.status!==200)return{error:{code:this.exitCodeForStatus(s.status),status:s.status,body:s.body}};let r=this.parseJson(s.body),i=r&&r.data&&r.data.items||[];return i.length?{team:i[0]}:{error:{code:4,status:404,body:`team ${e} not found`}}}filterMembersByType(e,t){return t?e.filter(o=>o.user_type===t):e}async info(e,t,o){let{out:n}=this.parseOutputFlags(t),s=this.resolveTeamId(e,t);if(!s)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u5E26 [teamId] \u53C2\u6570"),3;let r;try{r=await this.fetchTeam(s,o)}catch(u){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${u.message}`),1}if(r.error)return console.error(`\u274C ${r.error.code}: HTTP ${r.error.status}`),r.error.body&&console.error(r.error.body),r.error.code;let i=r.team,c=Array.isArray(i.members)?i.members:[],a=c.filter(u=>u.user_type==="ai").length,d=c.filter(u=>u.user_type==="human").length;if(n.json){let u={id:i.id,name:i.name,description:i.description||"",points:i.points,points_expire_at:i.points_expire_at||null,is_active:!!i.is_active,members_total:c.length,members_ai:a,members_human:d};return n.field?process.stdout.write(A(O(u,n.field))+`
282
278
  `):process.stdout.write(JSON.stringify(u,null,2)+`
283
- `),0}return n.quiet?(console.log(i.id),0):(console.log(`team: ${i.name} (${i.id})`),i.description&&console.log(`description: ${i.description}`),console.log(`points: ${i.points??""}`),i.points_expire_at&&console.log(`points_expire_at: ${i.points_expire_at}`),console.log(`active: ${i.is_active?"yes":"no"}`),console.log(`members: ${a.length} (ai=${l}, human=${d})`),0)}async members(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=null,i=[];for(let m=0;m<s.length;m++){if(s[m]==="--type"){r=s[m+1],m++;continue}i.push(s[m])}let a=this.resolveTeamId(e,i);if(!a)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u5E26 [teamId] \u53C2\u6570"),3;if(r&&r!=="human"&&r!=="ai")return console.error(`\u274C 3: --type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${r}'`),3;let l;try{l=await this.fetchTeam(a,o)}catch(m){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${m.message}`),1}if(l.error)return console.error(`\u274C ${l.error.code}: HTTP ${l.error.status}`),l.error.body&&console.error(l.error.body),l.error.code;let d=Array.isArray(l.team.members)?l.team.members:[],u=this.filterMembersByType(d,r);if(n.json){let m={team_id:l.team.id,team_name:l.team.name,items:u,total:u.length};return n.field?process.stdout.write(A(P(m,n.field))+`
284
- `):process.stdout.write(JSON.stringify(m,null,2)+`
285
- `),0}if(n.quiet){for(let m of u)console.log(m.user_id||m.id||"");return 0}if(!u.length)return console.log(r?`\uFF08\u65E0 ${r} \u7C7B\u578B\u6210\u5458\uFF09`:"\uFF08\u56E2\u961F\u6682\u65E0\u6210\u5458\uFF09"),0;let p=u.map(m=>({username:m.username||"",nickname:m.nickname||"",mentor:ye(m,d),user_id:m.user_id||"",type:m.user_type||"",role:m.role||"",points:m.points==null?"\u221E":String(m.points),joined_at:(m.created_at||"").slice(0,10)}));return be(["username","user_id","type","role","nickname","mentor","points","joined_at"],p),0}async memberGet(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[];for(let m=0;m<s.length;m++){if(s[m]==="--team"){m++;continue}r.push(s[m])}let i=r[0];if(!i)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570\u3002\u7528\u6CD5: coder team member-get <userId> [teamId]"),3;let l=r[1]||this.resolveTeamId(void 0,s);if(!l)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u5E26 [teamId] \u53C2\u6570"),3;let d;try{d=await this.fetchTeam(l,o)}catch(m){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${m.message}`),1}if(d.error)return console.error(`\u274C ${d.error.code}: HTTP ${d.error.status}`),d.error.body&&console.error(d.error.body),d.error.code;let u=Array.isArray(d.team.members)?d.team.members:[],p=u.find(m=>m.user_id===i||m.id===i||m.username===i);return p?n.json?(n.field?process.stdout.write(A(P(p,n.field))+`
286
- `):process.stdout.write(JSON.stringify(p,null,2)+`
287
- `),0):n.quiet?(console.log(p.user_id||p.id),0):(console.log(`username: ${p.username||""}`),console.log(`user_id: ${p.user_id||""}`),console.log(`type: ${p.user_type||""}`),console.log(`role: ${p.role||""}`),console.log(`nickname: ${p.nickname||""}`),console.log(`mentor: ${ye(p,u)}`),console.log(`status: ${p.status||""}`),console.log(`points: ${p.points==null?"\u221E":p.points}`),console.log(`joined_at: ${p.created_at||""}`),p.im_bindings&&p.im_bindings.length&&console.log(`im_bindings: ${p.im_bindings.map(m=>m.channel).join(",")}`),0):(console.error(`\u274C 4: \u6210\u5458 '${i}' \u4E0D\u5728\u56E2\u961F '${d.team.name}' \u4E2D`),4)}async searchMember(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[],i=null;for(let h=0;h<s.length;h++){if(s[h]==="--team"){h++;continue}if(s[h]==="--type"){i=s[h+1],h++;continue}r.push(s[h])}let a=r[0];if(!a)return console.error("\u274C 3: \u7F3A\u5C11 keyword \u53C2\u6570\u3002\u7528\u6CD5: coder team search-member <keyword> [teamId]"),3;let d=r[1]||this.resolveTeamId(void 0,s);if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;if(i&&i!=="human"&&i!=="ai")return console.error(`\u274C 3: --type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${i}'`),3;let u;try{u=await this.fetchTeam(d,o)}catch(h){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${h.message}`),1}if(u.error)return console.error(`\u274C ${u.error.code}: HTTP ${u.error.status}`),u.error.body&&console.error(u.error.body),u.error.code;let p=Array.isArray(u.team.members)?u.team.members:[],m=this.filterMembersByType(p,i),f=a.toLowerCase(),y=m.filter(h=>{let I=(h.username||"").toLowerCase(),w=(h.user_id||"").toLowerCase(),$=(h.id||"").toLowerCase(),b=(h.nickname||"").toLowerCase();return I.includes(f)||w.includes(f)||$.includes(f)||b.includes(f)});if(n.json){let h={team_id:u.team.id,keyword:a,items:y,total:y.length};return n.field?process.stdout.write(A(P(h,n.field))+`
279
+ `),0}return n.quiet?(console.log(i.id),0):(console.log(`team: ${i.name} (${i.id})`),i.description&&console.log(`description: ${i.description}`),console.log(`points: ${i.points??""}`),i.points_expire_at&&console.log(`points_expire_at: ${i.points_expire_at}`),console.log(`active: ${i.is_active?"yes":"no"}`),console.log(`members: ${c.length} (ai=${a}, human=${d})`),0)}async members(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=null,i=[];for(let h=0;h<s.length;h++){if(s[h]==="--type"){r=s[h+1],h++;continue}i.push(s[h])}let c=this.resolveTeamId(e,i);if(!c)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u5E26 [teamId] \u53C2\u6570"),3;if(r&&r!=="human"&&r!=="ai")return console.error(`\u274C 3: --type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${r}'`),3;let a;try{a=await this.fetchTeam(c,o)}catch(h){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${h.message}`),1}if(a.error)return console.error(`\u274C ${a.error.code}: HTTP ${a.error.status}`),a.error.body&&console.error(a.error.body),a.error.code;let d=Array.isArray(a.team.members)?a.team.members:[],u=this.filterMembersByType(d,r);if(n.json){let h={team_id:a.team.id,team_name:a.team.name,items:u,total:u.length};return n.field?process.stdout.write(A(O(h,n.field))+`
288
280
  `):process.stdout.write(JSON.stringify(h,null,2)+`
289
- `),0}if(n.quiet){for(let h of y)console.log(h.user_id||h.id||"");return 0}if(!y.length)return console.log(`\uFF08\u672A\u5339\u914D\u5230 '${a}'\uFF09`),0;let g=y.map(h=>({username:h.username||"",user_id:h.user_id||"",type:h.user_type||"",role:h.role||"",nickname:h.nickname||"",mentor:ye(h,p)}));return be(["username","user_id","type","role","nickname","mentor"],g),0}parseMemberCreateFlags(e){let t=[],o={type:"human",password:null,phone:null,points:null,team:null,saveTo:null,nickname:null,mentor:null};for(let n=0;n<e.length;n++){let s=e[n];if(s==="--type"){o.type=e[++n];continue}if(s==="--password"){o.password=e[++n];continue}if(s==="--phone"){o.phone=e[++n];continue}if(s==="--points"){o.points=e[++n];continue}if(s==="--team"){o.team=e[++n];continue}if(s==="--save-to"){o.saveTo=e[++n];continue}if(s==="--nickname"){o.nickname=e[++n];continue}if(s==="--mentor"){o.mentor=e[++n];continue}t.push(s)}return o.type!=="human"&&o.type!=="ai"?{error:`--type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${o.type}'`}:{remaining:t,opts:o}}isInsideGitRepo(e){let t=U.resolve(e);for((!H.existsSync(t)||!H.statSync(t).isDirectory())&&(t=U.dirname(t));t&&t!==U.dirname(t);){if(H.existsSync(U.join(t,".git")))return!0;t=U.dirname(t)}return!1}async memberCreate(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=this.parseMemberCreateFlags(s);if(r.error)return console.error(`\u274C 3: ${r.error}`),3;let{remaining:i,opts:a}=r,l=i[0];if(!l)return console.error("\u274C 3: \u7F3A\u5C11 username \u53C2\u6570\u3002\u7528\u6CD5: coder team member-create <username> [...]"),3;let d=a.team||this.resolveTeamId(void 0,[]);if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u52A0 --team <id>"),3;if(a.type==="human"&&!a.phone)return console.error("\u274C 3: \u521B\u5EFA human \u6210\u5458\u5FC5\u987B\u63D0\u4F9B --phone <phone>"),3;if(a.saveTo){let w=U.resolve(a.saveTo);if(this.isInsideGitRepo(w))return console.error(`\u274C 3: --save-to \u8DEF\u5F84\u5728 git \u4ED3\u5E93\u5185\uFF08${w}\uFF09\uFF0C\u62D2\u7EDD\u5199\u5165\u907F\u514D\u8BEF\u63D0\u4EA4`),3}let u=a.password||ro.generateStrongPassword(16),p=!a.password,m=null;if(a.points!==null&&a.points!==void 0){let w=Number(a.points);if(!Number.isFinite(w))return console.error(`\u274C 3: --points \u5E94\u4E3A\u6570\u5B57\uFF0C\u6536\u5230 '${a.points}'`),3;m=w}let f={payload:{username:l,password:u,phone:a.phone||null,team_id:d,points:m,user_type:a.type,...a.nickname?{nickname:a.nickname}:{},...a.type==="ai"&&a.mentor?{config:{metadata:{created_by:a.mentor}}}:{}},auto_login:!1,auth_name:"UserPass"},y;try{y=await this.request("POST","/users",o,f)}catch(w){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${w.message}`),1}if(y.status<200||y.status>=300)return console.error(`\u274C ${this.exitCodeForStatus(y.status)}: HTTP ${y.status}`),y.body&&console.error(y.body),this.exitCodeForStatus(y.status);let g=this.parseJson(y.body),h=null;if(a.saveTo){let w=U.resolve(a.saveTo),$=`# Coder team member credentials
281
+ `),0}if(n.quiet){for(let h of u)console.log(h.user_id||h.id||"");return 0}if(!u.length)return console.log(r?`\uFF08\u65E0 ${r} \u7C7B\u578B\u6210\u5458\uFF09`:"\uFF08\u56E2\u961F\u6682\u65E0\u6210\u5458\uFF09"),0;let p=[...u].sort((h,f)=>{let g=h.user_type==="ai"?0:1,b=f.user_type==="ai"?0:1;return g!==b?g-b:(h.username||"").localeCompare(f.username||"")}).map(h=>({username:h.username||"",nickname:h.nickname||"",introduction:h.introduction||"",mentor:fe(h,d),user_id:h.user_id||"",type:h.user_type||"",role:h.role||"",points:h.points==null?"\u221E":String(h.points),joined_at:(h.created_at||"").slice(0,10)}));return ge([["username","\u7528\u6237\u540D"],["user_id","\u7528\u6237ID"],["type","\u7C7B\u578B"],["role","\u89D2\u8272"],["nickname","\u6635\u79F0"],["introduction","\u7B80\u4ECB"],["mentor","\u5BFC\u5E08"],["points","\u79EF\u5206"],["joined_at","\u52A0\u5165\u65F6\u95F4"]],p),0}async memberGet(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[];for(let p=0;p<s.length;p++){if(s[p]==="--team"){p++;continue}r.push(s[p])}let i=r[0];if(!i)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570\u3002\u7528\u6CD5: coder team member-get <userId> [teamId]"),3;let a=r[1]||this.resolveTeamId(void 0,s);if(!a)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u5E26 [teamId] \u53C2\u6570"),3;let d;try{d=await this.fetchTeam(a,o)}catch(p){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${p.message}`),1}if(d.error)return console.error(`\u274C ${d.error.code}: HTTP ${d.error.status}`),d.error.body&&console.error(d.error.body),d.error.code;let u=Array.isArray(d.team.members)?d.team.members:[],m=u.find(p=>p.user_id===i||p.id===i||p.username===i);return m?n.json?(n.field?process.stdout.write(A(O(m,n.field))+`
282
+ `):process.stdout.write(JSON.stringify(m,null,2)+`
283
+ `),0):n.quiet?(console.log(m.user_id||m.id),0):(console.log(`username: ${m.username||""}`),console.log(`user_id: ${m.user_id||""}`),console.log(`type: ${m.user_type||""}`),console.log(`role: ${m.role||""}`),console.log(`nickname: ${m.nickname||""}`),console.log(`introduction: ${m.introduction||""}`),console.log(`mentor: ${fe(m,u)}`),console.log(`status: ${m.status||""}`),console.log(`points: ${m.points==null?"\u221E":m.points}`),console.log(`joined_at: ${m.created_at||""}`),m.im_bindings&&m.im_bindings.length&&console.log(`im_bindings: ${m.im_bindings.map(p=>p.channel).join(",")}`),0):(console.error(`\u274C 4: \u6210\u5458 '${i}' \u4E0D\u5728\u56E2\u961F '${d.team.name}' \u4E2D`),4)}async searchMember(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[],i=null;for(let y=0;y<s.length;y++){if(s[y]==="--team"){y++;continue}if(s[y]==="--type"){i=s[y+1],y++;continue}r.push(s[y])}let c=r[0];if(!c)return console.error("\u274C 3: \u7F3A\u5C11 keyword \u53C2\u6570\u3002\u7528\u6CD5: coder team search-member <keyword> [teamId]"),3;let d=r[1]||this.resolveTeamId(void 0,s);if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;if(i&&i!=="human"&&i!=="ai")return console.error(`\u274C 3: --type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${i}'`),3;let u;try{u=await this.fetchTeam(d,o)}catch(y){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${y.message}`),1}if(u.error)return console.error(`\u274C ${u.error.code}: HTTP ${u.error.status}`),u.error.body&&console.error(u.error.body),u.error.code;let m=Array.isArray(u.team.members)?u.team.members:[],p=this.filterMembersByType(m,i),h=c.toLowerCase(),f=p.filter(y=>{let w=(y.username||"").toLowerCase(),x=(y.user_id||"").toLowerCase(),I=(y.id||"").toLowerCase(),k=(y.nickname||"").toLowerCase(),E=(y.introduction||"").toLowerCase();return w.includes(h)||x.includes(h)||I.includes(h)||k.includes(h)||E.includes(h)});if(n.json){let y={team_id:u.team.id,keyword:c,items:f,total:f.length};return n.field?process.stdout.write(A(O(y,n.field))+`
284
+ `):process.stdout.write(JSON.stringify(y,null,2)+`
285
+ `),0}if(n.quiet){for(let y of f)console.log(y.user_id||y.id||"");return 0}if(!f.length)return console.log(`\uFF08\u672A\u5339\u914D\u5230 '${c}'\uFF09`),0;let b=[...f].sort((y,w)=>{let x=y.user_type==="ai"?0:1,I=w.user_type==="ai"?0:1;return x!==I?x-I:(y.username||"").localeCompare(w.username||"")}).map(y=>({username:y.username||"",user_id:y.user_id||"",type:y.user_type||"",role:y.role||"",nickname:y.nickname||"",introduction:y.introduction||"",mentor:fe(y,m)}));return ge([["username","\u7528\u6237\u540D"],["user_id","\u7528\u6237ID"],["type","\u7C7B\u578B"],["role","\u89D2\u8272"],["nickname","\u6635\u79F0"],["introduction","\u7B80\u4ECB"],["mentor","\u5BFC\u5E08"]],b),0}parseMemberCreateFlags(e){let t=[],o={type:"human",password:null,phone:null,points:null,team:null,saveTo:null,nickname:null,mentor:null};for(let n=0;n<e.length;n++){let s=e[n];if(s==="--type"){o.type=e[++n];continue}if(s==="--password"){o.password=e[++n];continue}if(s==="--phone"){o.phone=e[++n];continue}if(s==="--points"){o.points=e[++n];continue}if(s==="--team"){o.team=e[++n];continue}if(s==="--save-to"){o.saveTo=e[++n];continue}if(s==="--nickname"){o.nickname=e[++n];continue}if(s==="--mentor"){o.mentor=e[++n];continue}t.push(s)}return o.type!=="human"&&o.type!=="ai"?{error:`--type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${o.type}'`}:{remaining:t,opts:o}}isInsideGitRepo(e){let t=B.resolve(e);for((!M.existsSync(t)||!M.statSync(t).isDirectory())&&(t=B.dirname(t));t&&t!==B.dirname(t);){if(M.existsSync(B.join(t,".git")))return!0;t=B.dirname(t)}return!1}async memberCreate(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=this.parseMemberCreateFlags(s);if(r.error)return console.error(`\u274C 3: ${r.error}`),3;let{remaining:i,opts:c}=r,a=i[0];if(!a)return console.error("\u274C 3: \u7F3A\u5C11 username \u53C2\u6570\u3002\u7528\u6CD5: coder team member-create <username> [...]"),3;let d=c.team||this.resolveTeamId(void 0,[]);if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u52A0 --team <id>"),3;if(c.type==="human"&&!c.phone)return console.error("\u274C 3: \u521B\u5EFA human \u6210\u5458\u5FC5\u987B\u63D0\u4F9B --phone <phone>"),3;if(c.saveTo){let w=B.resolve(c.saveTo);if(this.isInsideGitRepo(w))return console.error(`\u274C 3: --save-to \u8DEF\u5F84\u5728 git \u4ED3\u5E93\u5185\uFF08${w}\uFF09\uFF0C\u62D2\u7EDD\u5199\u5165\u907F\u514D\u8BEF\u63D0\u4EA4`),3}let u=c.password||Ht.generateStrongPassword(16),m=!c.password,p=null;if(c.points!==null&&c.points!==void 0){let w=Number(c.points);if(!Number.isFinite(w))return console.error(`\u274C 3: --points \u5E94\u4E3A\u6570\u5B57\uFF0C\u6536\u5230 '${c.points}'`),3;p=w}let h={payload:{username:a,password:u,phone:c.phone||null,team_id:d,points:p,user_type:c.type,...c.nickname?{nickname:c.nickname}:{},...c.type==="ai"&&c.mentor?{config:{metadata:{created_by:c.mentor}}}:{}},auto_login:!1,auth_name:"UserPass"},f;try{f=await this.request("POST","/users",o,h)}catch(w){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${w.message}`),1}if(f.status<200||f.status>=300)return console.error(`\u274C ${this.exitCodeForStatus(f.status)}: HTTP ${f.status}`),f.body&&console.error(f.body),this.exitCodeForStatus(f.status);let g=this.parseJson(f.body),b=null;if(c.saveTo){let w=B.resolve(c.saveTo),x=`# Coder team member credentials
290
286
  # Created: ${new Date().toISOString()}
291
- username: ${l}
287
+ username: ${a}
292
288
  password: ${u}
293
289
  team_id: ${d}
294
- type: ${a.type}
295
- `;try{H.writeFileSync(w,$,{mode:384});try{H.chmodSync(w,384)}catch{}h=w}catch(b){console.error(`\u26A0\uFE0F \u4FDD\u5B58\u51ED\u636E\u5931\u8D25: ${b.message}`)}}let I={username:l,password:u,team_id:d,user_type:a.type,nickname:a.nickname||null,mentor:a.mentor||null,saved_to:h,response:g&&g.data?g.data:g};return n.json?(n.field?process.stdout.write(A(P(I,n.field))+`
296
- `):process.stdout.write(JSON.stringify(I,null,2)+`
297
- `),0):n.quiet?(console.log(l),0):(console.log("\u2705 \u6210\u5458\u521B\u5EFA\u6210\u529F"),console.log(`username: ${l}`),console.log(`password: ${u} ${p?"(\u968F\u673A\u751F\u6210\uFF0C\u8BF7\u59A5\u5584\u4FDD\u7BA1)":""}`),console.log(`team_id: ${d}`),console.log(`type: ${a.type}`),a.nickname&&console.log(`nickname: ${a.nickname}`),a.mentor&&console.log(`mentor: ${a.mentor}`),console.log(h?`\u26A0\uFE0F \u51ED\u636E\u5DF2\u4FDD\u5B58\u5230 ${h} (mode 0600)\uFF0C\u8BF7\u59A5\u5584\u4FDD\u7BA1\uFF0C\u5EFA\u8BAE\u52A0\u5165 .gitignore`:"\u26A0\uFE0F \u4EE5\u4E0A\u51ED\u636E\u4EC5\u663E\u793A\u4E00\u6B21\uFF0C\u672A --save-to \u65F6\u8BF7\u7ACB\u5373\u8BB0\u5F55"),0)}async memberDelete(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[],i=!1,a=null;for(let y=0;y<s.length;y++){if(s[y]==="--yes"||s[y]==="-y"){i=!0;continue}if(s[y]==="--team"){a=s[++y];continue}r.push(s[y])}let l=r[0];if(!l)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570\u3002\u7528\u6CD5: coder team member-delete <userId> [--yes]"),3;let d=a||r[1]||this.resolveTeamId(void 0,[]);if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let u;try{u=await this.fetchTeam(d,o)}catch(y){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${y.message}`),1}if(u.error)return console.error(`\u274C ${u.error.code}: HTTP ${u.error.status}`),u.error.body&&console.error(u.error.body),u.error.code;let m=(Array.isArray(u.team.members)?u.team.members:[]).find(y=>y.user_id===l||y.id===l||y.username===l);if(!m)return console.error(`\u274C 4: \u6210\u5458 '${l}' \u4E0D\u5728\u56E2\u961F '${u.team.name}' \u4E2D`),4;if(!i){let y="\u9AD8\u5F71\u54CD\u64CD\u4F5C\uFF0C\u5FC5\u987B\u52A0 --yes \u624D\u4F1A\u6267\u884C";return n.json?process.stdout.write(JSON.stringify({method:"DELETE",path:`/team/${d}/members/${m.id}`,target:{username:m.username,user_id:m.user_id,role:m.role},note:y},null,2)+`
298
- `):(console.log(`\u5C06\u5220\u9664\u6210\u5458 ${m.username} (user_id=${m.user_id}, role=${m.role})`),console.log(`\u4ECE\u56E2\u961F: ${u.team.name} (${d})`),console.log(`endpoint: DELETE /team/${d}/members/${m.id}`),console.log(`\u26A0\uFE0F ${y}`)),10}let f;try{f=await this.request("DELETE",`/team/${d}/members/${m.id}`,o)}catch(y){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${y.message}`),1}return f.status<200||f.status>=300?(console.error(`\u274C ${this.exitCodeForStatus(f.status)}: HTTP ${f.status}`),f.body&&console.error(f.body),this.exitCodeForStatus(f.status)):n.json?(process.stdout.write(JSON.stringify({deleted:!0,username:m.username,user_id:m.user_id,team_id:d},null,2)+`
299
- `),0):n.quiet?(console.log(m.user_id),0):(console.log(`\u2705 \u5DF2\u5220\u9664\u6210\u5458 ${m.username} (${m.user_id}) from ${u.team.name}`),0)}async memberUpdate(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[],i={nickname:null,mentor:null,clearMentor:!1,team:null};for(let g=0;g<s.length;g++){let h=s[g];if(h==="--nickname"){i.nickname=s[++g];continue}if(h==="--mentor"){i.mentor=s[++g];continue}if(h==="--clear-mentor"){i.clearMentor=!0;continue}if(h==="--team"){i.team=s[++g];continue}r.push(h)}let a=r[0];if(!a)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570\u3002\u7528\u6CD5: coder team member-update <userId> [--nickname <n>] [--mentor <userId>]"),3;if(i.nickname===null&&i.mentor===null&&!i.clearMentor)return console.error("\u274C 3: \u81F3\u5C11\u9700\u8981\u63D0\u4F9B --nickname \u6216 --mentor \u6216 --clear-mentor"),3;let l=i.team||r[1]||this.resolveTeamId(void 0,[]);if(!l)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u52A0 --team <id>"),3;let d;try{d=await this.fetchTeam(l,o)}catch(g){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${g.message}`),1}if(d.error)return console.error(`\u274C ${d.error.code}: HTTP ${d.error.status}`),d.error.body&&console.error(d.error.body),d.error.code;let u=Array.isArray(d.team.members)?d.team.members:[],p=u.find(g=>g.user_id===a||g.id===a||g.username===a);if(!p)return console.error(`\u274C 4: \u6210\u5458 '${a}' \u4E0D\u5728\u56E2\u961F '${d.team.name}' \u4E2D`),4;let m={};if(i.nickname!==null&&(m.nickname=i.nickname),i.clearMentor)m.created_by=null;else if(i.mentor!==null){let g=u.find(h=>h.user_id===i.mentor||h.username===i.mentor);if(!g)return console.error(`\u274C 4: mentor '${i.mentor}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;m.created_by=g.user_id}let f;try{f=await this.request("PATCH",`/team/${l}/ai_users/${p.user_id}`,o,m)}catch(g){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${g.message}`),1}if(f.status<200||f.status>=300)return console.error(`\u274C ${this.exitCodeForStatus(f.status)}: HTTP ${f.status}`),f.body&&console.error(f.body),this.exitCodeForStatus(f.status);let y={username:p.username,user_id:p.user_id,team_id:l,nickname:i.nickname!==null?i.nickname:p.nickname||null,mentor:i.clearMentor?null:i.mentor||m.created_by||null};return n.json?(n.field?process.stdout.write(A(P(y,n.field))+`
290
+ type: ${c.type}
291
+ `;try{M.writeFileSync(w,x,{mode:384});try{M.chmodSync(w,384)}catch{}b=w}catch(I){console.error(`\u26A0\uFE0F \u4FDD\u5B58\u51ED\u636E\u5931\u8D25: ${I.message}`)}}let y={username:a,password:u,team_id:d,user_type:c.type,nickname:c.nickname||null,mentor:c.mentor||null,saved_to:b,response:g&&g.data?g.data:g};return n.json?(n.field?process.stdout.write(A(O(y,n.field))+`
300
292
  `):process.stdout.write(JSON.stringify(y,null,2)+`
301
- `),0):n.quiet?(console.log(p.user_id),0):(console.log(`\u2705 \u5DF2\u66F4\u65B0\u6210\u5458 ${p.username} (${p.user_id})`),i.nickname!==null&&console.log(`nickname: ${i.nickname}`),i.clearMentor?console.log("mentor: (\u5DF2\u6E05\u9664)"):i.mentor!==null&&console.log(`mentor: ${i.mentor}`),0)}async setPoints(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[],i={unlimited:!1,inherit:!1,points:null,team:null};for(let b=0;b<s.length;b++){let S=s[b];if(S==="--unlimited"){i.unlimited=!0;continue}if(S==="--inherit"){i.inherit=!0;continue}if(S==="--points"){i.points=s[++b];continue}if(S==="--team"){i.team=s[++b];continue}r.push(S)}let a=r[0];if(!a)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570\u3002\u7528\u6CD5: coder team set-points <userId> --unlimited|--points <n>|--inherit"),3;let l=[i.unlimited,i.inherit,i.points!==null].filter(Boolean).length;if(l===0)return console.error("\u274C 3: \u5FC5\u987B\u63D0\u4F9B --unlimited\u3001--points <n> \u6216 --inherit \u4E2D\u7684\u4E00\u4E2A"),3;if(l>1)return console.error("\u274C 3: --unlimited / --points / --inherit \u4E92\u65A5\uFF0C\u53EA\u80FD\u9009\u4E00\u4E2A"),3;let d;if(i.unlimited||i.inherit)d=null;else{let b=Number(i.points);if(!Number.isFinite(b)||b<0)return console.error(`\u274C 3: --points \u5E94\u4E3A\u975E\u8D1F\u6570\u5B57\uFF0C\u6536\u5230 '${i.points}'`),3;d=b}let u=i.team||r[1]||this.resolveTeamId(void 0,[]);if(!u)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u52A0 --team <id>"),3;let p;try{p=await this.fetchTeam(u,o)}catch(b){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${b.message}`),1}if(p.error)return console.error(`\u274C ${p.error.code}: HTTP ${p.error.status}`),p.error.body&&console.error(p.error.body),p.error.code;let f=(Array.isArray(p.team.members)?p.team.members:[]).find(b=>b.user_id===a||b.id===a||b.username===a);if(!f)return console.error(`\u274C 4: \u6210\u5458 '${a}' \u4E0D\u5728\u56E2\u961F '${p.team.name}' \u4E2D`),4;let y=`/refactor/coder/teams/${u}/members/${f.user_id}/points`,g={points:d},h=d===null?"\u4E0D\u9650\u91CF\uFF08\u7EE7\u627F\u56E2\u961F\u6C60\uFF09":String(d),I;try{I=await this.request("POST",y,o,g,io)}catch(b){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${b.message}`),1}if(I.status<200||I.status>=300){let b=this.exitCodeForStatus(I.status);return console.error(`\u274C ${b}: HTTP ${I.status}`),I.body&&console.error(I.body),b}let w=this.parseJson(I.body);if(w&&w.code!==void 0&&w.code!==0&&w.code!==null)return console.error(`\u274C 1: \u540E\u7AEF\u8FD4\u56DE code=${w.code} message=${w.message||""}`),1;let $={username:f.username,user_id:f.user_id,team_id:u,points:d,quota:h};return n.json?(n.field?process.stdout.write(A(P($,n.field))+`
302
- `):process.stdout.write(JSON.stringify($,null,2)+`
303
- `),0):n.quiet?(console.log(f.user_id),0):(console.log(`\u2705 \u5DF2\u4E3A ${f.username} (${f.user_id}) \u8BBE\u7F6E\u79EF\u5206\u914D\u989D: ${h}`),0)}async current(e,t){let{out:o}=this.parseOutputFlags(e),n=this.argParser?this.argParser.getTeam():null;if(o.json){let s=n?{id:n.id,name:n.name||""}:null;return o.field?process.stdout.write(A(P(s,o.field))+`
293
+ `),0):n.quiet?(console.log(a),0):(console.log("\u2705 \u6210\u5458\u521B\u5EFA\u6210\u529F"),console.log(`username: ${a}`),console.log(`password: ${u} ${m?"(\u968F\u673A\u751F\u6210\uFF0C\u8BF7\u59A5\u5584\u4FDD\u7BA1)":""}`),console.log(`team_id: ${d}`),console.log(`type: ${c.type}`),c.nickname&&console.log(`nickname: ${c.nickname}`),c.mentor&&console.log(`mentor: ${c.mentor}`),console.log(b?`\u26A0\uFE0F \u51ED\u636E\u5DF2\u4FDD\u5B58\u5230 ${b} (mode 0600)\uFF0C\u8BF7\u59A5\u5584\u4FDD\u7BA1\uFF0C\u5EFA\u8BAE\u52A0\u5165 .gitignore`:"\u26A0\uFE0F \u4EE5\u4E0A\u51ED\u636E\u4EC5\u663E\u793A\u4E00\u6B21\uFF0C\u672A --save-to \u65F6\u8BF7\u7ACB\u5373\u8BB0\u5F55"),0)}async memberDelete(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[],i=!1,c=null;for(let f=0;f<s.length;f++){if(s[f]==="--yes"||s[f]==="-y"){i=!0;continue}if(s[f]==="--team"){c=s[++f];continue}r.push(s[f])}let a=r[0];if(!a)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570\u3002\u7528\u6CD5: coder team member-delete <userId> [--yes]"),3;let d=c||r[1]||this.resolveTeamId(void 0,[]);if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let u;try{u=await this.fetchTeam(d,o)}catch(f){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${f.message}`),1}if(u.error)return console.error(`\u274C ${u.error.code}: HTTP ${u.error.status}`),u.error.body&&console.error(u.error.body),u.error.code;let p=(Array.isArray(u.team.members)?u.team.members:[]).find(f=>f.user_id===a||f.id===a||f.username===a);if(!p)return console.error(`\u274C 4: \u6210\u5458 '${a}' \u4E0D\u5728\u56E2\u961F '${u.team.name}' \u4E2D`),4;if(!i){let f="\u9AD8\u5F71\u54CD\u64CD\u4F5C\uFF0C\u5FC5\u987B\u52A0 --yes \u624D\u4F1A\u6267\u884C";return n.json?process.stdout.write(JSON.stringify({method:"DELETE",path:`/team/${d}/members/${p.id}`,target:{username:p.username,user_id:p.user_id,role:p.role},note:f},null,2)+`
294
+ `):(console.log(`\u5C06\u5220\u9664\u6210\u5458 ${p.username} (user_id=${p.user_id}, role=${p.role})`),console.log(`\u4ECE\u56E2\u961F: ${u.team.name} (${d})`),console.log(`endpoint: DELETE /team/${d}/members/${p.id}`),console.log(`\u26A0\uFE0F ${f}`)),10}let h;try{h=await this.request("DELETE",`/team/${d}/members/${p.id}`,o)}catch(f){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${f.message}`),1}return h.status<200||h.status>=300?(console.error(`\u274C ${this.exitCodeForStatus(h.status)}: HTTP ${h.status}`),h.body&&console.error(h.body),this.exitCodeForStatus(h.status)):n.json?(process.stdout.write(JSON.stringify({deleted:!0,username:p.username,user_id:p.user_id,team_id:d},null,2)+`
295
+ `),0):n.quiet?(console.log(p.user_id),0):(console.log(`\u2705 \u5DF2\u5220\u9664\u6210\u5458 ${p.username} (${p.user_id}) from ${u.team.name}`),0)}async memberUpdate(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[],i={nickname:null,mentor:null,clearMentor:!1,team:null};for(let g=0;g<s.length;g++){let b=s[g];if(b==="--nickname"){i.nickname=s[++g];continue}if(b==="--mentor"){i.mentor=s[++g];continue}if(b==="--clear-mentor"){i.clearMentor=!0;continue}if(b==="--team"){i.team=s[++g];continue}r.push(b)}let c=r[0];if(!c)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570\u3002\u7528\u6CD5: coder team member-update <userId> [--nickname <n>] [--mentor <userId>]"),3;if(i.nickname===null&&i.mentor===null&&!i.clearMentor)return console.error("\u274C 3: \u81F3\u5C11\u9700\u8981\u63D0\u4F9B --nickname \u6216 --mentor \u6216 --clear-mentor"),3;let a=i.team||r[1]||this.resolveTeamId(void 0,[]);if(!a)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u52A0 --team <id>"),3;let d;try{d=await this.fetchTeam(a,o)}catch(g){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${g.message}`),1}if(d.error)return console.error(`\u274C ${d.error.code}: HTTP ${d.error.status}`),d.error.body&&console.error(d.error.body),d.error.code;let u=Array.isArray(d.team.members)?d.team.members:[],m=u.find(g=>g.user_id===c||g.id===c||g.username===c);if(!m)return console.error(`\u274C 4: \u6210\u5458 '${c}' \u4E0D\u5728\u56E2\u961F '${d.team.name}' \u4E2D`),4;let p={};if(i.nickname!==null&&(p.nickname=i.nickname),i.clearMentor)p.created_by=null;else if(i.mentor!==null){let g=u.find(b=>b.user_id===i.mentor||b.username===i.mentor);if(!g)return console.error(`\u274C 4: mentor '${i.mentor}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;p.created_by=g.user_id}let h;try{h=await this.request("PATCH",`/team/${a}/ai_users/${m.user_id}`,o,p)}catch(g){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${g.message}`),1}if(h.status<200||h.status>=300)return console.error(`\u274C ${this.exitCodeForStatus(h.status)}: HTTP ${h.status}`),h.body&&console.error(h.body),this.exitCodeForStatus(h.status);let f={username:m.username,user_id:m.user_id,team_id:a,nickname:i.nickname!==null?i.nickname:m.nickname||null,mentor:i.clearMentor?null:i.mentor||p.created_by||null};return n.json?(n.field?process.stdout.write(A(O(f,n.field))+`
296
+ `):process.stdout.write(JSON.stringify(f,null,2)+`
297
+ `),0):n.quiet?(console.log(m.user_id),0):(console.log(`\u2705 \u5DF2\u66F4\u65B0\u6210\u5458 ${m.username} (${m.user_id})`),i.nickname!==null&&console.log(`nickname: ${i.nickname}`),i.clearMentor?console.log("mentor: (\u5DF2\u6E05\u9664)"):i.mentor!==null&&console.log(`mentor: ${i.mentor}`),0)}async setPoints(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=[],i={unlimited:!1,inherit:!1,points:null,team:null};for(let I=0;I<s.length;I++){let k=s[I];if(k==="--unlimited"){i.unlimited=!0;continue}if(k==="--inherit"){i.inherit=!0;continue}if(k==="--points"){i.points=s[++I];continue}if(k==="--team"){i.team=s[++I];continue}r.push(k)}let c=r[0];if(!c)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570\u3002\u7528\u6CD5: coder team set-points <userId> --unlimited|--points <n>|--inherit"),3;let a=[i.unlimited,i.inherit,i.points!==null].filter(Boolean).length;if(a===0)return console.error("\u274C 3: \u5FC5\u987B\u63D0\u4F9B --unlimited\u3001--points <n> \u6216 --inherit \u4E2D\u7684\u4E00\u4E2A"),3;if(a>1)return console.error("\u274C 3: --unlimited / --points / --inherit \u4E92\u65A5\uFF0C\u53EA\u80FD\u9009\u4E00\u4E2A"),3;let d;if(i.unlimited||i.inherit)d=null;else{let I=Number(i.points);if(!Number.isFinite(I)||I<0)return console.error(`\u274C 3: --points \u5E94\u4E3A\u975E\u8D1F\u6570\u5B57\uFF0C\u6536\u5230 '${i.points}'`),3;d=I}let u=i.team||r[1]||this.resolveTeamId(void 0,[]);if(!u)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F\u3002\u8FD0\u884C 'coder team use <id>' \u6216\u52A0 --team <id>"),3;let m;try{m=await this.fetchTeam(u,o)}catch(I){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${I.message}`),1}if(m.error)return console.error(`\u274C ${m.error.code}: HTTP ${m.error.status}`),m.error.body&&console.error(m.error.body),m.error.code;let h=(Array.isArray(m.team.members)?m.team.members:[]).find(I=>I.user_id===c||I.id===c||I.username===c);if(!h)return console.error(`\u274C 4: \u6210\u5458 '${c}' \u4E0D\u5728\u56E2\u961F '${m.team.name}' \u4E2D`),4;let f=`/refactor/coder/teams/${u}/members/${h.user_id}/points`,g={points:d},b=d===null?"\u4E0D\u9650\u91CF\uFF08\u7EE7\u627F\u56E2\u961F\u6C60\uFF09":String(d),y;try{y=await this.request("POST",f,o,g,Kt)}catch(I){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${I.message}`),1}if(y.status<200||y.status>=300){let I=this.exitCodeForStatus(y.status);return console.error(`\u274C ${I}: HTTP ${y.status}`),y.body&&console.error(y.body),I}let w=this.parseJson(y.body);if(w&&w.code!==void 0&&w.code!==0&&w.code!==null)return console.error(`\u274C 1: \u540E\u7AEF\u8FD4\u56DE code=${w.code} message=${w.message||""}`),1;let x={username:h.username,user_id:h.user_id,team_id:u,points:d,quota:b};return n.json?(n.field?process.stdout.write(A(O(x,n.field))+`
298
+ `):process.stdout.write(JSON.stringify(x,null,2)+`
299
+ `),0):n.quiet?(console.log(h.user_id),0):(console.log(`\u2705 \u5DF2\u4E3A ${h.username} (${h.user_id}) \u8BBE\u7F6E\u79EF\u5206\u914D\u989D: ${b}`),0)}async current(e,t){let{out:o}=this.parseOutputFlags(e),n=this.argParser?this.argParser.getTeam():null;if(o.json){let s=n?{id:n.id,name:n.name||""}:null;return o.field?process.stdout.write(A(O(s,o.field))+`
304
300
  `):process.stdout.write(JSON.stringify(s,null,2)+`
305
- `),0}return o.quiet?(n&&n.id&&console.log(n.id),0):!n||!n.id?(console.log("\uFF08\u672A\u8BBE\u7F6E\u9ED8\u8BA4\u56E2\u961F\uFF0C\u8FD0\u884C 'coder team use <teamId>' \u6765\u8BBE\u7F6E\uFF09"),0):(console.log(`\u9ED8\u8BA4\u56E2\u961F: ${n.name||""} (${n.id})`),0)}async use(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=s[0];if(!r)return console.error("\u274C 3: \u7F3A\u5C11 teamId \u53C2\u6570\u3002\u7528\u6CD5: coder team use <teamId>"),3;if(!this.argParser)return console.error("\u274C 1: \u5185\u90E8\u9519\u8BEF\uFF1AargParser \u672A\u6CE8\u5165"),1;let i=encodeURIComponent(JSON.stringify({filter_is_joined:!0})),a;try{a=await this.request("GET",`/team?constraints=${i}&page=1&size=200`,o)}catch(m){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${m.message}`),1}if(a.status!==200)return console.error(`\u274C ${this.exitCodeForStatus(a.status)}: HTTP ${a.status}`),a.body&&console.error(a.body),this.exitCodeForStatus(a.status);let l=this.parseJson(a.body),u=(l&&l.data&&l.data.items||[]).find(m=>m.id===r);if(!u)return console.error(`\u274C 4: \u56E2\u961F '${r}' \u4E0D\u5728\u4F60\u5DF2\u52A0\u5165\u7684\u5217\u8868\u4E2D\u3002\u8FD0\u884C 'coder team list' \u67E5\u770B\u53EF\u7528\u56E2\u961F`),4;if(!this.argParser.setTeam(u.id,u.name||""))return console.error("\u274C 1: \u5199\u5165\u914D\u7F6E\u5931\u8D25"),1;if(this.argParser.setTeamManual(!0),n.json){let m={id:u.id,name:u.name||""};return process.stdout.write(JSON.stringify(m,null,2)+`
301
+ `),0}return o.quiet?(n&&n.id&&console.log(n.id),0):!n||!n.id?(console.log("\uFF08\u672A\u8BBE\u7F6E\u9ED8\u8BA4\u56E2\u961F\uFF0C\u8FD0\u884C 'coder team use <teamId>' \u6765\u8BBE\u7F6E\uFF09"),0):(console.log(`\u9ED8\u8BA4\u56E2\u961F: ${n.name||""} (${n.id})`),0)}async use(e,t,o){let{out:n,remaining:s}=this.parseOutputFlags(t),r=s[0];if(!r)return console.error("\u274C 3: \u7F3A\u5C11 teamId \u53C2\u6570\u3002\u7528\u6CD5: coder team use <teamId>"),3;if(!this.argParser)return console.error("\u274C 1: \u5185\u90E8\u9519\u8BEF\uFF1AargParser \u672A\u6CE8\u5165"),1;let i=encodeURIComponent(JSON.stringify({filter_is_joined:!0})),c;try{c=await this.request("GET",`/team?constraints=${i}&page=1&size=200`,o)}catch(p){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${p.message}`),1}if(c.status!==200)return console.error(`\u274C ${this.exitCodeForStatus(c.status)}: HTTP ${c.status}`),c.body&&console.error(c.body),this.exitCodeForStatus(c.status);let a=this.parseJson(c.body),u=(a&&a.data&&a.data.items||[]).find(p=>p.id===r);if(!u)return console.error(`\u274C 4: \u56E2\u961F '${r}' \u4E0D\u5728\u4F60\u5DF2\u52A0\u5165\u7684\u5217\u8868\u4E2D\u3002\u8FD0\u884C 'coder team list' \u67E5\u770B\u53EF\u7528\u56E2\u961F`),4;if(!this.argParser.setTeam(u.id,u.name||""))return console.error("\u274C 1: \u5199\u5165\u914D\u7F6E\u5931\u8D25"),1;if(this.argParser.setTeamManual(!0),n.json){let p={id:u.id,name:u.name||""};return process.stdout.write(JSON.stringify(p,null,2)+`
306
302
  `),0}return n.quiet?(console.log(u.id),0):(console.log(`\u2705 \u5DF2\u5207\u6362\u5230\u9ED8\u8BA4\u56E2\u961F: ${u.name||""} (${u.id})`),0)}showHelp(){console.log(["Usage: coder team <subcommand> [options]","","\u9762\u5411 AI \u4F18\u5148\u7684\u56E2\u961F\u4E0E\u6210\u5458\u7BA1\u7406\u3002","","Team Management:"," list \u5217\u51FA\u6211\u52A0\u5165\u7684\u56E2\u961F\uFF08\u522B\u540D: ls\uFF09"," current \u663E\u793A\u5F53\u524D\u9ED8\u8BA4\u56E2\u961F"," use <teamId> \u5207\u6362\u9ED8\u8BA4\u56E2\u961F\uFF08\u5199\u5165 ~/.coder/config.json\uFF09"," info [teamId] \u56E2\u961F\u8BE6\u60C5\uFF1A\u79EF\u5206\u3001\u6210\u5458\u6570\u3001\u6709\u6548\u671F\u7B49","","Members:"," members [teamId] \u6210\u5458\u5217\u8868"," member-get <userId> [teamId] \u5355\u4E2A\u6210\u5458\u8BE6\u60C5"," member-create <username> \u521B\u5EFA\u6210\u5458\uFF08\u9ED8\u8BA4 user_type=human\uFF09"," [--type human|ai]"," [--password <pwd>] \u7701\u7565 = \u968F\u673A\u751F\u6210 16 \u4F4D\u5F3A\u5BC6\u7801"," [--phone <phone>] human \u5FC5\u586B\uFF0Cai \u53EF\u7701"," [--nickname <nickname>] \u4E2D\u6587\u6635\u79F0"," [--mentor <userId>] AI \u6210\u5458\u7684 mentor\uFF08user_id \u6216 username\uFF09"," [--points <n>] \u79EF\u5206\u914D\u989D\uFF0C\u9ED8\u8BA4 null = \u7EE7\u627F\u56E2\u961F"," [--team <teamId>]"," [--save-to <path>] \u4FDD\u5B58\u51ED\u636E\u5230\u6587\u4EF6 (chmod 600)"," member-delete <userId> \u5220\u9664\u6210\u5458\uFF08\u9AD8\u5F71\u54CD\uFF0C\u9700 --yes\uFF09"," [--team <teamId>] [--yes]"," member-update <userId> \u66F4\u65B0\u6210\u5458\u6635\u79F0 / mentor"," [--nickname <nickname>]"," [--mentor <userId>] \u8BBE\u7F6E mentor\uFF08user_id \u6216 username\uFF09"," [--clear-mentor] \u6E05\u9664 mentor"," [--team <teamId>]"," set-points <userId> \u8BBE\u7F6E\u6210\u5458\u79EF\u5206\u914D\u989D\uFF08owner / manager \u53EF\u7528\uFF09"," --unlimited \u4E0D\u9650\u91CF\uFF08points = null\uFF09"," --points <n> \u6307\u5B9A\u6570\u503C"," --inherit \u7B49\u4EF7 --unlimited\uFF08\u8BED\u4E49\uFF1A\u7EE7\u627F\u56E2\u961F\u6C60\uFF09"," [--team <teamId>]","","Discovery:"," search-member <keyword> [teamId] \u6210\u5458\u4E2D\u641C\u7D22\uFF08\u672C\u5730\u8FC7\u6EE4\uFF09","","Output (AI-friendly):"," --json \u8F93\u51FA\u7ED3\u6784\u5316 JSON\uFF08\u53EF\u88AB jq \u89E3\u6790\uFF09"," --quiet \u53EA\u8F93\u51FA\u4E3B\u952E\uFF08id / username\uFF09\uFF0C\u6362\u884C\u5206\u9694"," --field <jq-path> \u4EC5\u8F93\u51FA\u6307\u5B9A\u5B57\u6BB5\uFF08dot path\uFF0C\u5982 items[0].id\uFF09","","Exit codes:"," 0 \u6210\u529F | 1 \u901A\u7528\u9519\u8BEF | 2 \u672A\u767B\u5F55 | 3 \u53C2\u6570\u9519\u8BEF | 4 \u8D44\u6E90\u4E0D\u5B58\u5728"," 5 \u6743\u9650\u4E0D\u8DB3 | 6 \u51B2\u7A81\uFF08\u5DF2\u5B58\u5728\uFF09 | 10 \u5F85\u786E\u8BA4\uFF08\u9AD8\u5F71\u54CD\u64CD\u4F5C\u672A\u52A0 --yes\uFF09","","Examples:"," coder team list"," coder team list --json | jq '.items[].id'"," coder team list --quiet"].join(`
307
- `))}};function ye(c,e){let t=c.config&&c.config.metadata&&c.config.metadata.created_by;if(!t)return"";let o=e.find(n=>n.user_id===t);return o?o.username:t}function P(c,e){if(!e)return c;let t=[],o=/[^.\[\]]+|\[(\d+)\]/g,n;for(;(n=o.exec(e))!==null;)t.push(n[1]!==void 0?Number(n[1]):n[0]);let s=c;for(let r of t){if(s==null)return;s=s[r]}return s}function A(c){return c==null?"":typeof c=="string"?c:typeof c=="number"||typeof c=="boolean"?String(c):JSON.stringify(c)}function be(c,e){let t=c.map(n=>Math.max(n.length,...e.map(s=>ut(String(s[n]??""))))),o=(n,s)=>n+" ".repeat(Math.max(0,s-ut(n)));console.log(c.map((n,s)=>o(n,t[s])).join(" ")),console.log(t.map(n=>"-".repeat(n)).join(" "));for(let n of e)console.log(c.map((s,r)=>o(String(n[s]??""),t[r])).join(" "))}function ut(c){let e=0;for(let t of c){let o=t.codePointAt(0);o>=19968&&o<=40959||o>=12288&&o<=12351||o>=65280&&o<=65519?e+=2:e+=1}return e}mt.exports=Ie});var gt=k((Ho,ft)=>{var Go=require("path"),co=Ce(),ht=Pe(),ao=Te(),lo=je(),uo=Le(),mo=Fe(),po=Ve(),ho=ze(),fo=Ye(),go=tt(),yo=at(),bo=pt(),{isPrintMode:Vo}=L(),we=class{constructor(){this.argParser=new co,this.claudeLauncher=this._createClaudeLauncher(),this.geminiLauncher=new lo,this.codexLauncher=new uo,this.vscodeExtensionService=new mo,this.publishService=new po,this.skillsService=new ho,this.wikiService=new fo(this.argParser),this.channelService=new go,this.authCommandService=new yo(this.argParser),this.teamService=new bo(this.argParser),this.wikiService.teamService=this.teamService}_createClaudeLauncher(){let e=process.env.CODEV_DEBUG;if(process.env.CODEV_USE_NODE==="1")return e&&console.error("[DEBUG] CODEV_USE_NODE=1, forcing ClaudeLauncher (node fallback)"),new ht;try{let t=new ao,o=t.findExecutablePath();return e&&console.error(`[DEBUG] ClaudeBunLauncher selected, executable: ${o}`),t}catch(t){return e&&console.error(`[DEBUG] ClaudeBunLauncher unavailable: ${t.message}, falling back to ClaudeLauncher (node)`),new ht}}async run(e=process.argv.slice(2)){try{try{await this.vscodeExtensionService.ensureExtensionInstalled()}catch(o){process.env.CODEV_DEBUG&&console.error("VSCode Extension Service Error:",o)}if(!e.includes("--agent")&&!e.includes("-a")){let o=e.length>0&&["claude","gemini","codex"].includes(e[0]),n=e.length>0&&["pub","auth","update","skills","wiki","channel","team"].includes(e[0]);if(!o&&!n&&(e.includes("--help")||e.includes("-h")))return this.argParser.showHelp(),0;if(!o&&!n&&(e.includes("--version")||e.includes("-v")))return this.showVersion(),0}let t=await this.argParser.parse(e);return t.command==="auth"?await this.authCommandService.handle(t):t.command==="update"?this.handleUpdate():t.command==="skills"?await this.skillsService.handle(t):t.command==="wiki"?await this.wikiService.handle(t):t.command==="channel"?await this.channelService.handle({...t,claudeLauncher:this.claudeLauncher,parsedArgs:t}):t.command==="team"?await this.teamService.handle(t):t.command==="pub"?e.includes("--help")||e.includes("-h")?(this.publishService.showHelp(),0):await this.publishService.publish({name:t.pubName,apikey:t.apikey,serverBaseUrl:t.codevServer,allowClone:t.allowClone}):(t.apikey&&this.skillsService.notifyAndRefreshUpdates(t.apikey),await this.launchAgent(t))}catch(t){return console.error(`Error: ${t.message}`),process.env.CODEV_DEBUG&&console.error("Stack trace:",t.stack),1}}async launchAgent(e){let{agent:t}=e;return t==="claude"?await this.claudeLauncher.launch(e):t==="gemini"?await this.geminiLauncher.launch(e):t==="codex"?await this.codexLauncher.launch(e):1}handleUpdate(){let{execSync:e}=require("child_process"),t=R();console.log(`\u5F53\u524D\u7248\u672C: ${t.version}`),console.log(`\u6B63\u5728\u5347\u7EA7 Coder...
303
+ `))}};function fe(l,e){let t=l.config&&l.config.metadata&&l.config.metadata.created_by;if(!t)return"";let o=e.find(n=>n.user_id===t);return o?o.nickname?`${o.username}(${o.nickname})`:o.username:t}function O(l,e){if(!e)return l;let t=[],o=/[^.\[\]]+|\[(\d+)\]/g,n;for(;(n=o.exec(e))!==null;)t.push(n[1]!==void 0?Number(n[1]):n[0]);let s=l;for(let r of t){if(s==null)return;s=s[r]}return s}function A(l){return l==null?"":typeof l=="string"?l:typeof l=="number"||typeof l=="boolean"?String(l):JSON.stringify(l)}function ge(l,e){let t=l.map(r=>Array.isArray(r)?r[0]:r),o=l.map(r=>Array.isArray(r)?r[1]:r),n=t.map((r,i)=>Math.max(ye(o[i]),...e.map(c=>ye(String(c[r]??""))))),s=(r,i)=>r+" ".repeat(Math.max(0,i-ye(r)));console.log(o.map((r,i)=>s(r,n[i])).join(" ")),console.log(n.map(r=>"-".repeat(r)).join(" "));for(let r of e)console.log(t.map((i,c)=>s(String(r[i]??""),n[c])).join(" "))}function ye(l){let e=0;for(let t of l){let o=t.codePointAt(0);o>=19968&&o<=40959||o>=12288&&o<=12351||o>=65280&&o<=65519?e+=2:e+=1}return e}ct.exports=be});var ut=S((Po,dt)=>{var Ao=require("path"),Wt=Se(),at=Ee(),Yt=Oe(),Xt=Pe(),Zt=qe(),Qt=Le(),eo=Fe(),to=Ge(),oo=He(),no=Xe(),ro=rt(),so=lt(),Ie=class{constructor(){this.argParser=new Wt,this.claudeLauncher=this._createClaudeLauncher(),this.geminiLauncher=new Xt,this.codexLauncher=new Zt,this.vscodeExtensionService=new Qt,this.publishService=new eo,this.skillsService=new to(this.argParser),this.wikiService=new oo(this.argParser),this.channelService=new no,this.authCommandService=new ro(this.argParser),this.teamService=new so(this.argParser),this.wikiService.teamService=this.teamService,this.skillsService.teamService=this.teamService}_createClaudeLauncher(){let e=process.env.CODEV_DEBUG;if(process.env.CODEV_USE_NODE==="1")return e&&console.error("[DEBUG] CODEV_USE_NODE=1, forcing ClaudeLauncher (node fallback)"),new at;try{let t=new Yt,o=t.findExecutablePath();return e&&console.error(`[DEBUG] ClaudeBunLauncher selected, executable: ${o}`),t}catch(t){return e&&console.error(`[DEBUG] ClaudeBunLauncher unavailable: ${t.message}, falling back to ClaudeLauncher (node)`),new at}}async run(e=process.argv.slice(2)){try{try{await this.vscodeExtensionService.ensureExtensionInstalled()}catch(o){process.env.CODEV_DEBUG&&console.error("VSCode Extension Service Error:",o)}if(!e.includes("--agent")&&!e.includes("-a")){let o=e.length>0&&["claude","gemini","codex"].includes(e[0]),n=e.length>0&&["pub","auth","update","skills","wiki","channel","team"].includes(e[0]);if(!o&&!n&&(e.includes("--help")||e.includes("-h")))return this.argParser.showHelp(),0;if(!o&&!n&&(e.includes("--version")||e.includes("-v")))return this.showVersion(),0}let t=await this.argParser.parse(e);return t.command==="auth"?await this.authCommandService.handle(t):t.command==="update"?this.handleUpdate():t.command==="skills"?await this.skillsService.handle(t):t.command==="wiki"?await this.wikiService.handle(t):t.command==="channel"?await this.channelService.handle({...t,claudeLauncher:this.claudeLauncher,parsedArgs:t}):t.command==="team"?await this.teamService.handle(t):t.command==="pub"?e.includes("--help")||e.includes("-h")?(this.publishService.showHelp(),0):await this.publishService.publish({name:t.pubName,apikey:t.apikey,serverBaseUrl:t.codevServer,allowClone:t.allowClone}):(t.apikey&&this.skillsService.notifyAndRefreshUpdates(t.apikey),await this.launchAgent(t))}catch(t){return console.error(`Error: ${t.message}`),process.env.CODEV_DEBUG&&console.error("Stack trace:",t.stack),1}}async launchAgent(e){let{agent:t}=e;return t==="claude"?await this.claudeLauncher.launch(e):t==="gemini"?await this.geminiLauncher.launch(e):t==="codex"?await this.codexLauncher.launch(e):1}handleUpdate(){let{execSync:e}=require("child_process"),t=U();console.log(`\u5F53\u524D\u7248\u672C: ${t.version}`),console.log(`\u6B63\u5728\u5347\u7EA7 Coder...
308
304
  `);try{e("npm install -g makecoder@latest",{stdio:"inherit"})}catch(o){return console.error(`
309
305
  \u274C \u5347\u7EA7\u5931\u8D25:`,o.message),1}return this._ensurePlatformCodex(),console.log(`
310
- \u2705 \u5347\u7EA7\u6210\u529F`),0}_ensurePlatformCodex(){let{execSync:e}=require("child_process"),t=require("fs"),o=require("path"),n={"linux-x64":"makecoder-codex-linux-x64","darwin-arm64":"makecoder-codex-darwin-arm64","win32-x64":"makecoder-codex-win32-x64"},s=`${process.platform}-${process.arch}`,r=n[s];if(!r)return;let i;try{i=e("npm root -g",{encoding:"utf8"}).trim()}catch{return}if([o.join(i,"makecoder","node_modules",r,"package.json"),o.join(i,r,"package.json")].some(p=>t.existsSync(p)))return;console.log(`
311
- \u26A0\uFE0F \u672A\u68C0\u6D4B\u5230 ${r}\uFF0C\u6B63\u5728\u8865\u88C5...`);let l;try{l=require(o.join(i,"makecoder","package.json")).optionalDependencies?.[r]}catch{}let d=p=>{try{return e(`npm install -g ${p}`,{stdio:"inherit"}),!0}catch{return!1}};l&&d(`${r}@${l}`)||d(`${r}@latest`)||console.warn(`
306
+ \u2705 \u5347\u7EA7\u6210\u529F`),0}_ensurePlatformCodex(){let{execSync:e}=require("child_process"),t=require("fs"),o=require("path"),n={"linux-x64":"makecoder-codex-linux-x64","darwin-arm64":"makecoder-codex-darwin-arm64","win32-x64":"makecoder-codex-win32-x64"},s=`${process.platform}-${process.arch}`,r=n[s];if(!r)return;let i;try{i=e("npm root -g",{encoding:"utf8"}).trim()}catch{return}if([o.join(i,"makecoder","node_modules",r,"package.json"),o.join(i,r,"package.json")].some(m=>t.existsSync(m)))return;console.log(`
307
+ \u26A0\uFE0F \u672A\u68C0\u6D4B\u5230 ${r}\uFF0C\u6B63\u5728\u8865\u88C5...`);let a;try{a=require(o.join(i,"makecoder","package.json")).optionalDependencies?.[r]}catch{}let d=m=>{try{return e(`npm install -g ${m}`,{stdio:"inherit"}),!0}catch{return!1}};a&&d(`${r}@${a}`)||d(`${r}@latest`)||console.warn(`
312
308
  \u26A0\uFE0F \u81EA\u52A8\u8865\u88C5 ${r} \u5931\u8D25\uFF0Ccoder codex \u53EF\u80FD\u4E0D\u53EF\u7528\u3002
313
- \u8BF7\u624B\u52A8\u6267\u884C: npm install -g ${r}@latest`)}showVersion(){let e=R();console.log(`coder version: ${e.version}`)}async shutdown(){console.log(`
314
- Shutting down...`),process.exit(0)}};ft.exports=we});var yt=process.env.CODER_ARGV0;if(yt){let e={rg:"rg",ugrep:"ugrep",bfs:"bfs"}[yt];if(e){let t=require("path").join(__dirname,"..","dist",`${process.platform}-${process.arch}`,e);require("fs").existsSync(t)||(console.error(`${e} is not available. Use system default command instead (grep, find, etc.)`),process.exit(1));let{spawnSync:o}=require("child_process"),n=o(t,process.argv.slice(2),{stdio:"inherit"});process.exit(n.status??1)}}var Io=gt(),{isPrintMode:Ko,shouldSuppressUpdateNotice:wo}=L();process.on("unhandledRejection",(c,e)=>{console.error("Unhandled Promise Rejection:",c),process.exit(1)});process.on("uncaughtException",c=>{console.error("Uncaught Exception:",c.message),process.env.CODEV_DEBUG&&console.error(c.stack),process.exit(1)});function xo(c,e){let t=s=>s.replace(/^v/,"").split(".").map(Number),[o,n]=[t(c),t(e)];for(let s=0;s<3;s++){if((o[s]||0)>(n[s]||0))return!0;if((o[s]||0)<(n[s]||0))return!1}return!1}function $o(){if(wo())return;let c=require("https"),{version:e}=R(),o=c.get("https://registry.npmmirror.com/makecoder/latest",{timeout:5e3},n=>{let s="";n.on("data",r=>{s+=r}),n.on("end",()=>{try{let r=JSON.parse(s).version;r&&xo(r,e)&&console.error(`\x1B[33m\u26A1 \u68C0\u6D4B\u5230\u65B0\u7248\u672C ${r}\uFF08\u5F53\u524D ${e}\uFF09\uFF0C\u8FD0\u884C coder update \u5347\u7EA7\x1B[0m`)}catch{}})});o.on("error",()=>{}),o.on("timeout",()=>o.destroy())}async function ko(){let c=new Set(["pub","auth","update","skills","wiki","channel","team"]),e=process.argv[2];(!e||!c.has(e))&&$o(),process.env.CODER_NESTED="1";let t=new Io;process.on("SIGINT",async()=>{console.log(`
315
- Received SIGINT, shutting down gracefully...`),await t.shutdown()}),process.on("SIGTERM",async()=>{console.log(`
316
- Received SIGTERM, shutting down gracefully...`),await t.shutdown()});try{let o=await t.run();process.exit(o)}catch(o){console.error(`Fatal error: ${o.message}`),process.env.CODEV_DEBUG&&console.error(o.stack),process.exit(1)}}ko().catch(c=>{console.error(`Startup error: ${c.message}`),process.exit(1)});
309
+ \u8BF7\u624B\u52A8\u6267\u884C: npm install -g ${r}@latest`)}showVersion(){let e=U();console.log(`coder version: ${e.version}`)}};dt.exports=Ie});var mt=process.env.CODER_ARGV0;if(mt){let e={rg:"rg",ugrep:"ugrep",bfs:"bfs"}[mt];if(e){let t=require("path").join(__dirname,"..","dist",`${process.platform}-${process.arch}`,e);require("fs").existsSync(t)||(console.error(`${e} is not available. Use system default command instead (grep, find, etc.)`),process.exit(1));let{spawnSync:o}=require("child_process"),n=o(t,process.argv.slice(2),{stdio:"inherit"});process.exit(n.status??1)}}var io=ut(),{shouldSuppressUpdateNotice:co}=re();process.on("unhandledRejection",(l,e)=>{console.error("Unhandled Promise Rejection:",l),process.exit(1)});process.on("uncaughtException",l=>{console.error("Uncaught Exception:",l.message),process.env.CODEV_DEBUG&&console.error(l.stack),process.exit(1)});function lo(l,e){let t=s=>s.replace(/^v/,"").split(".").map(Number),[o,n]=[t(l),t(e)];for(let s=0;s<3;s++){if((o[s]||0)>(n[s]||0))return!0;if((o[s]||0)<(n[s]||0))return!1}return!1}function ao(){if(co())return;let l=require("https"),{version:e}=U(),o=l.get("https://registry.npmmirror.com/makecoder/latest",{timeout:5e3},n=>{let s="";n.on("data",r=>{s+=r}),n.on("end",()=>{try{let r=JSON.parse(s).version;r&&lo(r,e)&&console.error(`\x1B[33m\u26A1 \u68C0\u6D4B\u5230\u65B0\u7248\u672C ${r}\uFF08\u5F53\u524D ${e}\uFF09\uFF0C\u8FD0\u884C coder update \u5347\u7EA7\x1B[0m`)}catch{}})});o.on("error",()=>{}),o.on("timeout",()=>o.destroy())}async function uo(){let l=new Set(["pub","auth","update","skills","wiki","channel","team"]),e=process.argv[2];(!e||!l.has(e))&&ao(),process.env.CODER_NESTED="1";let t=new io;try{let o=await t.run();process.exit(o)}catch(o){console.error(`Fatal error: ${o.message}`),process.env.CODEV_DEBUG&&console.error(o.stack),process.exit(1)}}uo().catch(l=>{console.error(`Startup error: ${l.message}`),process.exit(1)});