makecoder 4.0.72 → 4.0.73

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/cc.mjs CHANGED
@@ -20,13 +20,13 @@ import{createRequire as vP5}from"node:module";var MP5=Object.create;var{getProto
20
20
  Object.assign(A, {
21
21
  post(...args) {
22
22
  const [url, payload, ...remainArgs] = args;
23
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.72' + '&session_id=' + I8() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
23
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.73' + '&session_id=' + I8() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
24
24
  if (process.env.CODER_APIKEY) {
25
25
  const headerValues = payload.headers.values;
26
26
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
27
27
  }
28
28
 
29
- payload.headers.values.set('X-Coder-Version', '4.0.72');
29
+ payload.headers.values.set('X-Coder-Version', '4.0.73');
30
30
  payload.headers.values.set('X-Coder-Platform', process.platform);
31
31
  payload.headers.values.set('X-Coder-Arch', process.arch);
32
32
 
package/dist/coder.js CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
- var it=Object.create;var ge=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,dt=Object.prototype.hasOwnProperty;var _=(c,e)=>()=>(e||c((e={exports:{}}).exports,e),e.exports);var ut=(c,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ct(e))!dt.call(c,r)&&r!==t&&ge(c,r,{get:()=>e[r],enumerable:!(o=at(e,r))||o.enumerable});return c};var mt=(c,e,t)=>(t=c!=null?it(lt(c)):{},ut(e||!c||!c.__esModule?ge(t,"default",{value:c,enumerable:!0}):t,c));var j=_((io,pt)=>{pt.exports={name:"makecoder",version:"4.0.72",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","scripts/postinstall.js"]}});var we=_((ao,Ie)=>{var A=require("fs"),ye=require("path"),ft=require("os"),ht=new Set(["auth","skills","wiki","team"]),be=new Set(["claude","gemini","codex"]),gt=new Set(["pub","auth","update","skills","wiki","team"]),z=class{constructor(){let e=process.env.CODER_PROFILE,t=e?`.coder.${e}`:".coder";this.configPath=ye.join(ft.homedir(),t,"config.json"),this.defaultConfig={agent:"claude",auth:{apikey:null}}}loadConfig(){let e=ye.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(be.has(e[0]))o.agent=e[0],o.agentSetBySubcommand=!0,r=1;else if(gt.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}}}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||!be.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!ht.has(o.command)&&!s&&!o.apikey&&await this._oauthLogin(o),o}async _oauthLogin(e){console.log(`\u274C \u5C1A\u672A\u767B\u5F55
2
+ var it=Object.create;var ge=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,dt=Object.prototype.hasOwnProperty;var _=(c,e)=>()=>(e||c((e={exports:{}}).exports,e),e.exports);var ut=(c,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ct(e))!dt.call(c,r)&&r!==t&&ge(c,r,{get:()=>e[r],enumerable:!(o=at(e,r))||o.enumerable});return c};var mt=(c,e,t)=>(t=c!=null?it(lt(c)):{},ut(e||!c||!c.__esModule?ge(t,"default",{value:c,enumerable:!0}):t,c));var j=_((ao,pt)=>{pt.exports={name:"makecoder",version:"4.0.73",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","scripts/postinstall.js"]}});var we=_((co,Ie)=>{var A=require("fs"),ye=require("path"),ft=require("os"),ht=new Set(["auth","skills","wiki","team"]),be=new Set(["claude","gemini","codex"]),gt=new Set(["pub","auth","update","skills","wiki","team"]),z=class{constructor(){let e=process.env.CODER_PROFILE,t=e?`.coder.${e}`:".coder";this.configPath=ye.join(ft.homedir(),t,"config.json"),this.defaultConfig={agent:"claude",auth:{apikey:null}}}loadConfig(){let e=ye.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(be.has(e[0]))o.agent=e[0],o.agentSetBySubcommand=!0,r=1;else if(gt.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}}}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||!be.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!ht.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}=j(),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"," 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 team --help \u67E5\u770B team \u5B50\u547D\u4EE4\u5E2E\u52A9","",`\u914D\u7F6E\u6587\u4EF6: ${this.configPath}`];console.log(t.join(`
7
- `))}};Ie.exports=z});var U=_((co,xe)=>{var{spawn:yt}=require("child_process"),B=require("path"),$e=require("fs"),W=class{constructor(e){this.config=e}findExecutablePath(){let e=B.dirname(require.main.filename);for(let t of this.config.executablePaths){let o=B.resolve(e,t);if($e.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=B.dirname(process.execPath),o=[B.join(t,"..","lib","node_modules","makecoder","dist",e),B.join(t,"node_modules","makecoder","dist",e)];for(let r of o)if($e.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=yt("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}}};xe.exports=W});var _e=_((lo,ke)=>{var bt=U(),Y=class extends bt{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"})})}};ke.exports=Y});var Se=_((uo,ve)=>{var It=U(),{spawn:wt,execFileSync:$t}=require("child_process"),G=require("path"),L=require("fs"),X=class extends It{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 $t(t,["--version"],{stdio:"ignore"}),t}catch{}if(o){let s=G.join(o,".bun","bin",t);if(L.existsSync(s))return s}if(o){let s=G.join(o,".local","bin",t);if(L.existsSync(s))return s}try{let s=require.resolve(`bun/${e?"bin/bun.exe":"bin/bun"}`);if(L.existsSync(s))return s}catch{}let r=this._getBunPlatformPackage();if(r)try{let s=G.dirname(require.resolve(`${r}/package.json`)),n=G.join(s,"bin",t);if(L.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:L.realpathSync(process.argv[1]),...s};r&&(d.CODER_APIKEY=r);let u=wt(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)})})}};ve.exports=X});var Ee=_((mo,Ce)=>{var xt=U(),Z=class extends xt{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"})})}};Ce.exports=Z});var Te=_((po,Ae)=>{var{execFileSync:De}=require("child_process"),N=require("path"),Oe=require("fs"),kt=U(),_t={"linux-x64":"makecoder-codex-linux-x64","darwin-arm64":"makecoder-codex-darwin-arm64","win32-x64":"makecoder-codex-win32-x64"},vt=5e3,Q=class extends kt{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,vt)),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=_t[`${e}-${t}`],r=e==="win32"?"codex.exe":"codex";if(o)try{let s=require.resolve(`${o}/package.json`),n=N.join(N.dirname(s),"bin",r);if(Oe.existsSync(n))return n}catch{}try{let s=N.dirname(this.findExecutablePath()),n=[N.join(s,r)];o&&n.push(N.join(s,"..","node_modules",o,"bin",r));for(let i of n)if(Oe.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{De("launchctl",["setenv",n,i],{stdio:"ignore"}),s.push(n)}catch(a){process.env.CODEV_DEBUG&&console.log(`[codex app] launchctl setenv ${n} \u5931\u8D25: ${a.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{De("launchctl",["unsetenv",t],{stdio:"ignore"})}catch(o){process.env.CODEV_DEBUG&&console.log(`[codex app] launchctl unsetenv ${t} \u5931\u8D25: ${o.message}`)}}};Ae.exports=Q});var Be=_((fo,je)=>{var R=require("fs"),Pe=require("path"),{spawn:qe}=require("child_process"),ee=class{constructor(){this.extensionId="codev.codev-background";let e=require.main?Pe.dirname(require.main.filename):__dirname;this.extensionPath=Pe.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(R.existsSync(e))try{return R.accessSync(e,R.constants.F_OK|R.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):!!R.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=qe(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=qe(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)}}};je.exports=ee});var Ne=_((ho,Le)=>{var E=require("fs"),T=require("path"),St=require("readline"),{execSync:H}=require("child_process"),Ue=require("os"),te=class{constructor(){this.serverUrl="https://makecoder.com/bigapis/codev/v1/coderpub"}getClaudeJsonlPath(e,t=!1){let o=e.replace(/[/_]/g,"-"),r=T.join(Ue.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=St.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=Ue.tmpdir(),s=`coder-pub-${Date.now()}.zip`,n=T.join(r,s);try{let i=!1;if(E.existsSync(T.join(e,".git")))try{H(`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(" ");H(`zip -r "${n}" . ${l}`,{cwd:e,stdio:"pipe"}),console.log("\u{1F4E6} \u5DF2\u521B\u5EFA\u538B\u7F29\u5305")}if(o){console.log(`
7
+ `))}};Ie.exports=z});var U=_((lo,xe)=>{var{spawn:yt}=require("child_process"),B=require("path"),$e=require("fs"),W=class{constructor(e){this.config=e}findExecutablePath(){let e=B.dirname(require.main.filename);for(let t of this.config.executablePaths){let o=B.resolve(e,t);if($e.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=B.dirname(process.execPath),o=[B.join(t,"..","lib","node_modules","makecoder","dist",e),B.join(t,"node_modules","makecoder","dist",e)];for(let r of o)if($e.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=yt("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}}};xe.exports=W});var _e=_((uo,ke)=>{var bt=U(),Y=class extends bt{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"})})}};ke.exports=Y});var Se=_((mo,ve)=>{var It=U(),{spawn:wt,execFileSync:$t}=require("child_process"),G=require("path"),L=require("fs"),X=class extends It{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 $t(t,["--version"],{stdio:"ignore"}),t}catch{}if(o){let s=G.join(o,".bun","bin",t);if(L.existsSync(s))return s}if(o){let s=G.join(o,".local","bin",t);if(L.existsSync(s))return s}try{let s=require.resolve(`bun/${e?"bin/bun.exe":"bin/bun"}`);if(L.existsSync(s))return s}catch{}let r=this._getBunPlatformPackage();if(r)try{let s=G.dirname(require.resolve(`${r}/package.json`)),n=G.join(s,"bin",t);if(L.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:L.realpathSync(process.argv[1]),...s};r&&(d.CODER_APIKEY=r);let u=wt(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)})})}};ve.exports=X});var Ee=_((po,Ce)=>{var xt=U(),Z=class extends xt{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"})})}};Ce.exports=Z});var Te=_((fo,Ae)=>{var{execFileSync:De}=require("child_process"),N=require("path"),Oe=require("fs"),kt=U(),_t={"linux-x64":"makecoder-codex-linux-x64","darwin-arm64":"makecoder-codex-darwin-arm64","win32-x64":"makecoder-codex-win32-x64"},vt={arm64:"https://cdn.makecoder.com/cdnuploads/codex-app/Codex.dmg",x64:"https://cdn.makecoder.com/cdnuploads/codex-app/Codex-latest-x64.dmg"},St=5e3,Q=class extends kt{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),i=this._withDownloadUrlMirror(t);try{return await super.launch({...e,remainingArgs:[...s,...i]})}finally{n&&(await new Promise(a=>setTimeout(a,St)),this._removeDesktopEnv(n))}}_withDownloadUrlMirror(e){if(process.platform!=="darwin"||!this._isAppSubcommand(e)||e.includes("--download-url"))return e;let t=vt[process.arch];return t?(process.env.CODEV_DEBUG&&console.log(`[codex app] \u6CE8\u5165 --download-url ${t}`),[...e,"--download-url",t]):e}_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=_t[`${e}-${t}`],r=e==="win32"?"codex.exe":"codex";if(o)try{let s=require.resolve(`${o}/package.json`),n=N.join(N.dirname(s),"bin",r);if(Oe.existsSync(n))return n}catch{}try{let s=N.dirname(this.findExecutablePath()),n=[N.join(s,r)];o&&n.push(N.join(s,"..","node_modules",o,"bin",r));for(let i of n)if(Oe.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{De("launchctl",["setenv",n,i],{stdio:"ignore"}),s.push(n)}catch(a){process.env.CODEV_DEBUG&&console.log(`[codex app] launchctl setenv ${n} \u5931\u8D25: ${a.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{De("launchctl",["unsetenv",t],{stdio:"ignore"})}catch(o){process.env.CODEV_DEBUG&&console.log(`[codex app] launchctl unsetenv ${t} \u5931\u8D25: ${o.message}`)}}};Ae.exports=Q});var Be=_((ho,je)=>{var R=require("fs"),Pe=require("path"),{spawn:qe}=require("child_process"),ee=class{constructor(){this.extensionId="codev.codev-background";let e=require.main?Pe.dirname(require.main.filename):__dirname;this.extensionPath=Pe.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(R.existsSync(e))try{return R.accessSync(e,R.constants.F_OK|R.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):!!R.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=qe(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=qe(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)}}};je.exports=ee});var Ne=_((go,Le)=>{var E=require("fs"),T=require("path"),Ct=require("readline"),{execSync:H}=require("child_process"),Ue=require("os"),te=class{constructor(){this.serverUrl="https://makecoder.com/bigapis/codev/v1/coderpub"}getClaudeJsonlPath(e,t=!1){let o=e.replace(/[/_]/g,"-"),r=T.join(Ue.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=Ct.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=Ue.tmpdir(),s=`coder-pub-${Date.now()}.zip`,n=T.join(r,s);try{let i=!1;if(E.existsSync(T.join(e,".git")))try{H(`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(" ");H(`zip -r "${n}" . ${l}`,{cwd:e,stdio:"pipe"}),console.log("\u{1F4E6} \u5DF2\u521B\u5EFA\u538B\u7F29\u5305")}if(o){console.log(`
11
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
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"),H(`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
@@ -17,13 +17,13 @@ var it=Object.create;var ge=Object.defineProperty;var at=Object.getOwnPropertyDe
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
- `))}};Le.exports=te});var oe=_((go,Re)=>{function Ct(){return process.env.CODER_NESTED==="1"||!process.stdout.isTTY}Re.exports={shouldSuppressUpdateNotice:Ct}});var Me=_((yo,Fe)=>{var re=require("https"),x=require("fs"),C=require("path"),V=require("os"),{shouldSuppressUpdateNotice:Et}=oe(),P="https://makecoder.com/skillhub",ne=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=V.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=re.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}`}:{}};re.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
+ `))}};Le.exports=te});var oe=_((yo,Re)=>{function Et(){return process.env.CODER_NESTED==="1"||!process.stdout.isTTY}Re.exports={shouldSuppressUpdateNotice:Et}});var Me=_((bo,Fe)=>{var re=require("https"),x=require("fs"),C=require("path"),V=require("os"),{shouldSuppressUpdateNotice:Dt}=oe(),P="https://makecoder.com/skillhub",ne=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=V.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=re.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}`}:{}};re.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(`
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
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
24
  \u66F4\u65B0\u5B8C\u6210: ${n} \u6210\u529F, ${i} \u5931\u8D25`);try{let l=C.join(V.homedir(),".agents","skills",".update-cache.json");x.existsSync(l)&&x.unlinkSync(l)}catch{}if(a){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,f]of Object.entries(a)){let h=C.join(m,p);x.mkdirSync(C.dirname(h),{recursive:!0}),x.writeFileSync(h,f,"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=V.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(V.homedir(),".agents","skills",".update-cache.json");if(!Et())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=>{re.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:
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,f]of Object.entries(a)){let h=C.join(m,p);x.mkdirSync(C.dirname(h),{recursive:!0}),x.writeFileSync(h,f,"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=V.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(V.homedir(),".agents","skills",".update-cache.json");if(!Dt())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=>{re.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
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 f=`${P}/api/v1/skills/${encodeURIComponent(u)}/publish?visibility=${encodeURIComponent(n)}`,h=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 "${f}" -H "Authorization: Bearer ${h}" -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(`
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(`
@@ -31,7 +31,7 @@ var it=Object.create;var ge=Object.defineProperty;var at=Object.getOwnPropertyDe
31
31
  `);for(let h of m){let y=`${h.slug}`.padEnd(28),b=`\u2B50 ${h.starCount??0}`.padEnd(8),g=`\u2193 ${h.downloadCount??0}`.padEnd(10);console.log(` ${y} ${b} ${g} ${h.summary||""}`)}return(o+1)*r<p&&console.log(`
32
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:
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
- `))}};Fe.exports=ne});var Ge=_((bo,Je)=>{var Dt=require("https"),K="https://makecoder.com/wiki",Ot=`${K}/api`,D=c=>`${K}/doc/${c}`,se=c=>`${K}/collection/${c}`;function At(c){return c.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}var Tt={"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
+ `))}};Fe.exports=ne});var Ge=_((Io,Je)=>{var Ot=require("https"),K="https://makecoder.com/wiki",At=`${K}/api`,D=c=>`${K}/doc/${c}`,se=c=>`${K}/collection/${c}`;function Tt(c){return c.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}var Pt={"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}
35
35
  \u540D\u79F0: ${e.name}
36
36
  \u63CF\u8FF0: ${e.description||""}
37
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)":D(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)":D(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}
@@ -48,7 +48,7 @@ URL: ${e.url||""}`)}},share:{endpoint:"shares.create",requireId:"\u274C \u8BF
48
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}
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")}},ie=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(`${Ot}/${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=Dt.request(d,m=>{let p="";m.on("data",f=>p+=f),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})),f=await this.teamService.request("GET",`/team?constraints=${p}&page=1&size=200`,s);if(f.status===200){let h=this.teamService.parseJson(f.body),y=h&&h.data&&h.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=At(e);if(typeof this[d]=="function")return await this[d](t,a,s,l);let u=Tt[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)":se(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),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"),f;p!==-1&&(f=t[p+1],t.splice(p,2));let h=t.indexOf("--index"),y;h!==-1&&(y=t[h+1],t.splice(h,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(O=>!O.startsWith("--")).join(" "),$={name:b,description:I,sharing:!0};$.permission=n==="null"||n==="none"?null:n,a&&($.icon=a),d&&($.color=d),(m||f)&&($.sort={field:m||"index",direction:f||"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}
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")}},ie=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(`${At}/${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=Ot.request(d,m=>{let p="";m.on("data",f=>p+=f),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})),f=await this.teamService.request("GET",`/team?constraints=${p}&page=1&size=200`,s);if(f.status===200){let h=this.teamService.parseJson(f.body),y=h&&h.data&&h.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=Tt(e);if(typeof this[d]=="function")return await this[d](t,a,s,l);let u=Pt[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)":se(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),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"),f;p!==-1&&(f=t[p+1],t.splice(p,2));let h=t.indexOf("--index"),y;h!==-1&&(y=t[h+1],t.splice(h,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(O=>!O.startsWith("--")).join(" "),$={name:b,description:I,sharing:!0};$.permission=n==="null"||n==="none"?null:n,a&&($.icon=a),d&&($.color=d),(m||f)&&($.sort={field:m||"index",direction:f||"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
52
  ${se(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}
53
53
  ID: ${i.id}
54
54
  \u96C6\u5408: ${i.collectionId}
@@ -78,7 +78,7 @@ Content-Type: ${s}\r
78
78
  `),u=Buffer.from(`\r
79
79
  --${a}--\r
80
80
  `),m=Buffer.concat([...l,d,o,u]),p=new URL(e),f=p.protocol==="https:"?require("https"):require("http"),h={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=f.request(h,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
- `))}};Je.exports=ie});var Ve=_((Io,He)=>{var Pt=require("http"),ae=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=Pt.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(`
81
+ `))}};Je.exports=ie});var Ve=_((wo,He)=>{var qt=require("http"),ae=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=qt.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(`
82
82
  <!DOCTYPE html>
83
83
  <html>
84
84
  <head>
@@ -203,7 +203,7 @@ Content-Type: ${s}\r
203
203
  </script>
204
204
  </body>
205
205
  </html>
206
- `),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)}};He.exports=ae});var ze=_((wo,Ke)=>{var qt=require("crypto"),jt=Ve(),ce=class{constructor(e={}){this.baseUrl=e.baseUrl||"https://makecoder.com",this.callbackServer=null}generateState(){return qt.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 jt;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(`
206
+ `),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)}};He.exports=ae});var ze=_(($o,Ke)=>{var jt=require("crypto"),Bt=Ve(),ce=class{constructor(e={}){this.baseUrl=e.baseUrl||"https://makecoder.com",this.callbackServer=null}generateState(){return jt.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 Bt;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(`
207
207
  \u{1F510} \u5F00\u59CB OAuth \u767B\u5F55\u6D41\u7A0B...
208
208
  `),console.log(`\u{1F4CB} \u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u767B\u5F55
209
209
  `),console.log(`\u{1F310} \u6388\u6743\u5730\u5740: ${e}
@@ -211,7 +211,7 @@ Content-Type: ${s}\r
211
211
  `),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!
212
212
  `),r}catch(e){throw console.error(`
213
213
  \u274C OAuth \u767B\u5F55\u5931\u8D25: ${e.message}
214
- `),e}finally{this.callbackServer&&this.callbackServer.cleanup()}}cleanup(){this.callbackServer&&this.callbackServer.cleanup()}};Ke.exports=ce});var Xe=_(($o,Ye)=>{var We=require("readline"),Bt=ze(),le=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 Bt({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(`
214
+ `),e}finally{this.callbackServer&&this.callbackServer.cleanup()}}cleanup(){this.callbackServer&&this.callbackServer.cleanup()}};Ke.exports=ce});var Xe=_((xo,Ye)=>{var We=require("readline"),Ut=ze(),le=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 Ut({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(`
215
215
  \u8BF7\u624B\u52A8\u8F93\u5165 API Key\uFF08\u83B7\u53D6\u5730\u5740: https://makecoder.com/my/apikeys\uFF09
216
216
  `),await this.terminalOnlyLogin()}console.log(`
217
217
  \u{1F510} \u767B\u5F55 MakeCoder
@@ -242,7 +242,7 @@ Content-Type: ${s}\r
242
242
  coder auth status # \u67E5\u770B\u767B\u5F55\u72B6\u6001
243
243
 
244
244
  \u83B7\u53D6 API Key: https://makecoder.com/my/apikeys
245
- `)}};Ye.exports=le});var Qe=_((xo,Ze)=>{var de=require("crypto"),{URL:Ut}=require("url"),ue=class{static generateSignature(e,t,o,r){try{let s=new Ut(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=de.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[de.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=de.randomBytes(1)[0]%(l+1);[a[l],a[d]]=[a[d],a[l]]}return a.join("")}};Ze.exports=ue});var tt=_((ko,et)=>{var Lt=require("https"),{URL:Nt}=require("url"),F=require("fs"),q=require("path"),Rt=Qe(),Ft="https://makecoder.com/bigapis/auth/v1",Mt="https://makecoder.com/bigapis/kbb2/v1",Jt="https://makecoder.com/wiki/api",fe=class{constructor(e){this.argParser=e||null}request(e,t,o,r,s){return new Promise((n,i)=>{let a=s||Ft,l=new Nt(`${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=Lt.request(m,f=>{let h="";f.on("data",y=>h+=y),f.on("end",()=>n({status:f.statusCode,body:h}))});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=v(d,o.field);process.stdout.write(S(u)+`
245
+ `)}};Ye.exports=le});var Qe=_((ko,Ze)=>{var de=require("crypto"),{URL:Lt}=require("url"),ue=class{static generateSignature(e,t,o,r){try{let s=new Lt(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=de.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[de.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=de.randomBytes(1)[0]%(l+1);[a[l],a[d]]=[a[d],a[l]]}return a.join("")}};Ze.exports=ue});var tt=_((_o,et)=>{var Nt=require("https"),{URL:Rt}=require("url"),F=require("fs"),q=require("path"),Ft=Qe(),Mt="https://makecoder.com/bigapis/auth/v1",Jt="https://makecoder.com/bigapis/kbb2/v1",Gt="https://makecoder.com/wiki/api",fe=class{constructor(e){this.argParser=e||null}request(e,t,o,r,s){return new Promise((n,i)=>{let a=s||Mt,l=new Rt(`${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=Nt.request(m,f=>{let h="";f.on("data",y=>h+=y),f.on("end",()=>n({status:f.statusCode,body:h}))});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=v(d,o.field);process.stdout.write(S(u)+`
246
246
  `)}else process.stdout.write(JSON.stringify(d,null,2)+`
247
247
  `);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 M([["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(S(v(u,r.field))+`
248
248
  `):process.stdout.write(JSON.stringify(u,null,2)+`
@@ -252,7 +252,7 @@ Content-Type: ${s}\r
252
252
  `):process.stdout.write(JSON.stringify(m,null,2)+`
253
253
  `),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: ${me(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),f=a.toLowerCase(),h=p.filter(g=>{let I=(g.username||"").toLowerCase(),$=(g.user_id||"").toLowerCase(),w=(g.id||"").toLowerCase(),k=(g.nickname||"").toLowerCase(),O=(g.introduction||"").toLowerCase();return I.includes(f)||$.includes(f)||w.includes(f)||k.includes(f)||O.includes(f)});if(r.json){let g={team_id:u.team.id,keyword:a,items:h,total:h.length};return r.field?process.stdout.write(S(v(g,r.field))+`
254
254
  `):process.stdout.write(JSON.stringify(g,null,2)+`
255
- `),0}if(r.quiet){for(let g of h)console.log(g.user_id||g.id||"");return 0}if(!h.length)return console.log(`\uFF08\u672A\u5339\u914D\u5230 '${a}'\uFF09`),0;let b=[...h].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:me(g,m)}));return M([["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=q.resolve(e);for((!F.existsSync(t)||!F.statSync(t).isDirectory())&&(t=q.dirname(t));t&&t!==q.dirname(t);){if(F.existsSync(q.join(t,".git")))return!0;t=q.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=q.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||Rt.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 f={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"},h;try{h=await this.request("POST","/users",o,f)}catch(I){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${I.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 y=this.parseJson(h.body),b=null;if(a.saveTo){let I=q.resolve(a.saveTo),$=`# Coder team member credentials
255
+ `),0}if(r.quiet){for(let g of h)console.log(g.user_id||g.id||"");return 0}if(!h.length)return console.log(`\uFF08\u672A\u5339\u914D\u5230 '${a}'\uFF09`),0;let b=[...h].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:me(g,m)}));return M([["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=q.resolve(e);for((!F.existsSync(t)||!F.statSync(t).isDirectory())&&(t=q.dirname(t));t&&t!==q.dirname(t);){if(F.existsSync(q.join(t,".git")))return!0;t=q.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=q.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||Ft.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 f={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"},h;try{h=await this.request("POST","/users",o,f)}catch(I){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${I.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 y=this.parseJson(h.body),b=null;if(a.saveTo){let I=q.resolve(a.saveTo),$=`# Coder team member credentials
256
256
  # Created: ${new Date().toISOString()}
257
257
  username: ${l}
258
258
  password: ${u}
@@ -264,9 +264,9 @@ type: ${a.type}
264
264
  `):(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 ${h}`)),10}let f;try{f=await this.request("DELETE",`/team/${d}/members/${p.id}`,o)}catch(h){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${h.message}`),1}return f.status<200||f.status>=300?(console.error(`\u274C ${this.exitCodeForStatus(f.status)}: HTTP ${f.status}`),f.body&&console.error(f.body),this.exitCodeForStatus(f.status)):r.json?(process.stdout.write(JSON.stringify({deleted:!0,username:p.username,user_id:p.user_id,team_id:d},null,2)+`
265
265
  `),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 f;try{f=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(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 h={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(S(v(h,r.field))+`
266
266
  `):process.stdout.write(JSON.stringify(h,null,2)+`
267
- `),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 f=(Array.isArray(m.team.members)?m.team.members:[]).find(w=>w.user_id===a||w.id===a||w.username===a);if(!f)return console.error(`\u274C 4: \u6210\u5458 '${a}' \u4E0D\u5728\u56E2\u961F '${m.team.name}' \u4E2D`),4;let h=`/refactor/coder/teams/${u}/members/${f.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",h,o,y,Mt)}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:f.username,user_id:f.user_id,team_id:u,points:d,quota:b};return r.json?(r.field?process.stdout.write(S(v($,r.field))+`
267
+ `),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 f=(Array.isArray(m.team.members)?m.team.members:[]).find(w=>w.user_id===a||w.id===a||w.username===a);if(!f)return console.error(`\u274C 4: \u6210\u5458 '${a}' \u4E0D\u5728\u56E2\u961F '${m.team.name}' \u4E2D`),4;let h=`/refactor/coder/teams/${u}/members/${f.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",h,o,y,Jt)}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:f.username,user_id:f.user_id,team_id:u,points:d,quota:b};return r.json?(r.field?process.stdout.write(S(v($,r.field))+`
268
268
  `):process.stdout.write(JSON.stringify($,null,2)+`
269
- `),0):r.quiet?(console.log(f.user_id),0):(console.log(`\u2705 \u5DF2\u4E3A ${f.username} (${f.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,Jt);(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(S(v(d,r.field))+`
269
+ `),0):r.quiet?(console.log(f.user_id),0):(console.log(`\u2705 \u5DF2\u4E3A ${f.username} (${f.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,Gt);(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(S(v(d,r.field))+`
270
270
  `):process.stdout.write(JSON.stringify(d,null,2)+`
271
271
  `),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 M([["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(f){return console.error(`\u274C 1: \u7F51\u7EDC\u9519\u8BEF ${f.message}`),1}if(l.status<200||l.status>=300){let f=this.exitCodeForStatus(l.status);return console.error(`\u274C ${f}: HTTP ${l.status}`),l.body&&console.error(l.body),f}let u=(this.parseJson(l.body)?.data||[]).find(f=>f.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 f={id:u.id,name:u.name,description:u.description||"",team_id:a,members:p,members_total:p.length};return s.field?process.stdout.write(S(v(f,s.field))+`
272
272
  `):process.stdout.write(JSON.stringify(f,null,2)+`
@@ -288,11 +288,11 @@ type: ${a.type}
288
288
  `):process.stdout.write(JSON.stringify(s,null,2)+`
289
289
  `),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)+`
290
290
  `),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(`
291
- `))}};function me(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 v(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 S(c){return c==null?"":typeof c=="string"?c:typeof c=="number"||typeof c=="boolean"?String(c):JSON.stringify(c)}function M(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(pe(o[i]),...e.map(a=>pe(String(a[n]??""))))),s=(n,i)=>n+" ".repeat(Math.max(0,i-pe(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 pe(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}et.exports=fe});var nt=_((vo,rt)=>{var _o=require("path"),Gt=we(),ot=_e(),Ht=Se(),Vt=Ee(),Kt=Te(),zt=Be(),Wt=Ne(),Yt=Me(),Xt=Ge(),Zt=Xe(),Qt=tt(),he=class{constructor(){this.argParser=new Gt,this.claudeLauncher=this._createClaudeLauncher(),this.geminiLauncher=new Vt,this.codexLauncher=new Kt,this.vscodeExtensionService=new zt,this.publishService=new Wt,this.skillsService=new Yt(this.argParser),this.wikiService=new Xt(this.argParser),this.authCommandService=new Zt(this.argParser),this.teamService=new Qt(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 ot;try{let t=new Ht,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 ot}}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","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==="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=j();console.log(`\u5F53\u524D\u7248\u672C: ${t.version}`),console.log(`\u6B63\u5728\u5347\u7EA7 Coder...
291
+ `))}};function me(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 v(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 S(c){return c==null?"":typeof c=="string"?c:typeof c=="number"||typeof c=="boolean"?String(c):JSON.stringify(c)}function M(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(pe(o[i]),...e.map(a=>pe(String(a[n]??""))))),s=(n,i)=>n+" ".repeat(Math.max(0,i-pe(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 pe(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}et.exports=fe});var nt=_((So,rt)=>{var vo=require("path"),Ht=we(),ot=_e(),Vt=Se(),Kt=Ee(),zt=Te(),Wt=Be(),Yt=Ne(),Xt=Me(),Zt=Ge(),Qt=Xe(),eo=tt(),he=class{constructor(){this.argParser=new Ht,this.claudeLauncher=this._createClaudeLauncher(),this.geminiLauncher=new Kt,this.codexLauncher=new zt,this.vscodeExtensionService=new Wt,this.publishService=new Yt,this.skillsService=new Xt(this.argParser),this.wikiService=new Zt(this.argParser),this.authCommandService=new Qt(this.argParser),this.teamService=new eo(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 ot;try{let t=new Vt,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 ot}}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","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==="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=j();console.log(`\u5F53\u524D\u7248\u672C: ${t.version}`),console.log(`\u6B63\u5728\u5347\u7EA7 Coder...
292
292
  `);try{e("npm install -g makecoder@latest",{stdio:"inherit"})}catch(r){return console.error(`
293
293
  \u274C \u5347\u7EA7\u5931\u8D25:`,r.message),1}this._ensurePlatformCodex();let o=this._getInstalledVersion();return console.log(o?`
294
294
  \u2705 \u5347\u7EA7\u6210\u529F\uFF0C\u5F53\u524D\u7248\u672C: ${o}`:`
295
295
  \u2705 \u5347\u7EA7\u6210\u529F`),0}_getInstalledVersion(){let{execSync:e}=require("child_process"),t=require("fs"),o=require("path");try{let r=e("npm root -g",{encoding:"utf8"}).trim(),s=o.join(r,"makecoder","package.json");if(t.existsSync(s))return JSON.parse(t.readFileSync(s,"utf8")).version}catch{}return null}_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(`
296
296
  \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(`
297
297
  \u26A0\uFE0F \u81EA\u52A8\u8865\u88C5 ${n} \u5931\u8D25\uFF0Ccoder codex \u53EF\u80FD\u4E0D\u53EF\u7528\u3002
298
- \u8BF7\u624B\u52A8\u6267\u884C: npm install -g ${n}@latest`)}showVersion(){let e=j();console.log(`coder version: ${e.version}`)}};rt.exports=he});var st=process.env.CODER_ARGV0;if(st){let e={rg:"rg",ugrep:"ugrep",bfs:"bfs"}[st];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 eo=nt(),{shouldSuppressUpdateNotice:to}=oe();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 oo(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 ro(){if(to())return;let c=require("https"),{version:e}=j(),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&&oo(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 no(){let c=new Set(["pub","auth","update","skills","wiki","team"]),e=process.argv[2];(!e||!c.has(e))&&ro(),process.env.CODER_NESTED="1";let t=new eo;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)}}no().catch(c=>{console.error(`Startup error: ${c.message}`),process.exit(1)});
298
+ \u8BF7\u624B\u52A8\u6267\u884C: npm install -g ${n}@latest`)}showVersion(){let e=j();console.log(`coder version: ${e.version}`)}};rt.exports=he});var st=process.env.CODER_ARGV0;if(st){let e={rg:"rg",ugrep:"ugrep",bfs:"bfs"}[st];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 to=nt(),{shouldSuppressUpdateNotice:oo}=oe();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 ro(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 no(){if(oo())return;let c=require("https"),{version:e}=j(),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&&ro(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 so(){let c=new Set(["pub","auth","update","skills","wiki","team"]),e=process.argv[2];(!e||!c.has(e))&&no(),process.env.CODER_NESTED="1";let t=new to;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)}}so().catch(c=>{console.error(`Startup error: ${c.message}`),process.exit(1)});
@@ -23,13 +23,13 @@ var PP4=Object.create;var{getPrototypeOf:WP4,defineProperty:_2H,getOwnPropertyNa
23
23
  Object.assign(A, {
24
24
  post(...args) {
25
25
  const [url, payload, ...remainArgs] = args;
26
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.72' + '&session_id=' + S_() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
26
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.73' + '&session_id=' + S_() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
27
27
  if (process.env.CODER_APIKEY) {
28
28
  const headerValues = payload.headers.values;
29
29
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
30
30
  }
31
31
 
32
- payload.headers.values.set('X-Coder-Version', '4.0.72');
32
+ payload.headers.values.set('X-Coder-Version', '4.0.73');
33
33
  payload.headers.values.set('X-Coder-Platform', process.platform);
34
34
  payload.headers.values.set('X-Coder-Arch', process.arch);
35
35
 
@@ -23,13 +23,13 @@ var WPK=Object.create;var{getPrototypeOf:GPK,defineProperty:_2H,getOwnPropertyNa
23
23
  Object.assign(A, {
24
24
  post(...args) {
25
25
  const [url, payload, ...remainArgs] = args;
26
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.72' + '&session_id=' + S6() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
26
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.73' + '&session_id=' + S6() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
27
27
  if (process.env.CODER_APIKEY) {
28
28
  const headerValues = payload.headers.values;
29
29
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
30
30
  }
31
31
 
32
- payload.headers.values.set('X-Coder-Version', '4.0.72');
32
+ payload.headers.values.set('X-Coder-Version', '4.0.73');
33
33
  payload.headers.values.set('X-Coder-Platform', process.platform);
34
34
  payload.headers.values.set('X-Coder-Arch', process.arch);
35
35
 
@@ -23,13 +23,13 @@ var MP9=Object.create;var{getPrototypeOf:jP9,defineProperty:qWH,getOwnPropertyNa
23
23
  Object.assign(A, {
24
24
  post(...args) {
25
25
  const [url, payload, ...remainArgs] = args;
26
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.72' + '&session_id=' + R$() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
26
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.73' + '&session_id=' + R$() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
27
27
  if (process.env.CODER_APIKEY) {
28
28
  const headerValues = payload.headers.values;
29
29
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
30
30
  }
31
31
 
32
- payload.headers.values.set('X-Coder-Version', '4.0.72');
32
+ payload.headers.values.set('X-Coder-Version', '4.0.73');
33
33
  payload.headers.values.set('X-Coder-Platform', process.platform);
34
34
  payload.headers.values.set('X-Coder-Arch', process.arch);
35
35
 
@@ -23,13 +23,13 @@ var PJ_=Object.create;var{getPrototypeOf:WJ_,defineProperty:K2H,getOwnPropertyNa
23
23
  Object.assign(A, {
24
24
  post(...args) {
25
25
  const [url, payload, ...remainArgs] = args;
26
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.72' + '&session_id=' + R8() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
26
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.0.73' + '&session_id=' + R8() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
27
27
  if (process.env.CODER_APIKEY) {
28
28
  const headerValues = payload.headers.values;
29
29
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
30
30
  }
31
31
 
32
- payload.headers.values.set('X-Coder-Version', '4.0.72');
32
+ payload.headers.values.set('X-Coder-Version', '4.0.73');
33
33
  payload.headers.values.set('X-Coder-Platform', process.platform);
34
34
  payload.headers.values.set('X-Coder-Arch', process.arch);
35
35
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makecoder",
3
- "version": "4.0.72",
3
+ "version": "4.0.73",
4
4
  "description": "MakeCoder: Unified AI agent CLI tool integrating Claude Code, Codex and Gemini CLI",
5
5
  "main": "./dist/coder.js",
6
6
  "bin": {
@@ -46,8 +46,8 @@
46
46
  "scripts/postinstall.js"
47
47
  ],
48
48
  "optionalDependencies": {
49
- "makecoder-codex-darwin-arm64": "4.0.72",
50
- "makecoder-codex-linux-x64": "4.0.72",
51
- "makecoder-codex-win32-x64": "4.0.72"
49
+ "makecoder-codex-darwin-arm64": "4.0.73",
50
+ "makecoder-codex-linux-x64": "4.0.73",
51
+ "makecoder-codex-win32-x64": "4.0.73"
52
52
  }
53
53
  }