makecoder 4.0.68 → 4.0.70

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,95 +1,95 @@
1
1
  #!/usr/bin/env node
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 _=(c,e)=>()=>(e||c((e={exports:{}}).exports,e),e.exports);var bt=(c,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ft(e))!yt.call(c,r)&&r!==t&&we(c,r,{get:()=>e[r],enumerable:!(o=ht(e,r))||o.enumerable});return c};var It=(c,e,t)=>(t=c!=null?pt(gt(c)):{},bt(e||!c||!c.__esModule?we(t,"default",{value:c,enumerable:!0}):t,c));var U=_((ho,wt)=>{wt.exports={name:"makecoder",version:"4.0.68",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 _e=_((fo,ke)=>{var A=require("fs"),$e=require("path"),$t=require("os"),xt=new Set(["auth","skills","wiki","channel","team"]),xe=new Set(["claude","gemini","codex"]),kt=new Set(["pub","auth","update","skills","wiki","channel","team"]),X=class{constructor(){let e=process.env.CODER_PROFILE,t=e?`.coder.${e}`:".coder";this.configPath=$e.join($t.homedir(),t,"config.json"),this.defaultConfig={agent:"claude",auth:{apikey:null}}}loadConfig(){let e=$e.dirname(this.configPath);try{return A.existsSync(e)||A.mkdirSync(e,{recursive:!0}),A.existsSync(this.configPath)||A.writeFileSync(this.configPath,JSON.stringify(this.defaultConfig,null,2)),JSON.parse(A.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 A.writeFileSync(this.configPath,JSON.stringify(t,null,2)),!0}catch{return!1}}clearAuthFromConfig(){let e=this.loadConfig();e.auth={apikey:null};try{return A.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 A.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 A.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:[]},r=0;if(e.length>0){if(xe.has(e[0]))o.agent=e[0],o.agentSetBySubcommand=!0,r=1;else if(kt.has(e[0])){if(o.command=e[0],r=1,e[0]==="auth"){let n=e[1];n==="--help"||n==="-h"?o.authSubcommand="--help":(o.authSubcommand=n,o.authRemainingArgs=e.slice(2)),r=e.length}else if(e[0]==="skills"){let n=e[1];o.skillsSubcommand=n==="--help"||n==="-h"?void 0:n,o.skillsArg=e[2],o.skillsRemainingArgs=e.slice(2),r=e.length}else if(e[0]==="wiki"){let n=e[1];o.wikiSubcommand=n==="--help"||n==="-h"?void 0:n,o.wikiArg=e[2],o.wikiRemainingArgs=e.slice(2),r=e.length}else if(e[0]==="team"){let n=e[1];o.teamSubcommand=n==="--help"||n==="-h"?void 0:n,o.teamArg=e[2],o.teamRemainingArgs=e.slice(2),r=e.length}else if(e[0]==="channel"){let n=e[1];n==="--help"||n==="-h"?o.channelSubcommand="--help":n==="list"||n==="show"||n==="add"||n==="remove"||n==="update"?(o.channelSubcommand=n,o.channelArg=e[2],o.channelRemainingArgs=e.slice(2)):o.channelRemainingArgs=e.slice(1),r=e.length}}}for(;r<e.length;){let n=e[r];if(n==="--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[r+1];if(!i||!xe.has(i))throw new Error("--agent \u9700\u8981\u6307\u5B9A\u4EE3\u7406\u7C7B\u578B\uFF08claude|gemini|codex\uFF09");o.agent=i,r+=2}else if(n==="--apikey"){let i=e[r+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,r+=2}else if(n==="--name"){let i=e[r+1];i&&!i.startsWith("--")?(o.pubName=i,r+=2):r+=1}else if(n==="--allow-clone")o.allowClone=!0,r+=1;else if(n==="--meta-data"){let i=e[r+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,r+=2}else{o.remainingArgs=e.slice(r);break}}if(o.command!=="auth"&&!o.apikey){let n=this.getApiKeyFromConfig(t);o.apikey=n||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!xt.has(o.command)&&!s&&!o.apikey&&await this._oauthLogin(o),o}async _oauthLogin(e){console.log(`\u274C \u5C1A\u672A\u767B\u5F55
2
+ var ft=Object.create;var $e=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var bt=Object.getPrototypeOf,It=Object.prototype.hasOwnProperty;var _=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports);var wt=(a,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of yt(e))!It.call(a,r)&&r!==t&&$e(a,r,{get:()=>e[r],enumerable:!(o=gt(e,r))||o.enumerable});return a};var $t=(a,e,t)=>(t=a!=null?ft(bt(a)):{},wt(e||!a||!a.__esModule?$e(t,"default",{value:a,enumerable:!0}):t,a));var U=_((wo,xt)=>{xt.exports={name:"makecoder",version:"4.0.70",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=_(($o,_e)=>{var T=require("fs"),xe=require("path"),kt=require("os"),_t=new Set(["auth","skills","wiki","channel","team"]),ke=new Set(["claude","gemini","codex"]),St=new Set(["pub","auth","update","skills","wiki","channel","team"]),Z=class{constructor(){let e=process.env.CODER_PROFILE,t=e?`.coder.${e}`:".coder";this.configPath=xe.join(kt.homedir(),t,"config.json"),this.defaultConfig={agent:"claude",auth:{apikey:null}}}loadConfig(){let e=xe.dirname(this.configPath);try{return T.existsSync(e)||T.mkdirSync(e,{recursive:!0}),T.existsSync(this.configPath)||T.writeFileSync(this.configPath,JSON.stringify(this.defaultConfig,null,2)),JSON.parse(T.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 T.writeFileSync(this.configPath,JSON.stringify(t,null,2)),!0}catch{return!1}}clearAuthFromConfig(){let e=this.loadConfig();e.auth={apikey:null};try{return T.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 T.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 T.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:[]},r=0;if(e.length>0){if(ke.has(e[0]))o.agent=e[0],o.agentSetBySubcommand=!0,r=1;else if(St.has(e[0])){if(o.command=e[0],r=1,e[0]==="auth"){let n=e[1];n==="--help"||n==="-h"?o.authSubcommand="--help":(o.authSubcommand=n,o.authRemainingArgs=e.slice(2)),r=e.length}else if(e[0]==="skills"){let n=e[1];o.skillsSubcommand=n==="--help"||n==="-h"?void 0:n,o.skillsArg=e[2],o.skillsRemainingArgs=e.slice(2),r=e.length}else if(e[0]==="wiki"){let n=e[1];o.wikiSubcommand=n==="--help"||n==="-h"?void 0:n,o.wikiArg=e[2],o.wikiRemainingArgs=e.slice(2),r=e.length}else if(e[0]==="team"){let n=e[1];o.teamSubcommand=n==="--help"||n==="-h"?void 0:n,o.teamArg=e[2],o.teamRemainingArgs=e.slice(2),r=e.length}else if(e[0]==="channel"){let n=e[1];n==="--help"||n==="-h"?o.channelSubcommand="--help":n==="list"||n==="show"||n==="add"||n==="remove"||n==="update"?(o.channelSubcommand=n,o.channelArg=e[2],o.channelRemainingArgs=e.slice(2)):o.channelRemainingArgs=e.slice(1),r=e.length}}}for(;r<e.length;){let n=e[r];if(n==="--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[r+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,r+=2}else if(n==="--apikey"){let i=e[r+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,r+=2}else if(n==="--name"){let i=e[r+1];i&&!i.startsWith("--")?(o.pubName=i,r+=2):r+=1}else if(n==="--allow-clone")o.allowClone=!0,r+=1;else if(n==="--meta-data"){let i=e[r+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,r+=2}else{o.remainingArgs=e.slice(r);break}}if(o.command!=="auth"&&!o.apikey){let n=this.getApiKeyFromConfig(t);o.apikey=n||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
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=X});var L=_((go,ve)=>{var{spawn:_t}=require("child_process"),N=require("path"),Se=require("fs"),Z=class{constructor(e){this.config=e}findExecutablePath(){let e=N.dirname(require.main.filename);for(let t of this.config.executablePaths){let o=N.resolve(e,t);if(Se.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=N.dirname(process.execPath),o=[N.join(t,"..","lib","node_modules","makecoder","dist",e),N.join(t,"node_modules","makecoder","dist",e)];for(let r of o)if(Se.existsSync(r))return r;return null}async launch(e={}){let{remainingArgs:t=[],codevServer:o,apikey:r=null,extraEnv:s={}}=e;try{let n=this.findExecutablePath();return process.env.CODEV_DEBUG&&console.log(`executablePath: ${n}`),new Promise((i,a)=>{let l={...process.env,...this.config.environmentVariables(o),...s};r&&(l.CODER_APIKEY=r);let d=["--no-warnings"];process.env.CODEV_INSPECT_BRK==="True"&&d.push("--inspect-brk"),d.push(n,...t);let u=_t("node",d,{env:l,stdio:"inherit"});u.on("error",m=>{console.error(`Failed to start: ${m.message}`),a(m)}),u.on("exit",m=>i(m)),process.on("SIGINT",()=>{}),process.on("SIGTERM",()=>{u.kill("SIGTERM"),setTimeout(()=>{u.killed||u.kill("SIGKILL")},8e3)})})}catch(n){throw n}}};ve.exports=Z});var Ee=_((yo,Ce)=>{var St=L(),Q=class extends St{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"})})}};Ce.exports=Q});var De=_((bo,Oe)=>{var vt=L(),{spawn:Ct,execFileSync:Et}=require("child_process"),H=require("path"),R=require("fs"),ee=class extends vt{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=H.join(o,".bun","bin",t);if(R.existsSync(s))return s}if(o){let s=H.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 r=this._getBunPlatformPackage();if(r)try{let s=H.dirname(require.resolve(`${r}/package.json`)),n=H.join(s,"bin",t);if(R.existsSync(n))return n}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:r=null,extraEnv:s={}}=e,n=this.findExecutablePath(),i=this._resolveBunPath();return process.env.CODEV_DEBUG&&(console.log(`executablePath (bun): ${n}`),console.log(`bunPath: ${i}`)),new Promise((a,l)=>{let d={...process.env,...this.config.environmentVariables(o),CODER_EXECPATH:R.realpathSync(process.argv[1]),...s};r&&(d.CODER_APIKEY=r);let u=Ct(i,[n,...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}`),l(m)}),u.on("exit",m=>a(m)),process.on("SIGINT",()=>{}),process.on("SIGTERM",()=>{u.kill("SIGTERM"),setTimeout(()=>{u.killed||u.kill("SIGKILL")},8e3)})})}};Oe.exports=ee});var Te=_((Io,Ae)=>{var Ot=L(),te=class extends Ot{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=te});var qe=_((wo,Pe)=>{var Dt=L(),oe=class extends Dt{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,r=["-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:[...r,...t]})}};Pe.exports=oe});var Ne=_(($o,Ue)=>{var F=require("fs"),je=require("path"),{spawn:Be}=require("child_process"),re=class{constructor(){this.extensionId="codev.codev-background";let e=require.main?je.dirname(require.main.filename):__dirname;this.extensionPath=je.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"]}),r="";o.stdout.on("data",s=>{r+=s.toString().trim()}),o.on("close",s=>{s===0&&r?(this._codeCommand=r,process.env.CODEV_DEBUG&&console.log(`Resolved code command path: ${r}`),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(r){console.log("which command failed:",r.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 r=Be(e,["--list-extensions"],o),s="";r.stdout.on("data",n=>{s+=n.toString()}),r.on("close",n=>{if(n===0){let i=s.split(`
9
- `).map(a=>a.trim());t(i.includes(this.extensionId))}else t(!1)}),r.on("error",n=>{process.env.CODEV_DEBUG&&(console.error("VSCode list extensions error:",n.message),console.error("Error code:",n.code),console.error("Error errno:",n.errno),console.error("Error syscall:",n.syscall)),t(!1)}),setTimeout(()=>{try{r.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(r=>{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 n=Be(o,e,s);n.on("close",a=>{r(a===0)}),n.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)),r(!1)});let i=t.timeout||3e4;setTimeout(()=>{try{n.kill()}catch{}r(!1)},i)}catch(s){process.env.CODEV_DEBUG&&console.error("Failed to spawn VSCode command:",s.message),r(!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=re});var Fe=_((xo,Re)=>{var E=require("fs"),T=require("path"),At=require("readline"),{execSync:V}=require("child_process"),Le=require("os"),ne=class{constructor(){this.serverUrl="https://makecoder.com/bigapis/codev/v1/coderpub"}getClaudeJsonlPath(e,t=!1){let o=e.replace(/[/_]/g,"-"),r=T.join(Le.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: ${r}`)),!E.existsSync(r))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=E.readdirSync(r).filter(n=>n.endsWith(".jsonl")).map(n=>({name:n,path:T.join(r,n),mtime:E.statSync(T.join(r,n)).mtime,size:E.statSync(T.join(r,n)).size})).sort((n,i)=>i.mtime-n.mtime);return t&&(console.log(` \u627E\u5230 ${s.length} \u4E2A JSONL \u6587\u4EF6:`),s.forEach((n,i)=>{let a=(n.size/1024).toFixed(2),l=n.mtime.toLocaleString(),d=i===0?" <- \u6700\u65B0":"";console.log(` ${i+1}. ${n.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=At.createInterface({input:process.stdin,output:process.stdout});return new Promise((t,o)=>{e.question("\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0 (name): ",r=>{e.close();let s=r.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,r=Le.tmpdir(),s=`coder-pub-${Date.now()}.zip`,n=T.join(r,s);try{let i=!1;if(E.existsSync(T.join(e,".git")))try{V(`git archive -o "${n}" 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(" ");V(`zip -r "${n}" . ${l}`,{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 a=this.getClaudeJsonlPath(e,!0);if(a){let l=T.join(r,"coder.pub.jsonl"),u=(E.statSync(a).size/1024).toFixed(2);console.log(`
12
- \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}`),E.copyFileSync(a,l),console.log(" \u2713 \u5DF2\u590D\u5236\u5230\u4E34\u65F6\u76EE\u5F55"),console.log(` \u76EE\u6807 ZIP: ${n}`),console.log(" \u76EE\u6807\u6587\u4EF6\u540D: coder.pub.jsonl"),V(`zip -j "${n}" "${l}"`,{stdio:"pipe"}),console.log(" \u2713 \u5DF2\u6DFB\u52A0\u5230 ZIP \u5305"),E.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)
7
+ `))}};_e.exports=Z});var L=_((xo,Ce)=>{var{spawn:vt}=require("child_process"),N=require("path"),ve=require("fs"),Q=class{constructor(e){this.config=e}findExecutablePath(){let e=N.dirname(require.main.filename);for(let t of this.config.executablePaths){let o=N.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=N.dirname(process.execPath),o=[N.join(t,"..","lib","node_modules","makecoder","dist",e),N.join(t,"node_modules","makecoder","dist",e)];for(let r of o)if(ve.existsSync(r))return r;return null}async launch(e={}){let{remainingArgs:t=[],codevServer:o,apikey:r=null,extraEnv:s={}}=e;try{let n=this.findExecutablePath();return process.env.CODEV_DEBUG&&console.log(`executablePath: ${n}`),new Promise((i,c)=>{let l={...process.env,...this.config.environmentVariables(o),...s};r&&(l.CODER_APIKEY=r);let d=["--no-warnings"];process.env.CODEV_INSPECT_BRK==="True"&&d.push("--inspect-brk"),d.push(n,...t);let u=vt("node",d,{env:l,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(n){throw n}}};Ce.exports=Q});var De=_((ko,Ee)=>{var Ct=L(),ee=class extends Ct{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"})})}};Ee.exports=ee});var Ae=_((_o,Oe)=>{var Et=L(),{spawn:Dt,execFileSync:Ot}=require("child_process"),V=require("path"),R=require("fs"),te=class extends Et{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 Ot(t,["--version"],{stdio:"ignore"}),t}catch{}if(o){let s=V.join(o,".bun","bin",t);if(R.existsSync(s))return s}if(o){let s=V.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 r=this._getBunPlatformPackage();if(r)try{let s=V.dirname(require.resolve(`${r}/package.json`)),n=V.join(s,"bin",t);if(R.existsSync(n))return n}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:r=null,extraEnv:s={}}=e,n=this.findExecutablePath(),i=this._resolveBunPath();return process.env.CODEV_DEBUG&&(console.log(`executablePath (bun): ${n}`),console.log(`bunPath: ${i}`)),new Promise((c,l)=>{let d={...process.env,...this.config.environmentVariables(o),CODER_EXECPATH:R.realpathSync(process.argv[1]),...s};r&&(d.CODER_APIKEY=r);let u=Dt(i,[n,...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}`),l(m)}),u.on("exit",m=>c(m)),process.on("SIGINT",()=>{}),process.on("SIGTERM",()=>{u.kill("SIGTERM"),setTimeout(()=>{u.killed||u.kill("SIGKILL")},8e3)})})}};Oe.exports=te});var Pe=_((So,Te)=>{var At=L(),oe=class extends At{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"})})}};Te.exports=oe});var Ue=_((vo,Be)=>{var{execFileSync:qe}=require("child_process"),F=require("path"),je=require("fs"),Tt=L(),Pt={"linux-x64":"makecoder-codex-linux-x64","darwin-arm64":"makecoder-codex-darwin-arm64","win32-x64":"makecoder-codex-win32-x64"},qt=5e3,re=class extends Tt{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,apikey:r=null}=e,s=["-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"'],n=this._injectDesktopEnv(t,r);try{return await super.launch({...e,remainingArgs:[...s,...t]})}finally{n&&(await new Promise(i=>setTimeout(i,qt)),this._removeDesktopEnv(n))}}_isAppSubcommand(e){for(let t=0;t<e.length;t++){let o=e[t];if(o==="-c"||o==="--config"){t++;continue}if(!o.startsWith("-"))return o==="app"}return!1}_findCodexBinaryPath(){let{platform:e,arch:t}=process,o=Pt[`${e}-${t}`],r=e==="win32"?"codex.exe":"codex";if(o)try{let s=require.resolve(`${o}/package.json`),n=F.join(F.dirname(s),"bin",r);if(je.existsSync(n))return n}catch{}try{let s=F.dirname(this.findExecutablePath()),n=[F.join(s,r)];o&&n.push(F.join(s,"..","node_modules",o,"bin",r));for(let i of n)if(je.existsSync(i))return i}catch{}return null}_injectDesktopEnv(e,t){if(process.platform!=="darwin"||!this._isAppSubcommand(e))return null;let o=this._findCodexBinaryPath();if(!o)return process.env.CODEV_DEBUG&&console.log("[codex app] \u672A\u627E\u5230 fork codex \u4E8C\u8FDB\u5236\uFF0C\u8DF3\u8FC7 CODEX_CLI_PATH \u6CE8\u5165\uFF1B\u684C\u9762 App \u5C06\u4F7F\u7528\u81EA\u5E26 codex\uFF08\u4E0D\u8D70\u4EE3\u7406\uFF09"),null;let r={CODEX_CLI_PATH:o};t&&(r.CODER_APIKEY=t);let s=[];for(let[n,i]of Object.entries(r))try{qe("launchctl",["setenv",n,i],{stdio:"ignore"}),s.push(n)}catch(c){process.env.CODEV_DEBUG&&console.log(`[codex app] launchctl setenv ${n} \u5931\u8D25: ${c.message}`)}return process.env.CODEV_DEBUG&&s.length&&console.log(`[codex app] \u5DF2\u6CE8\u5165 launchd \u73AF\u5883\u53D8\u91CF: ${s.join(", ")} (binary: ${o})`),s.length?s:null}_removeDesktopEnv(e){for(let t of e)try{qe("launchctl",["unsetenv",t],{stdio:"ignore"})}catch(o){process.env.CODEV_DEBUG&&console.log(`[codex app] launchctl unsetenv ${t} \u5931\u8D25: ${o.message}`)}}};Be.exports=re});var Fe=_((Co,Re)=>{var M=require("fs"),Ne=require("path"),{spawn:Le}=require("child_process"),ne=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(M.existsSync(e))try{return M.accessSync(e,M.constants.F_OK|M.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"]}),r="";o.stdout.on("data",s=>{r+=s.toString().trim()}),o.on("close",s=>{s===0&&r?(this._codeCommand=r,process.env.CODEV_DEBUG&&console.log(`Resolved code command path: ${r}`),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):!!M.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(r){console.log("which command failed:",r.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 r=Le(e,["--list-extensions"],o),s="";r.stdout.on("data",n=>{s+=n.toString()}),r.on("close",n=>{if(n===0){let i=s.split(`
9
+ `).map(c=>c.trim());t(i.includes(this.extensionId))}else t(!1)}),r.on("error",n=>{process.env.CODEV_DEBUG&&(console.error("VSCode list extensions error:",n.message),console.error("Error code:",n.code),console.error("Error errno:",n.errno),console.error("Error syscall:",n.syscall)),t(!1)}),setTimeout(()=>{try{r.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(r=>{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 n=Le(o,e,s);n.on("close",c=>{r(c===0)}),n.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)),r(!1)});let i=t.timeout||3e4;setTimeout(()=>{try{n.kill()}catch{}r(!1)},i)}catch(s){process.env.CODEV_DEBUG&&console.error("Failed to spawn VSCode command:",s.message),r(!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)}}};Re.exports=ne});var Ge=_((Eo,Je)=>{var E=require("fs"),q=require("path"),jt=require("readline"),{execSync:K}=require("child_process"),Me=require("os"),se=class{constructor(){this.serverUrl="https://makecoder.com/bigapis/codev/v1/coderpub"}getClaudeJsonlPath(e,t=!1){let o=e.replace(/[/_]/g,"-"),r=q.join(Me.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: ${r}`)),!E.existsSync(r))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=E.readdirSync(r).filter(n=>n.endsWith(".jsonl")).map(n=>({name:n,path:q.join(r,n),mtime:E.statSync(q.join(r,n)).mtime,size:E.statSync(q.join(r,n)).size})).sort((n,i)=>i.mtime-n.mtime);return t&&(console.log(` \u627E\u5230 ${s.length} \u4E2A JSONL \u6587\u4EF6:`),s.forEach((n,i)=>{let c=(n.size/1024).toFixed(2),l=n.mtime.toLocaleString(),d=i===0?" <- \u6700\u65B0":"";console.log(` ${i+1}. ${n.name} (${c} 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=jt.createInterface({input:process.stdin,output:process.stdout});return new Promise((t,o)=>{e.question("\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0 (name): ",r=>{e.close();let s=r.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,r=Me.tmpdir(),s=`coder-pub-${Date.now()}.zip`,n=q.join(r,s);try{let i=!1;if(E.existsSync(q.join(e,".git")))try{K(`git archive -o "${n}" 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(" ");K(`zip -r "${n}" . ${l}`,{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 l=q.join(r,"coder.pub.jsonl"),u=(E.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: ${l}`),E.copyFileSync(c,l),console.log(" \u2713 \u5DF2\u590D\u5236\u5230\u4E34\u65F6\u76EE\u5F55"),console.log(` \u76EE\u6807 ZIP: ${n}`),console.log(" \u76EE\u6807\u6587\u4EF6\u540D: coder.pub.jsonl"),K(`zip -j "${n}" "${l}"`,{stdio:"pipe"}),console.log(" \u2713 \u5DF2\u6DFB\u52A0\u5230 ZIP \u5305"),E.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)
13
13
  `)}else console.log(`\u26A0\uFE0F [allow-clone] \u672A\u627E\u5230 Claude Code \u751F\u6210\u8BB0\u5F55
14
- `)}return n}catch(i){throw new Error(`\u521B\u5EFA\u538B\u7F29\u5305\u5931\u8D25: ${i.message}`)}}async upload(e,t,o,r,s=!1){let n=r?`${r}/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: ${n}`),console.log(` \u9879\u76EE\u540D\u79F0: ${t}`),console.log(` ZIP \u6587\u4EF6: ${e}`));try{let a=`curl -s -X POST "${n}" -H "Authorization: Bearer ${i}" -F "name=${t}" -F "zip_file=@${e}"`;s&&console.log(" \u6267\u884C\u4E0A\u4F20\u547D\u4EE4...");let l=V(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{E.existsSync(e)&&E.unlinkSync(e)}catch{}}async publish(e){let{apikey:t,serverBaseUrl:o,allowClone:r}=e,{name:s}=e,n=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()}`),r&&console.log("\u{1F513} allow-clone: \u542F\u7528 (\u5C06\u5305\u542B AI \u751F\u6210\u8BB0\u5F55)"),console.log(),n=await this.createZip(process.cwd(),{allowClone:r});let a=(E.statSync(n).size/(1024*1024)).toFixed(2);console.log(`\u{1F4CA} \u538B\u7F29\u5305\u5927\u5C0F: ${a} MB`),r&&console.log(`
14
+ `)}return n}catch(i){throw new Error(`\u521B\u5EFA\u538B\u7F29\u5305\u5931\u8D25: ${i.message}`)}}async upload(e,t,o,r,s=!1){let n=r?`${r}/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: ${n}`),console.log(` \u9879\u76EE\u540D\u79F0: ${t}`),console.log(` ZIP \u6587\u4EF6: ${e}`));try{let c=`curl -s -X POST "${n}" -H "Authorization: Bearer ${i}" -F "name=${t}" -F "zip_file=@${e}"`;s&&console.log(" \u6267\u884C\u4E0A\u4F20\u547D\u4EE4...");let l=K(c,{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(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{E.existsSync(e)&&E.unlinkSync(e)}catch{}}async publish(e){let{apikey:t,serverBaseUrl:o,allowClone:r}=e,{name:s}=e,n=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()}`),r&&console.log("\u{1F513} allow-clone: \u542F\u7528 (\u5C06\u5305\u542B AI \u751F\u6210\u8BB0\u5F55)"),console.log(),n=await this.createZip(process.cwd(),{allowClone:r});let c=(E.statSync(n).size/(1024*1024)).toFixed(2);console.log(`\u{1F4CA} \u538B\u7F29\u5305\u5927\u5C0F: ${c} MB`),r&&console.log(`
16
16
  \u{1F310} [allow-clone] \u5F00\u59CB\u4E0A\u4F20\u5230\u670D\u52A1\u5668...`);let l=await this.upload(n,s,t,o,r);return l.code===0?(console.log(`
17
17
  \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(`
18
18
  \u274C \u53D1\u5E03\u5931\u8D25: ${l.message||l.reason}`),1)}catch(i){return console.error(`
19
19
  \u274C ${i.message}`),1}finally{n&&this.cleanup(n)}}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(`
20
- `))}};Re.exports=ne});var se=_((ko,Me)=>{function Tt(){return process.env.CODER_NESTED==="1"||!process.stdout.isTTY}Me.exports={shouldSuppressUpdateNotice:Tt}});var Ge=_((_o,Je)=>{var ie=require("https"),x=require("fs"),C=require("path"),z=require("os"),{shouldSuppressUpdateNotice:Pt}=se(),P="https://makecoder.com/skillhub",ae=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=z.homedir();return[C.join(e,".agents","skills")]}_request(e,t,o){return new Promise((r,s)=>{let n=new URL(`${P}${t}`),i={hostname:n.hostname,port:n.port||443,path:n.pathname+n.search,method:e,headers:o?{Authorization:`Bearer ${o}`}:{}},a=ie.request(i,l=>{if(l.statusCode>=300&&l.statusCode<400&&l.headers.location)return this._request(e,l.headers.location,o).then(r).catch(s);let d="";l.on("data",u=>d+=u),l.on("end",()=>r({status:l.statusCode,body:d}))});a.on("error",s),a.end()})}fetchWithAuth(e,t){return new Promise((o,r)=>{let s=new URL(e),n={hostname:s.hostname,port:s.port||443,path:s.pathname+s.search,method:"GET",headers:t?{Authorization:`Bearer ${t}`}:{}};ie.get(n,i=>{if(i.statusCode>=300&&i.statusCode<400&&i.headers.location)return this.fetchWithAuth(i.headers.location,t).then(o).catch(r);let a="";i.on("data",l=>{a+=l}),i.on("end",()=>o({status:i.statusCode,body:a}))}).on("error",r)})}async handle({skillsSubcommand:e,skillsArg:t,skillsRemainingArgs:o,apikey:r}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;if(e==="publish")return await this.publish(o||[],r);if(e==="unpublish")return await this.unpublish(t,r);if(e==="list")return await this.listTeamSkills(o||[],r);if(e==="my-skills")return await this.listMySkills(o||[],r);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 n=await this.checkUpdates(r);if(n.length===0)console.log("\u2705 \u6240\u6709 skill \u5747\u4E3A\u6700\u65B0\u7248\u672C");else{console.log(`
20
+ `))}};Je.exports=se});var ie=_((Do,He)=>{function Bt(){return process.env.CODER_NESTED==="1"||!process.stdout.isTTY}He.exports={shouldSuppressUpdateNotice:Bt}});var Ke=_((Oo,Ve)=>{var ce=require("https"),x=require("fs"),C=require("path"),z=require("os"),{shouldSuppressUpdateNotice:Ut}=ie(),j="https://makecoder.com/skillhub",ae=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=z.homedir();return[C.join(e,".agents","skills")]}_request(e,t,o){return new Promise((r,s)=>{let n=new URL(`${j}${t}`),i={hostname:n.hostname,port:n.port||443,path:n.pathname+n.search,method:e,headers:o?{Authorization:`Bearer ${o}`}:{}},c=ce.request(i,l=>{if(l.statusCode>=300&&l.statusCode<400&&l.headers.location)return this._request(e,l.headers.location,o).then(r).catch(s);let d="";l.on("data",u=>d+=u),l.on("end",()=>r({status:l.statusCode,body:d}))});c.on("error",s),c.end()})}fetchWithAuth(e,t){return new Promise((o,r)=>{let s=new URL(e),n={hostname:s.hostname,port:s.port||443,path:s.pathname+s.search,method:"GET",headers:t?{Authorization:`Bearer ${t}`}:{}};ce.get(n,i=>{if(i.statusCode>=300&&i.statusCode<400&&i.headers.location)return this.fetchWithAuth(i.headers.location,t).then(o).catch(r);let c="";i.on("data",l=>{c+=l}),i.on("end",()=>o({status:i.statusCode,body:c}))}).on("error",r)})}async handle({skillsSubcommand:e,skillsArg:t,skillsRemainingArgs:o,apikey:r}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;if(e==="publish")return await this.publish(o||[],r);if(e==="unpublish")return await this.unpublish(t,r);if(e==="list")return await this.listTeamSkills(o||[],r);if(e==="my-skills")return await this.listMySkills(o||[],r);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 n=await this.checkUpdates(r);if(n.length===0)console.log("\u2705 \u6240\u6709 skill \u5747\u4E3A\u6700\u65B0\u7248\u672C");else{console.log(`
21
21
  \u53D1\u73B0 ${n.length} \u4E2A\u53EF\u66F4\u65B0\u7684 skill:
22
22
  `);for(let i of n)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?r?await this.install(t,r):(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(!r)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;if(t)return await this.install(t,r);console.log("\u{1F50D} \u68C0\u67E5\u53EF\u66F4\u65B0\u7684 skill...");let s=await this.checkUpdates(r);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...
23
- `);let n=0,i=0,a=!1;for(let l of s){let d=await this.install(l.name,r);d==="EACCES"?(a=!0,i++):d!==0?i++:n++}console.log(`
24
- \u66F4\u65B0\u5B8C\u6210: ${n} \u6210\u529F, ${i} \u5931\u8D25`);try{let l=C.join(z.homedir(),".agents","skills",".update-cache.json");x.existsSync(l)&&x.unlinkSync(l)}catch{}if(a){let l=this.getSkillDirs()[0];console.error(`
23
+ `);let n=0,i=0,c=!1;for(let l of s){let d=await this.install(l.name,r);d==="EACCES"?(c=!0,i++):d!==0?i++:n++}console.log(`
24
+ \u66F4\u65B0\u5B8C\u6210: ${n} \u6210\u529F, ${i} \u5931\u8D25`);try{let l=C.join(z.homedir(),".agents","skills",".update-cache.json");x.existsSync(l)&&x.unlinkSync(l)}catch{}if(c){let l=this.getSkillDirs()[0];console.error(`
25
25
  \u26A0\uFE0F \u90E8\u5206 skill \u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u5148\u8FD0\u884C:
26
- 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=P.replace(/\/$/,"");console.log(`\u{1F50D} \u6B63\u5728\u4ECE ${P} \u67E5\u627E skill...`);let r;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;r=JSON.parse(u.body)}catch(u){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${u.message}`),1}let s=(r.skills||[])[0];if(!s)return console.error(`\u274C \u672A\u627E\u5230 skill: ${e}`),1;let n=Array.from(new Set(["SKILL.md",...s.files||[]])),i=`${o}/.well-known/agent-skills/${s.name}`,a={};for(let u of n)try{let m=await this.fetchWithAuth(`${i}/${u}`,t);if(m.status!==200){console.warn(`\u26A0\uFE0F \u8DF3\u8FC7 ${u} (HTTP ${m.status})`);continue}a[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 l={name:s.name,version:s.version||null,installedAt:new Date().toISOString()};for(let u of this.getSkillDirs()){let m=C.join(u,s.name);x.mkdirSync(m,{recursive:!0});try{for(let[p,h]of Object.entries(a)){let f=C.join(m,p);x.mkdirSync(C.dirname(f),{recursive:!0}),x.writeFileSync(f,h,"utf8")}x.writeFileSync(C.join(m,".skill-meta.json"),JSON.stringify(l,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=z.homedir(),o=[".claude",".codex",".gemini"].map(r=>C.join(t,r,"skills",e));for(let r of o)if(x.existsSync(r))try{x.rmSync(r,{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 r=C.join(t,o.name),s=C.join(r,".skill-meta.json"),n=null;if(x.existsSync(s))try{n=JSON.parse(x.readFileSync(s,"utf8"))}catch{}e.push({name:o.name,dir:r,meta:n})}return e}async checkUpdates(e){let t=this.getInstalledSkills();if(t.length===0)return[];let o=P.replace(/\/$/,""),r=[];for(let s of t){let n=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!==n&&r.push({name:s.name,localVersion:n,remoteVersion:l.version})}catch{}}return r}notifyAndRefreshUpdates(e){let t=C.join(z.homedir(),".agents","skills",".update-cache.json");if(!Pt())try{if(x.existsSync(t)){let n=JSON.parse(x.readFileSync(t,"utf8"));if(Array.isArray(n.updates)&&n.updates.length>0){let a=n.updates.length,l;if(a<=3)l=n.updates.map(d=>`${d.name} (${d.localVersion} \u2192 ${d.remoteVersion})`).join(", ");else{let d=n.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,r=0;try{r=JSON.parse(x.readFileSync(t,"utf8")).checkedAt||0}catch{}!this.getInstalledSkills().some(n=>!n.meta?.version)&&Date.now()-r<o||setImmediate(async()=>{try{let n=await this.checkUpdates(e);x.mkdirSync(C.dirname(t),{recursive:!0}),x.writeFileSync(t,JSON.stringify({checkedAt:Date.now(),updates:n},null,2),"utf8")}catch{}})}remove(e){let t=!1;for(let o of this.getSkillDirs()){let r=C.join(o,e);x.existsSync(r)&&(x.rmSync(r,{recursive:!0,force:!0}),console.log(` \u{1F5D1}\uFE0F ${r}`),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=`${P}/api/web/skills?q=${encodeURIComponent(e)}&sort=relevance&page=0&size=12`;return new Promise(o=>{ie.get(t,r=>{let s="";r.on("data",n=>{s+=n}),r.on("end",()=>{try{let n=JSON.parse(s);if(n.code!==0)return console.error(`\u274C \u67E5\u8BE2\u5931\u8D25: ${n.msg}`),o(1);let i=n.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 ${n.data.total} \u4E2A\u7ED3\u679C:
27
- `);for(let a of i)console.log(` ${a.slug.padEnd(20)} ${a.summary}`);o(0)}catch(n){console.error(`\u274C \u89E3\u6790\u54CD\u5E94\u5931\u8D25: ${n.message}`),o(1)}})}).on("error",r=>{console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${r.message}`),o(1)})})}async publish(e,t){let{execSync:o}=require("child_process"),r=require("os"),s=null,n="PUBLIC",i=null,a=null,l=null,d=null;for(let y=0;y<e.length;y++)if(e[y]==="--team"||e[y]==="-t"||e[y]==="--namespace"||e[y]==="-n")s=e[++y];else if(e[y]==="--visibility"||e[y]==="-v")n=e[++y];else if(e[y]==="--meta-data"){let b=e[++y];try{JSON.parse(b)}catch(g){return console.error(`\u274C --meta-data \u4E0D\u662F\u5408\u6CD5\u7684 JSON\uFF1A${g.message}`),1}i=b}else if(!e[y].startsWith("-")){let b=e[y];x.existsSync(b)&&x.statSync(b).isDirectory()?d=b:a=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||(n="NAMESPACE_ONLY");let p=["PUBLIC","NAMESPACE_ONLY","PRIVATE"];if(!p.includes(n))return console.error(`\u274C visibility \u5FC5\u987B\u662F: ${p.join(", ")}`),1;if(a){if(!x.existsSync(a))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${a}`),1}else{let y=d?C.resolve(d):process.cwd();l=C.join(r.tmpdir(),`skill-pub-${Date.now()}.zip`),console.log(`\u{1F4E6} \u6B63\u5728\u6253\u5305 ${y}...`);try{x.existsSync(C.join(y,".git"))?(o(`git archive -o "${l}" HEAD`,{cwd:y,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:y,stdio:"pipe"})}catch(b){return console.error(`\u274C \u6253\u5305\u5931\u8D25: ${b.message}`),1}a=l}let h=`${P}/api/v1/skills/${encodeURIComponent(u)}/publish?visibility=${encodeURIComponent(n)}`,f=t;console.log(`\u{1F680} \u6B63\u5728\u53D1\u5E03\u5230 ${P}`),console.log(` team: ${u}`),console.log(` visibility: ${n}`);try{let y=i?` -F "meta_data=${i.replace(/"/g,'\\"')}"`:"",b=`curl -s -X POST "${h}" -H "Authorization: Bearer ${f}" -F "file=@${a}"${y}`,g=o(b,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),I=JSON.parse(g);if(I.code===0){let $=I.data,k=$.namespace==="global"?`https://makecoder.com/skillhub/${$.slug}`:`https://makecoder.com/skillhub/space/${$.namespace}/${$.slug}`;return console.log(`
26
+ 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=j.replace(/\/$/,"");console.log(`\u{1F50D} \u6B63\u5728\u4ECE ${j} \u67E5\u627E skill...`);let r;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;r=JSON.parse(u.body)}catch(u){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${u.message}`),1}let s=(r.skills||[])[0];if(!s)return console.error(`\u274C \u672A\u627E\u5230 skill: ${e}`),1;let n=Array.from(new Set(["SKILL.md",...s.files||[]])),i=`${o}/.well-known/agent-skills/${s.name}`,c={};for(let u of n)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 l={name:s.name,version:s.version||null,installedAt:new Date().toISOString()};for(let u of this.getSkillDirs()){let m=C.join(u,s.name);x.mkdirSync(m,{recursive:!0});try{for(let[p,h]of Object.entries(c)){let f=C.join(m,p);x.mkdirSync(C.dirname(f),{recursive:!0}),x.writeFileSync(f,h,"utf8")}x.writeFileSync(C.join(m,".skill-meta.json"),JSON.stringify(l,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=z.homedir(),o=[".claude",".codex",".gemini"].map(r=>C.join(t,r,"skills",e));for(let r of o)if(x.existsSync(r))try{x.rmSync(r,{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 r=C.join(t,o.name),s=C.join(r,".skill-meta.json"),n=null;if(x.existsSync(s))try{n=JSON.parse(x.readFileSync(s,"utf8"))}catch{}e.push({name:o.name,dir:r,meta:n})}return e}async checkUpdates(e){let t=this.getInstalledSkills();if(t.length===0)return[];let o=j.replace(/\/$/,""),r=[];for(let s of t){let n=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!==n&&r.push({name:s.name,localVersion:n,remoteVersion:l.version})}catch{}}return r}notifyAndRefreshUpdates(e){let t=C.join(z.homedir(),".agents","skills",".update-cache.json");if(!Ut())try{if(x.existsSync(t)){let n=JSON.parse(x.readFileSync(t,"utf8"));if(Array.isArray(n.updates)&&n.updates.length>0){let c=n.updates.length,l;if(c<=3)l=n.updates.map(d=>`${d.name} (${d.localVersion} \u2192 ${d.remoteVersion})`).join(", ");else{let d=n.updates[0];l=`${d.name} (${d.localVersion} \u2192 ${d.remoteVersion}) \u7B49 ${c} \u4E2A skill \u8981\u66F4\u65B0`}console.error(`\x1B[33m\u26A1 ${l}\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,r=0;try{r=JSON.parse(x.readFileSync(t,"utf8")).checkedAt||0}catch{}!this.getInstalledSkills().some(n=>!n.meta?.version)&&Date.now()-r<o||setImmediate(async()=>{try{let n=await this.checkUpdates(e);x.mkdirSync(C.dirname(t),{recursive:!0}),x.writeFileSync(t,JSON.stringify({checkedAt:Date.now(),updates:n},null,2),"utf8")}catch{}})}remove(e){let t=!1;for(let o of this.getSkillDirs()){let r=C.join(o,e);x.existsSync(r)&&(x.rmSync(r,{recursive:!0,force:!0}),console.log(` \u{1F5D1}\uFE0F ${r}`),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=`${j}/api/web/skills?q=${encodeURIComponent(e)}&sort=relevance&page=0&size=12`;return new Promise(o=>{ce.get(t,r=>{let s="";r.on("data",n=>{s+=n}),r.on("end",()=>{try{let n=JSON.parse(s);if(n.code!==0)return console.error(`\u274C \u67E5\u8BE2\u5931\u8D25: ${n.msg}`),o(1);let i=n.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 ${n.data.total} \u4E2A\u7ED3\u679C:
27
+ `);for(let c of i)console.log(` ${c.slug.padEnd(20)} ${c.summary}`);o(0)}catch(n){console.error(`\u274C \u89E3\u6790\u54CD\u5E94\u5931\u8D25: ${n.message}`),o(1)}})}).on("error",r=>{console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${r.message}`),o(1)})})}async publish(e,t){let{execSync:o}=require("child_process"),r=require("os"),s=null,n="PUBLIC",i=null,c=null,l=null,d=null;for(let y=0;y<e.length;y++)if(e[y]==="--team"||e[y]==="-t"||e[y]==="--namespace"||e[y]==="-n")s=e[++y];else if(e[y]==="--visibility"||e[y]==="-v")n=e[++y];else if(e[y]==="--meta-data"){let b=e[++y];try{JSON.parse(b)}catch(g){return console.error(`\u274C --meta-data \u4E0D\u662F\u5408\u6CD5\u7684 JSON\uFF1A${g.message}`),1}i=b}else if(!e[y].startsWith("-")){let b=e[y];x.existsSync(b)&&x.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||(n="NAMESPACE_ONLY");let p=["PUBLIC","NAMESPACE_ONLY","PRIVATE"];if(!p.includes(n))return console.error(`\u274C visibility \u5FC5\u987B\u662F: ${p.join(", ")}`),1;if(c){if(!x.existsSync(c))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${c}`),1}else{let y=d?C.resolve(d):process.cwd();l=C.join(r.tmpdir(),`skill-pub-${Date.now()}.zip`),console.log(`\u{1F4E6} \u6B63\u5728\u6253\u5305 ${y}...`);try{x.existsSync(C.join(y,".git"))?(o(`git archive -o "${l}" HEAD`,{cwd:y,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:y,stdio:"pipe"})}catch(b){return console.error(`\u274C \u6253\u5305\u5931\u8D25: ${b.message}`),1}c=l}let h=`${j}/api/v1/skills/${encodeURIComponent(u)}/publish?visibility=${encodeURIComponent(n)}`,f=t;console.log(`\u{1F680} \u6B63\u5728\u53D1\u5E03\u5230 ${j}`),console.log(` team: ${u}`),console.log(` visibility: ${n}`);try{let y=i?` -F "meta_data=${i.replace(/"/g,'\\"')}"`:"",b=`curl -s -X POST "${h}" -H "Authorization: Bearer ${f}" -F "file=@${c}"${y}`,g=o(b,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),I=JSON.parse(g);if(I.code===0){let $=I.data,k=$.namespace==="global"?`https://makecoder.com/skillhub/${$.slug}`:`https://makecoder.com/skillhub/space/${$.namespace}/${$.slug}`;return console.log(`
28
28
  \u2705 \u53D1\u5E03\u6210\u529F!`),console.log(` ${$.namespace}--${$.slug}@${$.version}`),console.log(` ${k}`),$.status==="PUBLISHED"?console.log(" \u72B6\u6001: \u5DF2\u53D1\u5E03"):console.log(" \u72B6\u6001: \u5F85\u5BA1\u6838"),0}else return console.error(`
29
29
  \u274C \u53D1\u5E03\u5931\u8D25: ${I.msg||JSON.stringify(I)}`),1}catch(y){let b=y.stdout;if(b)try{let g=JSON.parse(b);return console.error(`
30
- \u274C \u53D1\u5E03\u5931\u8D25: ${g.msg||b}`),1}catch{}return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${y.message}`),1}finally{l&&x.existsSync(l)&&x.unlinkSync(l)}}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,r;if(e.includes("--")){let n=e.split("--");if(n.length!==2||!n[0]||!n[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(n[0]),r=n[1]}else o=this._resolveNamespace(null),r=e;let s=`/api/v1/skills/${encodeURIComponent(o)}/${encodeURIComponent(r)}`;console.log(`\u{1F5D1}\uFE0F \u6B63\u5728\u4E0B\u67B6 ${o}--${r}`);try{let n=await this._request("DELETE",s,t),i=JSON.parse(n.body);return i.code===0?(console.log(`\u2705 \u5DF2\u4E0B\u67B6 ${o}--${r}`),0):(console.error(`\u274C \u4E0B\u67B6\u5931\u8D25: ${i.msg||JSON.stringify(i)}`),1)}catch(n){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${n.message}`),1}}async listTeamSkills(e,t){let o=0,r=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]?r=parseInt(e[++d],10):(e[d]==="--team"||e[d]==="-t")&&e[d+1]&&(s=e[++d]);let n=this._resolveNamespace(s),i=n==="global",a=i?"":`&namespace=${encodeURIComponent(n)}`,l=`/api/web/skills?sort=newest&page=${o}&size=${r}${a}`;try{let d=await this._request("GET",l,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 ${n}`;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:
30
+ \u274C \u53D1\u5E03\u5931\u8D25: ${g.msg||b}`),1}catch{}return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${y.message}`),1}finally{l&&x.existsSync(l)&&x.unlinkSync(l)}}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,r;if(e.includes("--")){let n=e.split("--");if(n.length!==2||!n[0]||!n[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(n[0]),r=n[1]}else o=this._resolveNamespace(null),r=e;let s=`/api/v1/skills/${encodeURIComponent(o)}/${encodeURIComponent(r)}`;console.log(`\u{1F5D1}\uFE0F \u6B63\u5728\u4E0B\u67B6 ${o}--${r}`);try{let n=await this._request("DELETE",s,t),i=JSON.parse(n.body);return i.code===0?(console.log(`\u2705 \u5DF2\u4E0B\u67B6 ${o}--${r}`),0):(console.error(`\u274C \u4E0B\u67B6\u5931\u8D25: ${i.msg||JSON.stringify(i)}`),1)}catch(n){return console.error(`\u274C \u8BF7\u6C42\u5931\u8D25: ${n.message}`),1}}async listTeamSkills(e,t){let o=0,r=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]?r=parseInt(e[++d],10):(e[d]==="--team"||e[d]==="-t")&&e[d+1]&&(s=e[++d]);let n=this._resolveNamespace(s),i=n==="global",c=i?"":`&namespace=${encodeURIComponent(n)}`,l=`/api/web/skills?sort=newest&page=${o}&size=${r}${c}`;try{let d=await this._request("GET",l,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 ${n}`;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
31
  `);for(let f of m){let y=`${f.slug}`.padEnd(28),b=`\u2B50 ${f.starCount??0}`.padEnd(8),g=`\u2193 ${f.downloadCount??0}`.padEnd(10);console.log(` ${y} ${b} ${g} ${f.summary||""}`)}return(o+1)*r<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,r=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]&&(r=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=${r}`,t),n=JSON.parse(s.body);if(n.code!==0)return console.error(`\u274C \u83B7\u53D6\u5931\u8D25: ${n.msg}`),1;let i=n.data?.items||[],a=n.data?.total||0;if(i.length===0)return console.log("\u6682\u65E0\u5DF2\u53D1\u5E03\u7684 skill"),0;console.log(`\u5171 ${a} \u4E2A skill:
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,r=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]&&(r=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=${r}`,t),n=JSON.parse(s.body);if(n.code!==0)return console.error(`\u274C \u83B7\u53D6\u5931\u8D25: ${n.msg}`),1;let i=n.data?.items||[],c=n.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
33
  `);for(let l of i){let d=`${l.namespace==="global"?"":"--"}${l.slug}`.padEnd(36),u=`\u2B50 ${l.starCount??0}`.padEnd(8),m=`\u2193 ${l.downloadCount??0}`.padEnd(10);console.log(` ${d} ${u} ${m} [${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}}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=ae});var Ve=_((So,He)=>{var qt=require("https"),K="https://makecoder.com/wiki",jt=`${K}/api`,O=c=>`${K}/doc/${c}`,ce=c=>`${K}/collection/${c}`;function Bt(c){return c.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}var Ut={"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}
34
+ `))}};Ve.exports=ae});var We=_((Ao,ze)=>{var Nt=require("https"),W="https://makecoder.com/wiki",Lt=`${W}/api`,D=a=>`${W}/doc/${a}`,le=a=>`${W}/collection/${a}`;function Rt(a){return a.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}var Ft={"collection-info":{endpoint:"collections.info",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",buildBody:a=>({id:a}),print:a=>{let e=a.data;console.log(`ID: ${e.id}
35
35
  \u540D\u79F0: ${e.name}
36
36
  \u63CF\u8FF0: ${e.description||""}
37
- \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 r=e.indexOf("--permission");return r!==-1&&(t.permission=e[r+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 r=e.indexOf("--sort");r!==-1&&(t.sort=e[r+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(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 r=e.indexOf("--direction");return r!==-1&&(t.direction=e[r+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 r=e.indexOf("--end-date");return r!==-1&&(t.endDate=e[r+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(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 r=e.indexOf("--collection");r!==-1&&(t.collectionId=e[r+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:(a,e)=>{let t={id:a},o=e.indexOf("--query");o!==-1&&(t.query=e[o+1]);let r=e.indexOf("--permission");return r!==-1&&(t.permission=e[r+1]),t},print:(a,e)=>{let t=a.data?.memberships||a.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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>{let t={id:a,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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>({id:a,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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>{let t={id:a,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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>({id:a,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:a=>({id:a}),print:(a,e)=>{let t=a.data?.groupMemberships||a.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:(a,e)=>{let t={id:a},o=e.indexOf("--format");return o!==-1&&(t.format=e[o+1]),t},print:a=>console.log(`\u2705 \u5BFC\u51FA\u4EFB\u52A1\u5DF2\u521B\u5EFA: ${a.data?.id||""}`)},"export-all":{endpoint:"collections.export_all",buildBody:(a,e)=>{let t={},o=e.indexOf("--format");return o!==-1&&(t.format=e[o+1]),t},print:a=>console.log(`\u2705 \u5168\u91CF\u5BFC\u51FA\u4EFB\u52A1\u5DF2\u521B\u5EFA: ${a.data?.id||""}`)},"collection-move":{endpoint:"collections.move",requireId:"\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID",requireArgs:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u76EE\u6807 index\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>({id:a,index:e[1]}),print:()=>console.log("\u2705 \u96C6\u5408\u5DF2\u79FB\u52A8")},archived:{endpoint:"documents.archived",buildBody:(a,e)=>{let t={},o=e.indexOf("--collection");o!==-1&&(t.collectionId=e[o+1]);let r=e.indexOf("--sort");r!==-1&&(t.sort=e[r+1]);let s=e.indexOf("--direction");return s!==-1&&(t.direction=e[s+1]),t},print:(a,e)=>{let t=a.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)":D(o.urlId||o.id)})))}},deleted:{endpoint:"documents.deleted",buildBody:(a,e)=>{let t={},o=e.indexOf("--sort");o!==-1&&(t.sort=e[o+1]);let r=e.indexOf("--direction");return r!==-1&&(t.direction=e[r+1]),t},print:(a,e)=>{let t=a.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:(a,e)=>{let t={id:a},o=e.indexOf("--start-date");o!==-1&&(t.startDate=e[o+1]);let r=e.indexOf("--end-date");return r!==-1&&(t.endDate=e[r+1]),t},print:(a,e)=>{let t=a.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:(a,e)=>({id:a,includeChildDocuments:e.includes("--include-children")}),print:a=>{let e=a.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:(a,e)=>({query:[a,...e.slice(1)].join(" ")}),print:(a,e)=>{let t=a.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)":D(o.urlId||o.id)})))}},duplicate:{endpoint:"documents.duplicate",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(a,e)=>{let t={id:a},o=e.indexOf("--title");o!==-1&&(t.title=e[o+1]);let r=e.indexOf("--collection");r!==-1&&(t.collectionId=e[r+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:a=>{let t=(a.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:a=>({id:a}),print:()=>console.log("\u2705 \u6587\u6863\u5DF2\u53D6\u6D88\u53D1\u5E03")},templatize:{endpoint:"documents.templatize",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:(a,e)=>{let t={id:a,publish:!0},o=e.indexOf("--collection");return o!==-1&&(t.collectionId=e[o+1]),t},print:a=>console.log(`\u2705 \u5DF2\u8F6C\u4E3A\u6A21\u677F: ${a.data.id}`)},"doc-members":{endpoint:"documents.memberships",requireId:"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID",buildBody:a=>({id:a}),print:(a,e)=>{let t=a.data?.memberships||a.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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>{let t={id:a,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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>({id:a,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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>{let t={id:a,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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>({id:a,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:a=>({id:a}),print:(a,e)=>{let t=a.data?.groupMemberships||a.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:a=>({id:a}),print:(a,e)=>{let t=a.data?.children||[];if(!t.length){console.log("\u6682\u65E0\u5B50\u6587\u6863");return}e.printTree(t,"",1/0,0)}},shares:{endpoint:"shares.list",buildBody:(a,e)=>{let t={},o=e.indexOf("--document");return o!==-1&&(t.documentId=e[o+1]),t},print:(a,e)=>{let t=a.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:a=>({id:a}),print:a=>{let e=a.data;console.log(`ID: ${e.id}
38
38
  \u6587\u6863: ${e.documentTitle||e.documentId||""}
39
39
  \u5DF2\u53D1\u5E03: ${e.published?"\u662F":"\u5426"}
40
- 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}
41
- ${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 r=e.indexOf("--filter");return r!==-1&&(t.filter=e[r+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:(a,e)=>({documentId:a,published:e.includes("--published"),includeChildDocuments:e.includes("--include-children")}),print:a=>console.log(`\u2705 \u5206\u4EAB\u5DF2\u521B\u5EFA: ${a.data.id}
41
+ ${a.data.url||""}`)},"share-update":{endpoint:"shares.update",requireId:"\u274C \u8BF7\u6307\u5B9A\u5206\u4EAB ID",buildBody:(a,e)=>{let t={id:a};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:a=>({id:a}),expectOk:!0,print:()=>console.log("\u2705 \u5206\u4EAB\u5DF2\u64A4\u9500")},users:{endpoint:"users.list",buildBody:(a,e)=>{let t={},o=e.indexOf("--query");o!==-1&&(t.query=e[o+1]);let r=e.indexOf("--filter");return r!==-1&&(t.filter=e[r+1]),t},print:(a,e)=>{let t=a.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:a=>({id:a}),print:a=>{let e=a.data;console.log(`ID: ${e.id}
42
42
  \u59D3\u540D: ${e.name}
43
43
  \u90AE\u7BB1: ${e.email||""}
44
- \u89D2\u8272: ${e.role||""}`)}},invite:{endpoint:"users.invite",buildBody:(c,e)=>{let t=e.indexOf("--email"),o=e.indexOf("--name"),r=e.indexOf("--role"),s=t!==-1?e[t+1]:c||e[0],n=o!==-1?e[o+1]:e[1],i=r!==-1?e[r+1]:e[2];return{invites:[{email:s,name:n,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:(a,e)=>{let t=e.indexOf("--email"),o=e.indexOf("--name"),r=e.indexOf("--role"),s=t!==-1?e[t+1]:a||e[0],n=o!==-1?e[o+1]:e[1],i=r!==-1?e[r+1]:e[2];return{invites:[{email:s,name:n,role:i}]}},requireArgs:(a,e)=>{let t=e.indexOf("--email");return!(t!==-1?e[t+1]:a||e[0])&&"\u274C \u8BF7\u6307\u5B9A\u90AE\u7BB1\uFF08\u7B2C\u4E00\u4E2A\u53C2\u6570\u6216 --email\uFF09"},print:(a,e)=>{let t=a.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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u89D2\u8272\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF1Aadmin|member|viewer\uFF09",buildBody:(a,e)=>({id:a,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:a=>({id:a}),print:()=>console.log("\u2705 \u7528\u6237\u5DF2\u6682\u505C")},"user-activate":{endpoint:"users.activate",requireId:"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID",buildBody:a=>({id:a}),print:()=>console.log("\u2705 \u7528\u6237\u5DF2\u6FC0\u6D3B")},groups:{endpoint:"groups.list",buildBody:(a,e)=>{let t={},o=e.indexOf("--query");return o!==-1&&(t.query=e[o+1]),t},print:(a,e)=>{let t=a.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:a=>({id:a}),print:a=>{let e=a.data;console.log(`ID: ${e.id}
45
45
  \u540D\u79F0: ${e.name}
46
- \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 r=e.indexOf("--document");r!==-1&&(t.documentId=e[r+1]);let s=e.indexOf("--collection");s!==-1&&(t.collectionId=e[s+1]);let n=e.indexOf("--type");return n!==-1&&(t.name=e[n+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:(a,e)=>({name:[a,...e.slice(1)].join(" ")}),print:a=>console.log(`\u2705 \u7FA4\u7EC4\u5DF2\u521B\u5EFA: ${a.data.id} \u2014 ${a.data.name}`)},"update-group":{endpoint:"groups.update",requireId:"\u274C \u8BF7\u6307\u5B9A\u7FA4\u7EC4 ID",buildBody:(a,e)=>{let t={id:a},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:a=>({id:a}),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:a=>({id:a}),print:(a,e)=>{let t=a.data?.groupMemberships||a.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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>({id:a,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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u7528\u6237 ID\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>({id:a,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:a=>({documentId:a}),print:(a,e)=>{let t=a.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:a=>({documentId:a}),print:()=>console.log("\u2705 \u6D4F\u89C8\u5DF2\u8BB0\u5F55")},subscriptions:{endpoint:"subscriptions.list",buildBody:(a,e)=>{let t={event:"documents.update"};a&&(t.documentId=a);let o=e.indexOf("--collection");return o!==-1&&(t.collectionId=e[o+1]),t},requireArgs:(a,e)=>!a&&e.indexOf("--collection")===-1&&"\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID \u6216 --collection <collectionId>",print:(a,e)=>{let t=a.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:a=>({documentId:a,event:"documents.update"}),print:a=>console.log(`\u2705 \u5DF2\u8BA2\u9605: ${a.data.id}`)},unsubscribe:{endpoint:"subscriptions.delete",requireId:"\u274C \u8BF7\u6307\u5B9A\u8BA2\u9605 ID",buildBody:a=>({id:a}),expectOk:!0,print:()=>console.log("\u2705 \u5DF2\u53D6\u6D88\u8BA2\u9605")},events:{endpoint:"events.list",buildBody:(a,e)=>{let t={},o=e.indexOf("--actor");o!==-1&&(t.actorId=e[o+1]);let r=e.indexOf("--document");r!==-1&&(t.documentId=e[r+1]);let s=e.indexOf("--collection");s!==-1&&(t.collectionId=e[s+1]);let n=e.indexOf("--type");return n!==-1&&(t.name=e[n+1]),t},print:(a,e)=>{let t=a.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:(a,e)=>{let t={},o=e.indexOf("--collection");return o!==-1&&(t.collectionId=e[o+1]),t},print:(a,e)=>{let t=a.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:a=>({id:a}),print:a=>{let e=a.data;console.log(`ID: ${e.id}
47
47
  \u6807\u9898: ${e.title}
48
- \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 r=e.indexOf("--text");return r!==-1&&(t.data={type:"doc",content:[{type:"paragraph",content:[{type:"text",text:e[r+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:(a,e)=>!e[1]&&"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F\u6807\u9898\uFF08\u7B2C\u4E8C\u4E2A\u53C2\u6570\uFF09",buildBody:(a,e)=>{let t=e.indexOf("--text"),o=t!==-1?e[t+1]:"";return{collectionId:a,title:e[1],data:{type:"doc",content:o?[{type:"paragraph",content:[{type:"text",text:o}]}]:[]}}},print:a=>console.log(`\u2705 \u6A21\u677F\u5DF2\u521B\u5EFA: ${a.data.id} \u2014 ${a.data.title}`)},"update-template":{endpoint:"templates.update",requireId:"\u274C \u8BF7\u6307\u5B9A\u6A21\u677F ID",buildBody:(a,e)=>{let t={id:a},o=e.indexOf("--title");o!==-1&&(t.title=e[o+1]);let r=e.indexOf("--text");return r!==-1&&(t.data={type:"doc",content:[{type:"paragraph",content:[{type:"text",text:e[r+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:a=>({id:a}),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:(a,e)=>{let t={id:a},o=e.indexOf("--title");return o!==-1&&(t.title=e[o+1]),t},print:a=>console.log(`\u2705 \u6A21\u677F\u5DF2\u590D\u5236: ${a.data.id} \u2014 ${a.data.title}`)},"file-ops":{endpoint:"fileOperations.list",buildBody:(a,e)=>{let t={},o=e.indexOf("--type");return o!==-1&&(t.type=e[o+1]),t},print:(a,e)=>{let t=a.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:a=>({id:a}),print:a=>{let e=a.data;console.log(`ID: ${e.id}
49
49
  \u7C7B\u578B: ${e.type||""}
50
50
  \u72B6\u6001: ${e.state||""}
51
- \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")}},le=class{constructor(e){this.argParser=e||null}post(e,t,o,r){return new Promise((s,n)=>{let i=JSON.stringify(t),a=new URL(`${jt}/${e}`),l={"Content-Type":"application/json","Content-Length":Buffer.byteLength(i),Authorization:`Bearer ${o}`};r&&(l["X-Team-Id"]=r);let d={hostname:a.hostname,port:a.port||443,path:a.pathname,method:"POST",headers:l},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",n),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],r=[...e.slice(0,t),...e.slice(t+2)];return{teamId:o,remaining:r}}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:r}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;let s=r;if(!s)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;let n=o||[],{teamId:i,remaining:a}=this.extractTeamFlag(n);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),y=f&&f.data&&f.data.items||[];y.length>0&&this.argParser.setTeam(y[0].id,y[0].name||"")}}catch{}}let l=i||(this.argParser?(()=>{let m=this.argParser.getTeam();return m&&m.id?m.id:null})():null),d=Bt(e);if(typeof this[d]=="function")return await this[d](t,a,s,l);let u=Ut[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,r,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 n=e.buildBody(t,o),i=await this.post(e.endpoint,n,r,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,r){let s=t.indexOf("-d"),n=s!==-1?parseInt(t[s+1],10):null;if(!e){let d=await this.post("collections.list",{},o,r),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(n===null){let d=await this.post("documents.list",{collectionId:e,sort:"updatedAt",direction:"DESC"},o,r),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)":O(p.urlId||p.id)}))),0):(console.log("\u6682\u65E0\u6587\u6863"),0)}let i=await this.post("collections.documents",{id:e},o,r),a=this.parseJson(i.body);if(!a?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",i.body),1;let l=n===-1?1/0:n;return this.printTree(a.data,"",l,0),0}async createCollection(e,t,o,r){let s=t.indexOf("--permission"),n="read_write";s!==-1&&(n=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"),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"),y;f!==-1&&(y=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 I=t.slice(1).filter(D=>!D.startsWith("--")).join(" "),$={name:b,description:I,sharing:!0};$.permission=n==="null"||n==="none"?null:n,a&&($.icon=a),d&&($.color=d),(m||h)&&($.sort={field:m||"index",direction:h||"asc"}),y&&($.index=y);let w=await this.post("collections.create",$,o,r),k=this.parseJson(w.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:",w.body),1)}async updateCollection(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s={id:e},n=t.indexOf("--name");n!==-1&&(s.name=t[n+1]);let i=t.indexOf("--description");i!==-1&&(s.description=t[i+1]);let a=t.indexOf("--permission");if(a!==-1){let p=t[a+1];s.permission=p==="null"||p==="none"?null:p}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,r),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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.delete",{id:e},o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.archive",{id:e},o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.restore",{id:e},o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("documents.info",{id:e},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.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:a=>({id:a}),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:a=>({commentId:a}),print:(a,e)=>{let t=a.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:a=>a?{documentId:a}:{},print:(a,e)=>{let t=a.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:a=>({id:a}),expectOk:!0,print:()=>console.log("\u2705 \u9644\u4EF6\u5DF2\u5220\u9664")}},de=class{constructor(e){this.argParser=e||null}post(e,t,o,r){return new Promise((s,n)=>{let i=JSON.stringify(t),c=new URL(`${Lt}/${e}`),l={"Content-Type":"application/json","Content-Length":Buffer.byteLength(i),Authorization:`Bearer ${o}`};r&&(l["X-Team-Id"]=r);let d={hostname:c.hostname,port:c.port||443,path:c.pathname,method:"POST",headers:l},u=Nt.request(d,m=>{let p="";m.on("data",h=>p+=h),m.on("end",()=>s({status:m.statusCode,body:p}))});u.on("error",n),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],r=[...e.slice(0,t),...e.slice(t+2)];return{teamId:o,remaining:r}}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:r}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;let s=r;if(!s)return console.error("\u274C \u7F3A\u5C11 API Key\uFF0C\u8BF7\u5148\u767B\u5F55: coder auth login"),1;let n=o||[],{teamId:i,remaining:c}=this.extractTeamFlag(n);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),y=f&&f.data&&f.data.items||[];y.length>0&&this.argParser.setTeam(y[0].id,y[0].name||"")}}catch{}}let l=i||(this.argParser?(()=>{let m=this.argParser.getTeam();return m&&m.id?m.id:null})():null),d=Rt(e);if(typeof this[d]=="function")return await this[d](t,c,s,l);let u=Ft[e];return u?await this._runCommand(u,t,c,s,l):(console.error(`\u274C \u672A\u77E5\u5B50\u547D\u4EE4: ${e}`),this.showHelp(),1)}async _runCommand(e,t,o,r,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 n=e.buildBody(t,o),i=await this.post(e.endpoint,n,r,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,r){let s=t.indexOf("-d"),n=s!==-1?parseInt(t[s+1],10):null;if(!e){let d=await this.post("collections.list",{},o,r),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)":le(p.urlId||p.id)}))),0):(console.log("\u6682\u65E0\u96C6\u5408"),0)}if(n===null){let d=await this.post("documents.list",{collectionId:e,sort:"updatedAt",direction:"DESC"},o,r),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)":D(p.urlId||p.id)}))),0):(console.log("\u6682\u65E0\u6587\u6863"),0)}let i=await this.post("collections.documents",{id:e},o,r),c=this.parseJson(i.body);if(!c?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",i.body),1;let l=n===-1?1/0:n;return this.printTree(c.data,"",l,0),0}async createCollection(e,t,o,r){let s=t.indexOf("--permission"),n="read_write";s!==-1&&(n=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 l=t.indexOf("--color"),d;l!==-1&&(d=t[l+1],t.splice(l,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"),y;f!==-1&&(y=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 I=t.slice(1).filter(A=>!A.startsWith("--")).join(" "),$={name:b,description:I,sharing:!0};$.permission=n==="null"||n==="none"?null:n,c&&($.icon=c),d&&($.color=d),(m||h)&&($.sort={field:m||"index",direction:h||"asc"}),y&&($.index=y);let w=await this.post("collections.create",$,o,r),k=this.parseJson(w.body);return k?.data?(console.log(`\u2705 \u96C6\u5408\u5DF2\u521B\u5EFA: ${k.data.id} \u2014 ${k.data.name}
52
+ ${le(k.data.urlId||k.data.id)}`),0):(console.error("\u274C \u521B\u5EFA\u5931\u8D25:",w.body),1)}async updateCollection(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s={id:e},n=t.indexOf("--name");n!==-1&&(s.name=t[n+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 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,r),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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.delete",{id:e},o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.archive",{id:e},o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u96C6\u5408 ID"),1;let s=await this.post("collections.restore",{id:e},o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("documents.info",{id:e},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.data;return console.log(`\u6807\u9898: ${i.title}
53
53
  ID: ${i.id}
54
54
  \u96C6\u5408: ${i.collectionId}
55
55
  \u66F4\u65B0: ${i.updatedAt}`),i.text&&console.log(`
56
56
  ${i.text}`),0}_findDocPositionInTree(e,t,o=null){for(let r=0;r<e.length;r++){if(e[r].id===t)return{index:r,parentDocumentId:o};if(e[r].children?.length){let s=this._findDocPositionInTree(e[r].children,t,e[r].id);if(s)return s}}return null}async publish(e,t,o,r){let s=require("fs"),n=require("path");if(!e)return console.error(`\u274C \u7528\u6CD5: wiki publish <collectionId> <title> [text]
57
- 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 m=t.indexOf("--index"),p=m!==-1?parseInt(t[m+1],10):void 0,h=t.indexOf("--after");if(h!==-1){let w=t[h+1];if(!w)return console.error("\u274C \u8BF7\u6307\u5B9A --after \u7684\u6587\u6863 UUID"),1;let k=await this.post("collections.documents",{id:e},o,r),D=this.parseJson(k.body);if(!D?.data)return console.error("\u274C \u83B7\u53D6\u96C6\u5408\u7ED3\u6784\u5931\u8D25:",k.body),1;let G=this._findDocPositionInTree(D.data,w);if(!G)return console.error(`\u274C \u5728\u96C6\u5408\u4E2D\u672A\u627E\u5230\u6587\u6863 ${w}\uFF0C\u8BF7\u786E\u8BA4 UUID \u6B63\u786E\u4E14\u6587\u6863\u5C5E\u4E8E\u8BE5\u96C6\u5408`),1;p=G.index+1,G.parentDocumentId&&!l&&(l=G.parentDocumentId)}if(d!==-1){let w=t[d+1];if(!w)return console.error("\u274C \u8BF7\u6307\u5B9A --file \u8DEF\u5F84"),1;let k=n.resolve(w);if(!s.existsSync(k))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${k}`),1;a=s.readFileSync(k,"utf8");let D=a.match(/^#\s+(.+)/m);if(!D)return console.error("\u274C \u6587\u4EF6\u7F3A\u5C11 H1 \u6807\u9898\uFF08# \u6807\u9898\uFF09\uFF0C\u8BF7\u6DFB\u52A0\u540E\u91CD\u8BD5"),1;i=D[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 f={collectionId:e,title:i,text:"",publish:!0};l&&(f.parentDocumentId=l),p!==void 0&&!isNaN(p)&&(f.index=p);let y=await this.post("documents.create",f,o,r),b=this.parseJson(y.body);if(!b?.data)return console.error("\u274C \u521B\u5EFA\u6587\u6863\u5931\u8D25:",y.body),1;let g=b.data.id;console.log(` \u521B\u5EFA\u6587\u6863: ${g}`);let I=await this.post("documents.update",{id:g,title:i,text:a,publish:!0},o,r),$=this.parseJson(I.body);return $?.data?(console.log(`\u2705 \u6587\u6863\u5DF2\u53D1\u5E03: ${$.data.title}
58
- ${O($.data.urlId||g)}`),0):(console.error("\u274C \u66F4\u65B0\u5185\u5BB9\u5931\u8D25:",I.body),1)}async update(e,t,o,r){let s=require("fs"),n=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 p=t[l+1];if(!p)return console.error("\u274C \u8BF7\u6307\u5B9A --file \u8DEF\u5F84"),1;let h=n.resolve(p);if(!s.existsSync(h))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${h}`),1;a=s.readFileSync(h,"utf8");let f=a.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(),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,r),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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=t.includes("--permanent"),n=await this.post("documents.delete",{id:e,...s?{permanent:!0}:{}},o,r);return this.parseJson(n.body)?.ok===!1||n.status>=400?(console.error("\u274C \u5220\u9664\u5931\u8D25:",n.body),1):(console.log(`\u2705 \u6587\u6863\u5DF2${s?"\u6C38\u4E45":""}\u5220\u9664`),0)}async move(e,t,o,r){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 n=await this.post("documents.move",s,o,r);return this.parseJson(n.body)?.data?(console.log("\u2705 \u6587\u6863\u5DF2\u79FB\u52A8"),0):(console.error("\u274C \u79FB\u52A8\u5931\u8D25:",n.body),1)}async archive(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("documents.archive",{id:e},o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s={id:e},n=t.indexOf("--revision");n!==-1&&t[n+1]&&(s.revisionId=t[n+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,r);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,r){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,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u7248\u672C ID"),1;let s=await this.post("revisions.info",{id:e},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.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,l,d=t.indexOf("--file"),u=t.indexOf("--parent");u!==-1&&(l=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 w=t[h+1];if(!w)return console.error("\u274C \u8BF7\u6307\u5B9A --after \u7684\u6587\u6863 UUID"),1;let k=await this.post("collections.documents",{id:e},o,r),A=this.parseJson(k.body);if(!A?.data)return console.error("\u274C \u83B7\u53D6\u96C6\u5408\u7ED3\u6784\u5931\u8D25:",k.body),1;let H=this._findDocPositionInTree(A.data,w);if(!H)return console.error(`\u274C \u5728\u96C6\u5408\u4E2D\u672A\u627E\u5230\u6587\u6863 ${w}\uFF0C\u8BF7\u786E\u8BA4 UUID \u6B63\u786E\u4E14\u6587\u6863\u5C5E\u4E8E\u8BE5\u96C6\u5408`),1;p=H.index+1,H.parentDocumentId&&!l&&(l=H.parentDocumentId)}if(d!==-1){let w=t[d+1];if(!w)return console.error("\u274C \u8BF7\u6307\u5B9A --file \u8DEF\u5F84"),1;let k=n.resolve(w);if(!s.existsSync(k))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${k}`),1;c=s.readFileSync(k,"utf8");let A=c.match(/^#\s+(.+)/m);if(!A)return console.error("\u274C \u6587\u4EF6\u7F3A\u5C11 H1 \u6807\u9898\uFF08# \u6807\u9898\uFF09\uFF0C\u8BF7\u6DFB\u52A0\u540E\u91CD\u8BD5"),1;i=A[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};l&&(f.parentDocumentId=l),p!==void 0&&!isNaN(p)&&(f.index=p);let y=await this.post("documents.create",f,o,r),b=this.parseJson(y.body);if(!b?.data)return console.error("\u274C \u521B\u5EFA\u6587\u6863\u5931\u8D25:",y.body),1;let g=b.data.id;console.log(` \u521B\u5EFA\u6587\u6863: ${g}`);let I=await this.post("documents.update",{id:g,title:i,text:c,publish:!0},o,r),$=this.parseJson(I.body);return $?.data?(console.log(`\u2705 \u6587\u6863\u5DF2\u53D1\u5E03: ${$.data.title}
58
+ ${D($.data.urlId||g)}`),0):(console.error("\u274C \u66F4\u65B0\u5185\u5BB9\u5931\u8D25:",I.body),1)}async update(e,t,o,r){let s=require("fs"),n=require("path");if(!e)return console.error("\u274C \u7528\u6CD5: wiki update <docId> <title> [text] | <docId> --file <path>"),1;let i,c,l=t.indexOf("--file");if(l!==-1){let p=t[l+1];if(!p)return console.error("\u274C \u8BF7\u6307\u5B9A --file \u8DEF\u5F84"),1;let h=n.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,r),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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=t.includes("--permanent"),n=await this.post("documents.delete",{id:e,...s?{permanent:!0}:{}},o,r);return this.parseJson(n.body)?.ok===!1||n.status>=400?(console.error("\u274C \u5220\u9664\u5931\u8D25:",n.body),1):(console.log(`\u2705 \u6587\u6863\u5DF2${s?"\u6C38\u4E45":""}\u5220\u9664`),0)}async move(e,t,o,r){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 n=await this.post("documents.move",s,o,r);return this.parseJson(n.body)?.data?(console.log("\u2705 \u6587\u6863\u5DF2\u79FB\u52A8"),0):(console.error("\u274C \u79FB\u52A8\u5931\u8D25:",n.body),1)}async archive(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s=await this.post("documents.archive",{id:e},o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s={id:e},n=t.indexOf("--revision");n!==-1&&t[n+1]&&(s.revisionId=t[n+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,r);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,r){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,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u7248\u672C ID"),1;let s=await this.post("revisions.info",{id:e},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.data;return console.log(`\u7248\u672C ID: ${i.id}
59
59
  \u7248\u672C\u540D: ${i.name||""}
60
60
  \u6587\u6863 ID: ${i.documentId}
61
61
  \u521B\u5EFA\u65F6\u95F4: ${i.createdAt}`),i.text&&console.log(`
62
- ${i.text}`),0}async drafts(e,t,o,r){let s=await this.post("documents.drafts",{sort:"updatedAt",direction:"DESC"},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.data||[];return i.length?(this.printTable(i.map(a=>({"ID(UUID,\u7528\u4E8EAPI)":a.id,\u6807\u9898:a.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":O(a.urlId||a.id)}))),0):(console.log("\u6682\u65E0\u8349\u7A3F"),0)}async recent(e,t,o,r){let s=await this.post("documents.viewed",{sort:"updatedAt",direction:"DESC"},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.data||[];return i.length?(this.printTable(i.map(a=>({"ID(UUID,\u7528\u4E8EAPI)":a.id,\u6807\u9898:a.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":O(a.urlId||a.id)}))),0):(console.log("\u6682\u65E0\u6D4F\u89C8\u8BB0\u5F55"),0)}async search(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u641C\u7D22\u5173\u952E\u8BCD"),1;let s=[e,...t.slice(1)].join(" "),n=await this.post("documents.search",{query:s,snippetMinWords:20,snippetMaxWords:30},o,r),i=this.parseJson(n.body);if(!i?.data)return console.error("\u274C \u641C\u7D22\u5931\u8D25:",n.body),1;let a=i.data||[];return a.length?(console.log(`\u627E\u5230 ${a.length} \u4E2A\u7ED3\u679C:
63
- `),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)":O(d.urlId||d.id)}})),0):(console.log(`\u6CA1\u6709\u627E\u5230\u4E0E "${s}" \u76F8\u5173\u7684\u6587\u6863`),0)}async stars(e,t,o,r){let s=await this.post("stars.list",{},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.data.stars||[];if(!i.length)return console.log("\u6682\u65E0\u6536\u85CF"),0;let a={};for(let l of n.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?O(d.urlId||d.id):u?ce(u.urlId):l.documentId?O(l.documentId):""}})),0}async star(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863\u6216\u96C6\u5408 ID"),1;let n=t.includes("--collection")?{collectionId:e}:{documentId:e},i=await this.post("stars.create",n,o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6536\u85CF ID"),1;let s=await this.post("stars.delete",{id:e},o,r);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,r){let s=e?{collectionId:e}:{},n=await this.post("pins.list",s,o,r),i=this.parseJson(n.body);if(!i?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",n.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:O(u?.urlId||d.documentId)}})),0}async pin(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s={documentId:e,...t[1]?{collectionId:t[1]}:{}},n=await this.post("pins.create",s,o,r),i=this.parseJson(n.body);return i?.data?(console.log(`\u2705 \u5DF2\u7F6E\u9876: ${i.data.id}`),0):(console.error("\u274C \u7F6E\u9876\u5931\u8D25:",n.body),1)}async unpin(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u7F6E\u9876 ID"),1;let s=await this.post("pins.delete",{id:e},o,r);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,r){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,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.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,r){let s=t.slice(1).join(" ");if(!e||!s)return console.error("\u274C \u7528\u6CD5: wiki comment <docId> <text>"),1;let n=await this.post("comments.create",{documentId:e,text:s},o,r),i=this.parseJson(n.body);return i?.data?(console.log(`\u2705 \u8BC4\u8BBA\u5DF2\u53D1\u5E03: ${i.data.id}`),0):(console.error("\u274C \u8BC4\u8BBA\u5931\u8D25:",n.body),1)}printTree(e,t,o,r){if(Array.isArray(e))for(let s=0;s<e.length;s++){let n=e[s],i=s===e.length-1,a=i?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",l=n.url?`${K}${n.url}`:O(n.id);console.log(`${t}${a}${n.title||n.id} \x1B[90m${l}\x1B[0m`),n.children?.length&&r+1<o&&this.printTree(n.children,t+(i?" ":"\u2502 "),o,r+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),r=(i,a)=>i+" ".repeat(Math.max(0,a-o(i))),s=t.map(i=>Math.max(o(i),...e.map(a=>o(a[i]||"")))),n=s.map(i=>"-".repeat(i)).join("-+-");console.log(t.map((i,a)=>r(i,s[a])).join(" | ")),console.log(n);for(let i of e)console.log(t.map((a,l)=>r(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"}],r=t.indexOf("--query"),s=r!==-1?t[r+1]:e||"",n=s?o.filter(i=>i.name.toLowerCase().includes(s.toLowerCase())||i.keywords.toLowerCase().includes(s.toLowerCase())):o;return n.length?(console.log(`\u5171 ${n.length} \u4E2A\u56FE\u6807${s?`\uFF08\u5173\u952E\u8BCD: "${s}"\uFF09`:""}:
62
+ ${i.text}`),0}async drafts(e,t,o,r){let s=await this.post("documents.drafts",{sort:"updatedAt",direction:"DESC"},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.data||[];return i.length?(this.printTable(i.map(c=>({"ID(UUID,\u7528\u4E8EAPI)":c.id,\u6807\u9898:c.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":D(c.urlId||c.id)}))),0):(console.log("\u6682\u65E0\u8349\u7A3F"),0)}async recent(e,t,o,r){let s=await this.post("documents.viewed",{sort:"updatedAt",direction:"DESC"},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.data||[];return i.length?(this.printTable(i.map(c=>({"ID(UUID,\u7528\u4E8EAPI)":c.id,\u6807\u9898:c.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":D(c.urlId||c.id)}))),0):(console.log("\u6682\u65E0\u6D4F\u89C8\u8BB0\u5F55"),0)}async search(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u641C\u7D22\u5173\u952E\u8BCD"),1;let s=[e,...t.slice(1)].join(" "),n=await this.post("documents.search",{query:s,snippetMinWords:20,snippetMaxWords:30},o,r),i=this.parseJson(n.body);if(!i?.data)return console.error("\u274C \u641C\u7D22\u5931\u8D25:",n.body),1;let c=i.data||[];return c.length?(console.log(`\u627E\u5230 ${c.length} \u4E2A\u7ED3\u679C:
63
+ `),this.printTable(c.map(l=>{let d=l.document||l;return{"docId(UUID,\u7528\u4E8EAPI)":d.id,\u6807\u9898:d.title,"URL(\u542BurlId,\u52FF\u7528\u4E8EAPI)":D(d.urlId||d.id)}})),0):(console.log(`\u6CA1\u6709\u627E\u5230\u4E0E "${s}" \u76F8\u5173\u7684\u6587\u6863`),0)}async stars(e,t,o,r){let s=await this.post("stars.list",{},o,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.data.stars||[];if(!i.length)return console.log("\u6682\u65E0\u6536\u85CF"),0;let c={};for(let l of n.data.documents||[])c[l.id]=l;return this.printTable(i.map(l=>{let d=l.documentId?c[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(d.urlId||d.id):u?le(u.urlId):l.documentId?D(l.documentId):""}})),0}async star(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863\u6216\u96C6\u5408 ID"),1;let n=t.includes("--collection")?{collectionId:e}:{documentId:e},i=await this.post("stars.create",n,o,r);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,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6536\u85CF ID"),1;let s=await this.post("stars.delete",{id:e},o,r);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,r){let s=e?{collectionId:e}:{},n=await this.post("pins.list",s,o,r),i=this.parseJson(n.body);if(!i?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",n.body),1;let c=i.data.pins||[];if(!c.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(c.map(d=>{let u=d.documentId?l[d.documentId]:null;return{pinId:d.id,\u6807\u9898:u?.title||d.documentId,URL:D(u?.urlId||d.documentId)}})),0}async pin(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6587\u6863 ID"),1;let s={documentId:e,...t[1]?{collectionId:t[1]}:{}},n=await this.post("pins.create",s,o,r),i=this.parseJson(n.body);return i?.data?(console.log(`\u2705 \u5DF2\u7F6E\u9876: ${i.data.id}`),0):(console.error("\u274C \u7F6E\u9876\u5931\u8D25:",n.body),1)}async unpin(e,t,o,r){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u7F6E\u9876 ID"),1;let s=await this.post("pins.delete",{id:e},o,r);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,r){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,r),n=this.parseJson(s.body);if(!n?.data)return console.error("\u274C \u8BF7\u6C42\u5931\u8D25:",s.body),1;let i=n.data||[];if(!i.length)return console.log("\u6682\u65E0\u8BC4\u8BBA"),0;for(let c of i){let l=this.extractCommentText(c.data);console.log(` [${c.id}] ${c.createdBy?.name||"?"}: ${l}`)}return 0}async comment(e,t,o,r){let s=t.slice(1).join(" ");if(!e||!s)return console.error("\u274C \u7528\u6CD5: wiki comment <docId> <text>"),1;let n=await this.post("comments.create",{documentId:e,text:s},o,r),i=this.parseJson(n.body);return i?.data?(console.log(`\u2705 \u8BC4\u8BBA\u5DF2\u53D1\u5E03: ${i.data.id}`),0):(console.error("\u274C \u8BC4\u8BBA\u5931\u8D25:",n.body),1)}printTree(e,t,o,r){if(Array.isArray(e))for(let s=0;s<e.length;s++){let n=e[s],i=s===e.length-1,c=i?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",l=n.url?`${W}${n.url}`:D(n.id);console.log(`${t}${c}${n.title||n.id} \x1B[90m${l}\x1B[0m`),n.children?.length&&r+1<o&&this.printTree(n.children,t+(i?" ":"\u2502 "),o,r+1)}}printTable(e){if(!e.length)return;let t=Object.keys(e[0]),o=i=>[...String(i)].reduce((c,l)=>c+(l.charCodeAt(0)>127?2:1),0),r=(i,c)=>i+" ".repeat(Math.max(0,c-o(i))),s=t.map(i=>Math.max(o(i),...e.map(c=>o(c[i]||"")))),n=s.map(i=>"-".repeat(i)).join("-+-");console.log(t.map((i,c)=>r(i,s[c])).join(" | ")),console.log(n);for(let i of e)console.log(t.map((c,l)=>r(String(i[c]||""),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"}],r=t.indexOf("--query"),s=r!==-1?t[r+1]:e||"",n=s?o.filter(i=>i.name.toLowerCase().includes(s.toLowerCase())||i.keywords.toLowerCase().includes(s.toLowerCase())):o;return n.length?(console.log(`\u5171 ${n.length} \u4E2A\u56FE\u6807${s?`\uFF08\u5173\u952E\u8BCD: "${s}"\uFF09`:""}:
64
64
  `),this.printTable(n.map(i=>({\u56FE\u6807\u540D:i.name,\u5173\u952E\u8BCD:i.keywords}))),console.log(`
65
65
  \u7528\u6CD5\u793A\u4F8B:`),console.log(` coder wiki create-collection "\u6211\u7684\u96C6\u5408" --icon ${n[0].name}`),console.log(` coder wiki update-collection <id> --icon ${n[0].name}`),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,r){let s=require("fs"),n=require("path"),i=t[1];if(!e||!i)return console.error("\u274C \u7528\u6CD5: wiki upload <docId> <filePath>"),1;let a=n.resolve(i);if(!s.existsSync(a))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${a}`),1;let l=s.readFileSync(a),d=n.basename(a),u=l.length,m=this._getContentType(a),p=await this.post("attachments.create",{name:d,documentId:e,size:u,contentType:m,preset:"documentAttachment"},o,r),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:y,attachment:b}=h.data;console.log(` \u4E0A\u4F20\u4E2D: ${d} (${Math.round(u/1024)}KB)`);let g=await this._uploadToS3(f,y,l,d,m);if(g.status>=300)return console.error(`\u274C \u4E0A\u4F20\u5931\u8D25 (HTTP ${g.status}):`,g.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 I=m.startsWith("image/")?`![${b.name}](${b.url})`:`[${b.name}](${b.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,r){let s=require("fs"),n=require("path"),i=t[1];if(!e||!i)return console.error("\u274C \u7528\u6CD5: wiki upload <docId> <filePath>"),1;let c=n.resolve(i);if(!s.existsSync(c))return console.error(`\u274C \u6587\u4EF6\u4E0D\u5B58\u5728: ${c}`),1;let l=s.readFileSync(c),d=n.basename(c),u=l.length,m=this._getContentType(c),p=await this.post("attachments.create",{name:d,documentId:e,size:u,contentType:m,preset:"documentAttachment"},o,r),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:y,attachment:b}=h.data;console.log(` \u4E0A\u4F20\u4E2D: ${d} (${Math.round(u/1024)}KB)`);let g=await this._uploadToS3(f,y,l,d,m);if(g.status>=300)return console.error(`\u274C \u4E0A\u4F20\u5931\u8D25 (HTTP ${g.status}):`,g.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 I=m.startsWith("image/")?`![${b.name}](${b.url})`:`[${b.name}](${b.url})`;return console.log(`
67
67
  \u5728 Markdown \u4E2D\u4F7F\u7528:
68
- ${I}`),0}async uploadUrl(e,t,o,r){let s=t[1];if(!e||!s)return console.error("\u274C \u7528\u6CD5: wiki upload-url <docId> <url>"),1;let n=await this.post("attachments.createFromUrl",{url:s,documentId:e,preset:"documentAttachment"},o,r),i=this.parseJson(n.body);if(!i?.data)return console.error("\u274C \u4ECE URL \u521B\u5EFA\u9644\u4EF6\u5931\u8D25:",n.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
+ ${I}`),0}async uploadUrl(e,t,o,r){let s=t[1];if(!e||!s)return console.error("\u274C \u7528\u6CD5: wiki upload-url <docId> <url>"),1;let n=await this.post("attachments.createFromUrl",{url:s,documentId:e,preset:"documentAttachment"},o,r),i=this.parseJson(n.body);if(!i?.data)return console.error("\u274C \u4ECE URL \u521B\u5EFA\u9644\u4EF6\u5931\u8D25:",n.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 l=c.contentType?.startsWith("image/")?`![${c.name}](${c.url})`:`[${c.name}](${c.url})`;return console.log(`
69
69
  \u5728 Markdown \u4E2D\u4F7F\u7528:
70
- ${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,r,s){return new Promise((n,i)=>{let a=`----FormBoundary${Math.random().toString(36).slice(2)}${Date.now()}`,l=[];for(let[b,g]of Object.entries(t))l.push(Buffer.from(`--${a}\r
70
+ ${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,r,s){return new Promise((n,i)=>{let c=`----FormBoundary${Math.random().toString(36).slice(2)}${Date.now()}`,l=[];for(let[b,g]of Object.entries(t))l.push(Buffer.from(`--${c}\r
71
71
  Content-Disposition: form-data; name="${b}"\r
72
72
  \r
73
73
  ${g}\r
74
- `));let d=Buffer.from(`--${a}\r
74
+ `));let d=Buffer.from(`--${c}\r
75
75
  Content-Disposition: form-data; name="file"; filename="${r}"\r
76
76
  Content-Type: ${s}\r
77
77
  \r
78
78
  `),u=Buffer.from(`\r
79
- --${a}--\r
80
- `),m=Buffer.concat([...l,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=${a}`,"Content-Length":m.length}},y=h.request(f,b=>{let g="";b.on("data",I=>g+=I),b.on("end",()=>n({status:b.statusCode,body:g}))});y.on("error",i),y.write(m),y.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
- `))}};He.exports=le});var Xe=_((vo,Ye)=>{var q=require("fs"),B=require("path"),We=require("os"),Nt=require("readline"),W=B.join(We.homedir(),".coder","config.json"),ze=process.env.MCP_CHANNEL_DIR||B.join(We.homedir(),".coder","mcp-channel"),Ke=["wecom"];function Y(c){return!c||c.length<=8?"****":c.slice(0,3)+"****"+c.slice(-3)}var de=class{load(){try{return JSON.parse(q.readFileSync(W,"utf8"))}catch{return{}}}save(e){let t=B.dirname(W);q.existsSync(t)||q.mkdirSync(t,{recursive:!0}),q.writeFileSync(W,JSON.stringify(e,null,2)+`
79
+ --${c}--\r
80
+ `),m=Buffer.concat([...l,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}},y=h.request(f,b=>{let g="";b.on("data",I=>g+=I),b.on("end",()=>n({status:b.statusCode,body:g}))});y.on("error",i),y.write(m),y.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
+ `))}};ze.exports=de});var Qe=_((To,Ze)=>{var P=require("fs"),O=require("path"),Mt=require("os"),Jt=require("readline"),Y=O.join(Mt.homedir(),".coder","config.json"),Ye=["wecom"];function Gt(){if(process.env.MCP_CHANNEL_DIR)return process.env.MCP_CHANNEL_DIR;let a=require.main&&require.main.filename||process.argv[1]||"",e=a?O.dirname(a):__dirname,t=[O.resolve(e,"..","packages","mcp-channel"),O.join(O.dirname(process.execPath),"..","lib","node_modules","makecoder","packages","mcp-channel"),O.join(O.dirname(process.execPath),"node_modules","makecoder","packages","mcp-channel")];for(let o of t)if(P.existsSync(o))return o;return t[0]}var Xe=Gt();function X(a){return!a||a.length<=8?"****":a.slice(0,3)+"****"+a.slice(-3)}var ue=class{load(){try{return JSON.parse(P.readFileSync(Y,"utf8"))}catch{return{}}}save(e){let t=O.dirname(Y);P.existsSync(t)||P.mkdirSync(t,{recursive:!0}),P.writeFileSync(Y,JSON.stringify(e,null,2)+`
82
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:r,claudeLauncher:s,parsedArgs:n}){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,n)}async launch(e,t,o){let r=this.getChannels().filter(p=>p.enabled!==!1);if(!r.length&&(console.log(`\u5C1A\u672A\u7ED1\u5B9A\u4EFB\u4F55\u6E20\u9053\uFF0C\u5F00\u59CB\u5F15\u5BFC\u914D\u7F6E...
83
- `),!await this.promptSetupChannel()||(r=this.getChannels().filter(h=>h.enabled!==!1),!r.length)))return 1;let s=null,n=e.indexOf("--channel-id");n!==-1&&(s=e[n+1],e=e.filter((p,h)=>h!==n&&h!==n+1));let i;if(s){if(i=r.find(p=>p.id===s),!i)return console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${s}`),1}else if(r.length===1)i=r[0];else if(i=await this.promptSelectChannel(r),!i)return 1;let a=B.join(ze,i.type);if(!q.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:W,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,m=i.botId?Y(i.botId):"(\u672A\u914D\u7F6E)";return console.log(`
83
+ `),!await this.promptSetupChannel()||(r=this.getChannels().filter(h=>h.enabled!==!1),!r.length)))return 1;let s=null,n=e.indexOf("--channel-id");n!==-1&&(s=e[n+1],e=e.filter((p,h)=>h!==n&&h!==n+1));let i;if(s){if(i=r.find(p=>p.id===s),!i)return console.error(`\u274C \u6E20\u9053\u4E0D\u5B58\u5728: ${s}`),1}else if(r.length===1)i=r[0];else if(i=await this.promptSelectChannel(r),!i)return 1;let c=O.join(Xe,i.type);if(!P.existsSync(c))return console.error(`\u274C MCP \u76EE\u5F55\u4E0D\u5B58\u5728: ${c}`),1;let l=["--plugin-dir",c,"--dangerously-load-development-channels",`plugin:${i.type}@${i.type}`],d={WECOM_CHANNEL_FILE:Y,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,m=i.botId?X(i.botId):"(\u672A\u914D\u7F6E)";return console.log(`
84
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=Nt.createInterface({input:process.stdin,output:process.stdout}),t=o=>new Promise(r=>e.question(o,r));try{for(;;){console.log(`\u8BF7\u914D\u7F6E\u4F01\u4E1A\u5FAE\u4FE1 AI Bot \u6E20\u9053\uFF1A
85
+ `),await t.launch(o)}async promptSetupChannel(){let e=Jt.createInterface({input:process.stdin,output:process.stdout}),t=o=>new Promise(r=>e.question(o,r));try{for(;;){console.log(`\u8BF7\u914D\u7F6E\u4F01\u4E1A\u5FAE\u4FE1 AI Bot \u6E20\u9053\uFF1A
86
86
  `);let o=(await t(" 1. \u8BF7\u7C98\u8D34 Bot ID: ")).trim();if(!o){console.error(`\u274C Bot ID \u4E0D\u80FD\u4E3A\u7A7A
87
87
  `);continue}let r=(await t(" 2. \u8BF7\u7C98\u8D34 Secret: ")).trim();if(!r){console.error(`\u274C Secret \u4E0D\u80FD\u4E3A\u7A7A
88
- `);continue}if(process.stdout.write(`\x1B[1A\x1B[2K 2. \u8BF7\u7C98\u8D34 Secret: ${Y(r)}
88
+ `);continue}if(process.stdout.write(`\x1B[1A\x1B[2K 2. \u8BF7\u7C98\u8D34 Secret: ${X(r)}
89
89
  `),console.log(`
90
90
  \u6B63\u5728\u9A8C\u8BC1\u8FDE\u63A5...`),!await this.testWecomConnection(o,r)){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
91
- `);continue}let n=`wecom-${Date.now()}`,i={id:n,type:"wecom",enabled:!0,botId:o,secret:r,createdAt:new Date().toISOString()},a=this.getChannels();return a.push(i),this.saveChannels(a),console.log(`\u2705 \u6E20\u9053\u7ED1\u5B9A\u6210\u529F: ${n}
92
- `),i}}finally{e.close()}}async testWecomConnection(e,t){let o=B.join(ze,"wecom"),r=B.join(o,"node_modules","@wecom","aibot-node-sdk");if(!q.existsSync(r))return!0;let s;try{({WSClient:s}=require(r))}catch{return this._testWecomConnectionSubprocess(e,t,r)}return this._runWecomClient(s,e,t)}_runWecomClient(e,t,o){return new Promise(r=>{let s=setTimeout(()=>{try{n.disconnect()}catch{}r(!1)},1e4),n=new e({botId:t,secret:o,maxReconnectAttempts:0,maxAuthFailureAttempts:0,logger:{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}}});n.on("authenticated",()=>{clearTimeout(s);try{n.disconnect()}catch{}r(!0)}),n.on("error",()=>{clearTimeout(s);try{n.disconnect()}catch{}r(!1)}),n.connect()})}_testWecomConnectionSubprocess(e,t,o){let{execSync:r,spawn:s}=require("child_process"),n;try{n=r("which node",{encoding:"utf8"}).trim()}catch{}if(!n)try{n=r("which bun",{encoding:"utf8"}).trim()}catch{}if(!n)return!0;let i=`
91
+ `);continue}let n=`wecom-${Date.now()}`,i={id:n,type:"wecom",enabled:!0,botId:o,secret:r,createdAt:new Date().toISOString()},c=this.getChannels();return c.push(i),this.saveChannels(c),console.log(`\u2705 \u6E20\u9053\u7ED1\u5B9A\u6210\u529F: ${n}
92
+ `),i}}finally{e.close()}}async testWecomConnection(e,t){let o=O.join(Xe,"wecom"),r=O.join(o,"node_modules","@wecom","aibot-node-sdk");if(!P.existsSync(r))return!0;let s;try{({WSClient:s}=require(r))}catch{return this._testWecomConnectionSubprocess(e,t,r)}return this._runWecomClient(s,e,t)}_runWecomClient(e,t,o){return new Promise(r=>{let s=setTimeout(()=>{try{n.disconnect()}catch{}r(!1)},1e4),n=new e({botId:t,secret:o,maxReconnectAttempts:0,maxAuthFailureAttempts:0,logger:{debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}}});n.on("authenticated",()=>{clearTimeout(s);try{n.disconnect()}catch{}r(!0)}),n.on("error",()=>{clearTimeout(s);try{n.disconnect()}catch{}r(!1)}),n.connect()})}_testWecomConnectionSubprocess(e,t,o){let{execSync:r,spawn:s}=require("child_process"),n;try{n=r("which node",{encoding:"utf8"}).trim()}catch{}if(!n)try{n=r("which bun",{encoding:"utf8"}).trim()}catch{}if(!n)return!0;let i=`
93
93
  const { WSClient } = require(${JSON.stringify(o)});
94
94
  const client = new WSClient({
95
95
  botId: ${JSON.stringify(e)}, secret: ${JSON.stringify(t)},
@@ -100,15 +100,15 @@ const t = setTimeout(() => { try { client.disconnect(); } catch {} process.exit(
100
100
  client.on("authenticated", () => { clearTimeout(t); try { client.disconnect(); } catch {} process.exit(0); });
101
101
  client.on("error", () => { clearTimeout(t); try { client.disconnect(); } catch {} process.exit(1); });
102
102
  client.connect();
103
- `;return new Promise(a=>{let l=s(n,["-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,r=()=>{process.stdout.write("\x1B[?25l"),process.stdout.write(`
103
+ `;return new Promise(c=>{let l=s(n,["-e",i],{stdio:"ignore"}),d=setTimeout(()=>{l.kill(),c(!1)},12e3);l.on("close",u=>{clearTimeout(d),c(u===0)}),l.on("error",()=>{clearTimeout(d),c(!1)})})}async promptSelectChannel(e){return new Promise(t=>{let o=0,r=()=>{process.stdout.write("\x1B[?25l"),process.stdout.write(`
104
104
  \u8BF7\u9009\u62E9\u8981\u542F\u52A8\u7684\u6E20\u9053 (\u2191\u2193 \u79FB\u52A8, Enter \u786E\u8BA4):
105
105
 
106
- `),e.forEach((i,a)=>{let l=i.botId?Y(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 l=i.botId?X(i.botId):"(\u672A\u914D\u7F6E)",d=`[${i.type}] ${i.name||i.id} botId: ${l}`;c===o?process.stdout.write(` \x1B[38;2;231;76;60m\u276F ${d}\x1B[0m
107
107
  `):process.stdout.write(` ${d}
108
108
  `)}),process.stdout.write(`
109
109
  `)},s=()=>{let i=e.length+4;process.stdout.write(`\x1B[${i}A\x1B[0J`)};r(),process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.setEncoding("utf8");let n=i=>{i==="\x1B[A"||i==="\x1B[D"?(o=(o-1+e.length)%e.length,s(),r()):i==="\x1B[B"||i==="\x1B[C"?(o=(o+1)%e.length,s(),r()):i==="\r"||i===`
110
- `?(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdin.removeListener("data",n),process.stdout.write("\x1B[?25h"),t(e[o])):i===""&&(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdin.removeListener("data",n),process.stdout.write("\x1B[?25h"),t(null))};process.stdin.on("data",n)})}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?Y(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"),r=(o!==-1?t[o+1]:void 0)||`${e}-${Date.now()}`,s=this.getChannels();if(s.find(i=>i.id===r))return console.error(`\u274C \u6E20\u9053 ID \u5DF2\u5B58\u5728: ${r}`),1;let n={id:r,type:e,enabled:!0,createdAt:new Date().toISOString()};return this._applyArgs(n,t),s.push(n),this.saveChannels(s),console.log(`\u2705 \u6E20\u9053\u5DF2\u6DFB\u52A0: ${r} (${e})`),0}remove(e){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053 ID"),1;let t=this.getChannels(),o=t.findIndex(r=>r.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(),r=o.find(s=>s.id===e);return r?(t.includes("--enable")&&(r.enabled=!0),t.includes("--disable")&&(r.enabled=!1),this._applyArgs(r,t),r.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=n=>{let i=t.indexOf(n);return i!==-1?t[i+1]:void 0},r=n=>{if(n&&n.startsWith("@")){let i=n.slice(1);try{return q.readFileSync(i,"utf8").trim()}catch{console.error(`\u274C \u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6: ${i}`);return}}return n},s=o("--name");if(s!==void 0&&(e.name=s),e.type==="wecom"){let n=r(o("--bot-id"));n!==void 0&&(e.botId=n);let i=r(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),r=(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]||""))))),n=s.map(i=>"-".repeat(i)).join("-+-");console.log(t.map((i,a)=>r(i,s[a])).join(" | ")),console.log(n);for(let i of e)console.log(t.map((a,l)=>r(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(`
111
- `))}};Ye.exports=de});var Qe=_((Co,Ze)=>{var Lt=require("http"),ue=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,r]=t;return o&&o.length>0&&r&&r.length>0}async waitForCallback(e){return new Promise((t,o)=>{let r=!1;this.server=Lt.createServer((s,n)=>{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){n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(`
110
+ `?(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdin.removeListener("data",n),process.stdout.write("\x1B[?25h"),t(e[o])):i===""&&(process.stdin.setRawMode(!1),process.stdin.pause(),process.stdin.removeListener("data",n),process.stdout.write("\x1B[?25h"),t(null))};process.stdin.on("data",n)})}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?X(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(!Ye.includes(e))return console.error(`\u274C \u4E0D\u652F\u6301\u7684\u6E20\u9053\u7C7B\u578B: ${e}\uFF0C\u652F\u6301: ${Ye.join(", ")}`),1;let o=t.indexOf("--id"),r=(o!==-1?t[o+1]:void 0)||`${e}-${Date.now()}`,s=this.getChannels();if(s.find(i=>i.id===r))return console.error(`\u274C \u6E20\u9053 ID \u5DF2\u5B58\u5728: ${r}`),1;let n={id:r,type:e,enabled:!0,createdAt:new Date().toISOString()};return this._applyArgs(n,t),s.push(n),this.saveChannels(s),console.log(`\u2705 \u6E20\u9053\u5DF2\u6DFB\u52A0: ${r} (${e})`),0}remove(e){if(!e)return console.error("\u274C \u8BF7\u6307\u5B9A\u6E20\u9053 ID"),1;let t=this.getChannels(),o=t.findIndex(r=>r.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(),r=o.find(s=>s.id===e);return r?(t.includes("--enable")&&(r.enabled=!0),t.includes("--disable")&&(r.enabled=!1),this._applyArgs(r,t),r.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=n=>{let i=t.indexOf(n);return i!==-1?t[i+1]:void 0},r=n=>{if(n&&n.startsWith("@")){let i=n.slice(1);try{return P.readFileSync(i,"utf8").trim()}catch{console.error(`\u274C \u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6: ${i}`);return}}return n},s=o("--name");if(s!==void 0&&(e.name=s),e.type==="wecom"){let n=r(o("--bot-id"));n!==void 0&&(e.botId=n);let i=r(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 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((c,l)=>c+(l.charCodeAt(0)>127?2:1),0),r=(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]||""))))),n=s.map(i=>"-".repeat(i)).join("-+-");console.log(t.map((i,c)=>r(i,s[c])).join(" | ")),console.log(n);for(let i of e)console.log(t.map((c,l)=>r(String(i[c]||""),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(`
111
+ `))}};Ze.exports=ue});var tt=_((Po,et)=>{var Ht=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,r]=t;return o&&o.length>0&&r&&r.length>0}async waitForCallback(e){return new Promise((t,o)=>{let r=!1;this.server=Ht.createServer((s,n)=>{let i=new URL(s.url,`http://localhost:${this.port}`);if(i.pathname==="/callback"){let c=i.searchParams.get("token"),l=i.searchParams.get("state"),d=i.searchParams.get("error");if(d){n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(`
112
112
  <!DOCTYPE html>
113
113
  <html>
114
114
  <head>
@@ -155,7 +155,7 @@ client.connect();
155
155
  </div>
156
156
  </body>
157
157
  </html>
158
- `),r||(r=!0,this.cleanup(),o(new Error("Invalid state parameter - possible CSRF attack")));return}if(!a){n.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),n.end(`
158
+ `),r||(r=!0,this.cleanup(),o(new Error("Invalid state parameter - possible CSRF attack")));return}if(!c){n.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),n.end(`
159
159
  <!DOCTYPE html>
160
160
  <html>
161
161
  <head>
@@ -177,7 +177,7 @@ client.connect();
177
177
  </div>
178
178
  </body>
179
179
  </html>
180
- `),r||(r=!0,this.cleanup(),o(new Error("No token received from OAuth callback")));return}if(!this.validateTokenFormat(a)){n.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),n.end(`
180
+ `),r||(r=!0,this.cleanup(),o(new Error("No token received from OAuth callback")));return}if(!this.validateTokenFormat(c)){n.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),n.end(`
181
181
  <!DOCTYPE html>
182
182
  <html>
183
183
  <head>
@@ -201,7 +201,7 @@ client.connect();
201
201
  </div>
202
202
  </body>
203
203
  </html>
204
- `),r||(r=!0,this.cleanup(),o(new Error("Invalid token format - expected ak.sk format")));return}let[u,m]=a.split(".");n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(`
204
+ `),r||(r=!0,this.cleanup(),o(new Error("Invalid token format - expected ak.sk format")));return}let[u,m]=c.split(".");n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(`
205
205
  <!DOCTYPE html>
206
206
  <html>
207
207
  <head>
@@ -233,7 +233,7 @@ client.connect();
233
233
  </script>
234
234
  </body>
235
235
  </html>
236
- `),r||(r=!0,this.cleanup(),t({ak:u,sk:m}))}else n.writeHead(404,{"Content-Type":"text/plain"}),n.end("Not Found")}),this.server.on("error",s=>{if(s.code==="EADDRINUSE"){if(this.port++,this.port>9390){r||(r=!0,o(new Error("Could not find available port for OAuth callback server")));return}this.server.close(),this.server.listen(this.port)}else r||(r=!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(()=>{r||(r=!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=ue});var tt=_((Eo,et)=>{var Rt=require("crypto"),Ft=Qe(),me=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),r=!1;try{let n=(await import("open")).default;await n(o),r=!0}catch(n){process.env.CODEV_DEBUG&&console.error("Browser open error:",n)}let s=this.callbackServer.waitForCallback(e);return{authUrl:o,waitPromise:s,browserOpened:r}}async login(){try{let{authUrl:e,waitPromise:t,browserOpened:o}=await this.startOAuthFlow();console.log(`
236
+ `),r||(r=!0,this.cleanup(),t({ak:u,sk:m}))}else n.writeHead(404,{"Content-Type":"text/plain"}),n.end("Not Found")}),this.server.on("error",s=>{if(s.code==="EADDRINUSE"){if(this.port++,this.port>9390){r||(r=!0,o(new Error("Could not find available port for OAuth callback server")));return}this.server.close(),this.server.listen(this.port)}else r||(r=!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(()=>{r||(r=!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)}};et.exports=me});var rt=_((qo,ot)=>{var Vt=require("crypto"),Kt=tt(),pe=class{constructor(e={}){this.baseUrl=e.baseUrl||"https://makecoder.com",this.callbackServer=null}generateState(){return Vt.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 Kt;let t=this.callbackServer.getCallbackUrl(),o=this.buildAuthorizationUrl(t,e),r=!1;try{let n=(await import("open")).default;await n(o),r=!0}catch(n){process.env.CODEV_DEBUG&&console.error("Browser open error:",n)}let s=this.callbackServer.waitForCallback(e);return{authUrl:o,waitPromise:s,browserOpened:r}}async login(){try{let{authUrl:e,waitPromise:t,browserOpened:o}=await this.startOAuthFlow();console.log(`
237
237
  \u{1F510} \u5F00\u59CB OAuth \u767B\u5F55\u6D41\u7A0B...
238
238
  `),console.log(`\u{1F4CB} \u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u767B\u5F55
239
239
  `),console.log(`\u{1F310} \u6388\u6743\u5730\u5740: ${e}
@@ -241,19 +241,19 @@ client.connect();
241
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 r=await t;return console.log(`\u2705 API Key \u83B7\u53D6\u6210\u529F!
242
242
  `),r}catch(e){throw console.error(`
243
243
  \u274C OAuth \u767B\u5F55\u5931\u8D25: ${e.message}
244
- `),e}finally{this.callbackServer&&this.callbackServer.cleanup()}}cleanup(){this.callbackServer&&this.callbackServer.cleanup()}};et.exports=me});var nt=_((Oo,rt)=>{var ot=require("readline"),Mt=tt(),pe=class{constructor(e){this.argParser=e}async handle(e){let{authSubcommand:t,authRemainingArgs:o=[],codevServer:r}=e;if(t==="--help"||t===void 0)return this.showHelp(),0;switch(t){case"login":return await this.handleLogin(o,r);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 r=0;r<e.length;r++)if(e[r]==="--apikey"){o=e[r+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(),r=e.substring(t+1).trim();return!o||!r?(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,r,s;try{({authUrl:o,waitPromise:r,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()}};ot.exports=pe});var it=_((jo,st)=>{var nt=require("readline"),zt=rt(),he=class{constructor(e){this.argParser=e}async handle(e){let{authSubcommand:t,authRemainingArgs:o=[],codevServer:r}=e;if(t==="--help"||t===void 0)return this.showHelp(),0;switch(t){case"login":return await this.handleLogin(o,r);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 r=0;r<e.length;r++)if(e[r]==="--apikey"){o=e[r+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(),r=e.substring(t+1).trim();return!o||!r?(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 zt({baseUrl:"https://makecoder.com"}),o,r,s;try{({authUrl:o,waitPromise:r,browserOpened:s}=await t.startOAuthFlow())}catch(l){return console.error(`\u274C \u542F\u52A8\u767B\u5F55\u6D41\u7A0B\u5931\u8D25: ${l.message}`),console.log(`
245
245
  \u8BF7\u624B\u52A8\u8F93\u5165 API Key\uFF08\u83B7\u53D6\u5730\u5740: https://makecoder.com/my/apikeys\uFF09
246
246
  `),await this.terminalOnlyLogin()}console.log(`
247
247
  \u{1F510} \u767B\u5F55 MakeCoder
248
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}
249
249
  `),console.log(` \u65B9\u5F0F\u4E8C\uFF1A\u7C98\u8D34 API Key\uFF08\u83B7\u53D6\u5730\u5740: https://makecoder.com/my/apikeys\uFF09
250
- `);let n=ot.createInterface({input:process.stdin,output:process.stdout}),i=new Promise((l,d)=>{n.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}l(m)})}),a;try{a=await Promise.race([r.then(l=>(n.close(),`${l.ak}.${l.sk}`)),i.then(l=>(t.cleanup(),l))])}catch(l){if(l.message==="__empty_input__"){console.log(`
250
+ `);let n=nt.createInterface({input:process.stdin,output:process.stdout}),i=new Promise((l,d)=>{n.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}l(m)})}),c;try{c=await Promise.race([r.then(l=>(n.close(),`${l.ak}.${l.sk}`)),i.then(l=>(t.cleanup(),l))])}catch(l){if(l.message==="__empty_input__"){console.log(`
251
251
  \u23F3 \u7B49\u5F85\u6D4F\u89C8\u5668\u6388\u6743\u5B8C\u6210...\uFF08\u8D85\u65F6\u65F6\u95F4: 5\u5206\u949F\uFF09
252
- `);try{let d=await r;a=`${d.ak}.${d.sk}`}catch(d){return t.cleanup(),console.error(`
252
+ `);try{let d=await r;c=`${d.ak}.${d.sk}`}catch(d){return t.cleanup(),console.error(`
253
253
  \u274C \u767B\u5F55\u5931\u8D25: ${d.message}`),1}}else return n.close(),t.cleanup(),console.error(`
254
- \u274C ${l.message}`),1}return t.cleanup(),this.argParser.saveAuthToConfig(a)?(console.log(`
254
+ \u274C ${l.message}`),1}return t.cleanup(),this.argParser.saveAuthToConfig(c)?(console.log(`
255
255
  \u2705 \u767B\u5F55\u6210\u529F\uFF01API Key \u5DF2\u4FDD\u5B58\u5230 ${this.argParser.configPath}`),0):(console.error(`
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 r=o.trim();if(!r){console.error("\u274C \u672A\u8F93\u5165 API Key"),t(1);return}let s=r.indexOf(".");if(s<=0||s===r.length-1){console.error("\u274C API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"),t(1);return}this.argParser.saveAuthToConfig(r)?(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 r=require("https"),s=require("http"),n=new URL("https://makecoder.com/bigapis/auth/v1/users/me"),i=n.protocol==="https:"?r:s,a=await new Promise((l,d)=>{let u=i.request(n,{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{l(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()});a.data?.id&&console.log(` \u7528\u6237 ID: ${a.data.id}`),a.data?.username&&console.log(` \u7528\u6237\u540D: ${a.data.username}`)}catch(r){r.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=nt.createInterface({input:process.stdin,output:process.stdout});return new Promise(t=>{e.question("\u8BF7\u8F93\u5165 API Key: ",o=>{e.close();let r=o.trim();if(!r){console.error("\u274C \u672A\u8F93\u5165 API Key"),t(1);return}let s=r.indexOf(".");if(s<=0||s===r.length-1){console.error("\u274C API Key \u683C\u5F0F\u9519\u8BEF\uFF0C\u5E94\u4E3A <ak>.<sk> \u683C\u5F0F"),t(1);return}this.argParser.saveAuthToConfig(r)?(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 r=require("https"),s=require("http"),n=new URL("https://makecoder.com/bigapis/auth/v1/users/me"),i=n.protocol==="https:"?r:s,c=await new Promise((l,d)=>{let u=i.request(n,{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{l(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(r){r.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(`
257
257
  \u7528\u6CD5:
258
258
  coder auth <command>
259
259
 
@@ -272,56 +272,56 @@ client.connect();
272
272
  coder auth status # \u67E5\u770B\u767B\u5F55\u72B6\u6001
273
273
 
274
274
  \u83B7\u53D6 API Key: https://makecoder.com/my/apikeys
275
- `)}};rt.exports=pe});var it=_((Do,st)=>{var he=require("crypto"),{URL:Jt}=require("url"),fe=class{static generateSignature(e,t,o,r){try{let s=new Jt(e),n=Buffer.from(s.pathname),i=Buffer.from(n),a=t?typeof t=="string"?Buffer.from(t):Buffer.from(JSON.stringify(t)):Buffer.alloc(0),l=Buffer.concat([i,a,Buffer.from(r)]),d=he.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,r,s){return this.generateSignature(e,t,o,r)===s}static generateTimestamp(){return Date.now().toString()}static generateStrongPassword(e=16){let t="abcdefghijkmnpqrstuvwxyz",o="ABCDEFGHJKLMNPQRSTUVWXYZ",r="23456789",s="!@#$%^&*-_=+",n=t+o+r+s;e<8&&(e=8);let i=l=>l[he.randomBytes(1)[0]%l.length],a=[i(t),i(o),i(r),i(s)];for(;a.length<e;)a.push(i(n));for(let l=a.length-1;l>0;l--){let d=he.randomBytes(1)[0]%(l+1);[a[l],a[d]]=[a[d],a[l]]}return a.join("")}};st.exports=fe});var ct=_((Ao,at)=>{var Gt=require("https"),{URL:Ht}=require("url"),M=require("fs"),j=require("path"),Vt=it(),zt="https://makecoder.com/bigapis/auth/v1",Kt="https://makecoder.com/bigapis/kbb2/v1",Wt="https://makecoder.com/wiki/api",be=class{constructor(e){this.argParser=e||null}request(e,t,o,r,s){return new Promise((n,i)=>{let a=s||zt,l=new Ht(`${a}${t}`),d={"Content-Type":"application/json",Authorization:`Bearer ${o}`},u=null;r!=null&&(u=JSON.stringify(r),d["Content-Length"]=Buffer.byteLength(u));let m={hostname:l.hostname,port:l.port||443,path:l.pathname+l.search,method:e,headers:d},p=Gt.request(m,h=>{let f="";h.on("data",y=>f+=y),h.on("end",()=>n({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 r=0;r<e.length;r++){let s=e[r];if(s==="--json"){t.json=!0;continue}if(s==="--quiet"){t.quiet=!0;continue}if(s!=="--no-color"){if(s==="--field"){t.field=e[r+1],r++;continue}o.push(s)}}return{out:t,remaining:o}}async handle({teamSubcommand:e,teamArg:t,teamRemainingArgs:o,apikey:r}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;let s=r;if(!s)return console.error("\u274C 2: \u672A\u767B\u5F55\uFF0C\u8BF7\u5148\u8FD0\u884C coder auth login"),2;let n=o||[];return e==="list"||e==="ls"?await this.list(n,s):e==="current"?await this.current(n,s):e==="use"?await this.use(t,n,s):e==="info"?await this.info(t,n,s):e==="members"?await this.members(t,n,s):e==="member-get"?await this.memberGet(t,n,s):e==="search-member"?await this.searchMember(t,n,s):e==="member-create"?await this.memberCreate(t,n,s):e==="member-delete"?await this.memberDelete(t,n,s):e==="member-update"?await this.memberUpdate(t,n,s):e==="set-points"?await this.setPoints(t,n,s):e==="groups"?await this.groupsList(t,n,s):e==="group-info"?await this.groupInfo(t,n,s):e==="group-create"?await this.groupCreate(t,n,s):e==="group-update"?await this.groupUpdate(t,n,s):e==="group-delete"?await this.groupDelete(t,n,s):e==="group-members"?await this.groupMembers(t,n,s):e==="group-add-members"?await this.groupAddMembers(t,n,s):e==="group-set-role"?await this.groupSetRole(t,n,s):e==="group-remove-member"?await this.groupRemoveMember(t,n,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`,n;try{n=await this.request("GET",s,t)}catch(d){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${d.message}`),1}if(n.status!==200)return console.error(`\u274C ${this.exitCodeForStatus(n.status)}: HTTP ${n.status}`),n.body&&console.error(n.body),this.exitCodeForStatus(n.status);let i=this.parseJson(n.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=S(d,o.field);process.stdout.write(v(u)+`
275
+ `)}};st.exports=he});var at=_((Bo,ct)=>{var fe=require("crypto"),{URL:Wt}=require("url"),ge=class{static generateSignature(e,t,o,r){try{let s=new Wt(e),n=Buffer.from(s.pathname),i=Buffer.from(n),c=t?typeof t=="string"?Buffer.from(t):Buffer.from(JSON.stringify(t)):Buffer.alloc(0),l=Buffer.concat([i,c,Buffer.from(r)]),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,r,s){return this.generateSignature(e,t,o,r)===s}static generateTimestamp(){return Date.now().toString()}static generateStrongPassword(e=16){let t="abcdefghijkmnpqrstuvwxyz",o="ABCDEFGHJKLMNPQRSTUVWXYZ",r="23456789",s="!@#$%^&*-_=+",n=t+o+r+s;e<8&&(e=8);let i=l=>l[fe.randomBytes(1)[0]%l.length],c=[i(t),i(o),i(r),i(s)];for(;c.length<e;)c.push(i(n));for(let l=c.length-1;l>0;l--){let d=fe.randomBytes(1)[0]%(l+1);[c[l],c[d]]=[c[d],c[l]]}return c.join("")}};ct.exports=ge});var dt=_((Uo,lt)=>{var Yt=require("https"),{URL:Xt}=require("url"),J=require("fs"),B=require("path"),Zt=at(),Qt="https://makecoder.com/bigapis/auth/v1",eo="https://makecoder.com/bigapis/kbb2/v1",to="https://makecoder.com/wiki/api",Ie=class{constructor(e){this.argParser=e||null}request(e,t,o,r,s){return new Promise((n,i)=>{let c=s||Qt,l=new Xt(`${c}${t}`),d={"Content-Type":"application/json",Authorization:`Bearer ${o}`},u=null;r!=null&&(u=JSON.stringify(r),d["Content-Length"]=Buffer.byteLength(u));let m={hostname:l.hostname,port:l.port||443,path:l.pathname+l.search,method:e,headers:d},p=Yt.request(m,h=>{let f="";h.on("data",y=>f+=y),h.on("end",()=>n({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 r=0;r<e.length;r++){let s=e[r];if(s==="--json"){t.json=!0;continue}if(s==="--quiet"){t.quiet=!0;continue}if(s!=="--no-color"){if(s==="--field"){t.field=e[r+1],r++;continue}o.push(s)}}return{out:t,remaining:o}}async handle({teamSubcommand:e,teamArg:t,teamRemainingArgs:o,apikey:r}){if(!e||e==="--help"||e==="-h")return this.showHelp(),0;let s=r;if(!s)return console.error("\u274C 2: \u672A\u767B\u5F55\uFF0C\u8BF7\u5148\u8FD0\u884C coder auth login"),2;let n=o||[];return e==="list"||e==="ls"?await this.list(n,s):e==="current"?await this.current(n,s):e==="use"?await this.use(t,n,s):e==="info"?await this.info(t,n,s):e==="members"?await this.members(t,n,s):e==="member-get"?await this.memberGet(t,n,s):e==="search-member"?await this.searchMember(t,n,s):e==="member-create"?await this.memberCreate(t,n,s):e==="member-delete"?await this.memberDelete(t,n,s):e==="member-update"?await this.memberUpdate(t,n,s):e==="set-points"?await this.setPoints(t,n,s):e==="groups"?await this.groupsList(t,n,s):e==="group-info"?await this.groupInfo(t,n,s):e==="group-create"?await this.groupCreate(t,n,s):e==="group-update"?await this.groupUpdate(t,n,s):e==="group-delete"?await this.groupDelete(t,n,s):e==="group-members"?await this.groupMembers(t,n,s):e==="group-add-members"?await this.groupAddMembers(t,n,s):e==="group-set-role"?await this.groupSetRole(t,n,s):e==="group-remove-member"?await this.groupRemoveMember(t,n,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`,n;try{n=await this.request("GET",s,t)}catch(d){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${d.message}`),1}if(n.status!==200)return console.error(`\u274C ${this.exitCodeForStatus(n.status)}: HTTP ${n.status}`),n.body&&console.error(n.body),this.exitCodeForStatus(n.status);let i=this.parseJson(n.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=S(d,o.field);process.stdout.write(v(u)+`
276
276
  `)}else process.stdout.write(JSON.stringify(d,null,2)+`
277
- `);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 J([["id","ID"],["name","\u540D\u79F0"],["members","\u6210\u5458\u6570"],["points","\u79EF\u5206"]],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 r=this.argParser?this.argParser.getTeam():null;return r&&r.id?r.id:null}async fetchTeam(e,t){let r=`/team?constraints=${encodeURIComponent(JSON.stringify({id__in:[e]}))}`,s=await this.request("GET",r,t);if(s.status!==200)return{error:{code:this.exitCodeForStatus(s.status),status:s.status,body:s.body}};let n=this.parseJson(s.body),i=n&&n.data&&n.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:r}=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 n;try{n=await this.fetchTeam(s,o)}catch(u){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${u.message}`),1}if(n.error)return console.error(`\u274C ${n.error.code}: HTTP ${n.error.status}`),n.error.body&&console.error(n.error.body),n.error.code;let i=n.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(r.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 r.field?process.stdout.write(v(S(u,r.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 l=c.map(d=>({id:d.id||"",name:d.name||"",members:(d.members_count??d.member_count??"")+"",points:d.points!=null?String(d.points):""}));return G([["id","ID"],["name","\u540D\u79F0"],["members","\u6210\u5458\u6570"],["points","\u79EF\u5206"]],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 r=this.argParser?this.argParser.getTeam():null;return r&&r.id?r.id:null}async fetchTeam(e,t){let r=`/team?constraints=${encodeURIComponent(JSON.stringify({id__in:[e]}))}`,s=await this.request("GET",r,t);if(s.status!==200)return{error:{code:this.exitCodeForStatus(s.status),status:s.status,body:s.body}};let n=this.parseJson(s.body),i=n&&n.data&&n.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:r}=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 n;try{n=await this.fetchTeam(s,o)}catch(u){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${u.message}`),1}if(n.error)return console.error(`\u274C ${n.error.code}: HTTP ${n.error.status}`),n.error.body&&console.error(n.error.body),n.error.code;let i=n.team,c=Array.isArray(i.members)?i.members:[],l=c.filter(u=>u.user_type==="ai").length,d=c.filter(u=>u.user_type==="human").length;if(r.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:l,members_human:d};return r.field?process.stdout.write(v(S(u,r.field))+`
278
278
  `):process.stdout.write(JSON.stringify(u,null,2)+`
279
- `),0}return r.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:r,remaining:s}=this.parseOutputFlags(t),n=null,i=[];for(let h=0;h<s.length;h++){if(s[h]==="--type"){n=s[h+1],h++;continue}i.push(s[h])}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(n&&n!=="human"&&n!=="ai")return console.error(`\u274C 3: --type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${n}'`),3;let l;try{l=await this.fetchTeam(a,o)}catch(h){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${h.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,n);if(r.json){let h={team_id:l.team.id,team_name:l.team.name,items:u,total:u.length};return r.field?process.stdout.write(v(S(h,r.field))+`
279
+ `),0}return r.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=${l}, human=${d})`),0)}async members(e,t,o){let{out:r,remaining:s}=this.parseOutputFlags(t),n=null,i=[];for(let h=0;h<s.length;h++){if(s[h]==="--type"){n=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(n&&n!=="human"&&n!=="ai")return console.error(`\u274C 3: --type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${n}'`),3;let l;try{l=await this.fetchTeam(c,o)}catch(h){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${h.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,n);if(r.json){let h={team_id:l.team.id,team_name:l.team.name,items:u,total:u.length};return r.field?process.stdout.write(v(S(h,r.field))+`
280
280
  `):process.stdout.write(JSON.stringify(h,null,2)+`
281
- `),0}if(r.quiet){for(let h of u)console.log(h.user_id||h.id||"");return 0}if(!u.length)return console.log(n?`\uFF08\u65E0 ${n} \u7C7B\u578B\u6210\u5458\uFF09`:"\uFF08\u56E2\u961F\u6682\u65E0\u6210\u5458\uFF09"),0;let p=[...u].sort((h,f)=>{let y=h.user_type==="ai"?0:1,b=f.user_type==="ai"?0:1;return y!==b?y-b:(h.username||"").localeCompare(f.username||"")}).map(h=>({username:h.username||"",nickname:h.nickname||"",introduction:h.introduction||"",mentor:ge(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 J([["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:r,remaining:s}=this.parseOutputFlags(t),n=[];for(let p=0;p<s.length;p++){if(s[p]==="--team"){p++;continue}n.push(s[p])}let i=n[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=n[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(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?r.json?(r.field?process.stdout.write(v(S(m,r.field))+`
281
+ `),0}if(r.quiet){for(let h of u)console.log(h.user_id||h.id||"");return 0}if(!u.length)return console.log(n?`\uFF08\u65E0 ${n} \u7C7B\u578B\u6210\u5458\uFF09`:"\uFF08\u56E2\u961F\u6682\u65E0\u6210\u5458\uFF09"),0;let p=[...u].sort((h,f)=>{let y=h.user_type==="ai"?0:1,b=f.user_type==="ai"?0:1;return y!==b?y-b:(h.username||"").localeCompare(f.username||"")}).map(h=>({username:h.username||"",nickname:h.nickname||"",introduction:h.introduction||"",mentor:ye(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 G([["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:r,remaining:s}=this.parseOutputFlags(t),n=[];for(let p=0;p<s.length;p++){if(s[p]==="--team"){p++;continue}n.push(s[p])}let i=n[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=n[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(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?r.json?(r.field?process.stdout.write(v(S(m,r.field))+`
282
282
  `):process.stdout.write(JSON.stringify(m,null,2)+`
283
- `),0):r.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: ${ge(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:r,remaining:s}=this.parseOutputFlags(t),n=[],i=null;for(let g=0;g<s.length;g++){if(s[g]==="--team"){g++;continue}if(s[g]==="--type"){i=s[g+1],g++;continue}n.push(s[g])}let a=n[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=n[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(g){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${g.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=a.toLowerCase(),f=p.filter(g=>{let I=(g.username||"").toLowerCase(),$=(g.user_id||"").toLowerCase(),w=(g.id||"").toLowerCase(),k=(g.nickname||"").toLowerCase(),D=(g.introduction||"").toLowerCase();return I.includes(h)||$.includes(h)||w.includes(h)||k.includes(h)||D.includes(h)});if(r.json){let g={team_id:u.team.id,keyword:a,items:f,total:f.length};return r.field?process.stdout.write(v(S(g,r.field))+`
283
+ `),0):r.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: ${ye(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:r,remaining:s}=this.parseOutputFlags(t),n=[],i=null;for(let g=0;g<s.length;g++){if(s[g]==="--team"){g++;continue}if(s[g]==="--type"){i=s[g+1],g++;continue}n.push(s[g])}let c=n[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=n[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(g){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${g.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(g=>{let I=(g.username||"").toLowerCase(),$=(g.user_id||"").toLowerCase(),w=(g.id||"").toLowerCase(),k=(g.nickname||"").toLowerCase(),A=(g.introduction||"").toLowerCase();return I.includes(h)||$.includes(h)||w.includes(h)||k.includes(h)||A.includes(h)});if(r.json){let g={team_id:u.team.id,keyword:c,items:f,total:f.length};return r.field?process.stdout.write(v(S(g,r.field))+`
284
284
  `):process.stdout.write(JSON.stringify(g,null,2)+`
285
- `),0}if(r.quiet){for(let g of f)console.log(g.user_id||g.id||"");return 0}if(!f.length)return console.log(`\uFF08\u672A\u5339\u914D\u5230 '${a}'\uFF09`),0;let b=[...f].sort((g,I)=>{let $=g.user_type==="ai"?0:1,w=I.user_type==="ai"?0:1;return $!==w?$-w:(g.username||"").localeCompare(I.username||"")}).map(g=>({username:g.username||"",user_id:g.user_id||"",type:g.user_type||"",role:g.role||"",nickname:g.nickname||"",introduction:g.introduction||"",mentor:ge(g,m)}));return J([["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 r=0;r<e.length;r++){let s=e[r];if(s==="--type"){o.type=e[++r];continue}if(s==="--password"){o.password=e[++r];continue}if(s==="--phone"){o.phone=e[++r];continue}if(s==="--points"){o.points=e[++r];continue}if(s==="--team"){o.team=e[++r];continue}if(s==="--save-to"){o.saveTo=e[++r];continue}if(s==="--nickname"){o.nickname=e[++r];continue}if(s==="--mentor"){o.mentor=e[++r];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=j.resolve(e);for((!M.existsSync(t)||!M.statSync(t).isDirectory())&&(t=j.dirname(t));t&&t!==j.dirname(t);){if(M.existsSync(j.join(t,".git")))return!0;t=j.dirname(t)}return!1}async memberCreate(e,t,o){let{out:r,remaining:s}=this.parseOutputFlags(t),n=this.parseMemberCreateFlags(s);if(n.error)return console.error(`\u274C 3: ${n.error}`),3;let{remaining:i,opts:a}=n,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 I=j.resolve(a.saveTo);if(this.isInsideGitRepo(I))return console.error(`\u274C 3: --save-to \u8DEF\u5F84\u5728 git \u4ED3\u5E93\u5185\uFF08${I}\uFF09\uFF0C\u62D2\u7EDD\u5199\u5165\u907F\u514D\u8BEF\u63D0\u4EA4`),3}let u=a.password||Vt.generateStrongPassword(16),m=!a.password,p=null;if(a.points!==null&&a.points!==void 0){let I=Number(a.points);if(!Number.isFinite(I))return console.error(`\u274C 3: --points \u5E94\u4E3A\u6570\u5B57\uFF0C\u6536\u5230 '${a.points}'`),3;p=I}let h={payload:{username:l,password:u,phone:a.phone||null,team_id:d,points:p,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"},f;try{f=await this.request("POST","/users",o,h)}catch(I){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${I.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=this.parseJson(f.body),b=null;if(a.saveTo){let I=j.resolve(a.saveTo),$=`# Coder team member credentials
285
+ `),0}if(r.quiet){for(let g of f)console.log(g.user_id||g.id||"");return 0}if(!f.length)return console.log(`\uFF08\u672A\u5339\u914D\u5230 '${c}'\uFF09`),0;let b=[...f].sort((g,I)=>{let $=g.user_type==="ai"?0:1,w=I.user_type==="ai"?0:1;return $!==w?$-w:(g.username||"").localeCompare(I.username||"")}).map(g=>({username:g.username||"",user_id:g.user_id||"",type:g.user_type||"",role:g.role||"",nickname:g.nickname||"",introduction:g.introduction||"",mentor:ye(g,m)}));return G([["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 r=0;r<e.length;r++){let s=e[r];if(s==="--type"){o.type=e[++r];continue}if(s==="--password"){o.password=e[++r];continue}if(s==="--phone"){o.phone=e[++r];continue}if(s==="--points"){o.points=e[++r];continue}if(s==="--team"){o.team=e[++r];continue}if(s==="--save-to"){o.saveTo=e[++r];continue}if(s==="--nickname"){o.nickname=e[++r];continue}if(s==="--mentor"){o.mentor=e[++r];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((!J.existsSync(t)||!J.statSync(t).isDirectory())&&(t=B.dirname(t));t&&t!==B.dirname(t);){if(J.existsSync(B.join(t,".git")))return!0;t=B.dirname(t)}return!1}async memberCreate(e,t,o){let{out:r,remaining:s}=this.parseOutputFlags(t),n=this.parseMemberCreateFlags(s);if(n.error)return console.error(`\u274C 3: ${n.error}`),3;let{remaining:i,opts:c}=n,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=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 I=B.resolve(c.saveTo);if(this.isInsideGitRepo(I))return console.error(`\u274C 3: --save-to \u8DEF\u5F84\u5728 git \u4ED3\u5E93\u5185\uFF08${I}\uFF09\uFF0C\u62D2\u7EDD\u5199\u5165\u907F\u514D\u8BEF\u63D0\u4EA4`),3}let u=c.password||Zt.generateStrongPassword(16),m=!c.password,p=null;if(c.points!==null&&c.points!==void 0){let I=Number(c.points);if(!Number.isFinite(I))return console.error(`\u274C 3: --points \u5E94\u4E3A\u6570\u5B57\uFF0C\u6536\u5230 '${c.points}'`),3;p=I}let h={payload:{username:l,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(I){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${I.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=this.parseJson(f.body),b=null;if(c.saveTo){let I=B.resolve(c.saveTo),$=`# Coder team member credentials
286
286
  # Created: ${new Date().toISOString()}
287
287
  username: ${l}
288
288
  password: ${u}
289
289
  team_id: ${d}
290
- type: ${a.type}
291
- `;try{M.writeFileSync(I,$,{mode:384});try{M.chmodSync(I,384)}catch{}b=I}catch(w){console.error(`\u26A0\uFE0F \u4FDD\u5B58\u51ED\u636E\u5931\u8D25: ${w.message}`)}}let g={username:l,password:u,team_id:d,user_type:a.type,nickname:a.nickname||null,mentor:a.mentor||null,saved_to:b,response:y&&y.data?y.data:y};return r.json?(r.field?process.stdout.write(v(S(g,r.field))+`
290
+ type: ${c.type}
291
+ `;try{J.writeFileSync(I,$,{mode:384});try{J.chmodSync(I,384)}catch{}b=I}catch(w){console.error(`\u26A0\uFE0F \u4FDD\u5B58\u51ED\u636E\u5931\u8D25: ${w.message}`)}}let g={username:l,password:u,team_id:d,user_type:c.type,nickname:c.nickname||null,mentor:c.mentor||null,saved_to:b,response:y&&y.data?y.data:y};return r.json?(r.field?process.stdout.write(v(S(g,r.field))+`
292
292
  `):process.stdout.write(JSON.stringify(g,null,2)+`
293
- `),0):r.quiet?(console.log(l),0):(console.log("\u2705 \u6210\u5458\u521B\u5EFA\u6210\u529F"),console.log(`username: ${l}`),console.log(`password: ${u} ${m?"(\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(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:r,remaining:s}=this.parseOutputFlags(t),n=[],i=!1,a=null;for(let f=0;f<s.length;f++){if(s[f]==="--yes"||s[f]==="-y"){i=!0;continue}if(s[f]==="--team"){a=s[++f];continue}n.push(s[f])}let l=n[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||n[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===l||f.id===l||f.username===l);if(!p)return console.error(`\u274C 4: \u6210\u5458 '${l}' \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 r.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)+`
293
+ `),0):r.quiet?(console.log(l),0):(console.log("\u2705 \u6210\u5458\u521B\u5EFA\u6210\u529F"),console.log(`username: ${l}`),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:r,remaining:s}=this.parseOutputFlags(t),n=[],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}n.push(s[f])}let l=n[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=c||n[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===l||f.id===l||f.username===l);if(!p)return console.error(`\u274C 4: \u6210\u5458 '${l}' \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 r.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
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)):r.json?(process.stdout.write(JSON.stringify({deleted:!0,username:p.username,user_id:p.user_id,team_id:d},null,2)+`
295
- `),0):r.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:r,remaining:s}=this.parseOutputFlags(t),n=[],i={nickname:null,mentor:null,clearMentor:!1,team:null};for(let y=0;y<s.length;y++){let b=s[y];if(b==="--nickname"){i.nickname=s[++y];continue}if(b==="--mentor"){i.mentor=s[++y];continue}if(b==="--clear-mentor"){i.clearMentor=!0;continue}if(b==="--team"){i.team=s[++y];continue}n.push(b)}let a=n[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||n[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(y){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${y.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(y=>y.user_id===a||y.id===a||y.username===a);if(!m)return console.error(`\u274C 4: \u6210\u5458 '${a}' \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 y=u.find(b=>b.user_id===i.mentor||b.username===i.mentor);if(!y)return console.error(`\u274C 4: mentor '${i.mentor}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;p.created_by=y.user_id}let h;try{h=await this.request("PATCH",`/team/${l}/ai_users/${m.user_id}`,o,p)}catch(y){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${y.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:l,nickname:i.nickname!==null?i.nickname:m.nickname||null,mentor:i.clearMentor?null:i.mentor||p.created_by||null};return r.json?(r.field?process.stdout.write(v(S(f,r.field))+`
295
+ `),0):r.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:r,remaining:s}=this.parseOutputFlags(t),n=[],i={nickname:null,mentor:null,clearMentor:!1,team:null};for(let y=0;y<s.length;y++){let b=s[y];if(b==="--nickname"){i.nickname=s[++y];continue}if(b==="--mentor"){i.mentor=s[++y];continue}if(b==="--clear-mentor"){i.clearMentor=!0;continue}if(b==="--team"){i.team=s[++y];continue}n.push(b)}let c=n[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 l=i.team||n[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(y){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${y.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(y=>y.user_id===c||y.id===c||y.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 y=u.find(b=>b.user_id===i.mentor||b.username===i.mentor);if(!y)return console.error(`\u274C 4: mentor '${i.mentor}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;p.created_by=y.user_id}let h;try{h=await this.request("PATCH",`/team/${l}/ai_users/${m.user_id}`,o,p)}catch(y){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${y.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:l,nickname:i.nickname!==null?i.nickname:m.nickname||null,mentor:i.clearMentor?null:i.mentor||p.created_by||null};return r.json?(r.field?process.stdout.write(v(S(f,r.field))+`
296
296
  `):process.stdout.write(JSON.stringify(f,null,2)+`
297
- `),0):r.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:r,remaining:s}=this.parseOutputFlags(t),n=[],i={unlimited:!1,inherit:!1,points:null,team:null};for(let w=0;w<s.length;w++){let k=s[w];if(k==="--unlimited"){i.unlimited=!0;continue}if(k==="--inherit"){i.inherit=!0;continue}if(k==="--points"){i.points=s[++w];continue}if(k==="--team"){i.team=s[++w];continue}n.push(k)}let a=n[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 w=Number(i.points);if(!Number.isFinite(w)||w<0)return console.error(`\u274C 3: --points \u5E94\u4E3A\u975E\u8D1F\u6570\u5B57\uFF0C\u6536\u5230 '${i.points}'`),3;d=w}let u=i.team||n[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(w){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${w.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(w=>w.user_id===a||w.id===a||w.username===a);if(!h)return console.error(`\u274C 4: \u6210\u5458 '${a}' \u4E0D\u5728\u56E2\u961F '${m.team.name}' \u4E2D`),4;let f=`/refactor/coder/teams/${u}/members/${h.user_id}/points`,y={points:d},b=d===null?"\u4E0D\u9650\u91CF\uFF08\u7EE7\u627F\u56E2\u961F\u6C60\uFF09":String(d),g;try{g=await this.request("POST",f,o,y,Kt)}catch(w){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${w.message}`),1}if(g.status<200||g.status>=300){let w=this.exitCodeForStatus(g.status);return console.error(`\u274C ${w}: HTTP ${g.status}`),g.body&&console.error(g.body),w}let I=this.parseJson(g.body);if(I&&I.code!==void 0&&I.code!==0&&I.code!==null)return console.error(`\u274C 1: \u540E\u7AEF\u8FD4\u56DE code=${I.code} message=${I.message||""}`),1;let $={username:h.username,user_id:h.user_id,team_id:u,points:d,quota:b};return r.json?(r.field?process.stdout.write(v(S($,r.field))+`
297
+ `),0):r.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:r,remaining:s}=this.parseOutputFlags(t),n=[],i={unlimited:!1,inherit:!1,points:null,team:null};for(let w=0;w<s.length;w++){let k=s[w];if(k==="--unlimited"){i.unlimited=!0;continue}if(k==="--inherit"){i.inherit=!0;continue}if(k==="--points"){i.points=s[++w];continue}if(k==="--team"){i.team=s[++w];continue}n.push(k)}let c=n[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 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 w=Number(i.points);if(!Number.isFinite(w)||w<0)return console.error(`\u274C 3: --points \u5E94\u4E3A\u975E\u8D1F\u6570\u5B57\uFF0C\u6536\u5230 '${i.points}'`),3;d=w}let u=i.team||n[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(w){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${w.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(w=>w.user_id===c||w.id===c||w.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`,y={points:d},b=d===null?"\u4E0D\u9650\u91CF\uFF08\u7EE7\u627F\u56E2\u961F\u6C60\uFF09":String(d),g;try{g=await this.request("POST",f,o,y,eo)}catch(w){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${w.message}`),1}if(g.status<200||g.status>=300){let w=this.exitCodeForStatus(g.status);return console.error(`\u274C ${w}: HTTP ${g.status}`),g.body&&console.error(g.body),w}let I=this.parseJson(g.body);if(I&&I.code!==void 0&&I.code!==0&&I.code!==null)return console.error(`\u274C 1: \u540E\u7AEF\u8FD4\u56DE code=${I.code} message=${I.message||""}`),1;let $={username:h.username,user_id:h.user_id,team_id:u,points:d,quota:b};return r.json?(r.field?process.stdout.write(v(S($,r.field))+`
298
298
  `):process.stdout.write(JSON.stringify($,null,2)+`
299
- `),0):r.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 wikiSync(e,t,o){try{let r=await this.request("POST",`/${e}`,o,t,Wt);(r.status<200||r.status>=300)&&console.warn(`\u26A0\uFE0F wiki ${e} \u540C\u6B65\u5931\u8D25: HTTP ${r.status} ${r.body||""}`)}catch(r){console.warn(`\u26A0\uFE0F wiki ${e} \u540C\u6B65\u5931\u8D25: ${r.message}`)}}toWikiGroupRole(e){return e==="mentor"?"admin":"member"}async groupsList(e,t,o){let{out:r}=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 n;try{n=await this.request("GET",`/team/${s}/groups`,o)}catch(d){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${d.message}`),1}if(n.status<200||n.status>=300){let d=this.exitCodeForStatus(n.status);return console.error(`\u274C ${d}: HTTP ${n.status}`),n.body&&console.error(n.body),d}let i=this.parseJson(n.body),a=i&&(i.data||i)||[];if(r.json){let d={team_id:s,items:a,total:a.length};return r.field?process.stdout.write(v(S(d,r.field))+`
299
+ `),0):r.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 wikiSync(e,t,o){try{let r=await this.request("POST",`/${e}`,o,t,to);(r.status<200||r.status>=300)&&console.warn(`\u26A0\uFE0F wiki ${e} \u540C\u6B65\u5931\u8D25: HTTP ${r.status} ${r.body||""}`)}catch(r){console.warn(`\u26A0\uFE0F wiki ${e} \u540C\u6B65\u5931\u8D25: ${r.message}`)}}toWikiGroupRole(e){return e==="mentor"?"admin":"member"}async groupsList(e,t,o){let{out:r}=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 n;try{n=await this.request("GET",`/team/${s}/groups`,o)}catch(d){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${d.message}`),1}if(n.status<200||n.status>=300){let d=this.exitCodeForStatus(n.status);return console.error(`\u274C ${d}: HTTP ${n.status}`),n.body&&console.error(n.body),d}let i=this.parseJson(n.body),c=i&&(i.data||i)||[];if(r.json){let d={team_id:s,items:c,total:c.length};return r.field?process.stdout.write(v(S(d,r.field))+`
300
300
  `):process.stdout.write(JSON.stringify(d,null,2)+`
301
- `),0}if(r.quiet){for(let d of a)console.log(d.id);return 0}if(!a.length)return console.log("\uFF08\u6682\u65E0\u5C0F\u7EC4\uFF09"),0;let l=a.map(d=>({id:d.id||"",name:d.name||"",description:d.description||"",created_at:(d.created_at||"").slice(0,10)}));return J([["id","ID"],["name","\u540D\u79F0"],["description","\u63CF\u8FF0"],["created_at","\u521B\u5EFA\u65F6\u95F4"]],l),0}parseGroupArgs(e,t=!0){let{out:o,remaining:r}=this.parseOutputFlags(e),s=[],n={};for(let l=0;l<r.length;l++){let d=r[l];if(d==="--team"){n.team=r[++l];continue}if(d==="--name"){n.name=r[++l];continue}if(d==="--description"){n.description=r[++l];continue}if(d==="--role"){n.role=r[++l];continue}if(d==="--yes"||d==="-y"){n.yes=!0;continue}s.push(d)}let i=s[0];if(t&&!i)return{error:"missing groupId"};let a=n.team||this.resolveTeamId(void 0,[]);return{out:o,positional:s,flags:n,groupId:i,teamId:a}}async fetchGroupMembersRaw(e,t,o){let r;try{r=await this.request("GET",`/team/${e}/groups/${t}/members`,o)}catch(n){return{error:{code:1,status:0,body:n.message}}}if(r.status<200||r.status>=300)return{error:{code:this.exitCodeForStatus(r.status),status:r.status,body:r.body}};let s=this.parseJson(r.body);return{items:s&&(s.data||s)||[]}}async groupInfo(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-info <groupId> [teamId]"),3;let{out:s,groupId:n,positional:i}=r,a=i[1]||r.teamId;if(!a)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let l;try{l=await this.request("GET",`/team/${a}/groups`,o)}catch(h){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${h.message}`),1}if(l.status<200||l.status>=300){let h=this.exitCodeForStatus(l.status);return console.error(`\u274C ${h}: HTTP ${l.status}`),l.body&&console.error(l.body),h}let u=(this.parseJson(l.body)?.data||[]).find(h=>h.id===n);if(!u)return console.error(`\u274C 4: \u5C0F\u7EC4 '${n}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;let m=await this.fetchGroupMembersRaw(a,n,o);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 p=m.items;if(s.json){let h={id:u.id,name:u.name,description:u.description||"",team_id:a,members:p,members_total:p.length};return s.field?process.stdout.write(v(S(h,s.field))+`
301
+ `),0}if(r.quiet){for(let d of c)console.log(d.id);return 0}if(!c.length)return console.log("\uFF08\u6682\u65E0\u5C0F\u7EC4\uFF09"),0;let l=c.map(d=>({id:d.id||"",name:d.name||"",description:d.description||"",created_at:(d.created_at||"").slice(0,10)}));return G([["id","ID"],["name","\u540D\u79F0"],["description","\u63CF\u8FF0"],["created_at","\u521B\u5EFA\u65F6\u95F4"]],l),0}parseGroupArgs(e,t=!0){let{out:o,remaining:r}=this.parseOutputFlags(e),s=[],n={};for(let l=0;l<r.length;l++){let d=r[l];if(d==="--team"){n.team=r[++l];continue}if(d==="--name"){n.name=r[++l];continue}if(d==="--description"){n.description=r[++l];continue}if(d==="--role"){n.role=r[++l];continue}if(d==="--yes"||d==="-y"){n.yes=!0;continue}s.push(d)}let i=s[0];if(t&&!i)return{error:"missing groupId"};let c=n.team||this.resolveTeamId(void 0,[]);return{out:o,positional:s,flags:n,groupId:i,teamId:c}}async fetchGroupMembersRaw(e,t,o){let r;try{r=await this.request("GET",`/team/${e}/groups/${t}/members`,o)}catch(n){return{error:{code:1,status:0,body:n.message}}}if(r.status<200||r.status>=300)return{error:{code:this.exitCodeForStatus(r.status),status:r.status,body:r.body}};let s=this.parseJson(r.body);return{items:s&&(s.data||s)||[]}}async groupInfo(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-info <groupId> [teamId]"),3;let{out:s,groupId:n,positional:i}=r,c=i[1]||r.teamId;if(!c)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let l;try{l=await this.request("GET",`/team/${c}/groups`,o)}catch(h){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${h.message}`),1}if(l.status<200||l.status>=300){let h=this.exitCodeForStatus(l.status);return console.error(`\u274C ${h}: HTTP ${l.status}`),l.body&&console.error(l.body),h}let u=(this.parseJson(l.body)?.data||[]).find(h=>h.id===n);if(!u)return console.error(`\u274C 4: \u5C0F\u7EC4 '${n}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;let m=await this.fetchGroupMembersRaw(c,n,o);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 p=m.items;if(s.json){let h={id:u.id,name:u.name,description:u.description||"",team_id:c,members:p,members_total:p.length};return s.field?process.stdout.write(v(S(h,s.field))+`
302
302
  `):process.stdout.write(JSON.stringify(h,null,2)+`
303
- `),0}return s.quiet?(console.log(u.id),0):(console.log(`group: ${u.name} (${u.id})`),console.log(`description: ${u.description||""}`),console.log(`team_id: ${a}`),console.log(`members: ${p.length}`),0)}async groupCreate(e,t,o){let r=this.parseGroupArgs(t,!1),{out:s,positional:n,flags:i}=r,a=n[0];if(!a)return console.error("\u274C 3: \u7F3A\u5C11 name \u53C2\u6570\u3002\u7528\u6CD5: coder team group-create <name> [--description <d>] [--team <teamId>]"),3;let l=r.teamId;if(!l)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let d={name:a};i.description&&(d.description=i.description);let u;try{u=await this.request("POST",`/team/${l}/groups`,o,d)}catch(f){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${f.message}`),1}if(u.status<200||u.status>=300){let f=this.exitCodeForStatus(u.status);return console.error(`\u274C ${f}: HTTP ${u.status}`),u.body&&console.error(u.body),f}let m=this.parseJson(u.body),h=(m&&m.data||m||{}).id;if(h&&await this.wikiSync("sync.upsertGroup",{teamId:l,externalGroupId:h,name:a,description:i.description||void 0},o),s.json){let f={id:h,team_id:l,name:a,description:i.description||null};return s.field?process.stdout.write(v(S(f,s.field))+`
303
+ `),0}return s.quiet?(console.log(u.id),0):(console.log(`group: ${u.name} (${u.id})`),console.log(`description: ${u.description||""}`),console.log(`team_id: ${c}`),console.log(`members: ${p.length}`),0)}async groupCreate(e,t,o){let r=this.parseGroupArgs(t,!1),{out:s,positional:n,flags:i}=r,c=n[0];if(!c)return console.error("\u274C 3: \u7F3A\u5C11 name \u53C2\u6570\u3002\u7528\u6CD5: coder team group-create <name> [--description <d>] [--team <teamId>]"),3;let l=r.teamId;if(!l)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let d={name:c};i.description&&(d.description=i.description);let u;try{u=await this.request("POST",`/team/${l}/groups`,o,d)}catch(f){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${f.message}`),1}if(u.status<200||u.status>=300){let f=this.exitCodeForStatus(u.status);return console.error(`\u274C ${f}: HTTP ${u.status}`),u.body&&console.error(u.body),f}let m=this.parseJson(u.body),h=(m&&m.data||m||{}).id;if(h&&await this.wikiSync("sync.upsertGroup",{teamId:l,externalGroupId:h,name:c,description:i.description||void 0},o),s.json){let f={id:h,team_id:l,name:c,description:i.description||null};return s.field?process.stdout.write(v(S(f,s.field))+`
304
304
  `):process.stdout.write(JSON.stringify(f,null,2)+`
305
- `),0}return s.quiet?(console.log(h||""),0):(console.log(`\u2705 \u5DF2\u521B\u5EFA\u5C0F\u7EC4: ${a} (${h})`),0)}async groupUpdate(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-update <groupId> [--name <n>] [--description <d>]"),3;let{out:s,groupId:n,flags:i}=r,a=r.teamId;if(!a)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;if(i.name===void 0&&i.description===void 0)return console.error("\u274C 3: \u81F3\u5C11\u9700\u8981\u63D0\u4F9B --name \u6216 --description"),3;let l={};i.name!==void 0&&(l.name=i.name),i.description!==void 0&&(l.description=i.description);let d;try{d=await this.request("PATCH",`/team/${a}/groups/${n}`,o,l)}catch(p){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${p.message}`),1}if(d.status<200||d.status>=300){let p=this.exitCodeForStatus(d.status);return console.error(`\u274C ${p}: HTTP ${d.status}`),d.body&&console.error(d.body),p}let u=this.parseJson(d.body)?.data||{},m=i.name!==void 0?i.name:u.name;if(m&&await this.wikiSync("sync.upsertGroup",{teamId:a,externalGroupId:n,name:m,description:i.description!==void 0?i.description:u.description||void 0},o),s.json){let p={id:n,team_id:a,...l};return s.field?process.stdout.write(v(S(p,s.field))+`
305
+ `),0}return s.quiet?(console.log(h||""),0):(console.log(`\u2705 \u5DF2\u521B\u5EFA\u5C0F\u7EC4: ${c} (${h})`),0)}async groupUpdate(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-update <groupId> [--name <n>] [--description <d>]"),3;let{out:s,groupId:n,flags:i}=r,c=r.teamId;if(!c)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;if(i.name===void 0&&i.description===void 0)return console.error("\u274C 3: \u81F3\u5C11\u9700\u8981\u63D0\u4F9B --name \u6216 --description"),3;let l={};i.name!==void 0&&(l.name=i.name),i.description!==void 0&&(l.description=i.description);let d;try{d=await this.request("PATCH",`/team/${c}/groups/${n}`,o,l)}catch(p){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${p.message}`),1}if(d.status<200||d.status>=300){let p=this.exitCodeForStatus(d.status);return console.error(`\u274C ${p}: HTTP ${d.status}`),d.body&&console.error(d.body),p}let u=this.parseJson(d.body)?.data||{},m=i.name!==void 0?i.name:u.name;if(m&&await this.wikiSync("sync.upsertGroup",{teamId:c,externalGroupId:n,name:m,description:i.description!==void 0?i.description:u.description||void 0},o),s.json){let p={id:n,team_id:c,...l};return s.field?process.stdout.write(v(S(p,s.field))+`
306
306
  `):process.stdout.write(JSON.stringify(p,null,2)+`
307
- `),0}return s.quiet?(console.log(n),0):(console.log(`\u2705 \u5DF2\u66F4\u65B0\u5C0F\u7EC4 (${n})`),i.name!==void 0&&console.log(`name: ${i.name}`),i.description!==void 0&&console.log(`description: ${i.description}`),0)}async groupDelete(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-delete <groupId> [--yes]"),3;let{out:s,groupId:n,flags:i}=r,a=r.teamId;if(!a)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;if(!i.yes){let d="\u9AD8\u5F71\u54CD\u64CD\u4F5C\uFF08\u5C06\u6E05\u9664\u8BE5\u5C0F\u7EC4\u6240\u6709\u6210\u5458\u5173\u7CFB\uFF09\uFF0C\u5FC5\u987B\u52A0 --yes \u624D\u4F1A\u6267\u884C";return s.json?process.stdout.write(JSON.stringify({method:"DELETE",path:`/team/${a}/groups/${n}`,note:d},null,2)+`
308
- `):(console.log(`\u5C06\u5220\u9664\u5C0F\u7EC4 ${n}`),console.log(`endpoint: DELETE /team/${a}/groups/${n}`),console.log(`\u26A0\uFE0F ${d}`)),10}let l;try{l=await this.request("DELETE",`/team/${a}/groups/${n}`,o)}catch(d){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${d.message}`),1}if(l.status<200||l.status>=300){let d=this.exitCodeForStatus(l.status);return console.error(`\u274C ${d}: HTTP ${l.status}`),l.body&&console.error(l.body),d}return await this.wikiSync("sync.deleteGroup",{teamId:a,externalGroupId:n},o),s.json?(process.stdout.write(JSON.stringify({deleted:!0,id:n,team_id:a},null,2)+`
309
- `),0):s.quiet?(console.log(n),0):(console.log(`\u2705 \u5DF2\u5220\u9664\u5C0F\u7EC4 ${n}`),0)}async groupMembers(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-members <groupId> [teamId]"),3;let{out:s,groupId:n,positional:i}=r,a=i[1]||r.teamId;if(!a)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let l=await this.fetchTeam(a,o);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=new Map(d.map(f=>[f.user_id,f])),m=await this.fetchGroupMembersRaw(a,n,o);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 p=m.items;if(s.json){let f={team_id:a,group_id:n,items:p,total:p.length};return s.field?process.stdout.write(v(S(f,s.field))+`
307
+ `),0}return s.quiet?(console.log(n),0):(console.log(`\u2705 \u5DF2\u66F4\u65B0\u5C0F\u7EC4 (${n})`),i.name!==void 0&&console.log(`name: ${i.name}`),i.description!==void 0&&console.log(`description: ${i.description}`),0)}async groupDelete(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-delete <groupId> [--yes]"),3;let{out:s,groupId:n,flags:i}=r,c=r.teamId;if(!c)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;if(!i.yes){let d="\u9AD8\u5F71\u54CD\u64CD\u4F5C\uFF08\u5C06\u6E05\u9664\u8BE5\u5C0F\u7EC4\u6240\u6709\u6210\u5458\u5173\u7CFB\uFF09\uFF0C\u5FC5\u987B\u52A0 --yes \u624D\u4F1A\u6267\u884C";return s.json?process.stdout.write(JSON.stringify({method:"DELETE",path:`/team/${c}/groups/${n}`,note:d},null,2)+`
308
+ `):(console.log(`\u5C06\u5220\u9664\u5C0F\u7EC4 ${n}`),console.log(`endpoint: DELETE /team/${c}/groups/${n}`),console.log(`\u26A0\uFE0F ${d}`)),10}let l;try{l=await this.request("DELETE",`/team/${c}/groups/${n}`,o)}catch(d){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${d.message}`),1}if(l.status<200||l.status>=300){let d=this.exitCodeForStatus(l.status);return console.error(`\u274C ${d}: HTTP ${l.status}`),l.body&&console.error(l.body),d}return await this.wikiSync("sync.deleteGroup",{teamId:c,externalGroupId:n},o),s.json?(process.stdout.write(JSON.stringify({deleted:!0,id:n,team_id:c},null,2)+`
309
+ `),0):s.quiet?(console.log(n),0):(console.log(`\u2705 \u5DF2\u5220\u9664\u5C0F\u7EC4 ${n}`),0)}async groupMembers(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-members <groupId> [teamId]"),3;let{out:s,groupId:n,positional:i}=r,c=i[1]||r.teamId;if(!c)return console.error("\u274C 3: \u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let l=await this.fetchTeam(c,o);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=new Map(d.map(f=>[f.user_id,f])),m=await this.fetchGroupMembersRaw(c,n,o);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 p=m.items;if(s.json){let f={team_id:c,group_id:n,items:p,total:p.length};return s.field?process.stdout.write(v(S(f,s.field))+`
310
310
  `):process.stdout.write(JSON.stringify(f,null,2)+`
311
- `),0}if(s.quiet){for(let f of p)console.log(f.user_id);return 0}if(!p.length)return console.log("\uFF08\u5C0F\u7EC4\u6682\u65E0\u6210\u5458\uFF09"),0;let h=p.map(f=>{let y=u.get(f.user_id)||{};return{username:y.username||"",user_id:f.user_id||"",type:y.user_type||"",role:f.role||"",nickname:y.nickname||""}});return J([["username","\u7528\u6237\u540D"],["user_id","\u7528\u6237ID"],["type","\u7C7B\u578B"],["role","\u89D2\u8272"],["nickname","\u6635\u79F0"]],h),0}async groupAddMembers(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-add-members <groupId> <userIds> [--role member|mentor]"),3;let{out:s,groupId:n,positional:i,flags:a}=r,l=i[1];if(!l)return console.error("\u274C 3: \u7F3A\u5C11 userIds \u53C2\u6570\uFF08\u9017\u53F7\u5206\u9694\uFF0C\u652F\u6301 user_id / username\uFF09"),3;let d=r.teamId;if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let u=a.role||"member";if(u!=="member"&&u!=="mentor")return console.error(`\u274C 3: --role \u4EC5\u652F\u6301 member|mentor\uFF0C\u6536\u5230 '${u}'`),3;let m=await this.fetchTeam(d,o);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 p=Array.isArray(m.team.members)?m.team.members:[],h=l.split(",").map(g=>g.trim()).filter(Boolean),f=[];for(let g of h){let I=p.find($=>$.user_id===g||$.username===g||$.id===g);if(!I)return console.error(`\u274C 4: \u6210\u5458 '${g}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;f.push(I)}let y={user_ids:f.map(g=>g.user_id),role:u},b;try{b=await this.request("POST",`/team/${d}/groups/${n}/members`,o,y)}catch(g){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${g.message}`),1}if(b.status<200||b.status>=300){let g=this.exitCodeForStatus(b.status);return console.error(`\u274C ${g}: HTTP ${b.status}`),b.body&&console.error(b.body),g}if(await this.wikiSync("sync.upsertGroupMembers",{teamId:d,externalGroupId:n,members:f.map(g=>({externalUserId:g.user_id,username:g.username||g.user_id,role:this.toWikiGroupRole(u)}))},o),s.json){let g={team_id:d,group_id:n,added:f.map(I=>({user_id:I.user_id,username:I.username})),role:u};return s.field?process.stdout.write(v(S(g,s.field))+`
311
+ `),0}if(s.quiet){for(let f of p)console.log(f.user_id);return 0}if(!p.length)return console.log("\uFF08\u5C0F\u7EC4\u6682\u65E0\u6210\u5458\uFF09"),0;let h=p.map(f=>{let y=u.get(f.user_id)||{};return{username:y.username||"",user_id:f.user_id||"",type:y.user_type||"",role:f.role||"",nickname:y.nickname||""}});return G([["username","\u7528\u6237\u540D"],["user_id","\u7528\u6237ID"],["type","\u7C7B\u578B"],["role","\u89D2\u8272"],["nickname","\u6635\u79F0"]],h),0}async groupAddMembers(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-add-members <groupId> <userIds> [--role member|mentor]"),3;let{out:s,groupId:n,positional:i,flags:c}=r,l=i[1];if(!l)return console.error("\u274C 3: \u7F3A\u5C11 userIds \u53C2\u6570\uFF08\u9017\u53F7\u5206\u9694\uFF0C\u652F\u6301 user_id / username\uFF09"),3;let d=r.teamId;if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let u=c.role||"member";if(u!=="member"&&u!=="mentor")return console.error(`\u274C 3: --role \u4EC5\u652F\u6301 member|mentor\uFF0C\u6536\u5230 '${u}'`),3;let m=await this.fetchTeam(d,o);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 p=Array.isArray(m.team.members)?m.team.members:[],h=l.split(",").map(g=>g.trim()).filter(Boolean),f=[];for(let g of h){let I=p.find($=>$.user_id===g||$.username===g||$.id===g);if(!I)return console.error(`\u274C 4: \u6210\u5458 '${g}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;f.push(I)}let y={user_ids:f.map(g=>g.user_id),role:u},b;try{b=await this.request("POST",`/team/${d}/groups/${n}/members`,o,y)}catch(g){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${g.message}`),1}if(b.status<200||b.status>=300){let g=this.exitCodeForStatus(b.status);return console.error(`\u274C ${g}: HTTP ${b.status}`),b.body&&console.error(b.body),g}if(await this.wikiSync("sync.upsertGroupMembers",{teamId:d,externalGroupId:n,members:f.map(g=>({externalUserId:g.user_id,username:g.username||g.user_id,role:this.toWikiGroupRole(u)}))},o),s.json){let g={team_id:d,group_id:n,added:f.map(I=>({user_id:I.user_id,username:I.username})),role:u};return s.field?process.stdout.write(v(S(g,s.field))+`
312
312
  `):process.stdout.write(JSON.stringify(g,null,2)+`
313
- `),0}if(s.quiet){for(let g of f)console.log(g.user_id);return 0}console.log(`\u2705 \u5DF2\u6DFB\u52A0 ${f.length} \u540D\u6210\u5458\u5230\u5C0F\u7EC4 ${n} (role=${u})`);for(let g of f)console.log(` - ${g.username} (${g.user_id})`);return 0}async groupSetRole(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-set-role <groupId> <userId> <member|mentor>"),3;let{out:s,groupId:n,positional:i,flags:a}=r,l=i[1],d=i[2]||a.role;if(!l||!d)return console.error("\u274C 3: \u7528\u6CD5: coder team group-set-role <groupId> <userId> <member|mentor>"),3;if(d!=="member"&&d!=="mentor")return console.error(`\u274C 3: role \u4EC5\u652F\u6301 member|mentor\uFF0C\u6536\u5230 '${d}'`),3;let u=r.teamId;if(!u)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let m=await this.fetchTeam(u,o);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(y=>y.user_id===l||y.username===l||y.id===l);if(!h)return console.error(`\u274C 4: \u6210\u5458 '${l}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;let f;try{f=await this.request("PATCH",`/team/${u}/groups/${n}/members/${h.user_id}`,o,{role:d})}catch(y){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${y.message}`),1}if(f.status<200||f.status>=300){let y=this.exitCodeForStatus(f.status);return console.error(`\u274C ${y}: HTTP ${f.status}`),f.body&&console.error(f.body),y}if(await this.wikiSync("sync.upsertGroupMembers",{teamId:u,externalGroupId:n,members:[{externalUserId:h.user_id,username:h.username||h.user_id,role:this.toWikiGroupRole(d)}]},o),s.json){let y={team_id:u,group_id:n,user_id:h.user_id,username:h.username,role:d};return s.field?process.stdout.write(v(S(y,s.field))+`
313
+ `),0}if(s.quiet){for(let g of f)console.log(g.user_id);return 0}console.log(`\u2705 \u5DF2\u6DFB\u52A0 ${f.length} \u540D\u6210\u5458\u5230\u5C0F\u7EC4 ${n} (role=${u})`);for(let g of f)console.log(` - ${g.username} (${g.user_id})`);return 0}async groupSetRole(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-set-role <groupId> <userId> <member|mentor>"),3;let{out:s,groupId:n,positional:i,flags:c}=r,l=i[1],d=i[2]||c.role;if(!l||!d)return console.error("\u274C 3: \u7528\u6CD5: coder team group-set-role <groupId> <userId> <member|mentor>"),3;if(d!=="member"&&d!=="mentor")return console.error(`\u274C 3: role \u4EC5\u652F\u6301 member|mentor\uFF0C\u6536\u5230 '${d}'`),3;let u=r.teamId;if(!u)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let m=await this.fetchTeam(u,o);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(y=>y.user_id===l||y.username===l||y.id===l);if(!h)return console.error(`\u274C 4: \u6210\u5458 '${l}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;let f;try{f=await this.request("PATCH",`/team/${u}/groups/${n}/members/${h.user_id}`,o,{role:d})}catch(y){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${y.message}`),1}if(f.status<200||f.status>=300){let y=this.exitCodeForStatus(f.status);return console.error(`\u274C ${y}: HTTP ${f.status}`),f.body&&console.error(f.body),y}if(await this.wikiSync("sync.upsertGroupMembers",{teamId:u,externalGroupId:n,members:[{externalUserId:h.user_id,username:h.username||h.user_id,role:this.toWikiGroupRole(d)}]},o),s.json){let y={team_id:u,group_id:n,user_id:h.user_id,username:h.username,role:d};return s.field?process.stdout.write(v(S(y,s.field))+`
314
314
  `):process.stdout.write(JSON.stringify(y,null,2)+`
315
- `),0}return s.quiet?(console.log(h.user_id),0):(console.log(`\u2705 \u5DF2\u5C06 ${h.username} (${h.user_id}) \u5728\u5C0F\u7EC4 ${n} \u4E2D\u8BBE\u4E3A ${d}`),0)}async groupRemoveMember(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-remove-member <groupId> <userId> [--yes]"),3;let{out:s,groupId:n,positional:i,flags:a}=r,l=i[1];if(!l)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570"),3;let d=r.teamId;if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let u=await this.fetchTeam(d,o);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===l||f.username===l||f.id===l);if(!p)return console.error(`\u274C 4: \u6210\u5458 '${l}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;if(!a.yes){let f="\u9AD8\u5F71\u54CD\u64CD\u4F5C\uFF0C\u5FC5\u987B\u52A0 --yes \u624D\u4F1A\u6267\u884C";return s.json?process.stdout.write(JSON.stringify({method:"DELETE",path:`/team/${d}/groups/${n}/members/${p.user_id}`,target:{username:p.username,user_id:p.user_id},note:f},null,2)+`
315
+ `),0}return s.quiet?(console.log(h.user_id),0):(console.log(`\u2705 \u5DF2\u5C06 ${h.username} (${h.user_id}) \u5728\u5C0F\u7EC4 ${n} \u4E2D\u8BBE\u4E3A ${d}`),0)}async groupRemoveMember(e,t,o){let r=this.parseGroupArgs(t);if(r.error)return console.error("\u274C 3: \u7F3A\u5C11 groupId \u53C2\u6570\u3002\u7528\u6CD5: coder team group-remove-member <groupId> <userId> [--yes]"),3;let{out:s,groupId:n,positional:i,flags:c}=r,l=i[1];if(!l)return console.error("\u274C 3: \u7F3A\u5C11 userId \u53C2\u6570"),3;let d=r.teamId;if(!d)return console.error("\u274C 3: \u672A\u6307\u5B9A --team \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F"),3;let u=await this.fetchTeam(d,o);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===l||f.username===l||f.id===l);if(!p)return console.error(`\u274C 4: \u6210\u5458 '${l}' \u4E0D\u5728\u56E2\u961F\u4E2D`),4;if(!c.yes){let f="\u9AD8\u5F71\u54CD\u64CD\u4F5C\uFF0C\u5FC5\u987B\u52A0 --yes \u624D\u4F1A\u6267\u884C";return s.json?process.stdout.write(JSON.stringify({method:"DELETE",path:`/team/${d}/groups/${n}/members/${p.user_id}`,target:{username:p.username,user_id:p.user_id},note:f},null,2)+`
316
316
  `):(console.log(`\u5C06\u4ECE\u5C0F\u7EC4 ${n} \u4E2D\u79FB\u9664 ${p.username} (${p.user_id})`),console.log(`endpoint: DELETE /team/${d}/groups/${n}/members/${p.user_id}`),console.log(`\u26A0\uFE0F ${f}`)),10}let h;try{h=await this.request("DELETE",`/team/${d}/groups/${n}/members/${p.user_id}`,o)}catch(f){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${f.message}`),1}if(h.status<200||h.status>=300){let f=this.exitCodeForStatus(h.status);return console.error(`\u274C ${f}: HTTP ${h.status}`),h.body&&console.error(h.body),f}return await this.wikiSync("sync.removeGroupMember",{teamId:d,externalGroupId:n,externalUserId:p.user_id},o),s.json?(process.stdout.write(JSON.stringify({removed:!0,user_id:p.user_id,username:p.username,group_id:n,team_id:d},null,2)+`
317
317
  `),0):s.quiet?(console.log(p.user_id),0):(console.log(`\u2705 \u5DF2\u5C06 ${p.username} (${p.user_id}) \u4ECE\u5C0F\u7EC4 ${n} \u79FB\u9664`),0)}async current(e,t){let{out:o}=this.parseOutputFlags(e),r=this.argParser?this.argParser.getTeam():null;if(o.json){let s=r?{id:r.id,name:r.name||""}:null;return o.field?process.stdout.write(v(S(s,o.field))+`
318
318
  `):process.stdout.write(JSON.stringify(s,null,2)+`
319
- `),0}return o.quiet?(r&&r.id&&console.log(r.id),0):!r||!r.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: ${r.name||""} (${r.id})`),0)}async use(e,t,o){let{out:r,remaining:s}=this.parseOutputFlags(t),n=s[0];if(!n)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(p){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${p.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(p=>p.id===n);if(!u)return console.error(`\u274C 4: \u56E2\u961F '${n}' \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),r.json){let p={id:u.id,name:u.name||""};return process.stdout.write(JSON.stringify(p,null,2)+`
319
+ `),0}return o.quiet?(r&&r.id&&console.log(r.id),0):!r||!r.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: ${r.name||""} (${r.id})`),0)}async use(e,t,o){let{out:r,remaining:s}=this.parseOutputFlags(t),n=s[0];if(!n)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 l=this.parseJson(c.body),u=(l&&l.data&&l.data.items||[]).find(p=>p.id===n);if(!u)return console.error(`\u274C 4: \u56E2\u961F '${n}' \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),r.json){let p={id:u.id,name:u.name||""};return process.stdout.write(JSON.stringify(p,null,2)+`
320
320
  `),0}return r.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","","Groups (\u5C0F\u7EC4):"," groups [teamId] \u5217\u51FA\u5C0F\u7EC4"," group-info <groupId> [teamId] \u5C0F\u7EC4\u8BE6\u60C5\uFF08\u542B\u6210\u5458\u5217\u8868\uFF09"," group-create <name> \u521B\u5EFA\u5C0F\u7EC4"," [--description <d>] [--team <teamId>]"," group-update <groupId> \u66F4\u65B0\u5C0F\u7EC4"," [--name <n>] [--description <d>] [--team <teamId>]"," group-delete <groupId> \u5220\u9664\u5C0F\u7EC4\uFF08\u9AD8\u5F71\u54CD\uFF0C\u9700 --yes\uFF09"," [--team <teamId>] [--yes]"," group-members <groupId> [teamId] \u5C0F\u7EC4\u6210\u5458\u5217\u8868"," group-add-members <groupId> <userIds> \u6279\u91CF\u6DFB\u52A0\u6210\u5458\uFF08\u9017\u53F7\u5206\u9694\uFF0Cuser_id \u6216 username\uFF09"," [--role member|mentor] \u9ED8\u8BA4 member"," [--team <teamId>]"," group-set-role <groupId> <userId> <member|mentor>"," \u4FEE\u6539\u6210\u5458\u5728\u5C0F\u7EC4\u4E2D\u7684\u89D2\u8272"," [--team <teamId>]"," group-remove-member <groupId> <userId> \u4ECE\u5C0F\u7EC4\u79FB\u9664\u6210\u5458\uFF08\u9AD8\u5F71\u54CD\uFF0C\u9700 --yes\uFF09"," [--team <teamId>] [--yes]","","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(`
321
- `))}};function ge(c,e){let t=c.config&&c.config.metadata&&c.config.metadata.created_by;if(!t)return"";let o=e.find(r=>r.user_id===t);return o?o.nickname?`${o.username}(${o.nickname})`:o.username:t}function S(c,e){if(!e)return c;let t=[],o=/[^.\[\]]+|\[(\d+)\]/g,r;for(;(r=o.exec(e))!==null;)t.push(r[1]!==void 0?Number(r[1]):r[0]);let s=c;for(let n of t){if(s==null)return;s=s[n]}return s}function v(c){return c==null?"":typeof c=="string"?c:typeof c=="number"||typeof c=="boolean"?String(c):JSON.stringify(c)}function J(c,e){let t=c.map(n=>Array.isArray(n)?n[0]:n),o=c.map(n=>Array.isArray(n)?n[1]:n),r=t.map((n,i)=>Math.max(ye(o[i]),...e.map(a=>ye(String(a[n]??""))))),s=(n,i)=>n+" ".repeat(Math.max(0,i-ye(n)));console.log(o.map((n,i)=>s(n,r[i])).join(" ")),console.log(r.map(n=>"-".repeat(n)).join(" "));for(let n of e)console.log(t.map((i,a)=>s(String(n[i]??""),r[a])).join(" "))}function ye(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}at.exports=be});var ut=_((Po,dt)=>{var To=require("path"),Yt=_e(),lt=Ee(),Xt=De(),Zt=Te(),Qt=qe(),eo=Ne(),to=Fe(),oo=Ge(),ro=Ve(),no=Xe(),so=nt(),io=ct(),Ie=class{constructor(){this.argParser=new Yt,this.claudeLauncher=this._createClaudeLauncher(),this.geminiLauncher=new Zt,this.codexLauncher=new Qt,this.vscodeExtensionService=new eo,this.publishService=new to,this.skillsService=new oo(this.argParser),this.wikiService=new ro(this.argParser),this.channelService=new no,this.authCommandService=new so(this.argParser),this.teamService=new io(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 lt;try{let t=new Xt,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 lt}}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]),r=e.length>0&&["pub","auth","update","skills","wiki","channel","team"].includes(e[0]);if(!o&&!r&&(e.includes("--help")||e.includes("-h")))return this.argParser.showHelp(),0;if(!o&&!r&&(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...
321
+ `))}};function ye(a,e){let t=a.config&&a.config.metadata&&a.config.metadata.created_by;if(!t)return"";let o=e.find(r=>r.user_id===t);return o?o.nickname?`${o.username}(${o.nickname})`:o.username:t}function S(a,e){if(!e)return a;let t=[],o=/[^.\[\]]+|\[(\d+)\]/g,r;for(;(r=o.exec(e))!==null;)t.push(r[1]!==void 0?Number(r[1]):r[0]);let s=a;for(let n of t){if(s==null)return;s=s[n]}return s}function v(a){return a==null?"":typeof a=="string"?a:typeof a=="number"||typeof a=="boolean"?String(a):JSON.stringify(a)}function G(a,e){let t=a.map(n=>Array.isArray(n)?n[0]:n),o=a.map(n=>Array.isArray(n)?n[1]:n),r=t.map((n,i)=>Math.max(be(o[i]),...e.map(c=>be(String(c[n]??""))))),s=(n,i)=>n+" ".repeat(Math.max(0,i-be(n)));console.log(o.map((n,i)=>s(n,r[i])).join(" ")),console.log(r.map(n=>"-".repeat(n)).join(" "));for(let n of e)console.log(t.map((i,c)=>s(String(n[i]??""),r[c])).join(" "))}function be(a){let e=0;for(let t of a){let o=t.codePointAt(0);o>=19968&&o<=40959||o>=12288&&o<=12351||o>=65280&&o<=65519?e+=2:e+=1}return e}lt.exports=Ie});var pt=_((Lo,mt)=>{var No=require("path"),oo=Se(),ut=De(),ro=Ae(),no=Pe(),so=Ue(),io=Fe(),co=Ge(),ao=Ke(),lo=We(),uo=Qe(),mo=it(),po=dt(),we=class{constructor(){this.argParser=new oo,this.claudeLauncher=this._createClaudeLauncher(),this.geminiLauncher=new no,this.codexLauncher=new so,this.vscodeExtensionService=new io,this.publishService=new co,this.skillsService=new ao(this.argParser),this.wikiService=new lo(this.argParser),this.channelService=new uo,this.authCommandService=new mo(this.argParser),this.teamService=new po(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 ut;try{let t=new ro,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 ut}}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]),r=e.length>0&&["pub","auth","update","skills","wiki","channel","team"].includes(e[0]);if(!o&&!r&&(e.includes("--help")||e.includes("-h")))return this.argParser.showHelp(),0;if(!o&&!r&&(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...
322
322
  `);try{e("npm install -g makecoder@latest",{stdio:"inherit"})}catch(o){return console.error(`
323
323
  \u274C \u5347\u7EA7\u5931\u8D25:`,o.message),1}return this._ensurePlatformCodex(),console.log(`
324
324
  \u2705 \u5347\u7EA7\u6210\u529F`),0}_ensurePlatformCodex(){let{execSync:e}=require("child_process"),t=require("fs"),o=require("path"),r={"linux-x64":"makecoder-codex-linux-x64","darwin-arm64":"makecoder-codex-darwin-arm64","win32-x64":"makecoder-codex-win32-x64"},s=`${process.platform}-${process.arch}`,n=r[s];if(!n)return;let i;try{i=e("npm root -g",{encoding:"utf8"}).trim()}catch{return}if([o.join(i,"makecoder","node_modules",n,"package.json"),o.join(i,n,"package.json")].some(m=>t.existsSync(m)))return;console.log(`
325
325
  \u26A0\uFE0F \u672A\u68C0\u6D4B\u5230 ${n}\uFF0C\u6B63\u5728\u8865\u88C5...`);let l;try{l=require(o.join(i,"makecoder","package.json")).optionalDependencies?.[n]}catch{}let d=m=>{try{return e(`npm install -g ${m}`,{stdio:"inherit"}),!0}catch{return!1}};l&&d(`${n}@${l}`)||d(`${n}@latest`)||console.warn(`
326
326
  \u26A0\uFE0F \u81EA\u52A8\u8865\u88C5 ${n} \u5931\u8D25\uFF0Ccoder codex \u53EF\u80FD\u4E0D\u53EF\u7528\u3002
327
- \u8BF7\u624B\u52A8\u6267\u884C: npm install -g ${n}@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"),r=o(t,process.argv.slice(2),{stdio:"inherit"});process.exit(r.status??1)}}var ao=ut(),{shouldSuppressUpdateNotice:co}=se();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 lo(c,e){let t=s=>s.replace(/^v/,"").split(".").map(Number),[o,r]=[t(c),t(e)];for(let s=0;s<3;s++){if((o[s]||0)>(r[s]||0))return!0;if((o[s]||0)<(r[s]||0))return!1}return!1}function uo(){if(co())return;let c=require("https"),{version:e}=U(),o=c.get("https://registry.npmmirror.com/makecoder/latest",{timeout:5e3},r=>{let s="";r.on("data",n=>{s+=n}),r.on("end",()=>{try{let n=JSON.parse(s).version;n&&lo(n,e)&&console.error(`\x1B[33m\u26A1 \u68C0\u6D4B\u5230\u65B0\u7248\u672C ${n}\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 mo(){let c=new Set(["pub","auth","update","skills","wiki","channel","team"]),e=process.argv[2];(!e||!c.has(e))&&uo(),process.env.CODER_NESTED="1";let t=new ao;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)}}mo().catch(c=>{console.error(`Startup error: ${c.message}`),process.exit(1)});
327
+ \u8BF7\u624B\u52A8\u6267\u884C: npm install -g ${n}@latest`)}showVersion(){let e=U();console.log(`coder version: ${e.version}`)}};mt.exports=we});var ht=process.env.CODER_ARGV0;if(ht){let e={rg:"rg",ugrep:"ugrep",bfs:"bfs"}[ht];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"),r=o(t,process.argv.slice(2),{stdio:"inherit"});process.exit(r.status??1)}}var ho=pt(),{shouldSuppressUpdateNotice:fo}=ie();process.on("unhandledRejection",(a,e)=>{console.error("Unhandled Promise Rejection:",a),process.exit(1)});process.on("uncaughtException",a=>{console.error("Uncaught Exception:",a.message),process.env.CODEV_DEBUG&&console.error(a.stack),process.exit(1)});function go(a,e){let t=s=>s.replace(/^v/,"").split(".").map(Number),[o,r]=[t(a),t(e)];for(let s=0;s<3;s++){if((o[s]||0)>(r[s]||0))return!0;if((o[s]||0)<(r[s]||0))return!1}return!1}function yo(){if(fo())return;let a=require("https"),{version:e}=U(),o=a.get("https://registry.npmmirror.com/makecoder/latest",{timeout:5e3},r=>{let s="";r.on("data",n=>{s+=n}),r.on("end",()=>{try{let n=JSON.parse(s).version;n&&go(n,e)&&console.error(`\x1B[33m\u26A1 \u68C0\u6D4B\u5230\u65B0\u7248\u672C ${n}\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 bo(){let a=new Set(["pub","auth","update","skills","wiki","channel","team"]),e=process.argv[2];(!e||!a.has(e))&&yo(),process.env.CODER_NESTED="1";let t=new ho;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)}}bo().catch(a=>{console.error(`Startup error: ${a.message}`),process.exit(1)});