@flapcode/cli 1.8.3 → 1.8.4

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/flapcode.cjs CHANGED
@@ -121,7 +121,7 @@ Filtered results for: ${this.inputValue?this.inputValue:ie.gray("Enter something
121
121
  `),e("");return}if(u?.name==="return"||u?.name==="enter"){a(),s.write(`
122
122
  `),e(n.trim());return}if(u?.name==="backspace"){if(!n.length)return;n=n.slice(0,-1),s.write("\b \b");return}!l||u?.ctrl||u?.meta||(n+=l,s.write("*"))};function a(){t.off("keypress",o),t.isTTY&&t.setRawMode(r),t.pause()}t.on("keypress",o)})}var xa=$(He(),1);async function Ca(){if(!A().api_token){console.log(h.yellow("\u5F53\u524D\u672A\u767B\u5F55"));return}let{confirm:e}=await(0,xa.default)({type:"confirm",name:"confirm",message:"\u786E\u8BA4\u9000\u51FA\u767B\u5F55\uFF1F",initial:!1});if(!e){console.log("\u5DF2\u53D6\u6D88");return}ma(),console.log(h.green("\u2713 \u5DF2\u9000\u51FA\u767B\u5F55"))}var we=require("node:child_process"),Dc="https://registry.npmjs.org",Oa="2.1.113";function ce(){try{Aa(["--version"],{stdio:"ignore"})}catch{throw new Error("\u672A\u627E\u5230 npm\uFF0C\u8BF7\u5148\u5B89\u88C5 Node.js\uFF08https://nodejs.org\uFF09")}}function ct(i){return!!re(i)}function de(i){let e=(0,we.spawnSync)("npm",["install","-g",i],{stdio:"inherit",encoding:"utf8",shell:process.platform==="win32"});if(e.status!==0)throw new Error(`npm install -g ${i} \u5931\u8D25\uFF08${Vc(e)}\uFF09`)}function Vc(i){return i.error?i.error.message:i.signal?`signal ${i.signal}`:`exit code ${i.status}`}function ye(i){try{return(0,we.execSync)(`${i} --version`,{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim().match(/\d+\.\d+\.\d+/)?.[0]??null}catch{return null}}function re(i){return jc()?.dependencies?.[i]?.version??null}function Sa(){try{return Aa(["root","-g"]).trim()}catch{return null}}function Aa(i,e={}){return(0,we.execFileSync)("npm",i,{encoding:"utf8",shell:process.platform==="win32",...e})}function jc(){let i=(0,we.spawnSync)("npm",["list","-g","--depth=0","--json"],{encoding:"utf8",shell:process.platform==="win32",stdio:["ignore","pipe","ignore"]});if(!i.stdout)return null;try{return JSON.parse(i.stdout)}catch{return null}}async function dt(i){try{let e=await fetch(`${Dc}/${encodeURIComponent(i)}`,{headers:{Accept:"application/json"}});return e.ok?(await e.json())?.["dist-tags"]?.latest??null:null}catch{return null}}function Se(i,e){let t=String(i||"").split(".").map(n=>Number.parseInt(n,10)||0),s=String(e||"").split(".").map(n=>Number.parseInt(n,10)||0),r=Math.max(t.length,s.length);for(let n=0;n<r;n+=1){let o=t[n]??0,a=s[n]??0;if(o>a)return 1;if(o<a)return-1}return 0}function ft(i){if(Se(i,Oa)<0)throw new Error(`\u68C0\u6D4B\u5230 Claude Code ${i}\uFF0Cflapcode \u5DF2\u4E0D\u652F\u6301\u4F4E\u4E8E ${Oa} \u7684\u7248\u672C\uFF0C\u8BF7\u5347\u7EA7\uFF1Anpm install -g @anthropic-ai/claude-code`)}var fe=$(require("node:fs"),1),Ea=$(require("node:os"),1),Re=$(require("node:path"),1);var Hc="gate.takemoon.com",Pa=".flapcode.bak",Fc="@anthropic-ai/claude-code",Rc=Re.default.join("@anthropic-ai","claude-code"),Ji;function pt(){return Ji||(Ji=import("tweakcc")),Ji}function $a(i){try{return fe.default.realpathSync.native(i)}catch{return i}}function Nc(){let i=ye("claude")??re(Fc);if(!i)throw new Error("\u65E0\u6CD5\u83B7\u53D6 claude --version,\u8BF7\u786E\u8BA4 claude \u5DF2\u5B89\u88C5\u5E76\u5728 PATH \u4E2D");return ft(i),i}async function Lc(){let i=Nc(),e=Re.default.join(Ea.default.homedir(),".local","bin",process.platform==="win32"?"claude.exe":"claude");if(fe.default.existsSync(e))return[{path:$a(e),kind:"native",version:i}];let t=Sa();if(!t)return[];let s=Re.default.join(t,Rc);if(!fe.default.existsSync(s))return[];let r=Re.default.join(s,"bin","claude.exe");if(!fe.default.existsSync(r))throw new Error(`npm \u5305\u76EE\u5F55\u7F3A\u4E8C\u8FDB\u5236: ${r}`);return[{path:$a(r),kind:"native",version:i}]}async function Ki(){let{findAllInstallations:i}=await pt(),e=[...await i(),...await Lc()],t=new Map;for(let s of e){if(s.path.endsWith(".bak"))continue;let r=s.path;try{r=fe.default.realpathSync.native(s.path)}catch{}r.endsWith(".bak")||t.has(r)||t.set(r,{...s,path:r})}return[...t.values()]}async function Uc(i){let e=i.path+Pa;if(fe.default.existsSync(e))return;let{backupFile:t}=await pt();await t(i.path,e)}async function ka(i,{force:e=!1}={}){let{readContent:t,writeContent:s}=await pt(),r=await Ki();if(r.length===0)throw new Error("\u627E\u4E0D\u5230 claude-code \u5B89\u88C5\u76EE\u6807,\u8BF7\u5148\u8FD0\u884C flapcode claude install");let n=!1,o=[];for(let a of r){let l=a.path+Pa,u=fe.default.existsSync(l),d=e&&u?await t({...a,path:l}):await t(a);if(!e&&i.every(({from:v})=>!d.includes(v)))continue;await Uc(a);let p=d;for(let{from:m,to:v}of i)p.includes(m)&&(p=p.split(m).join(v));await s(a,p),n=!0,o.push({path:a.path})}return{patched:n,alreadyPatched:!n,targets:o}}async function Ta(i){try{let{readContent:e}=await pt();return await e(i)}catch{return null}}async function Ia(i){let e;try{e=await Ki()}catch{return null}if(e.length===0)return null;let t=await Promise.all(e.map(Ta));return i.map(({from:s,to:r})=>({from:s,to:r,applied:t.every(n=>n!==null&&!n.includes(s))}))}async function mt(){try{let i=await Ki();return i.length===0?!1:(await Promise.all(i.map(Ta))).every(t=>t!==null&&t.includes(Hc))}catch{return!1}}var B="@flapcode/cli";async function qa(i){if(process.env.FLAPCODE_SKIP_AUTO_UPDATE==="1")return;let e=await dt(B);if(!(!e||Se(i,e)>=0)){console.log(h.cyan(`\u53D1\u73B0 Flapcode CLI \u65B0\u7248\u672C v${e}\uFF0C\u6B63\u5728\u81EA\u52A8\u66F4\u65B0...`));try{ce(),de(`${B}@latest`),console.log(h.green(`\u2713 Flapcode CLI \u5DF2\u66F4\u65B0\u5230 v${e}`))}catch(t){console.log(h.yellow(`\u81EA\u52A8\u66F4\u65B0\u5931\u8D25\uFF1A${t.message}`))}}}function Ma(i=process.argv.slice(2)){let e=i.find(t=>!t.startsWith("-"));return e!=="update"&&e!=="help"&&!i.includes("--help")&&!i.includes("-h")}var Gc="@openai/codex",Bc="@anthropic-ai/claude-code",Yc=10;async function Va(){let i=A();if(await Wc(),!i.api_token){console.log(),console.log(h.red("\u2717 \u672A\u767B\u5F55")+" \u2192 \u8FD0\u884C flapcode login");return}let e="...";try{let r=await wa();e=r.email??r.username??"(\u672A\u77E5)",I("\u767B\u5F55\u72B6\u6001",h.green("\u2713 \u5DF2\u767B\u5F55"),h.dim(e))}catch(r){I("\u767B\u5F55\u72B6\u6001",h.red("\u2717 \u767B\u5F55\u5931\u6548"),h.dim(r.message))}pe("\u767B\u5F55\u7F51\u7AD9",i.api_base),console.log(h.bold(`
123
123
  Claude Code`));let t=ja("claude",Bc);t.version?I("\u5B89\u88C5\u72B6\u6001",h.green("\u2713 \u5DF2\u5B89\u88C5"),`v${t.version}${t.detail}`):I("\u5B89\u88C5\u72B6\u6001",h.yellow("\u2717 \u672A\u5B89\u88C5"),"\u2192 \u8FD0\u884C flapcode claude install"),i.current_claude_account?pe("\u5F53\u524D\u8D26\u53F7",h.cyan(i.current_claude_account)):pe("\u5F53\u524D\u8D26\u53F7",h.dim("\u672A\u8BBE\u7F6E"));let s=i.current_claude_account?await se("claude",i.current_claude_account).catch(()=>null):null;if(s?.config_mode&&pe("\u914D\u7F6E\u6A21\u5F0F",Kc(s.config_mode)),t.version)try{if(await mt())return I("Patch",h.green("\u2713 \u5DF2\u751F\u6548")),Da(i);let r=s?.patch_rules;r?.length?(await Ia(r))?.every(a=>a.applied)?I("Patch",h.green("\u2713 \u5DF2\u751F\u6548")):I("Patch",h.yellow("\u2717 \u672A\u751F\u6548"),"\u2192 \u8FD0\u884C flapcode claude patch"):i.current_claude_account?I("Patch",h.dim("\u672A\u77E5"),"\uFF08\u65E0\u6CD5\u83B7\u53D6 patch \u89C4\u5219\uFF09"):I("Patch",h.dim("\u672A\u77E5"),"\uFF08\u672A\u8BBE\u7F6E Claude \u8D26\u53F7\uFF0C\u65E0\u6CD5\u83B7\u53D6 patch \u89C4\u5219\uFF09")}catch{I("Patch",h.dim("\u672A\u77E5"),"\uFF08\u68C0\u67E5\u5931\u8D25\uFF09")}Da(i)}async function Wc(){console.log(h.bold("Flapcode CLI"));let i=Jc();I("\u5F53\u524D\u7248\u672C",h.green("\u2713 \u5DF2\u5B89\u88C5"),`v${i}`);let e=await dt(B);if(!e){pe("\u6700\u65B0\u7248\u672C",h.dim("\u68C0\u67E5\u5931\u8D25\u6216\u7F51\u7EDC\u4E0D\u53EF\u7528"));return}pe("\u6700\u65B0\u7248\u672C",`v${e}`),Se(i,e)<0&&I("\u5347\u7EA7\u63D0\u793A",h.yellow("\u21BB \u53EF\u5347\u7EA7"),"\u8FD0\u884C flapcode update")}function Da(i){console.log(h.bold(`
124
- Codex`));let e=ja("codex",Gc);e.version?I("\u5B89\u88C5\u72B6\u6001",h.green("\u2713 \u5DF2\u5B89\u88C5"),`v${e.version}${e.detail}`):I("\u5B89\u88C5\u72B6\u6001",h.yellow("\u2717 \u672A\u5B89\u88C5"),"\u2192 \u8FD0\u884C flapcode codex install"),i.current_codex_account?pe("\u5F53\u524D\u8D26\u53F7",h.cyan(i.current_codex_account)):pe("\u5F53\u524D\u8D26\u53F7",h.dim("\u672A\u8BBE\u7F6E")),console.log()}function Jc(){let i=re(B);return i&&Se(i,"1.8.3")>0?i:"1.8.3"}function ja(i,e){let t=ye(i);if(t)return{version:t,detail:""};let s=re(e);return s?{version:s,detail:h.dim(`\uFF08${i} \u547D\u4EE4\u4E0D\u53EF\u7528\uFF0C\u68C0\u67E5 PATH\uFF09`)}:{version:null,detail:""}}function Kc(i){return i==="oauth"?"oauth"+h.dim("\uFF08\u7531 Claude Code OAuth \u7BA1\u7406\uFF0C\u672C\u5730\u4E0D\u5199 token\uFF09"):i==="managed_token"?"managed token"+h.dim("\uFF08\u8D70 Flapcode API token\uFF09"):i}function pe(i,e){let t=Ha(i);console.log(` ${h.dim(t)} ${e}`)}function I(i,e,t=""){let s=Ha(i);console.log(` ${h.dim(s)} ${e}${t?` ${t}`:""}`)}function Ha(i){let e=`${i}:`,t=zc(e),s=Math.max(1,Yc-t);return`${e}${" ".repeat(s)}`}function zc(i){let e=0;for(let t of i)e+=Zc(t)?2:1;return e}function Zc(i){return/[^\u0000-\u00ff]/.test(i)}var Xc=new Set(["claude","codex"]);async function Fa(i){let e=i.provider??null;e&&!Xc.has(e)&&(console.error(h.red(`\u2717 provider \u53EA\u80FD\u662F claude \u6216 codex\uFF0C\u5F53\u524D\u4E3A: ${e}`)),process.exit(1));let t=A(),s=e?[e]:["claude","codex"],r=!1;for(let n of s){let o;try{o=await H(n)}catch(l){console.error(h.red(`\u2717 \u83B7\u53D6 ${n} \u8D26\u53F7\u5931\u8D25\uFF1A${l.message}`));continue}if(!Array.isArray(o)||o.length===0){console.log(h.yellow(` ${n}\uFF1A\u6682\u65E0\u53EF\u7528\u8D26\u53F7`));continue}console.log(h.bold(`
124
+ Codex`));let e=ja("codex",Gc);e.version?I("\u5B89\u88C5\u72B6\u6001",h.green("\u2713 \u5DF2\u5B89\u88C5"),`v${e.version}${e.detail}`):I("\u5B89\u88C5\u72B6\u6001",h.yellow("\u2717 \u672A\u5B89\u88C5"),"\u2192 \u8FD0\u884C flapcode codex install"),i.current_codex_account?pe("\u5F53\u524D\u8D26\u53F7",h.cyan(i.current_codex_account)):pe("\u5F53\u524D\u8D26\u53F7",h.dim("\u672A\u8BBE\u7F6E")),console.log()}function Jc(){let i=re(B);return i&&Se(i,"1.8.4")>0?i:"1.8.4"}function ja(i,e){let t=ye(i);if(t)return{version:t,detail:""};let s=re(e);return s?{version:s,detail:h.dim(`\uFF08${i} \u547D\u4EE4\u4E0D\u53EF\u7528\uFF0C\u68C0\u67E5 PATH\uFF09`)}:{version:null,detail:""}}function Kc(i){return i==="oauth"?"oauth"+h.dim("\uFF08\u7531 Claude Code OAuth \u7BA1\u7406\uFF0C\u672C\u5730\u4E0D\u5199 token\uFF09"):i==="managed_token"?"managed token"+h.dim("\uFF08\u8D70 Flapcode API token\uFF09"):i}function pe(i,e){let t=Ha(i);console.log(` ${h.dim(t)} ${e}`)}function I(i,e,t=""){let s=Ha(i);console.log(` ${h.dim(s)} ${e}${t?` ${t}`:""}`)}function Ha(i){let e=`${i}:`,t=zc(e),s=Math.max(1,Yc-t);return`${e}${" ".repeat(s)}`}function zc(i){let e=0;for(let t of i)e+=Zc(t)?2:1;return e}function Zc(i){return/[^\u0000-\u00ff]/.test(i)}var Xc=new Set(["claude","codex"]);async function Fa(i){let e=i.provider??null;e&&!Xc.has(e)&&(console.error(h.red(`\u2717 provider \u53EA\u80FD\u662F claude \u6216 codex\uFF0C\u5F53\u524D\u4E3A: ${e}`)),process.exit(1));let t=A(),s=e?[e]:["claude","codex"],r=!1;for(let n of s){let o;try{o=await H(n)}catch(l){console.error(h.red(`\u2717 \u83B7\u53D6 ${n} \u8D26\u53F7\u5931\u8D25\uFF1A${l.message}`));continue}if(!Array.isArray(o)||o.length===0){console.log(h.yellow(` ${n}\uFF1A\u6682\u65E0\u53EF\u7528\u8D26\u53F7`));continue}console.log(h.bold(`
125
125
  ${n.toUpperCase()} \u8D26\u53F7`));let a=n==="claude"?t.current_claude_account:t.current_codex_account;o.forEach((l,u)=>{let d=l.account_email===a,p=d?h.green("* "):" ",m=h.dim(`[${u+1}]`),v=d?h.green(l.account_email):l.account_email,w=l.plan_name?h.dim(` (${l.plan_name})`):"",q=l.expires_at?h.dim(` \u5230\u671F: ${new Date(l.expires_at).toLocaleDateString()}`):"",P=n==="claude"?Qc(l.config_mode):"";console.log(`${p}${m} ${v}${w}${q}${P}`)}),r=!0}r||console.log(h.yellow(`
126
126
  \u6CA1\u6709\u53EF\u7528\u8D26\u53F7\u3002\u8BF7\u786E\u8BA4\u5DF2\u767B\u5F55\u5E76\u62E5\u6709\u6709\u6548\u8BA2\u9605\u3002`))}function Qc(i){return i==="oauth"?h.dim(" [oauth]"):i==="managed_token"?h.dim(" [managed token]"):""}async function Ra(){ce();let i=re(B);console.log(i?`${h.dim("\u5F53\u524D\u5168\u5C40\u7248\u672C:")} v${i}`:h.yellow("\u672A\u68C0\u6D4B\u5230\u5168\u5C40\u5B89\u88C5\u7684 Flapcode CLI\uFF0C\u5C06\u76F4\u63A5\u5B89\u88C5\u6700\u65B0\u7248\u672C")),console.log(h.cyan(`
127
127
  \u6B63\u5728\u6267\u884C npm install -g ${B}@latest
@@ -134,4 +134,4 @@ ${h.green("\u2713")} Flapcode CLI \u66F4\u65B0\u5B8C\u6210`)}var Ga=$(require("n
134
134
  \u2713 Claude Code OAuth \u6A21\u5F0F\u914D\u7F6E\u5B8C\u6210`)),console.log(` \u8D26\u53F7: ${h.cyan(i)}`),console.log(e?h.dim(" \u5DF2\u6E05\u7406 managed \u6B8B\u7559\u8EAB\u4EFD\uFF0C\u672A\u5199\u5165\u771F\u5B9E token"):h.dim(" \u672A\u5199\u5165\u771F\u5B9E token\uFF0C\u4FDD\u7559\u5DF2\u6709\u767B\u5F55\u8EAB\u4EFD\uFF08\u5982\u6709\uFF09")),console.log(` \u8BF7\u8FD0\u884C ${h.bold("claude")} \u5E76\u6309\u63D0\u793A\u5B8C\u6210 OAuth \u767B\u5F55`)}function as({backedUp:i=[],restored:e=[],cleared:t=[]}={}){if(i.length){console.log(h.dim("\u5DF2\u5907\u4EFD\u5F53\u524D Claude \u914D\u7F6E\u5FEB\u7167\uFF1A"));for(let s of i)console.log(h.dim(` ${s.from} \u2192 ${s.to}`))}if(e.length){console.log(h.dim("\u5DF2\u6062\u590D\u76EE\u6807 Claude \u914D\u7F6E\u5FEB\u7167\uFF1A"));for(let s of e)console.log(h.dim(` ${s.from} \u2192 ${s.to}`))}if(t.length){console.log(h.dim("\u5DF2\u6E05\u7A7A\u5F53\u524D Claude \u6D3B\u8DC3\u914D\u7F6E\uFF1A"));for(let s of t)console.log(h.dim(` ${s}`))}}async function ud(){let i=!1;try{i=await mt()}catch{i=!1}i||(console.log(h.yellow(" \u26A0 \u68C0\u6D4B\u5230\u5C1A\u672A\u5E94\u7528 patch\uFF0COAuth \u6D41\u7A0B\u53EF\u80FD\u4E0D\u4F1A\u8D70 Flapcode \u94FE\u8DEF")),console.log(` \u8BF7\u5148\u8FD0\u884C ${h.bold("flapcode claude install")} \u6216 ${h.bold("flapcode claude patch")}
135
135
  `))}async function hd(){let i;try{i=await H("claude")}catch(e){console.error(h.red(`\u2717 \u83B7\u53D6\u8D26\u53F7\u5217\u8868\u5931\u8D25\uFF1A${e.message}`)),process.exit(1)}return(!Array.isArray(i)||i.length===0)&&(console.error(h.red("\u2717 \u6CA1\u6709\u53EF\u7528\u8D26\u53F7\uFF0C\u8BF7\u786E\u8BA4\u8BA2\u9605\u6709\u6548")),process.exit(1)),i}function cd(i){let e=Qi();return e?!i.has(e.toLowerCase()):!1}async function dd(i){if(i.length===1)return console.log(h.dim(`\u4F7F\u7528\u8D26\u53F7: ${i[0].account_email}`)),i[0];let t=A().current_claude_account,{email:s}=await(0,us.default)({type:"select",name:"email",message:"\u9009\u62E9\u8981\u4F7F\u7528\u7684 Claude \u8D26\u53F7",choices:i.map(r=>({title:r.account_email+(r.plan_name?` (${r.plan_name})`:""),value:r.account_email,selected:r.account_email===t}))});return s?i.find(r=>r.account_email===s):(console.log("\u5DF2\u53D6\u6D88"),null)}function fd(i){let e;try{e=JSON.parse(Ga.default.readFileSync(i,"utf8"))}catch(t){throw new Error(`\u8BFB\u53D6\u672C\u5730 patch \u89C4\u5219\u5931\u8D25: ${t.message}`)}if(!Array.isArray(e))throw new Error('\u672C\u5730 patch \u89C4\u5219\u5FC5\u987B\u662F\u6570\u7EC4\uFF0C\u683C\u5F0F\u4E3A [{ "from": "...", "to": "..." }]');for(let[t,s]of e.entries()){if(!s||typeof s.from!="string"||typeof s.to!="string")throw new Error(`\u672C\u5730 patch \u89C4\u5219\u7B2C ${t+1} \u6761\u65E0\u6548\uFF0Cfrom/to \u5FC5\u987B\u662F\u5B57\u7B26\u4E32`);if(!s.from)throw new Error(`\u672C\u5730 patch \u89C4\u5219\u7B2C ${t+1} \u6761\u65E0\u6548\uFF0Cfrom \u4E0D\u80FD\u4E3A\u7A7A`)}return e}async function ls(i,e="\u670D\u52A1\u7AEF\u672A\u4E0B\u53D1 patch \u89C4\u5219\uFF0C\u8DF3\u8FC7",{force:t=!1}={}){if(!i?.length){console.log(h.dim(e));return}console.log(h.dim(t?"\u6B63\u5728\u5F3A\u5236\u91CD\u65B0\u5E94\u7528 patch...":"\u6B63\u5728\u5E94\u7528 patch..."));let{patched:s,alreadyPatched:r,targets:n}=await ka(i,{force:t});for(let o of n)console.log(` ${h.dim("Patch \u76EE\u6807:")} ${o.path}`);r?console.log(h.dim("Patch \u5DF2\u751F\u6548\uFF0C\u65E0\u9700\u91CD\u590D\u64CD\u4F5C")):s&&console.log(h.green("\u2713 Patch \u5E94\u7528\u6210\u529F"))}var Xa=$(require("node:fs"),1),cs=$(He(),1);var Ge="@openai/codex";async function Qa(){ce(),ct(Ge)?console.log(h.dim(`${Ge} \u5DF2\u5B89\u88C5\uFF0C\u8DF3\u8FC7`)):(console.log(h.cyan(`\u6B63\u5728\u5B89\u88C5 ${Ge}...`)),de(Ge),console.log(h.green(`\u2713 ${Ge} \u5B89\u88C5\u5B8C\u6210`)));let i=await pd();if(!i)return;console.log(h.dim("\u6B63\u5728\u62C9\u53D6\u914D\u7F6E..."));let e=await se("codex",i.account_email),t=ns({api_token:e.api_token}),s=os({base_url:e.base_url,provider_name:e.provider_name,model:e.model});bt(t,"Codex auth.json"),bt(s,"Codex config.toml"),D({current_codex_account:i.account_email}),console.log(h.green(`
136
136
  \u2713 Codex \u914D\u7F6E\u5B8C\u6210\uFF01`)),console.log(` \u8D26\u53F7: ${h.cyan(i.account_email)}`),console.log(` Auth: ${h.dim(t)}`),console.log(` Config: ${h.dim(s)}`),console.log(` \u8FD0\u884C ${h.bold("codex")} \u5373\u53EF\u5F00\u59CB\u4F7F\u7528
137
- `)}async function el(i){let e=i;if(!e||/^\d+$/.test(e)){let n=await H("codex");(!Array.isArray(n)||n.length===0)&&(console.error(h.red("\u2717 \u6CA1\u6709\u53EF\u7528\u7684 Codex \u8D26\u53F7")),process.exit(1));let o=/^\d+$/.test(e)?parseInt(e,10)-1:null;if(o!==null)(o<0||o>=n.length)&&(console.error(h.red(`\u2717 \u5E8F\u53F7 ${e} \u8D85\u51FA\u8303\u56F4\uFF08\u5171 ${n.length} \u4E2A\u8D26\u53F7\uFF09`)),process.exit(1)),e=n[o].account_email;else{let a=await(0,cs.default)({type:"select",name:"email",message:"\u9009\u62E9 Codex \u8D26\u53F7",choices:n.map(l=>({title:l.account_email,value:l.account_email}))});if(!a.email){console.log("\u5DF2\u53D6\u6D88");return}e=a.email}}console.log(h.dim(`\u6B63\u5728\u5207\u6362\u5230 ${e}...`));let t=await se("codex",e),s=ns({api_token:t.api_token}),r=os({base_url:t.base_url,provider_name:t.provider_name,model:t.model});bt(s,"Codex auth.json"),bt(r,"Codex config.toml"),D({current_codex_account:e}),console.log(h.green(`\u2713 \u5DF2\u5207\u6362\u5230 ${e}`)),console.log(` Auth: ${h.dim(s)}`),console.log(` Config: ${h.dim(r)}`)}async function pd(){let i;try{i=await H("codex")}catch(r){console.error(h.red(`\u2717 \u83B7\u53D6\u8D26\u53F7\u5217\u8868\u5931\u8D25\uFF1A${r.message}`)),process.exit(1)}if((!Array.isArray(i)||i.length===0)&&(console.error(h.red("\u2717 \u6CA1\u6709\u53EF\u7528\u8D26\u53F7\uFF0C\u8BF7\u786E\u8BA4\u8BA2\u9605\u6709\u6548")),process.exit(1)),i.length===1)return console.log(h.dim(`\u4F7F\u7528\u8D26\u53F7: ${i[0].account_email}`)),i[0];let t=A().current_codex_account,{email:s}=await(0,cs.default)({type:"select",name:"email",message:"\u9009\u62E9\u8981\u4F7F\u7528\u7684 Codex \u8D26\u53F7",choices:i.map(r=>({title:r.account_email+(r.plan_name?` (${r.plan_name})`:""),value:r.account_email,selected:r.account_email===t}))});return s?i.find(r=>r.account_email===s):(console.log("\u5DF2\u53D6\u6D88"),null)}function bt(i,e){if(!Xa.default.existsSync(i))throw new Error(`${e} \u5199\u5165\u5931\u8D25\uFF1A${i}`)}var ne=new Es;ne.name("flapcode").description("Flapcode CLI \u2014 \u7EDF\u4E00\u7BA1\u7406 Claude Code / Codex \u5B89\u88C5\u4E0E\u8D26\u53F7\u914D\u7F6E").version("1.8.3","-v, --version","\u663E\u793A\u7248\u672C\u53F7");ne.command("login").description("\u4F7F\u7528 API Token \u6216\u90AE\u7BB1\u767B\u5F55").option("--token <token>","\u975E\u4EA4\u4E92\u6A21\u5F0F\u4E0B\u76F4\u63A5\u4F20\u5165 API Token").option("--email <email>","\u4F7F\u7528\u90AE\u7BB1\u767B\u5F55").action(W(va));ne.command("logout").description("\u9000\u51FA\u767B\u5F55\uFF0C\u6E05\u9664\u672C\u5730\u914D\u7F6E").action(W(Ca));ne.command("status").description("\u663E\u793A\u5F53\u524D\u7528\u6237\u3001\u8D26\u53F7\u3001CC/Codex \u7248\u672C\u53CA patch \u72B6\u6001").action(W(Va));ne.command("update").description("\u5347\u7EA7 Flapcode CLI \u5230\u6700\u65B0\u7248\u672C").action(W(Ra));ne.command("accounts").description("\u5217\u51FA\u5F53\u524D\u7528\u6237\u53EF\u7528\u7684\u8D26\u53F7").option("--provider <provider>","\u8FC7\u6EE4 provider\uFF08claude \u6216 codex\uFF09").action(W(Fa));var ds=ne.command("claude").description("\u7BA1\u7406 Claude Code");ds.command("install").description("\u9996\u6B21\u5B8C\u6574\u914D\u7F6E\uFF1A\u5B89\u88C5 CC + patch + \u5199\u914D\u7F6E\u6587\u4EF6").option("--reset","\u5168\u65B0\u914D\u7F6E\uFF1A\u5148\u6309\u90AE\u7BB1\u5907\u4EFD ~/.claude.json \u4E0E ~/.claude/\uFF0C\u518D\u4ECE\u96F6\u914D\u7F6E").action(W(Ya));ds.command("patch").description("\u4EC5\u91CD\u6253 patch\uFF08\u5E94\u5BF9 CC \u5347\u7EA7\u540E URL \u88AB\u8986\u76D6\uFF09").option("--force","\u5F3A\u5236\u91CD\u65B0\u6253 patch\uFF08patch \u4E0D\u751F\u6548\u65F6\u7528\u8FD9\u4E2A\u4FEE\u590D\uFF09").addOption(new Ps("--rules <file>","\u4ECE\u672C\u5730 JSON \u6587\u4EF6\u8BFB\u53D6 patch \u89C4\u5219\uFF08\u7528\u4E8E\u8C03\u8BD5\uFF09").hideHelp()).action(W(Wa));ds.command("use [account]").description("\u5207\u6362 Claude \u8D26\u53F7\uFF08\u4F20 email \u6216\u5E8F\u53F7\uFF0C\u7559\u7A7A\u8FDB\u884C\u4EA4\u4E92\u9009\u62E9\uFF09").action(W(Ja));var tl=ne.command("codex").description("\u7BA1\u7406 Codex");tl.command("install").description("\u9996\u6B21\u5B8C\u6574\u914D\u7F6E\uFF1A\u5B89\u88C5 Codex + \u5199\u914D\u7F6E\u6587\u4EF6").action(W(Qa));tl.command("use [account]").description("\u5207\u6362 Codex \u8D26\u53F7\uFF08\u4F20 email \u6216\u5E8F\u53F7\uFF0C\u7559\u7A7A\u8FDB\u884C\u4EA4\u4E92\u9009\u62E9\uFF09").action(W(el));md();async function md(){Ma()&&await qa("1.8.3"),ne.parse()}function W(i){return async(...e)=>{try{await i(...e)}catch(t){console.error(h.red(`\u2717 ${t.message}`)),process.env.DEBUG&&console.error(t),process.exit(1)}}}
137
+ `)}async function el(i){let e=i;if(!e||/^\d+$/.test(e)){let n=await H("codex");(!Array.isArray(n)||n.length===0)&&(console.error(h.red("\u2717 \u6CA1\u6709\u53EF\u7528\u7684 Codex \u8D26\u53F7")),process.exit(1));let o=/^\d+$/.test(e)?parseInt(e,10)-1:null;if(o!==null)(o<0||o>=n.length)&&(console.error(h.red(`\u2717 \u5E8F\u53F7 ${e} \u8D85\u51FA\u8303\u56F4\uFF08\u5171 ${n.length} \u4E2A\u8D26\u53F7\uFF09`)),process.exit(1)),e=n[o].account_email;else{let a=await(0,cs.default)({type:"select",name:"email",message:"\u9009\u62E9 Codex \u8D26\u53F7",choices:n.map(l=>({title:l.account_email,value:l.account_email}))});if(!a.email){console.log("\u5DF2\u53D6\u6D88");return}e=a.email}}console.log(h.dim(`\u6B63\u5728\u5207\u6362\u5230 ${e}...`));let t=await se("codex",e),s=ns({api_token:t.api_token}),r=os({base_url:t.base_url,provider_name:t.provider_name,model:t.model});bt(s,"Codex auth.json"),bt(r,"Codex config.toml"),D({current_codex_account:e}),console.log(h.green(`\u2713 \u5DF2\u5207\u6362\u5230 ${e}`)),console.log(` Auth: ${h.dim(s)}`),console.log(` Config: ${h.dim(r)}`)}async function pd(){let i;try{i=await H("codex")}catch(r){console.error(h.red(`\u2717 \u83B7\u53D6\u8D26\u53F7\u5217\u8868\u5931\u8D25\uFF1A${r.message}`)),process.exit(1)}if((!Array.isArray(i)||i.length===0)&&(console.error(h.red("\u2717 \u6CA1\u6709\u53EF\u7528\u8D26\u53F7\uFF0C\u8BF7\u786E\u8BA4\u8BA2\u9605\u6709\u6548")),process.exit(1)),i.length===1)return console.log(h.dim(`\u4F7F\u7528\u8D26\u53F7: ${i[0].account_email}`)),i[0];let t=A().current_codex_account,{email:s}=await(0,cs.default)({type:"select",name:"email",message:"\u9009\u62E9\u8981\u4F7F\u7528\u7684 Codex \u8D26\u53F7",choices:i.map(r=>({title:r.account_email+(r.plan_name?` (${r.plan_name})`:""),value:r.account_email,selected:r.account_email===t}))});return s?i.find(r=>r.account_email===s):(console.log("\u5DF2\u53D6\u6D88"),null)}function bt(i,e){if(!Xa.default.existsSync(i))throw new Error(`${e} \u5199\u5165\u5931\u8D25\uFF1A${i}`)}var ne=new Es;ne.name("flapcode").description("Flapcode CLI \u2014 \u7EDF\u4E00\u7BA1\u7406 Claude Code / Codex \u5B89\u88C5\u4E0E\u8D26\u53F7\u914D\u7F6E").version("1.8.4","-v, --version","\u663E\u793A\u7248\u672C\u53F7");ne.command("login").description("\u4F7F\u7528 API Token \u6216\u90AE\u7BB1\u767B\u5F55").option("--token <token>","\u975E\u4EA4\u4E92\u6A21\u5F0F\u4E0B\u76F4\u63A5\u4F20\u5165 API Token").option("--email <email>","\u4F7F\u7528\u90AE\u7BB1\u767B\u5F55").action(W(va));ne.command("logout").description("\u9000\u51FA\u767B\u5F55\uFF0C\u6E05\u9664\u672C\u5730\u914D\u7F6E").action(W(Ca));ne.command("status").description("\u663E\u793A\u5F53\u524D\u7528\u6237\u3001\u8D26\u53F7\u3001CC/Codex \u7248\u672C\u53CA patch \u72B6\u6001").action(W(Va));ne.command("update").description("\u5347\u7EA7 Flapcode CLI \u5230\u6700\u65B0\u7248\u672C").action(W(Ra));ne.command("accounts").description("\u5217\u51FA\u5F53\u524D\u7528\u6237\u53EF\u7528\u7684\u8D26\u53F7").option("--provider <provider>","\u8FC7\u6EE4 provider\uFF08claude \u6216 codex\uFF09").action(W(Fa));var ds=ne.command("claude").description("\u7BA1\u7406 Claude Code");ds.command("install").description("\u9996\u6B21\u5B8C\u6574\u914D\u7F6E\uFF1A\u5B89\u88C5 CC + patch + \u5199\u914D\u7F6E\u6587\u4EF6").option("--reset","\u5168\u65B0\u914D\u7F6E\uFF1A\u5148\u6309\u90AE\u7BB1\u5907\u4EFD ~/.claude.json \u4E0E ~/.claude/\uFF0C\u518D\u4ECE\u96F6\u914D\u7F6E").action(W(Ya));ds.command("patch").description("\u4EC5\u91CD\u6253 patch\uFF08\u5E94\u5BF9 CC \u5347\u7EA7\u540E URL \u88AB\u8986\u76D6\uFF09").option("--force","\u5F3A\u5236\u91CD\u65B0\u6253 patch\uFF08patch \u4E0D\u751F\u6548\u65F6\u7528\u8FD9\u4E2A\u4FEE\u590D\uFF09").addOption(new Ps("--rules <file>","\u4ECE\u672C\u5730 JSON \u6587\u4EF6\u8BFB\u53D6 patch \u89C4\u5219\uFF08\u7528\u4E8E\u8C03\u8BD5\uFF09").hideHelp()).action(W(Wa));ds.command("use [account]").description("\u5207\u6362 Claude \u8D26\u53F7\uFF08\u4F20 email \u6216\u5E8F\u53F7\uFF0C\u7559\u7A7A\u8FDB\u884C\u4EA4\u4E92\u9009\u62E9\uFF09").action(W(Ja));var tl=ne.command("codex").description("\u7BA1\u7406 Codex");tl.command("install").description("\u9996\u6B21\u5B8C\u6574\u914D\u7F6E\uFF1A\u5B89\u88C5 Codex + \u5199\u914D\u7F6E\u6587\u4EF6").action(W(Qa));tl.command("use [account]").description("\u5207\u6362 Codex \u8D26\u53F7\uFF08\u4F20 email \u6216\u5E8F\u53F7\uFF0C\u7559\u7A7A\u8FDB\u884C\u4EA4\u4E92\u9009\u62E9\uFF09").action(W(el));md();async function md(){Ma()&&await qa("1.8.4"),ne.parse()}function W(i){return async(...e)=>{try{await i(...e)}catch(t){console.error(h.red(`\u2717 ${t.message}`)),process.env.DEBUG&&console.error(t),process.exit(1)}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flapcode/cli",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "description": "Flapcode CLI - 统一管理 Claude Code / Codex 安装与账号配置",
5
5
  "type": "module",
6
6
  "bin": {