best-geo-test 0.3.4 → 0.3.6

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.
@@ -3704,6 +3704,107 @@
3704
3704
  "required": ["articleId", "mediaIds"],
3705
3705
  "additionalProperties": false
3706
3706
  }
3707
+ },
3708
+ {
3709
+ "name": "textToImages.models",
3710
+ "mode": "read",
3711
+ "guide": "material",
3712
+ "description": "列出可用的 AI 出图档位。不同档位计费不同(返回里的 toolScore 是计费口径),建图之前先调这个看有哪些能用。",
3713
+ "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false }
3714
+ },
3715
+ {
3716
+ "name": "textToImages.list",
3717
+ "mode": "read",
3718
+ "guide": "material",
3719
+ "description": "文生图任务列表。⚠️ 只能查到最近 30 天创建的任务,更早的查不到(服务端限制,不是分页问题)。",
3720
+ "inputSchema": {
3721
+ "type": "object",
3722
+ "properties": {
3723
+ "page": { "type": "integer", "minimum": 1 },
3724
+ "limit": { "type": "integer", "minimum": 1, "maximum": 500 },
3725
+ "companyId": { "type": "integer", "minimum": 1 },
3726
+ "productId": { "type": "integer", "minimum": 1 },
3727
+ "status": { "type": "integer", "enum": [1, 2, 3, 4], "description": "1-处理中 2-已提交 3-成功 4-失败" },
3728
+ "taskType": {
3729
+ "type": "integer",
3730
+ "enum": [1, 2, 3, 4],
3731
+ "description": "1-基础文生图 2-文章封面 3-答案卡(已下线) 4-答案卡V2。你多半只用 1 和 2"
3732
+ },
3733
+ "platform": { "type": "string", "minLength": 1, "description": "出图平台。合法取值先用 textToImages.models 查,别猜" }
3734
+ },
3735
+ "additionalProperties": false
3736
+ }
3737
+ },
3738
+ {
3739
+ "name": "textToImages.get",
3740
+ "mode": "read",
3741
+ "guide": "material",
3742
+ "description": "查一条文生图任务。status=3(成功)时 resourceUrls 里才有图;建完任务要靠它轮询。⚠️ 只能查到最近 30 天创建的任务。",
3743
+ "inputSchema": {
3744
+ "type": "object",
3745
+ "properties": { "id": { "type": "integer", "minimum": 1 } },
3746
+ "required": ["id"],
3747
+ "additionalProperties": false
3748
+ }
3749
+ },
3750
+ {
3751
+ "name": "textToImages.countUncompleted",
3752
+ "mode": "read",
3753
+ "guide": "material",
3754
+ "description": "还没跑完的文生图任务数量。",
3755
+ "inputSchema": { "type": "object", "properties": {}, "additionalProperties": false }
3756
+ },
3757
+ {
3758
+ "name": "textToImages.create",
3759
+ "mode": "write",
3760
+ "guide": "material",
3761
+ "requiresPlan": true,
3762
+ "description": "用 AI 生成一张图。按张扣费,价格随所选档位不同,先用 textToImages.models 看各档位的计费再选。出图是异步的:执行完只拿到任务号,要用 textToImages.get 轮询到 status=3 才有图。",
3763
+ "inputSchema": {
3764
+ "type": "object",
3765
+ "properties": {
3766
+ "prompt": { "type": "string", "minLength": 1, "maxLength": 2500, "description": "想画什么,写清楚" },
3767
+ "productId": { "type": "integer", "minimum": 1, "description": "归到哪个 GEO 项目;公司从项目上取" },
3768
+ "negativePrompt": { "type": "string", "description": "不想出现什么" },
3769
+ "aspectRatio": {
3770
+ "type": "string",
3771
+ "enum": ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"],
3772
+ "description": "不传按 1:1"
3773
+ },
3774
+ "model": { "type": "string", "minLength": 1, "maxLength": 32, "description": "档位 code,先用 textToImages.models 查;不传用第一个启用档" }
3775
+ },
3776
+ "required": ["prompt", "productId"],
3777
+ "additionalProperties": false
3778
+ }
3779
+ },
3780
+ {
3781
+ "name": "textToImages.delete",
3782
+ "mode": "write",
3783
+ "guide": "material",
3784
+ "requiresPlan": true,
3785
+ "description": "删一条文生图任务。删了就没了,不可恢复。任务还在跑(处理中/已提交)时删不掉,要等它到成功或失败的终态。已归档进素材库的图不受影响。",
3786
+ "inputSchema": {
3787
+ "type": "object",
3788
+ "properties": { "id": { "type": "integer", "minimum": 1 } },
3789
+ "required": ["id"],
3790
+ "additionalProperties": false
3791
+ }
3792
+ },
3793
+ {
3794
+ "name": "articles.generateCover",
3795
+ "mode": "write",
3796
+ "guide": "article",
3797
+ "requiresPlan": true,
3798
+ "description": "读文章内容,用 AI 生成一张封面图。⚠️ 生成成功后会自动覆盖这篇文章现有的封面,并把图存进图片素材库。按张扣费。出图是异步的,执行完要用 textToImages.get 轮询。文章标题/正文/摘要有空的会被拒——摘要可以先用 articles.generateSummaries 生成。同一篇文章的封面任务还在跑时不能再建。",
3799
+ "inputSchema": {
3800
+ "type": "object",
3801
+ "properties": {
3802
+ "articleId": { "type": "integer", "minimum": 1 },
3803
+ "model": { "type": "string", "minLength": 1, "maxLength": 32, "description": "档位 code,先用 textToImages.models 查;不传用第一个启用档" }
3804
+ },
3805
+ "required": ["articleId"],
3806
+ "additionalProperties": false
3807
+ }
3707
3808
  }
3708
3809
  ]
3709
3810
  }
package/dist/index.cjs CHANGED
@@ -1,95 +1,369 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var bt=Object.defineProperty;var At=(e,t,n)=>t in e?bt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Z=(e,t,n)=>At(e,typeof t!="symbol"?t+"":t,n);var ee="https://nbgeo.aimusiclj.com",Ee="best-geo-test",Ie="best-geo-test",ke="bg-test-cli-",be="0.3.4";var D=1,h=be,O=Ie,l=Ee,Ae="dev",B=xt(St());function St(){var e;return(e=process.env.BEST_GEO_API_BASE)!=null?e:ee}var j=ke,Se=300*1e3,xe=30*1e3,_e=300*1e3;function xt(e){return e.replace(/\/+$/,"")}var Ve=require("node:child_process");var Oe=require("node:crypto"),G=require("node:os");var p=require("node:fs"),we=require("node:os"),L=require("node:path");var Ce=require("node:crypto");var A=class extends Error{constructor(n,r,i){super(i);Z(this,"reason",n);Z(this,"path",r);this.name="LocalConfigError"}},_t={schemaVersion:1,device:null,activeCredential:null,pendingCredential:null};function U(){var e;return(e=process.env.BEST_GEO_CONFIG_DIR)!=null?e:(0,L.join)((0,we.homedir)(),`.${l}`)}function C(){return(0,L.join)(U(),"config.json")}function x(){var n,r,i;let e=C(),t;try{if(!(0,p.existsSync)(e))return null;Ct(e),t=(0,p.readFileSync)(e,"utf8")}catch(s){throw s instanceof A?s:ve(s,e)}try{let s=JSON.parse(t);if(typeof s!="object"||s==null||s.schemaVersion!==1)throw new Error("unexpected shape");return{schemaVersion:1,device:(n=s.device)!=null?n:null,activeCredential:(r=s.activeCredential)!=null?r:null,pendingCredential:(i=s.pendingCredential)!=null?i:null}}catch{throw new A("corrupted",e,`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u5185\u5BB9\u4E0D\u5B8C\u6574\u6216\u683C\u5F0F\u4E0D\u5BF9\uFF1A${e}`)}}function wt(e){let t=U(),n=C(),r=(0,L.join)(t,`.config.json.${(0,Ce.randomBytes)(6).toString("hex")}.tmp`);try{(0,p.existsSync)(t)||(0,p.mkdirSync)(t,{recursive:!0,mode:448});let i=(0,p.openSync)(r,"wx",384);try{(0,p.writeSync)(i,`${JSON.stringify(e,null,2)}
3
- `),(0,p.fsyncSync)(i)}finally{(0,p.closeSync)(i)}(0,p.renameSync)(r,n)}catch(i){if((0,p.existsSync)(r))try{(0,p.unlinkSync)(r)}catch{}throw ve(i,n)}}function _(e){var n;let t=e((n=x())!=null?n:{..._t});return wt(t),t}function Ct(e){var r;if(process.platform==="win32")return;let t=(0,p.statSync)(e),n=(r=process.getuid)==null?void 0:r.call(process);if(n!=null&&t.uid!==n)throw new A("not_owner",e,`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7528\u6237\uFF1A${e}`);if((t.mode&63)!==0)throw new A("permissions_too_open",e,`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u6743\u9650\u8FC7\u5BBD\uFF08\u540C\u673A\u5176\u4ED6\u7528\u6237\u53EF\u8BFB\uFF09\uFF1A${e}`)}function ve(e,t){let n=e==null?void 0:e.code;return n==="EACCES"||n==="EPERM"||n==="EROFS"?new A("denied",t,`\u6CA1\u6709\u6743\u9650\u8BFB\u5199\u672C\u673A\u914D\u7F6E\uFF1A${t}`):e instanceof Error?e:new Error(String(e))}var vt=3600*1e3;function Re(){return(0,L.join)(U(),"pending-uploads.json")}function M(){let e=Re();if(!(0,p.existsSync)(e))return{};try{let t=JSON.parse((0,p.readFileSync)(e,"utf8")),n=Date.now();return Object.fromEntries(Object.entries(t).filter(([,r])=>{var i;return n-((i=r==null?void 0:r.createdAt)!=null?i:0)<vt}))}catch{return{}}}function te(e){(0,p.mkdirSync)(U(),{recursive:!0,mode:448}),(0,p.writeFileSync)(Re(),JSON.stringify(e),{mode:384})}function $e(){var t,n;let e=(t=x())==null?void 0:t.device;return(n=e==null?void 0:e.deviceId)!=null&&n.startsWith(j)?e.deviceId:null}function H(){var r,i;let e={deviceName:(0,G.hostname)().slice(0,50),platform:`${(0,G.platform)()}-${process.arch}`},t=(r=x())==null?void 0:r.device;if((i=t==null?void 0:t.deviceId)!=null&&i.startsWith(j))return t.deviceName===e.deviceName&&t.platform===e.platform?t:_(s=>({...s,device:{...t,...e}})).device;let n={deviceId:`${j}${(0,Oe.randomUUID)()}`,...e};return _(s=>({...s,device:n})).device}function Ne(){return`cli_${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`}function E(e,t=Ne()){return{ok:!0,code:"OK",requestId:t,data:e}}function c(e,t,n={}){var r;return{ok:!1,code:e,message:t,requestId:(r=n.requestId)!=null?r:Ne(),...n.data==null?{}:{data:n.data},...n.nextAction==null?{}:{nextAction:n.nextAction}}}function a(e){process.stdout.write(`${JSON.stringify(e)}
4
- `),e.ok||(process.exitCode=1)}async function y(e,t={}){var s,o;let n=new URL(`${B}/v1/agent-cli${e}`);for(let[d,m]of Object.entries((s=t.query)!=null?s:{}))if(m!=null)for(let u of Array.isArray(m)?m:[m])n.searchParams.append(d,String(u));let r={"X-GEO-CLI-Version":h,"X-GEO-Protocol-Version":String(D),"X-GEO-CLI-Package":O},i=null;try{i=$e()}catch{}i&&(r["X-Device-ID"]=i),t.apiKey&&(r.Authorization=`Bearer ${t.apiKey}`),t.body!=null&&(r["Content-Type"]="application/json");try{let d=await fetch(n,{method:(o=t.method)!=null?o:"GET",headers:r,body:t.body==null?void 0:JSON.stringify(t.body),signal:AbortSignal.timeout(t.isWrite?_e:xe)}),m=await d.text();try{let u=JSON.parse(m);return Rt(u)?u:c("SERVER_ERROR",`\u670D\u52A1\u7AEF\u8FD4\u56DE\u4E86\u975E\u9884\u671F\u5185\u5BB9\uFF08HTTP ${d.status}\uFF09`,{data:{transportFailure:!0}})}catch{return c("SERVER_ERROR",`\u670D\u52A1\u7AEF\u8FD4\u56DE\u4E86\u975E\u9884\u671F\u5185\u5BB9\uFF08HTTP ${d.status}\uFF09`,{data:{transportFailure:!0}})}}catch(d){return d instanceof Error&&(d.name==="TimeoutError"||d.name==="AbortError")?c("SERVER_ERROR",t.isWrite?"\u670D\u52A1\u7AEF\u5904\u7406\u8D85\u65F6,\u8FD9\u6B21\u5199\u5165\u7ED3\u679C\u672A\u77E5":"\u670D\u52A1\u7AEF\u54CD\u5E94\u8D85\u65F6",{data:{transportFailure:!0},nextAction:t.isWrite?{type:"ask_user",message:"\u8D85\u65F6\u4E0D\u4EE3\u8868\u6CA1\u5199\u8FDB\u53BB \u2014\u2014 \u670D\u52A1\u7AEF\u53EF\u80FD\u8FD8\u5728\u5904\u7406\u3002**\u5148\u7528\u5BF9\u5E94\u7684\u67E5\u8BE2\u80FD\u529B\u786E\u8BA4\u4E00\u904D**,\u786E\u5B9E\u6CA1\u6709\u518D\u91CD\u65B0 plan;\u76F4\u63A5\u91CD\u8BD5\u4F1A\u5EFA\u51FA\u91CD\u590D\u7684\u4E00\u4EFD,\u800C\u4E14\u4F1A\u518D\u6263\u4E00\u6B21\u8D39\u3002"}:{type:"ask_user",message:"\u670D\u52A1\u7AEF\u54CD\u5E94\u592A\u6162\u3002\u7A0D\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u5373\u53EF,\u67E5\u8BE2\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u5199\u5165"}}):c("SERVER_ERROR",`\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u7AEF\uFF1A${d instanceof Error?d.message:String(d)}`,{data:{transportFailure:!0},nextAction:{type:"ask_user",message:"\u8BF7\u786E\u8BA4\u7F51\u7EDC\u53EF\u7528\uFF0C\u4EE5\u53CA\u670D\u52A1\u7AEF\u5730\u5740\u914D\u7F6E\u6B63\u786E"}})}}function Rt(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.ok=="boolean"&&typeof t.code=="string"}function Ot(e){var t;return!e.ok&&((t=e.data)==null?void 0:t.transportFailure)===!0}function ne(e){return e.ok||Ot(e)?!1:["AUTH_EXPIRED","DEVICE_MISMATCH","ACCESS_DENIED","AUTH_REQUIRED","VALIDATION_FAILED"].includes(e.code)}function $(){var e,t,n;return(n=(t=(e=x())==null?void 0:e.activeCredential)==null?void 0:t.apiKey)!=null?n:null}function J(){var e,t;return(t=(e=x())==null?void 0:e.activeCredential)!=null?t:null}function Te(){var e,t;return(t=(e=x())==null?void 0:e.pendingCredential)!=null?t:null}function Pe(e){_(t=>({...t,pendingCredential:{apiKey:e,startedAt:new Date().toISOString()}}))}function re(){_(e=>({...e,pendingCredential:null}))}function ie(e){return _(t=>{let n=t.pendingCredential;return n?{...t,activeCredential:{apiKey:n.apiKey,...e},pendingCredential:null}:t}).activeCredential}function De(){_(e=>({...e,activeCredential:null,pendingCredential:null}))}var w=require("node:crypto"),Ue=require("node:http");function Le(e){let t=`
2
+ "use strict";var Pt=Object.defineProperty;var Dt=(e,t,n)=>t in e?Pt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var oe=(e,t,n)=>Dt(e,typeof t!="symbol"?t+"":t,n);var ie="https://nbgeo.aimusiclj.com",Ce="best-geo-test",Re="best-geo-test",Te="bg-test-cli-",Oe="0.3.6";var B=1,x=Oe,L=Re,p=Ce,$e="dev",Q=Mt(Ut());function Ut(){var e;return(e=process.env.BEST_GEO_API_BASE)!=null?e:ie}var X=Te,Ne=300*1e3,Le=30*1e3,Pe=300*1e3;function Mt(e){return e.replace(/\/+$/,"")}var Xe=require("node:child_process");var Be=require("node:crypto"),W=require("node:os");var f=require("node:fs"),De=require("node:os"),V=require("node:path");var Ue=require("node:crypto");var w=class extends Error{constructor(n,r,o){super(o);oe(this,"reason",n);oe(this,"path",r);this.name="LocalConfigError"}},Ft={schemaVersion:1,device:null,activeCredential:null,pendingCredential:null};function K(){var e;return(e=process.env.BEST_GEO_CONFIG_DIR)!=null?e:(0,V.join)((0,De.homedir)(),`.${p}`)}function R(){return(0,V.join)(K(),"config.json")}function A(){var n,r,o;let e=R(),t;try{if(!(0,f.existsSync)(e))return null;Vt(e),t=(0,f.readFileSync)(e,"utf8")}catch(i){throw i instanceof w?i:Me(i,e)}try{let i=JSON.parse(t);if(typeof i!="object"||i==null||i.schemaVersion!==1)throw new Error("unexpected shape");return{schemaVersion:1,device:(n=i.device)!=null?n:null,activeCredential:(r=i.activeCredential)!=null?r:null,pendingCredential:(o=i.pendingCredential)!=null?o:null}}catch{throw new w("corrupted",e,`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u5185\u5BB9\u4E0D\u5B8C\u6574\u6216\u683C\u5F0F\u4E0D\u5BF9\uFF1A${e}`)}}function Bt(e){let t=K(),n=R(),r=(0,V.join)(t,`.config.json.${(0,Ue.randomBytes)(6).toString("hex")}.tmp`);try{(0,f.existsSync)(t)||(0,f.mkdirSync)(t,{recursive:!0,mode:448});let o=(0,f.openSync)(r,"wx",384);try{(0,f.writeSync)(o,`${JSON.stringify(e,null,2)}
3
+ `),(0,f.fsyncSync)(o)}finally{(0,f.closeSync)(o)}(0,f.renameSync)(r,n)}catch(o){if((0,f.existsSync)(r))try{(0,f.unlinkSync)(r)}catch{}throw Me(o,n)}}function S(e){var n;let t=e((n=A())!=null?n:{...Ft});return Bt(t),t}function Vt(e){var r;if(process.platform==="win32")return;let t=(0,f.statSync)(e),n=(r=process.getuid)==null?void 0:r.call(process);if(n!=null&&t.uid!==n)throw new w("not_owner",e,`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7528\u6237\uFF1A${e}`);if((t.mode&63)!==0)throw new w("permissions_too_open",e,`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u6743\u9650\u8FC7\u5BBD\uFF08\u540C\u673A\u5176\u4ED6\u7528\u6237\u53EF\u8BFB\uFF09\uFF1A${e}`)}function Me(e,t){let n=e==null?void 0:e.code;return n==="EACCES"||n==="EPERM"||n==="EROFS"?new w("denied",t,`\u6CA1\u6709\u6743\u9650\u8BFB\u5199\u672C\u673A\u914D\u7F6E\uFF1A${t}`):e instanceof Error?e:new Error(String(e))}var Kt=3600*1e3;function Fe(){return(0,V.join)(K(),"pending-uploads.json")}function q(){let e=Fe();if(!(0,f.existsSync)(e))return{};try{let t=JSON.parse((0,f.readFileSync)(e,"utf8")),n=Date.now();return Object.fromEntries(Object.entries(t).filter(([,r])=>{var o;return n-((o=r==null?void 0:r.createdAt)!=null?o:0)<Kt}))}catch{return{}}}function se(e){(0,f.mkdirSync)(K(),{recursive:!0,mode:448}),(0,f.writeFileSync)(Fe(),JSON.stringify(e),{mode:384})}function Ve(){var t,n;let e=(t=A())==null?void 0:t.device;return(n=e==null?void 0:e.deviceId)!=null&&n.startsWith(X)?e.deviceId:null}function Y(){var r,o;let e={deviceName:(0,W.hostname)().slice(0,50),platform:`${(0,W.platform)()}-${process.arch}`},t=(r=A())==null?void 0:r.device;if((o=t==null?void 0:t.deviceId)!=null&&o.startsWith(X))return t.deviceName===e.deviceName&&t.platform===e.platform?t:S(i=>({...i,device:{...t,...e}})).device;let n={deviceId:`${X}${(0,Be.randomUUID)()}`,...e};return S(i=>({...i,device:n})).device}function Ke(){return`cli_${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`}function k(e,t=Ke()){return{ok:!0,code:"OK",requestId:t,data:e}}function l(e,t,n={}){var r;return{ok:!1,code:e,message:t,requestId:(r=n.requestId)!=null?r:Ke(),...n.data==null?{}:{data:n.data},...n.nextAction==null?{}:{nextAction:n.nextAction}}}function a(e){process.stdout.write(`${JSON.stringify(e)}
4
+ `),e.ok||(process.exitCode=1)}async function y(e,t={}){var i,s;let n=new URL(`${Q}/v1/agent-cli${e}`);for(let[d,m]of Object.entries((i=t.query)!=null?i:{}))if(m!=null)for(let c of Array.isArray(m)?m:[m])n.searchParams.append(d,String(c));let r={"X-GEO-CLI-Version":x,"X-GEO-Protocol-Version":String(B),"X-GEO-CLI-Package":L},o=null;try{o=Ve()}catch{}o&&(r["X-Device-ID"]=o),t.apiKey&&(r.Authorization=`Bearer ${t.apiKey}`),t.body!=null&&(r["Content-Type"]="application/json");try{let d=await fetch(n,{method:(s=t.method)!=null?s:"GET",headers:r,body:t.body==null?void 0:JSON.stringify(t.body),signal:AbortSignal.timeout(t.isWrite?Pe:Le)}),m=await d.text();try{let c=JSON.parse(m);return qt(c)?c:l("SERVER_ERROR",`\u670D\u52A1\u7AEF\u8FD4\u56DE\u4E86\u975E\u9884\u671F\u5185\u5BB9\uFF08HTTP ${d.status}\uFF09`,{data:{transportFailure:!0}})}catch{return l("SERVER_ERROR",`\u670D\u52A1\u7AEF\u8FD4\u56DE\u4E86\u975E\u9884\u671F\u5185\u5BB9\uFF08HTTP ${d.status}\uFF09`,{data:{transportFailure:!0}})}}catch(d){return d instanceof Error&&(d.name==="TimeoutError"||d.name==="AbortError")?l("SERVER_ERROR",t.isWrite?"\u670D\u52A1\u7AEF\u5904\u7406\u8D85\u65F6,\u8FD9\u6B21\u5199\u5165\u7ED3\u679C\u672A\u77E5":"\u670D\u52A1\u7AEF\u54CD\u5E94\u8D85\u65F6",{data:{transportFailure:!0},nextAction:t.isWrite?{type:"ask_user",message:"\u8D85\u65F6\u4E0D\u4EE3\u8868\u6CA1\u5199\u8FDB\u53BB \u2014\u2014 \u670D\u52A1\u7AEF\u53EF\u80FD\u8FD8\u5728\u5904\u7406\u3002**\u5148\u7528\u5BF9\u5E94\u7684\u67E5\u8BE2\u80FD\u529B\u786E\u8BA4\u4E00\u904D**,\u786E\u5B9E\u6CA1\u6709\u518D\u91CD\u65B0 plan;\u76F4\u63A5\u91CD\u8BD5\u4F1A\u5EFA\u51FA\u91CD\u590D\u7684\u4E00\u4EFD,\u800C\u4E14\u4F1A\u518D\u6263\u4E00\u6B21\u8D39\u3002"}:{type:"ask_user",message:"\u670D\u52A1\u7AEF\u54CD\u5E94\u592A\u6162\u3002\u7A0D\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u5373\u53EF,\u67E5\u8BE2\u4E0D\u4F1A\u4EA7\u751F\u4EFB\u4F55\u5199\u5165"}}):l("SERVER_ERROR",`\u65E0\u6CD5\u8FDE\u63A5\u670D\u52A1\u7AEF\uFF1A${d instanceof Error?d.message:String(d)}`,{data:{transportFailure:!0},nextAction:{type:"ask_user",message:"\u8BF7\u786E\u8BA4\u7F51\u7EDC\u53EF\u7528\uFF0C\u4EE5\u53CA\u670D\u52A1\u7AEF\u5730\u5740\u914D\u7F6E\u6B63\u786E"}})}}function qt(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.ok=="boolean"&&typeof t.code=="string"}function jt(e){var t;return!e.ok&&((t=e.data)==null?void 0:t.transportFailure)===!0}function ae(e){return e.ok||jt(e)?!1:["AUTH_EXPIRED","DEVICE_MISMATCH","ACCESS_DENIED","AUTH_REQUIRED","VALIDATION_FAILED"].includes(e.code)}function P(){var e,t,n;return(n=(t=(e=A())==null?void 0:e.activeCredential)==null?void 0:t.apiKey)!=null?n:null}function Z(){var e,t;return(t=(e=A())==null?void 0:e.activeCredential)!=null?t:null}function qe(){var e,t;return(t=(e=A())==null?void 0:e.pendingCredential)!=null?t:null}function je(e){S(t=>({...t,pendingCredential:{apiKey:e,startedAt:new Date().toISOString()}}))}function le(){S(e=>({...e,pendingCredential:null}))}function de(e){return S(t=>{let n=t.pendingCredential;return n?{...t,activeCredential:{apiKey:n.apiKey,...e},pendingCredential:null}:t}).activeCredential}function Ge(){S(e=>({...e,activeCredential:null,pendingCredential:null}))}var _=require("node:crypto"),Je=require("node:http");function He(e){let t=`
5
5
  (function () {
6
+ var shell = document.getElementById('shell');
6
7
  var form = document.getElementById('f');
7
8
  var input = document.getElementById('k');
9
+ var field = document.getElementById('key-field');
8
10
  var status = document.getElementById('s');
9
11
  var button = document.getElementById('b');
12
+ var buttonText = document.getElementById('button-text');
13
+ var toggle = document.getElementById('toggle-key');
14
+ var closeCountdown = document.getElementById('close-countdown');
15
+ var closeSecondsNode = document.getElementById('close-seconds');
10
16
  var done = false;
17
+
18
+ toggle.addEventListener('click', function () {
19
+ var visible = input.type === 'text';
20
+ input.type = visible ? 'password' : 'text';
21
+ toggle.setAttribute('aria-label', visible ? '\u663E\u793A\u5BC6\u94A5' : '\u9690\u85CF\u5BC6\u94A5');
22
+ toggle.setAttribute('aria-pressed', visible ? 'false' : 'true');
23
+ field.classList.toggle('is-visible', !visible);
24
+ input.focus();
25
+ });
26
+
27
+ input.addEventListener('input', function () {
28
+ field.classList.remove('has-error');
29
+ status.className = 'status';
30
+ status.textContent = '';
31
+ });
32
+
11
33
  form.addEventListener('submit', function (event) {
12
34
  event.preventDefault();
13
35
  if (done) return;
14
36
  var value = input.value.trim();
15
- if (!value) { status.textContent = '\u8BF7\u5148\u7C98\u8D34\u5BC6\u94A5'; return; }
37
+ if (!value) {
38
+ field.classList.add('has-error');
39
+ status.textContent = '\u8BF7\u5148\u7C98\u8D34\u5BC6\u94A5';
40
+ status.className = 'status err';
41
+ input.focus();
42
+ return;
43
+ }
16
44
  button.disabled = true;
17
- status.textContent = '\u6B63\u5728\u6821\u9A8C\u2026';
45
+ button.classList.add('is-loading');
46
+ buttonText.textContent = '\u6B63\u5728\u8FDE\u63A5';
47
+ status.textContent = '\u6B63\u5728\u5EFA\u7ACB\u5B89\u5168\u8FDE\u63A5\u2026';
48
+ status.className = 'status pending';
18
49
  fetch('/submit', {
19
50
  method: 'POST',
20
51
  headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': '${e}' },
21
52
  body: JSON.stringify({ key: value })
22
- }).then(function (r) { return r.json(); }).then(function (r) {
23
- if (r.ok) {
53
+ }).then(function (response) {
54
+ return response.json();
55
+ }).then(function (result) {
56
+ if (result.ok) {
24
57
  done = true;
25
58
  input.value = '';
26
- form.style.display = 'none';
27
- status.textContent = '\u5F55\u5165\u6210\u529F\uFF0C\u672C\u673A\u670D\u52A1\u5DF2\u5173\u95ED\uFF0C\u672C\u9875\u5373\u5C06\u81EA\u52A8\u5173\u95ED\u2026';
28
- status.className = 'ok';
29
- // \u6D4F\u89C8\u5668\u53EA\u5141\u8BB8\u811A\u672C\u5173\u95ED\u81EA\u5DF1 window.open \u51FA\u6765\u7684\u7A97\u53E3\uFF0C\u800C\u8FD9\u4E2A\u9875\u9762\u662F\u547D\u4EE4\u884C\u62C9\u8D77\u7684\u666E\u901A\u6807\u7B7E\u9875\uFF0C
30
- // close() \u591A\u534A\u4F1A\u88AB\u5FFD\u7565\u3002\u6240\u4EE5\u5FC5\u987B\u7559\u4E00\u53E5\u515C\u5E95\u6587\u6848\uFF0C\u522B\u8BA9\u7528\u6237\u5BF9\u7740"\u5373\u5C06\u81EA\u52A8\u5173\u95ED"\u5E72\u7B49\u3002
31
- setTimeout(function () { window.close(); }, 1200);
32
- setTimeout(function () {
33
- status.textContent = '\u5F55\u5165\u6210\u529F\uFF0C\u53EF\u4EE5\u5173\u95ED\u8FD9\u4E2A\u9875\u9762\u56DE\u5230 AI \u52A9\u624B\u4E86\u3002';
34
- }, 2000);
35
- } else {
36
- button.disabled = false;
37
- // \u672C\u5730\u670D\u52A1\u4E0D\u6821\u9A8C\u5BC6\u94A5\uFF08\u53EA\u770B\u957F\u5EA6\uFF09\uFF0C\u771F\u6B63\u7684\u6821\u9A8C\u53D1\u751F\u5728\u63D0\u4EA4\u4E4B\u540E\u3002
38
- // \u8FD9\u91CC\u80FD\u89E6\u53D1\u7684\u5931\u8D25\u53EA\u6709\u540C\u6E90/CSRF/\u91CD\u590D\u63D0\u4EA4\u90A3\u51E0\u79CD\uFF0C\u5199\u300C\u5BC6\u94A5\u4E0D\u5BF9\u300D\u662F\u6307\u9519\u65B9\u5411
39
- status.textContent = r.message || '\u63D0\u4EA4\u88AB\u62D2\u7EDD\u3002\u8BF7\u91CD\u65B0\u6267\u884C\u767B\u5F55\u547D\u4EE4\uFF0C\u7528\u65B0\u6253\u5F00\u7684\u9875\u9762\u518D\u8BD5\u4E00\u6B21\u3002';
40
- status.className = 'err';
59
+ form.hidden = true;
60
+ // \u5BC6\u94A5\u53EA\u662F\u6536\u5230\u4E86\uFF0C\u7ED1\u5B9A\u6210\u6CA1\u6210\u8FD8\u8981\u7B49\u670D\u52A1\u7AEF\u3002\u8FD9\u4E00\u5C4F\u5FC5\u987B\u8BF4\u6E05\u695A\u73B0\u5728\u5904\u4E8E\u54EA\u4E00\u6B65\uFF0C
61
+ // \u4E0D\u80FD\u63D0\u524D\u8BF4"\u6210\u529F"\u2014\u2014\u7528\u6237\u8BFB\u5230"\u6210\u529F"\u5C31\u4F1A\u5173\u9875\u9762\u8D70\u4EBA\uFF0C\u800C\u771F\u5B9E\u7ED3\u679C\u53EF\u80FD\u662F\u5931\u8D25
62
+ status.textContent = '\u5BC6\u94A5\u5DF2\u6536\u5230\uFF0C\u6B63\u5728\u6821\u9A8C\u5E76\u7ED1\u5B9A\u672C\u673A\u2026';
63
+ status.className = 'status pending';
64
+ pollResult();
65
+ return;
41
66
  }
67
+ restore(result.message || '\u63D0\u4EA4\u88AB\u62D2\u7EDD\u3002\u8BF7\u91CD\u65B0\u6267\u884C\u767B\u5F55\u547D\u4EE4\uFF0C\u7528\u65B0\u6253\u5F00\u7684\u9875\u9762\u518D\u8BD5\u4E00\u6B21\u3002');
42
68
  }).catch(function () {
43
- button.disabled = false;
44
- status.textContent = '\u672C\u5730\u670D\u52A1\u5DF2\u5173\u95ED\uFF0C\u8BF7\u91CD\u65B0\u6267\u884C best-geo auth login\u3002';
45
- status.className = 'err';
69
+ restore('\u672C\u5730\u670D\u52A1\u5DF2\u5173\u95ED\uFF0C\u8BF7\u91CD\u65B0\u6267\u884C best-geo auth login\u3002');
46
70
  });
47
71
  });
72
+
73
+ /** \u8F6E\u8BE2\u670D\u52A1\u7AEF\u7684\u7ED1\u5B9A\u7ED3\u679C\uFF0C\u76F4\u5230\u62FF\u5230\u6210\u8D25\u4E3A\u6B62 */
74
+ function pollResult() {
75
+ fetch('/result', { headers: { 'X-CSRF-Token': '${e}' } }).then(function (response) {
76
+ return response.json();
77
+ }).then(function (result) {
78
+ if (result.state === 'pending') {
79
+ setTimeout(pollResult, 600);
80
+ return;
81
+ }
82
+ if (result.state === 'done' && result.ok) {
83
+ finishOk(result.message || '\u5DF2\u5B8C\u6210\u7ED1\u5B9A\uFF0C\u53EF\u4EE5\u56DE\u5230 AI \u52A9\u624B\u7EE7\u7EED\u64CD\u4F5C\u4E86\u3002');
84
+ return;
85
+ }
86
+ finishFail(result.message || '\u767B\u5F55\u5931\u8D25\u3002\u8BF7\u56DE\u5230 AI \u52A9\u624B\u67E5\u770B\u8BE6\u60C5\u3002', result.retryable);
87
+ }).catch(function () {
88
+ // \u670D\u52A1\u5DF2\u7ECF\u5173\u4E86\u624D\u8F6E\u8BE2\u5230 \u2014\u2014 \u7ED3\u679C\u62FF\u4E0D\u5230\u4E86\uFF0C\u5982\u5B9E\u8BF4\uFF0C\u522B\u731C\u6210\u529F\u6216\u5931\u8D25
89
+ finishFail('\u6CA1\u80FD\u53D6\u5230\u6821\u9A8C\u7ED3\u679C\uFF0C\u672C\u673A\u670D\u52A1\u5DF2\u5173\u95ED\u3002\u8BF7\u56DE\u5230 AI \u52A9\u624B\u67E5\u770B\u8FD9\u6B21\u767B\u5F55\u7684\u7ED3\u679C\u3002', false);
90
+ });
91
+ }
92
+
93
+ /** \u7ED1\u5B9A\u6210\u529F\uFF1A\u663E\u793A\u7ED3\u679C\u5E76\u5012\u8BA1\u65F6\u81EA\u52A8\u5173\u9875\u9762 */
94
+ function finishOk(message) {
95
+ shell.classList.add('is-complete');
96
+ status.textContent = message;
97
+ status.className = 'status ok';
98
+ closeCountdown.hidden = false;
99
+ var closeSeconds = 2;
100
+ closeSecondsNode.textContent = String(closeSeconds);
101
+ var closeTimer = setInterval(function () {
102
+ closeSeconds -= 1;
103
+ closeSecondsNode.textContent = String(Math.max(closeSeconds, 0));
104
+ if (closeSeconds <= 0) {
105
+ clearInterval(closeTimer);
106
+ window.close();
107
+ setTimeout(function () {
108
+ closeCountdown.hidden = true;
109
+ status.textContent = message + ' \u6D4F\u89C8\u5668\u672A\u5141\u8BB8\u81EA\u52A8\u5173\u95ED\uFF0C\u8BF7\u624B\u52A8\u5173\u95ED\u8FD9\u4E2A\u9875\u9762\u3002';
110
+ }, 800);
111
+ }
112
+ }, 1000);
113
+ }
114
+
115
+ /**
116
+ * \u7ED1\u5B9A\u5931\u8D25\uFF1A\u628A\u670D\u52A1\u7AEF\u7ED9\u7684\u539F\u56E0\u539F\u6837\u663E\u793A\u51FA\u6765\uFF0C**\u4E0D\u5012\u8BA1\u65F6\u3001\u4E0D\u81EA\u52A8\u5173**\u3002
117
+ * \u5931\u8D25\u4FE1\u606F\u4E00\u95EA\u800C\u8FC7\u7B49\u4E8E\u6CA1\u8BF4\uFF0C\u7528\u6237\u5F97\u6709\u65F6\u95F4\u8BFB\u5B8C\u5E76\u77E5\u9053\u4E0B\u4E00\u6B65\u505A\u4EC0\u4E48\u3002
118
+ *
119
+ * retryable \u65F6\u628A\u8F93\u5165\u6846\u653E\u56DE\u6765 \u2014\u2014 \u7528\u6237\u624B\u8FB9\u53EF\u80FD\u5C31\u6709\u53E6\u4E00\u628A\u5BC6\u94A5\uFF0C
120
+ * \u6536\u8D70\u8F93\u5165\u6846\u7B49\u4E8E\u903C\u4ED6\u56DE AI \u52A9\u624B\u91CD\u8DD1\u4E00\u904D\u547D\u4EE4\uFF0C\u767D\u7ED5\u4E00\u5708\u3002
121
+ */
122
+ function finishFail(message, retryable) {
123
+ closeCountdown.hidden = true;
124
+ status.textContent = message;
125
+ status.className = 'status err';
126
+ if (!retryable) return;
127
+ done = false;
128
+ form.hidden = false;
129
+ field.classList.add('has-error');
130
+ button.disabled = false;
131
+ button.classList.remove('is-loading');
132
+ buttonText.textContent = '\u5B89\u5168\u8FDE\u63A5';
133
+ input.value = '';
134
+ input.focus();
135
+ }
136
+
137
+ function restore(message) {
138
+ button.disabled = false;
139
+ button.classList.remove('is-loading');
140
+ buttonText.textContent = '\u5B89\u5168\u8FDE\u63A5';
141
+ status.textContent = message;
142
+ status.className = 'status err';
143
+ }
48
144
  })();
49
145
  `.trim();return{html:`<!doctype html>
50
146
  <html lang="zh-CN">
51
147
  <head>
52
148
  <meta charset="utf-8">
53
- <title>\u5F55\u5165 AI \u52A9\u624B\u5BC6\u94A5</title>
149
+ <meta name="viewport" content="width=device-width,initial-scale=1">
150
+ <title>\u8FDE\u63A5 AI \u52A9\u624B</title>
54
151
  <style>
55
- :root { color-scheme: light dark; }
56
- body { margin: 0; min-height: 100vh; display: flex; align-items: center; justify-content: center;
57
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: #f5f6fa; color: #1a1d29; }
58
- @media (prefers-color-scheme: dark) { body { background: #14161f; color: #e8eaf2; } }
59
- .card { width: 460px; max-width: calc(100vw - 32px); padding: 28px; border-radius: 14px;
60
- background: #fff; box-shadow: 0 18px 40px rgb(15 18 30 / 12%); }
61
- @media (prefers-color-scheme: dark) { .card { background: #1e2130; box-shadow: none; } }
62
- h1 { margin: 0 0 8px; font-size: 18px; }
63
- p { margin: 0 0 18px; font-size: 13px; line-height: 1.7; opacity: .75; }
64
- input { width: 100%; box-sizing: border-box; padding: 10px 12px; font-size: 14px;
65
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace; border: 1px solid #c9cdd8;
66
- border-radius: 8px; background: transparent; color: inherit; }
67
- button { margin-top: 14px; width: 100%; padding: 10px; font-size: 14px; color: #fff; cursor: pointer;
68
- background: #5b8cff; border: 0; border-radius: 8px; }
69
- button:disabled { opacity: .6; cursor: default; }
70
- #s { margin-top: 14px; font-size: 13px; min-height: 20px; }
71
- #s.ok { color: #16a34a; }
72
- #s.err { color: #dc2626; }
152
+ :root {
153
+ color-scheme: light dark;
154
+ --bg: #eaf0f7; --panel: rgba(255,255,255,.78); --panel-strong: #fdfefe;
155
+ --text: #102034; --muted: #607188; --line: rgba(34,67,104,.16);
156
+ --line-bright: rgba(36,107,254,.32); --primary: #246bfe; --cyan: #00aeca;
157
+ --glow: rgba(36,107,254,.22); --success: #078b62; --danger: #d83b53;
158
+ --grid: rgba(33,78,123,.065); --shadow: rgba(15,34,58,.16);
159
+ }
160
+ @media (prefers-color-scheme: dark) {
161
+ :root {
162
+ --bg: #060a12; --panel: rgba(11,18,29,.86); --panel-strong: #0e1725;
163
+ --text: #edf6ff; --muted: #91a0b7; --line: rgba(139,181,224,.16);
164
+ --line-bright: rgba(91,141,255,.42); --primary: #5a8cff; --cyan: #21d4d8;
165
+ --glow: rgba(60,126,255,.3); --success: #34d399; --danger: #fb7185;
166
+ --grid: rgba(102,157,211,.075); --shadow: rgba(0,0,0,.4);
167
+ }
168
+ }
169
+ * { box-sizing: border-box; }
170
+ html { min-width: 320px; background: var(--bg); }
171
+ body {
172
+ margin: 0; min-height: 100vh; display: grid; place-items: center; overflow-x: hidden;
173
+ color: var(--text);
174
+ background: radial-gradient(circle at 74% 42%, var(--glow), transparent 32%),
175
+ radial-gradient(circle at 18% 88%, color-mix(in srgb, var(--cyan) 9%, transparent), transparent 28%), var(--bg);
176
+ font-family: Avenir Next, Avenir, Montserrat, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
177
+ }
178
+ body::before {
179
+ content: ""; position: fixed; inset: 0; pointer-events: none;
180
+ background-image: linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);
181
+ background-size: 44px 44px; -webkit-mask-image: linear-gradient(to bottom, transparent, #000 18%, #000 82%, transparent);
182
+ mask-image: linear-gradient(to bottom, transparent, #000 18%, #000 82%, transparent);
183
+ }
184
+ button, input { font: inherit; }
185
+ button { -webkit-tap-highlight-color: transparent; }
186
+ .page-shell {
187
+ position: relative; width: min(1060px, calc(100vw - 40px)); min-height: 620px;
188
+ display: grid; grid-template-columns: 1.08fr .92fr; overflow: hidden;
189
+ border: 1px solid var(--line); border-radius: 28px; background: var(--panel);
190
+ box-shadow: 0 32px 90px var(--shadow); -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px);
191
+ animation: shell-in .7s cubic-bezier(.2,.8,.2,1) both;
192
+ }
193
+ .page-shell::after { content: ""; position: absolute; inset: 0; pointer-events: none; border-radius: inherit; box-shadow: inset 0 1px rgba(255,255,255,.16); }
194
+ .access-panel { z-index: 2; display: flex; flex-direction: column; padding: 46px 48px 38px; background: linear-gradient(145deg, var(--panel-strong), transparent 72%); }
195
+ .gateway-row { min-height: 34px; display: flex; align-items: center; justify-content: flex-end; }
196
+ .gateway-badge { margin-left: auto; display: flex; align-items: center; gap: 7px; color: var(--muted); font: 600 9px/1 ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing: .1em; }
197
+ .gateway-badge i { width: 6px; height: 6px; border-radius: 50%; background: var(--success); box-shadow: 0 0 10px var(--success); }
198
+ .copy-block { margin-top: 70px; }
199
+ .eyebrow { margin: 0 0 13px; color: var(--primary); font: 700 10px/1 ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing: .16em; }
200
+ h1 { margin: 0; font-size: clamp(32px, 4vw, 44px); line-height: 1.14; letter-spacing: -.045em; }
201
+ .lead { max-width: 510px; margin: 18px 0 0; color: var(--muted); font-size: 14px; line-height: 1.8; }
202
+ form { margin-top: 35px; }
203
+ form[hidden] { display: none; }
204
+ label { display: block; margin-bottom: 10px; font-size: 12px; font-weight: 700; }
205
+ .key-field {
206
+ height: 52px; display: flex; align-items: center; gap: 11px; padding: 0 8px 0 16px;
207
+ border: 1px solid var(--line); border-radius: 12px;
208
+ background: color-mix(in srgb, var(--panel-strong) 84%, transparent); transition: border-color .2s, box-shadow .2s, background .2s;
209
+ }
210
+ .key-field:focus-within { border-color: var(--primary); box-shadow: 0 0 0 4px color-mix(in srgb, var(--primary) 14%, transparent), inset 0 0 28px color-mix(in srgb, var(--primary) 4%, transparent); }
211
+ .key-field.has-error { border-color: var(--danger); }
212
+ .lock-icon { width: 13px; height: 11px; flex: 0 0 auto; border: 1.5px solid var(--muted); border-radius: 3px; position: relative; }
213
+ .lock-icon::before { content: ""; position: absolute; width: 7px; height: 7px; left: 1.5px; top: -7px; border: 1.5px solid var(--muted); border-bottom: 0; border-radius: 5px 5px 0 0; }
214
+ input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; color: var(--text); font: 13px/1 ui-monospace, SFMono-Regular, Menlo, monospace; }
215
+ input::placeholder { color: color-mix(in srgb, var(--muted) 72%, transparent); }
216
+ .key-toggle { width: 36px; height: 36px; flex: 0 0 auto; border: 0; border-radius: 8px; color: var(--muted); background: transparent; cursor: pointer; transition: color .2s, background .2s; }
217
+ .key-toggle:hover { color: var(--primary); background: color-mix(in srgb, var(--primary) 9%, transparent); }
218
+ .key-toggle span { position: relative; display: block; width: 17px; height: 11px; margin: auto; border: 1.5px solid currentColor; border-radius: 50% / 58%; }
219
+ .key-toggle span::after { content: ""; position: absolute; left: 50%; top: 50%; width: 4px; height: 4px; border: 1.5px solid currentColor; border-radius: 50%; transform: translate(-50%, -50%); }
220
+ .key-field.is-visible .key-toggle span::before { content: ""; position: absolute; z-index: 1; left: -2px; top: 4px; width: 21px; height: 1.5px; background: currentColor; transform: rotate(-42deg); }
221
+ .key-toggle:focus-visible, .submit-button:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }
222
+ .submit-button {
223
+ width: 100%; height: 52px; margin-top: 14px; display: flex; align-items: center; justify-content: center; gap: 10px;
224
+ border: 0; border-radius: 12px; color: #fff; background: linear-gradient(105deg, var(--primary), #3c7cff 60%, var(--cyan));
225
+ box-shadow: 0 14px 30px var(--glow); cursor: pointer; font-size: 14px; font-weight: 750; letter-spacing: .02em;
226
+ transition: transform .2s, filter .2s, box-shadow .2s;
227
+ }
228
+ .submit-button:hover:not(:disabled) { transform: translateY(-1px); filter: brightness(1.06); box-shadow: 0 17px 34px var(--glow); }
229
+ .submit-button:disabled { cursor: wait; opacity: .78; }
230
+ .submit-button.is-loading i { width: 14px; height: 14px; border: 2px solid rgba(255,255,255,.4); border-top-color: #fff; border-radius: 50%; animation: spin .8s linear infinite; }
231
+ .button-arrow { margin-left: 2px; font-size: 18px; line-height: 1; }
232
+ .status { min-height: 24px; margin-top: 13px; font-size: 12px; line-height: 1.6; }
233
+ .status.pending { color: var(--muted); }
234
+ .status.ok { color: var(--success); font-weight: 650; }
235
+ .status.err { color: var(--danger); }
236
+ .close-countdown { margin-top: 10px; display: flex; align-items: center; gap: 10px; color: var(--muted); font-size: 12px; }
237
+ .close-countdown[hidden] { display: none; }
238
+ .close-countdown strong { width: 34px; height: 34px; display: grid; place-items: center; border: 1px solid color-mix(in srgb, var(--success) 45%, transparent); border-radius: 50%; color: var(--success); background: color-mix(in srgb, var(--success) 9%, transparent); font: 750 14px/1 ui-monospace, SFMono-Regular, Menlo, monospace; box-shadow: 0 0 18px color-mix(in srgb, var(--success) 12%, transparent); }
239
+ .trust-row { margin-top: auto; padding-top: 24px; display: flex; flex-wrap: wrap; gap: 10px 18px; border-top: 1px solid var(--line); color: var(--muted); font-size: 10px; }
240
+ .trust-row span { display: flex; align-items: center; gap: 6px; }
241
+ .trust-row i { width: 5px; height: 5px; border-radius: 50%; background: var(--success); box-shadow: 0 0 8px color-mix(in srgb, var(--success) 60%, transparent); }
242
+ .network-panel { position: relative; min-height: 620px; overflow: hidden; padding: 46px 38px; border-left: 1px solid var(--line); background: linear-gradient(155deg, color-mix(in srgb, var(--primary) 12%, transparent), transparent 58%); }
243
+ .network-panel::before { content: ""; position: absolute; inset: 18% -35% -25% 5%; border-radius: 50%; background: radial-gradient(circle, color-mix(in srgb, var(--cyan) 9%, transparent), transparent 60%); filter: blur(10px); }
244
+ .network-copy span, .network-footnote { color: var(--muted); font: 600 9px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing: .13em; }
245
+ .network-copy strong { display: block; margin-top: 8px; font-size: 18px; letter-spacing: -.02em; }
246
+ .model-network { position: absolute; width: 420px; height: 420px; left: 50%; top: 52%; transform: translate(-50%, -50%); }
247
+ .orbit { position: absolute; left: 50%; top: 50%; border: 1px solid var(--line); border-radius: 50%; }
248
+ .orbit::before, .orbit::after { content: ""; position: absolute; width: 5px; height: 5px; border-radius: 50%; background: var(--cyan); box-shadow: 0 0 12px var(--cyan); }
249
+ .orbit::before { left: 20%; top: 5%; }
250
+ .orbit::after { right: 12%; bottom: 15%; }
251
+ .orbit-outer { width: 380px; height: 270px; margin: -135px 0 0 -190px; transform: rotate(-16deg); animation: orbit 28s linear infinite; }
252
+ .orbit-inner { width: 250px; height: 180px; margin: -90px 0 0 -125px; transform: rotate(18deg); animation: orbit-reverse 22s linear infinite; }
253
+ .core-node {
254
+ position: absolute; left: 50%; top: 50%; width: 112px; height: 112px; display: grid; place-items: center;
255
+ transform: translate(-50%, -50%); border: 1px solid color-mix(in srgb, var(--cyan) 52%, transparent); border-radius: 32px;
256
+ background: radial-gradient(circle at 35% 25%, color-mix(in srgb, var(--cyan) 25%, transparent), transparent 58%), var(--panel-strong);
257
+ box-shadow: 0 0 0 16px color-mix(in srgb, var(--primary) 5%, transparent), 0 0 60px var(--glow); animation: breathe 4s ease-in-out infinite;
258
+ }
259
+ .core-node::before, .core-node::after { content: ""; position: absolute; inset: 13px; border: 1px solid var(--line); border-radius: 23px; }
260
+ .core-node::after { inset: -8px; border-color: color-mix(in srgb, var(--cyan) 14%, transparent); }
261
+ .core-node span { z-index: 1; font: 800 18px/1 ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing: .12em; }
262
+ .core-node i { position: absolute; bottom: 19px; width: 22px; height: 2px; border-radius: 2px; background: linear-gradient(90deg, transparent, var(--cyan), transparent); }
263
+ .model-node { position: absolute; width: 42px; height: 42px; display: grid; place-items: center; border: 1px solid var(--line-bright); background: var(--panel-strong); box-shadow: 0 8px 24px var(--shadow), 0 0 18px color-mix(in srgb, var(--primary) 8%, transparent); animation: node-in .55s ease-out both; }
264
+ .model-node i { width: 11px; height: 11px; border: 1.5px solid var(--primary); transform: rotate(45deg); }
265
+ .node-a { left: 4%; top: 45%; border-radius: 50%; animation-delay: .15s; }
266
+ .node-b { right: 4%; top: 34%; border-radius: 12px; animation-delay: .25s; }
267
+ .node-c { left: 22%; top: 8%; border-radius: 50%; animation-delay: .35s; }
268
+ .node-d { right: 18%; bottom: 9%; border-radius: 13px; animation-delay: .45s; }
269
+ .node-e { left: 20%; bottom: 13%; border-radius: 10px; transform: rotate(45deg); animation-delay: .55s; }
270
+ .node-e i { transform: rotate(0); }
271
+ .node-f { right: 13%; top: 10%; border-radius: 50%; animation-delay: .65s; }
272
+ .beam { position: absolute; left: 50%; top: 50%; height: 1px; width: 170px; transform-origin: left; background: linear-gradient(90deg, var(--cyan), transparent); opacity: .42; }
273
+ .beam::after { content: ""; position: absolute; width: 24px; height: 1px; background: #fff; box-shadow: 0 0 8px var(--cyan); animation: signal 3s ease-in-out infinite; }
274
+ .beam-a { transform: rotate(-28deg); }
275
+ .beam-b { transform: rotate(145deg); }
276
+ .beam-c { transform: rotate(38deg); }
277
+ .beam-b::after { animation-delay: 1s; }
278
+ .beam-c::after { animation-delay: 2s; }
279
+ .network-footnote { position: absolute; left: 38px; bottom: 38px; display: flex; align-items: center; gap: 8px; }
280
+ .network-footnote span { width: 28px; height: 1px; background: var(--cyan); }
281
+ .page-shell.is-complete .core-node { border-color: var(--success); box-shadow: 0 0 70px color-mix(in srgb, var(--success) 35%, transparent); }
282
+ .page-shell.is-complete .network-panel { background: linear-gradient(155deg, color-mix(in srgb, var(--success) 11%, transparent), transparent 58%); }
283
+ @keyframes shell-in { from { opacity: 0; transform: translateY(14px) scale(.985); } to { opacity: 1; transform: none; } }
284
+ @keyframes spin { to { transform: rotate(360deg); } }
285
+ @keyframes breathe { 50% { transform: translate(-50%, -50%) scale(1.04); } }
286
+ @keyframes orbit { to { transform: rotate(344deg); } }
287
+ @keyframes orbit-reverse { to { transform: rotate(-342deg); } }
288
+ @keyframes node-in { from { opacity: 0; filter: blur(6px); } to { opacity: 1; filter: none; } }
289
+ @keyframes signal { 0%, 20% { left: 0; opacity: 0; } 45% { opacity: 1; } 80%, 100% { left: 80%; opacity: 0; } }
290
+ @media (max-width: 760px) {
291
+ body { align-items: start; }
292
+ .page-shell { width: min(calc(100% - 24px), 560px); margin: 24px 0; grid-template-columns: 1fr; }
293
+ .network-panel { grid-row: 1; min-height: 250px; padding: 32px 28px; border-left: 0; border-bottom: 1px solid var(--line); }
294
+ .model-network { width: 330px; height: 260px; top: 58%; transform: translate(-50%, -50%) scale(.72); }
295
+ .access-panel { min-height: 520px; padding: 32px 26px 28px; }
296
+ .copy-block { margin-top: 42px; }
297
+ .network-footnote { display: none; }
298
+ }
299
+ @media (max-width: 430px) {
300
+ .gateway-badge { display: none; }
301
+ .access-panel { padding-inline: 20px; }
302
+ .network-panel { min-height: 220px; padding: 28px 22px; }
303
+ .network-copy strong { font-size: 16px; }
304
+ .trust-row { gap: 9px 12px; }
305
+ }
306
+ @media (prefers-reduced-motion: reduce) {
307
+ *, *::before, *::after {
308
+ scroll-behavior: auto !important; animation-duration: .01ms !important;
309
+ animation-iteration-count: 1 !important; transition-duration: .01ms !important;
310
+ }
311
+ }
73
312
  </style>
74
313
  </head>
75
314
  <body>
76
- <div class="card">
77
- <h1>\u5F55\u5165 AI \u52A9\u624B\u5BC6\u94A5</h1>
78
- <p>\u628A\u4F60\u5728\u7F51\u9875\u4E0A\u521B\u5EFA\u7684\u5BC6\u94A5\u7C98\u8D34\u5230\u4E0B\u9762\u3002\u5BC6\u94A5\u53EA\u4F1A\u53D1\u9001\u5230\u672C\u673A\u7684 Best GEO CLI\uFF0C\u4E0D\u4F1A\u7ECF\u8FC7 AI \u52A9\u624B\uFF0C\u4E5F\u4E0D\u4F1A\u79BB\u5F00\u8FD9\u53F0\u7535\u8111\u3002</p>
79
- <form id="f">
80
- <input id="k" type="password" autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false" placeholder="\u7C98\u8D34\u5BC6\u94A5">
81
- <button id="b" type="submit">\u786E\u8BA4\u5F55\u5165</button>
82
- </form>
83
- <div id="s"></div>
84
- </div>
315
+ <main class="page-shell" id="shell">
316
+ <section class="access-panel" aria-labelledby="page-title">
317
+ <div class="gateway-row">
318
+ <span class="gateway-badge"><i></i>AI CONNECT GATEWAY</span>
319
+ </div>
320
+ <div class="copy-block">
321
+ <p class="eyebrow">LOCAL ACCESS / SECURE HANDSHAKE</p>
322
+ <h1 id="page-title">\u8FDE\u63A5\u4F60\u7684 AI \u52A9\u624B</h1>
323
+ <p class="lead">\u4E00\u628A\u5BC6\u94A5\uFF0C\u63A5\u5165\u4EFB\u610F\u5927\u6A21\u578B\u3002\u6388\u6743\u5B8C\u6210\u540E\uFF0C\u4F60\u7684 AI \u52A9\u624B\u5373\u53EF\u901A\u8FC7 CLI \u5B89\u5168\u64CD\u4F5C\u5DF2\u6388\u6743\u7684\u6570\u636E\u3002</p>
324
+ </div>
325
+ <form id="f" novalidate>
326
+ <label for="k">AI \u52A9\u624B\u5BC6\u94A5</label>
327
+ <div class="key-field" id="key-field">
328
+ <span class="lock-icon" aria-hidden="true"></span>
329
+ <input id="k" type="password" autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false" placeholder="\u7C98\u8D34\u4F60\u521A\u521A\u521B\u5EFA\u7684\u5BC6\u94A5">
330
+ <button class="key-toggle" id="toggle-key" type="button" aria-label="\u663E\u793A\u5BC6\u94A5" aria-pressed="false"><span aria-hidden="true"></span></button>
331
+ </div>
332
+ <button class="submit-button" id="b" type="submit"><i aria-hidden="true"></i><span id="button-text">\u5B89\u5168\u8FDE\u63A5</span><span class="button-arrow" aria-hidden="true">\u2192</span></button>
333
+ </form>
334
+ <div class="status" id="s" role="status" aria-live="polite"></div>
335
+ <div class="close-countdown" id="close-countdown" hidden aria-live="polite">
336
+ <strong id="close-seconds">2</strong>
337
+ <span>\u79D2\u540E\u5C1D\u8BD5\u81EA\u52A8\u5173\u95ED\u9875\u9762</span>
338
+ </div>
339
+ <div class="trust-row" aria-label="\u5B89\u5168\u8BF4\u660E">
340
+ <span><i aria-hidden="true"></i>\u4EC5\u5728\u672C\u673A\u4F20\u8F93</span>
341
+ <span><i aria-hidden="true"></i>\u4E00\u6B21\u6027\u5B89\u5168\u4F1A\u8BDD</span>
342
+ <span><i aria-hidden="true"></i>\u4E0D\u7ECF\u8FC7 AI \u6A21\u578B</span>
343
+ </div>
344
+ </section>
345
+ <aside class="network-panel" aria-label="\u517C\u5BB9\u4E0D\u540C\u5927\u6A21\u578B\u7684\u8FDE\u63A5\u793A\u610F">
346
+ <div class="network-copy"><span>UNIVERSAL MODEL ACCESS</span><strong>\u4EFB\u610F\u6A21\u578B\uFF0C\u4E00\u4E2A\u5165\u53E3</strong></div>
347
+ <div class="model-network" aria-hidden="true">
348
+ <div class="orbit orbit-outer"></div><div class="orbit orbit-inner"></div>
349
+ <span class="beam beam-a"></span><span class="beam beam-b"></span><span class="beam beam-c"></span>
350
+ <div class="core-node"><span>GEO</span><i></i></div>
351
+ <span class="model-node node-a"><i></i></span><span class="model-node node-b"><i></i></span>
352
+ <span class="model-node node-c"><i></i></span><span class="model-node node-d"><i></i></span>
353
+ <span class="model-node node-e"><i></i></span><span class="model-node node-f"><i></i></span>
354
+ </div>
355
+ <p class="network-footnote"><span></span>MODEL-AGNOSTIC CONNECTION LAYER</p>
356
+ </aside>
357
+ </main>
85
358
  <script>${t}</script>
86
359
  </body>
87
- </html>`,scriptHash:t}}var $t=256,Nt=4*1024;async function Me(){let e=(0,w.randomBytes)(16).toString("hex"),t=(0,w.randomBytes)(16).toString("hex"),n=(0,w.randomBytes)(16).toString("hex"),{html:r,scriptHash:i}=Le(t),s=(0,w.createHash)("sha256").update(i).digest("base64"),o=null,d=new Promise((g,f)=>{o={resolve:g,reject:f}});d.catch(()=>{});let m=!1,u=(0,Ue.createServer)((g,f)=>{b(g,f).catch(()=>{f.writeHead(500,{"Content-Type":"application/json"}),f.end(JSON.stringify({ok:!1,message:"internal error"}))})});async function b(g,f){var pe,me,fe,ge,ye;let Y=new URL((pe=g.url)!=null?pe:"/","http://127.0.0.1");if(g.method==="GET"&&Y.pathname==="/"){if(Y.searchParams.get("state")!==e){f.writeHead(404).end();return}f.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Content-Security-Policy":["default-src 'none'",`script-src 'sha256-${s}'`,"style-src 'unsafe-inline'","connect-src 'self'","form-action 'none'","base-uri 'none'","frame-ancestors 'none'"].join("; "),"Set-Cookie":`bg_session=${n}; HttpOnly; SameSite=Strict; Path=/`,"Cache-Control":"no-store","Referrer-Policy":"no-referrer"}),f.end(r);return}if(g.method==="POST"&&Y.pathname==="/submit"){let It=g.headers.origin,kt=`http://127.0.0.1:${u.address().port}`;if(It!==kt){S(f,403,{ok:!1,message:"origin rejected"});return}if(!Pt(String((me=g.headers["x-csrf-token"])!=null?me:""),t)){S(f,403,{ok:!1,message:"csrf rejected"});return}if(!String((fe=g.headers.cookie)!=null?fe:"").includes(`bg_session=${n}`)){S(f,403,{ok:!1,message:"session rejected"});return}if(!String((ge=g.headers["content-type"])!=null?ge:"").includes("application/json")){S(f,415,{ok:!1,message:"content-type rejected"});return}if(m){S(f,409,{ok:!1,message:"already submitted"});return}let he=await Tt(g);if(he==null){S(f,413,{ok:!1,message:"body too large"});return}let K="";try{K=String((ye=JSON.parse(he).key)!=null?ye:"").trim()}catch{S(f,400,{ok:!1,message:"invalid json"});return}if(!K||K.length>$t){S(f,400,{ok:!1,message:"invalid key"});return}m=!0,S(f,200,{ok:!0}),o==null||o.resolve(K),setTimeout(()=>W(),200).unref();return}f.writeHead(404).end()}if(process.env.BEST_GEO_TEST_FORCE_LISTEN_ERROR==="1")throw Object.assign(new Error("listen EACCES: permission denied 127.0.0.1"),{code:"EACCES"});u.on("error",g=>{o==null||o.reject(g)}),await new Promise((g,f)=>{u.once("error",f),u.listen(0,"127.0.0.1",()=>{u.removeListener("error",f),g()})});let k=u.address().port,de=setTimeout(()=>{o==null||o.reject(new Error("LOCAL_INTAKE_TIMEOUT")),W()},Se);de.unref();let le=!1;function W(){var g;le||(le=!0,clearTimeout(de),(g=u.closeAllConnections)==null||g.call(u),u.close())}return{url:`http://127.0.0.1:${k}/?state=${e}`,waitForKey:d,close:W}}function S(e,t,n){e.writeHead(t,{"Content-Type":"application/json","Cache-Control":"no-store"}),e.end(JSON.stringify(n))}async function Tt(e){let t=[],n=0;for await(let r of e){if(n+=r.length,n>Nt)return null;t.push(r)}return Buffer.concat(t).toString("utf8")}function Pt(e,t){let n=Buffer.from(e),r=Buffer.from(t);return n.length===r.length&&(0,w.timingSafeEqual)(n,r)}async function V(){let e=Te();if(!e)return null;let t=await je(e.apiKey);return t.ok?(ie({userId:t.data.user.id,agentId:t.data.agentId,companyIds:t.data.companyIds}),null):ne(t)?(re(),null):c("SERVER_ERROR",`\u672C\u673A\u6709\u4E00\u4EFD\u5F85\u786E\u8BA4\u7684\u6388\u6743\uFF0C\u6682\u65F6\u65E0\u6CD5\u4E0E\u670D\u52A1\u7AEF\u786E\u8BA4\uFF1A${t.message}`,{requestId:t.requestId,nextAction:{type:"ask_user",message:"\u7F51\u7EDC\u6062\u590D\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u5373\u53EF\u81EA\u52A8\u6536\u655B\uFF1B\u5728\u6B64\u4E4B\u524D\u4E0D\u8981\u91CD\u65B0\u767B\u5F55\uFF0C\u4E5F\u4E0D\u8981\u5220\u9664\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u3002"}})}async function qe(){var m;let e=H(),t=await V();if(t){a(t);return}let n=$(),r;try{r=await Me()}catch(u){a(c("HOST_PERMISSION_REQUIRED",`\u65E0\u6CD5\u5728\u672C\u673A\u542F\u52A8\u5F55\u5165\u670D\u52A1\uFF1A${Lt(u)}`,{nextAction:{type:"request_host_approval",message:"Best GEO \u9700\u8981\u5728 127.0.0.1 \u4E0A\u76D1\u542C\u4E00\u4E2A\u968F\u673A\u7AEF\u53E3\u6765\u63A5\u6536\u7528\u6237\u7C98\u8D34\u7684\u5BC6\u94A5\uFF08\u4E0D\u5BF9\u5916\u66B4\u9732\uFF09\u3002\u8BF7\u7528\u5F53\u524D\u5DE5\u5177\u7684\u6743\u9650\u786E\u8BA4\u673A\u5236\u6388\u6743\u672C\u673A\u56DE\u73AF\u7AEF\u53E3\u76D1\u542C\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u3002",capability:"loopback_port",command:`${l} auth login`}}));return}Dt(r.url);let i=`[${l}]`;process.stderr.write(`${i} auth login \u5DF2\u542F\u52A8\u672C\u673A\u5F55\u5165\u670D\u52A1\uFF0C\u4F1A\u963B\u585E\u7B49\u5F85\u7528\u6237\u7C98\u8D34\u5BC6\u94A5\uFF0C\u6700\u957F 5 \u5206\u949F\u3002
88
- ${i} \u8C03\u7528\u65B9\u8BF7\u4FDD\u6301\u672C\u8FDB\u7A0B\u8FD0\u884C\u76F4\u5230\u5B83\u81EA\u884C\u9000\u51FA\uFF0C\u4E0D\u8981\u4E2D\u65AD\u3001\u4E0D\u8981\u8F6C\u4EA4\u7ED9\u7528\u6237\u5728\u522B\u5904\u6267\u884C\uFF1B
89
- ${i} \u8FDB\u7A0B\u9000\u51FA\u65F6 stdout \u4F1A\u7ED9\u51FA\u552F\u4E00\u4E00\u4E2A JSON \u7ED3\u679C\uFF0C\u90A3\u65F6\u518D\u5411\u7528\u6237\u6C47\u62A5\u6210\u8D25\u3002
90
- ${i} \u73B0\u5728\u8BF7\u628A\u4E0B\u9762\u8FD9\u4E2A\u5730\u5740\u8F6C\u8FBE\u7ED9\u7528\u6237\uFF0C\u8BA9\u4ED6\u5728\u6D4F\u89C8\u5668\u91CC\u6253\u5F00\u5E76\u7C98\u8D34\u5BC6\u94A5\uFF08\u5BC6\u94A5\u4E0D\u8981\u7ECF\u8FC7\u4F60\uFF09\uFF1A
91
- `),process.stderr.write(`${i} \u672C\u5730\u9875\u9762\uFF1A${r.url}
92
- `),n&&process.stderr.write(`${i} \u672C\u673A\u5DF2\u6709\u4E00\u4EFD\u6388\u6743\uFF0C\u5F55\u5165\u65B0\u5BC6\u94A5\u4F1A\u66FF\u6362\u5B83\u3002
93
- `);let s;try{s=await r.waitForKey}catch{r.close(),a(c("AUTH_REQUIRED","\u672C\u5730\u5F55\u5165\u8D85\u65F6\u6216\u88AB\u53D6\u6D88",{nextAction:{type:"auth_login",message:"\u7528\u6237\u5728 5 \u5206\u949F\u5185\u6CA1\u6709\u5B8C\u6210\u7C98\u8D34\u3002\u5148\u95EE\u6E05\u4ED6\u662F\u5426\u5DF2\u7ECF\u62FF\u5230\u5BC6\u94A5\uFF0C\u518D\u7531\u4F60\u91CD\u65B0\u6267\u884C command\uFF0C\u5E76\u628A\u65B0\u7684\u672C\u5730\u9875\u9762\u5730\u5740\u8F6C\u8FBE\u7ED9\u4ED6\u3002",command:`${l} auth login`}}));return}process.stderr.write(`${i} \u5DF2\u6536\u5230\u5BC6\u94A5\uFF0C\u672C\u673A\u5F55\u5165\u670D\u52A1\u5DF2\u5173\u95ED\uFF0C\u6B63\u5728\u5411\u670D\u52A1\u7AEF\u6821\u9A8C\u5E76\u7ED1\u5B9A\u672C\u673A\uFF0C\u8BF7\u7EE7\u7EED\u7B49\u5F85\u672C\u8FDB\u7A0B\u9000\u51FA\u3002
94
- `),Pe(s);let o=await je(s);if(!o.ok){ne(o)?re():process.stderr.write(`${i} \u672A\u80FD\u786E\u8BA4\u7ED1\u5B9A\u7ED3\u679C\uFF0C\u5DF2\u4FDD\u7559\u8FD9\u628A\u5F85\u786E\u8BA4\u7684\u5BC6\u94A5\u3002\u7F51\u7EDC\u6062\u590D\u540E\u6267\u884C\u4EFB\u610F ${l} \u547D\u4EE4\u5373\u53EF\u81EA\u52A8\u6536\u655B\u3002
95
- `),a(o);return}let d=ie({userId:o.data.user.id,agentId:o.data.agentId,companyIds:o.data.companyIds});a(E({user:o.data.user,device:o.data.device,companyIds:(m=d==null?void 0:d.companyIds)!=null?m:o.data.companyIds,replacedPreviousAuthorization:o.data.replacedPreviousAuthorization,configPath:C()},o.requestId))}async function Ke(){let e=await V();if(e){a(e);return}let t=$();if(!t){a(Be());return}let n=await y("/companies",{apiKey:t,query:{page:1,limit:100}});if(!n.ok){a(n);return}let r=H();a(E({loggedIn:!0,device:{deviceId:r.deviceId,deviceName:r.deviceName,platform:r.platform},user:J()?{id:J().userId,agentId:J().agentId}:null,companies:n.data.data.map(i=>({id:i.id,name:i.name})),configPath:C()},n.requestId))}async function Fe(){let e=await V();if(e){a(e);return}let t=$();if(!t){a(Be());return}let n=await y("/auth/logout",{method:"POST",apiKey:t});if(!n.ok){a(n);return}De(),a(E({loggedOut:!0,revoked:n.data,note:"\u670D\u52A1\u7AEF\u5BC6\u94A5\u5DF2\u64A4\u9500\uFF0C\u672C\u673A\u51ED\u636E\u5DF2\u6E05\u9664\u3002\u8BBE\u5907\u8EAB\u4EFD\u4FDD\u7559\uFF0C\u91CD\u65B0\u767B\u5F55\u4F1A\u590D\u7528\u540C\u4E00\u53F0\u8BBE\u5907\u3002"},n.requestId))}function Be(){return c("AUTH_REQUIRED","\u672C\u673A\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u6388\u6743",{nextAction:{type:"auth_login",message:"\u5148\u8BA9\u7528\u6237\u5230\u6240\u5C5E SaaS \u7F51\u9875\u7684\u5BC6\u94A5\u7BA1\u7406\u91CC\u521B\u5EFA\u300CAI \u52A9\u624B\u5BC6\u94A5\u300D\u5E76\u9009\u597D\u6388\u6743\u516C\u53F8\uFF1B\u7136\u540E\u7531\u4F60\u76F4\u63A5\u6267\u884C command\uFF0C\u5B83\u4F1A\u963B\u585E\u6700\u957F 5 \u5206\u949F\u7B49\u5F85\u7528\u6237\u5728\u672C\u673A\u9875\u9762\u7C98\u8D34\u5BC6\u94A5\u3002\u6267\u884C\u671F\u95F4\u628A stderr \u91CC\u7684\u672C\u5730\u9875\u9762\u5730\u5740\u8F6C\u8FBE\u7ED9\u7528\u6237\uFF0C\u4FDD\u6301\u8FDB\u7A0B\u8FD0\u884C\u76F4\u5230\u5B83\u81EA\u884C\u9000\u51FA\uFF0C\u4E0D\u8981\u4E2D\u65AD\uFF0C\u4E5F\u4E0D\u8981\u8BA9\u7528\u6237\u5728\u522B\u5904\u6267\u884C\u3002",command:`${l} auth login`}})}function je(e){let t=H();return y("/auth/claim",{method:"POST",apiKey:e,body:{...t,cliVersion:h}})}function Dt(e){if(process.env.BEST_GEO_NO_BROWSER==="1")return;let t=process.platform==="darwin"?"open":process.platform==="win32"?"cmd":"xdg-open",n=process.platform==="win32"?["/c","start","",e]:[e];(0,Ve.execFile)(t,n,()=>{})}function Lt(e){return e instanceof Error?e.message:String(e)}async function q(){let e=await V();if(e)return{ok:!1,envelope:e};let t=$();return t?{ok:!0,apiKey:t}:{ok:!1,envelope:c("AUTH_REQUIRED","\u672C\u673A\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u6388\u6743",{nextAction:{type:"auth_login",message:"\u5148\u8BA9\u7528\u6237\u5230\u6240\u5C5E SaaS \u7F51\u9875\u7684\u5BC6\u94A5\u7BA1\u7406\u91CC\u521B\u5EFA\u300CAI \u52A9\u624B\u5BC6\u94A5\u300D\u5E76\u9009\u597D\u6388\u6743\u516C\u53F8\uFF1B\u7136\u540E\u7531\u4F60\u76F4\u63A5\u6267\u884C command\uFF0C\u5B83\u4F1A\u963B\u585E\u6700\u957F 5 \u5206\u949F\u7B49\u5F85\u7528\u6237\u5728\u672C\u673A\u9875\u9762\u7C98\u8D34\u5BC6\u94A5\u3002",command:`${l} auth login`}})}}var He=require("node:fs"),N=require("node:path"),Je=require("node:url");function Ut(e){if(e.cjsDir)return(0,N.join)(e.cjsDir,"..");if(!e.moduleUrl)throw new Error("\u7F3A\u5C11 CLI \u8FD0\u884C\u4F4D\u7F6E");return(0,N.join)((0,N.dirname)((0,Je.fileURLToPath)(e.moduleUrl)),"..","..","..")}function Mt(){return Ut({cjsDir:typeof __dirname=="string"?__dirname:void 0,moduleUrl:void 0})}function T(...e){return(0,He.readFileSync)((0,N.join)(Mt(),...e),"utf8")}function ze(){a(E({package:O,version:h,protocolVersion:D,commands:[{command:`${l} version --check`,description:"\u68C0\u67E5\u7248\u672C\u662F\u5426\u9700\u8981\u5347\u7EA7"},{command:`${l} capabilities`,description:"\u5217\u51FA\u53EF\u7528\u80FD\u529B\u53CA\u5176\u8F93\u5165 schema"},{command:`${l} skill get --raw > <\u4F60\u7684 skill \u76EE\u5F55>/best-geo/SKILL.md`,description:"\u76F4\u63A5\u628A Skill \u5199\u6210\u6587\u4EF6\uFF08\u63A8\u8350\uFF1B--raw \u8F93\u51FA markdown \u539F\u6587\uFF0C\u4E0D\u662F JSON\uFF09"},{command:`${l} skill get`,description:"\u4EE5 JSON \u4FE1\u5C01\u8FD4\u56DE Skill \u5185\u5BB9\u548C revision"},{command:`${l} guide list`,description:"\u5217\u51FA\u4E1A\u52A1\u6307\u5357"},{command:`${l} guide get <name>`,description:"\u8BFB\u53D6\u4E00\u4EFD\u4E1A\u52A1\u6307\u5357"},{command:`${l} auth login`,description:"\u6253\u5F00\u672C\u5730\u9875\u9762\u5F55\u5165\u5BC6\u94A5\u5E76\u7ED1\u5B9A\u672C\u673A"},{command:`${l} auth status`,description:"\u67E5\u770B\u5F53\u524D\u6388\u6743\u72B6\u6001"},{command:`${l} auth logout`,description:"\u64A4\u9500\u670D\u52A1\u7AEF\u5BC6\u94A5\u5E76\u6E05\u9664\u672C\u673A\u51ED\u636E"},{command:`${l} call <capability> --input '<JSON>'`,description:"\u8C03\u7528\u4E00\u4E2A\u67E5\u8BE2\u80FD\u529B"},{command:`${l} plan <operation> --input '<JSON>'`,description:"\u751F\u6210\u5199\u64CD\u4F5C\u8BA1\u5212\uFF0C\u8FD4\u56DE\u7ED9\u7528\u6237\u770B\u7684\u53D8\u66F4\u6458\u8981\uFF08\u4E0D\u5199\u6570\u636E\uFF09"},{command:`${l} apply <planId>`,description:"\u6267\u884C\u8BA1\u5212\u3002\u5FC5\u987B\u5148\u628A plan \u7684\u6458\u8981\u7ED9\u7528\u6237\u770B\u8FC7\u5E76\u5F97\u5230\u540C\u610F"}],nextAction:{type:"install_skill",command:`${l} skill get --raw`,message:"\u6309\u5F53\u524D AI \u5DE5\u5177\u7684 Skill \u673A\u5236\u9009\u4E00\u4E2A\u5B89\u88C5\u76EE\u5F55\uFF0C\u7528 best-geo skill get --raw \u628A\u5185\u5BB9\u76F4\u63A5\u91CD\u5B9A\u5411\u6210 SKILL.md\uFF0C\u7136\u540E\u52A0\u8F7D\u5B83"}}))}async function Qe(e){if(!e){a(E({package:O,version:h,protocolVersion:D,env:Ae,apiBase:B}));return}let t=await y("/meta");if(!t.ok){a(t);return}if(Ge(h,t.data.minimumCliVersion)<0){a(c("CLI_UPDATE_REQUIRED",`\u5F53\u524D\u7248\u672C ${h} \u4F4E\u4E8E\u6700\u4F4E\u8981\u6C42 ${t.data.minimumCliVersion}`,{requestId:t.requestId,data:{current:h,...t.data},nextAction:{type:"upgrade",message:"\u5347\u7EA7\u540E\u91CD\u8BD5",command:`npm install -g ${O}@latest`}}));return}a(E({current:h,...t.data,updateAvailable:Ge(h,t.data.latestCliVersion)<0},t.requestId))}function Xe(){a(E(JSON.parse(T("capabilities","capabilities.json"))))}function We(e){let t=et(T("skills","best-geo","SKILL.md"));if(e){process.stdout.write(t);return}a(E({name:l,revision:1,content:t}))}var oe=["company","product","question","article","knowledge","material","question-task","article-task","scheduled-monitor","publication"];function Ye(){a(E({guides:oe.map(e=>{let t=JSON.parse(T("guides",`${e}.json`));return{name:t.name,title:t.title,whenToUse:t.whenToUse}})}))}function Ze(e){if(!oe.includes(e)){a(c("GUIDE_NOT_FOUND",`\u6CA1\u6709\u540D\u4E3A ${e} \u7684\u6307\u5357`,{data:{available:oe}}));return}a(E(JSON.parse(et(T("guides",`${e}.json`)))))}function Ge(e,t){var i,s;let n=e.split(".").map(o=>Number.parseInt(o,10)||0),r=t.split(".").map(o=>Number.parseInt(o,10)||0);for(let o=0;o<Math.max(n.length,r.length);o+=1){let d=((i=n[o])!=null?i:0)-((s=r[o])!=null?s:0);if(d!==0)return d<0?-1:1}return 0}function et(e){return l==="best-geo"?e:e.replace(/\bbest-geo\b(?!-)/g,l)}var se=null,ae=null;function tt(){return se===null&&(se=JSON.parse(T("capabilities","capabilities.json")).capabilities),se}function Vt(){return ae===null&&(ae=new Map(tt().filter(e=>e.inputSchema!==void 0).map(e=>[e.name,e.inputSchema]))),ae}function nt(){return tt().filter(e=>e.mode==="write").map(e=>e.name)}function z(e,t){let n=Vt().get(e);return n===void 0?[]:ue(t,n,"")}function ue(e,t,n){if(t.type==="object"||t.properties!==void 0)return qt(e,t,n);let r=rt(e,t,n);if(r!==null)return[r];let i=[];return typeof e=="string"&&t.minLength!==void 0&&e.length<t.minLength&&i.push(t.minLength===1?`${n} \u4E0D\u80FD\u662F\u7A7A\u5B57\u7B26\u4E32`:`${n} \u81F3\u5C11 ${t.minLength} \u4E2A\u5B57\u7B26\uFF0C\u5F53\u524D ${e.length} \u4E2A`),typeof e=="string"&&t.maxLength!==void 0&&e.length>t.maxLength&&i.push(`${n} \u6700\u591A ${t.maxLength} \u4E2A\u5B57\u7B26\uFF0C\u5F53\u524D ${e.length} \u4E2A`),typeof e=="number"&&(t.maximum!==void 0&&e>t.maximum&&i.push(`${n} \u4E0D\u80FD\u5927\u4E8E ${t.maximum}`),t.minimum!==void 0&&e<t.minimum&&i.push(`${n} \u4E0D\u80FD\u5C0F\u4E8E ${t.minimum}`)),t.enum!==void 0&&!t.enum.includes(e)&&i.push(`${n} \u53EA\u80FD\u662F ${t.enum.join(" / ")} \u4E4B\u4E00\uFF0C\u6536\u5230 ${v(e)}`),Array.isArray(e)&&(t.minItems!==void 0&&e.length<t.minItems&&i.push(`${n} \u81F3\u5C11\u8981 ${t.minItems} \u9879\uFF0C\u5F53\u524D ${e.length} \u9879`),t.maxItems!==void 0&&e.length>t.maxItems&&i.push(`${n} \u6700\u591A ${t.maxItems} \u9879\uFF0C\u5F53\u524D ${e.length} \u9879`),t.items!==void 0&&e.forEach((s,o)=>{i.push(...ue(s,t.items,`${n}[${o}]`))})),i}function qt(e,t,n){var d,m;if(typeof e!="object"||e===null||Array.isArray(e))return[`${n||"\u5165\u53C2"} \u5FC5\u987B\u662F\u5BF9\u8C61`];let r=e,i=(d=t.properties)!=null?d:{},s=(m=t.required)!=null?m:[],o=[];for(let u of s)(r[u]===void 0||r[u]===null)&&o.push(`\u7F3A\u5C11\u5FC5\u586B\u5B57\u6BB5 ${ce(n,u)}`);if(t.additionalProperties===!1){let u=Object.keys(i);for(let b of Object.keys(r))u.includes(b)||o.push(`\u4E0D\u8BA4\u8BC6\u7684\u5B57\u6BB5 ${ce(n,b)}\uFF0C\u53EF\u7528\u5B57\u6BB5\uFF1A${u.join("\u3001")}`)}for(let[u,b]of Object.entries(i)){let k=r[u];k===void 0||k===null&&s.includes(u)||o.push(...ue(k,b,ce(n,u)))}return o}function rt(e,t,n){if(Array.isArray(t.type)){let r=t.type.map(i=>rt(e,{...t,type:i},n));return r.some(i=>i===null)?null:r[0]}switch(t.type){case"null":return e===null?null:`${n} \u5FC5\u987B\u662F null\uFF0C\u6536\u5230 ${v(e)}`;case"string":return typeof e=="string"?null:`${n} \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\uFF0C\u6536\u5230 ${v(e)}`;case"number":return typeof e=="number"&&Number.isFinite(e)?null:`${n} \u5FC5\u987B\u662F\u6570\u5B57\uFF0C\u6536\u5230 ${v(e)}`;case"integer":return typeof e=="number"&&Number.isInteger(e)?null:`${n} \u5FC5\u987B\u662F\u6574\u6570\uFF0C\u6536\u5230 ${v(e)}`;case"boolean":return typeof e=="boolean"?null:`${n} \u5FC5\u987B\u662F true \u6216 false\uFF0C\u6536\u5230 ${v(e)}`;case"array":return Array.isArray(e)?null:`${n} \u5FC5\u987B\u662F\u6570\u7EC4\uFF0C\u6536\u5230 ${v(e)}`;default:return null}}function ce(e,t){return e===""?t:`${e}.${t}`}function v(e){if(e===null)return"null";if(Array.isArray(e))return"\u6570\u7EC4";if(typeof e=="object")return"\u5BF9\u8C61";let t=String(e);return typeof e=="string"?`\u5B57\u7B26\u4E32 "${Kt(t)}"`:t}function Kt(e){return e.length>20?`${e.slice(0,20)}\u2026`:e}function Q(e,t){return c("VALIDATION_FAILED",`\u5165\u53C2\u4E0D\u5408\u6CD5\uFF1A${t.join("\uFF1B")}`,{data:{name:e,errors:t},nextAction:{type:"ask_user",message:"\u6309 capabilities \u91CC\u7684 inputSchema \u4FEE\u6B63\u53C2\u6570\u540E\u91CD\u8BD5\uFF1B\u7F3A\u7684\u4FE1\u606F\u95EE\u7528\u6237"}})}var it={"companies.list":e=>({path:"/companies",query:e}),"companies.get":e=>({path:`/companies/${Number(e.id)}`}),"products.list":e=>({path:"/products",query:e}),"products.get":e=>({path:`/products/${Number(e.id)}`}),"questions.list":e=>({path:"/questions",query:e}),"questions.get":e=>({path:`/questions/${Number(e.id)}`}),"articles.list":e=>({path:"/articles",query:e}),"articles.get":e=>({path:`/articles/${Number(e.id)}`,query:e.withContent===!0?{withContent:"true"}:void 0}),"knowledge.list":e=>({path:"/knowledge",query:e}),"knowledge.get":e=>({path:`/knowledge/${Number(e.id)}`}),"images.list":e=>({path:"/images",query:e}),"images.get":e=>({path:`/images/${Number(e.id)}`}),"videos.list":e=>({path:"/videos",query:e}),"videos.get":e=>({path:`/videos/${Number(e.id)}`}),"prompts.list":e=>({path:"/prompts",query:e}),"models.list":e=>({path:"/models",query:e}),"questionTasks.list":e=>({path:"/question-tasks",query:e}),"questionTasks.get":e=>({path:`/question-tasks/${Number(e.taskId)}`}),"articleTasks.list":e=>({path:"/article-tasks",query:e}),"articleTasks.get":e=>({path:`/article-tasks/${Number(e.taskId)}`}),"keywordTasks.list":e=>({path:"/keyword-tasks",query:e}),"keywordTasks.get":e=>({path:`/keyword-tasks/${Number(e.taskId)}`}),"tags.list":e=>({path:"/tags",query:e}),"folders.list":e=>({path:"/article-folders",query:e}),"publicationPlatforms.list":e=>({path:"/publication-platforms",query:e}),"publicationAccounts.list":e=>({path:"/publication-accounts",query:e}),"publicationTasks.list":e=>({path:"/publication-tasks",query:e}),"publicationRecords.list":e=>({path:"/publication-records",query:e}),"mediaPlatforms.list":e=>({path:"/media-platforms",query:e}),"mediaPlatforms.get":e=>({path:`/media-platforms/${Number(e.mediaId)}`}),"mediaPublications.list":e=>({path:"/media-publications",query:e}),"mediaPublications.summary":e=>({path:"/media-publications/summary",query:e}),"articleTasks.reuseConfig":e=>({path:`/article-tasks/${Number(e.taskId)}/reuse-config`}),"scheduledSentiment.generateQuestions":e=>({path:"/scheduled-sentiment/generate-questions",method:"POST",body:e}),"indexing.suggestCompetitors":e=>({path:"/suggest-competitors",method:"POST",body:e}),"indexingPlatforms.list":()=>({path:"/indexing-platforms"}),"scheduledIndexing.list":e=>({path:"/scheduled-indexing",query:e}),"scheduledIndexing.get":e=>({path:`/scheduled-indexing/${Number(e.planId)}`}),"scheduledIndexing.runs":e=>({path:`/scheduled-indexing/${Number(e.planId)}/runs`,query:I(e)}),"scheduledIndexing.metrics":e=>({path:`/scheduled-indexing/${Number(e.planId)}/metrics`,query:I(e)}),"scheduledSentiment.list":e=>({path:"/scheduled-sentiment",query:e}),"scheduledSentiment.get":e=>({path:`/scheduled-sentiment/${Number(e.planId)}`}),"scheduledSentiment.runs":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/runs`,query:I(e)}),"scheduledSentiment.metrics":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/metrics`,query:I(e)}),"scheduledIndexing.answers":e=>({path:`/scheduled-indexing/${Number(e.planId)}/answers`,query:I(e)}),"scheduledIndexing.citations":e=>({path:`/scheduled-indexing/${Number(e.planId)}/citations`,query:I(e)}),"scheduledIndexing.topicStats":e=>({path:`/scheduled-indexing/${Number(e.planId)}/topic-stats`,query:I(e)}),"scheduledIndexing.topicPlatformMatrix":e=>({path:`/scheduled-indexing/${Number(e.planId)}/topic-platform-matrix`,query:I(e)}),"scheduledSentiment.answers":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/answers`,query:I(e)}),"scheduledSentiment.citations":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/citations`,query:I(e)}),"scheduledSentiment.topicStats":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/topic-stats`,query:I(e)})};function I(e){let{planId:t,...n}=e;return n}function Ft(){return Object.keys(it)}async function ot(e,t){let n=it[e];if(!n){a(c("VALIDATION_FAILED",`\u672A\u77E5\u80FD\u529B\uFF1A${e}`,{data:{available:Ft()},nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo capabilities \u67E5\u770B\u53EF\u7528\u80FD\u529B"}}));return}let r={};if(t)try{r=JSON.parse(t)}catch{a(c("VALIDATION_FAILED","--input \u4E0D\u662F\u5408\u6CD5 JSON"));return}let i=z(e,r);if(i.length>0){a(Q(e,i));return}let s=await q();if(!s.ok){a(s.envelope);return}let{path:o,query:d,method:m,body:u}=n(r);a(await y(o,{apiKey:s.apiKey,query:d,method:m,body:u}))}var R=require("node:fs"),P=require("node:path");var Bt={image:{maxBytes:2*1024*1024,extensions:[".png",".jpg",".jpeg"],label:"\u56FE\u7247"},video:{maxBytes:200*1024*1024,extensions:[".mp4"],label:"\u89C6\u9891"},thumbnail:{maxBytes:5*1024*1024,extensions:[".png",".jpg",".jpeg"],label:"\u5C01\u9762\u56FE"}},jt={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".mp4":"video/mp4"},st={"images.create":[{pathKey:"filePath",metaKey:"file",uploadField:"fileUrl",kind:"image"}],"videos.create":[{pathKey:"videoPath",metaKey:"video",uploadField:"videoUrl",kind:"video"},{pathKey:"thumbnailPath",metaKey:"thumbnail",uploadField:"thumbnail",kind:"thumbnail"}]},Gt=900*1e3;function at(e){return st[e]!==void 0}function ct(e){return M()[e]!==void 0}function ut(e,t){var s;let n=(s=st[e])!=null?s:[],r={...t},i={};for(let o of n){let d=t[o.pathKey];if(typeof d!="string"||!d.trim())return{ok:!1,envelope:zt(o)};let m=(0,P.resolve)(d.trim()),u=Jt(m,o);if(!u.ok)return{ok:!1,envelope:u.envelope};delete r[o.pathKey],r[o.metaKey]={name:(0,P.basename)(m),size:u.size},i[o.uploadField]=m}return{ok:!0,input:r,paths:i}}function dt(e,t){te({...M(),[e]:{paths:t,createdAt:Date.now()}})}async function lt(e,t){let n=M()[e];if(!n)return{ok:!1,envelope:c("VALIDATION_FAILED","\u672C\u673A\u6CA1\u6709\u8FD9\u4E2A\u8BA1\u5212\u7684\u5F85\u4F20\u6587\u4EF6\u8BB0\u5F55",{nextAction:{type:"ask_user",message:"\u91CD\u65B0\u6267\u884C best-geo plan \u751F\u6210\u8BA1\u5212\uFF0C\u628A\u6458\u8981\u7ED9\u7528\u6237\u786E\u8BA4\u540E\u518D apply\u2014\u2014\u8BA1\u5212\u548C\u5F85\u4F20\u6587\u4EF6\u662F\u4E00\u8D77\u751F\u6210\u7684"}})};let r={};for(let[i,s]of Object.entries(n.paths)){if(!(0,R.existsSync)(s))return{ok:!1,envelope:c("VALIDATION_FAILED",`\u6587\u4EF6\u5DF2\u7ECF\u4E0D\u5728\u4E86\uFF1A${s}`)};let o=await y(`/plans/${encodeURIComponent(e)}/uploads/presign`,{method:"POST",apiKey:t,body:{field:i,fileName:(0,P.basename)(s)}});if(!o.ok)return{ok:!1,envelope:o};let d=await Ht(o.data,s);if(!d.ok)return{ok:!1,envelope:d.envelope};r[i]=o.data.uploadUrl}return{ok:!0,uploads:r}}function pt(e){let t=M();delete t[e],te(t)}async function Ht(e,t){let n=jt[mt(t)];if(!n)return{ok:!1,envelope:c("UPLOAD_FAILED",`${t} \u7684\u6587\u4EF6\u7C7B\u578B\u6CA1\u6709\u767B\u8BB0 MIME\uFF0C\u4F20\u4E0D\u4E86`)};let r=new FormData;r.append("key",e.key),r.append("policy",e.policy),r.append("OSSAccessKeyId",e.OSSAccessKeyId),r.append("signature",e.signature),r.append("callback",e.callback),r.append("Content-Disposition",e["Content-Disposition"]),r.append("success_action_status","200"),r.append("file",await(0,R.openAsBlob)(t,{type:n}),(0,P.basename)(t));try{let i=await fetch(e.host,{method:"POST",body:r,signal:AbortSignal.timeout(Gt)}),s=(await i.text().catch(()=>"")).slice(0,300);if(!i.ok)return{ok:!1,envelope:c("UPLOAD_FAILED",`\u4E0A\u4F20\u5931\u8D25\uFF08HTTP ${i.status}\uFF09\uFF1A${s}`,{nextAction:{type:"ask_user",message:"\u628A\u8FD9\u4E2A\u60C5\u51B5\u544A\u8BC9\u7528\u6237\uFF0C\u7A0D\u540E\u91CD\u65B0\u6267\u884C\u4E00\u6B21 plan \u518D\u8BD5"}})};let o=Qt(s);return o?{ok:!1,envelope:c("UPLOAD_FAILED",`\u6587\u4EF6\u5DF2\u4E0A\u4F20\uFF0C\u4F46\u767B\u8BB0\u5931\u8D25\uFF1A${o}`,{nextAction:{type:"ask_user",message:"\u628A\u8FD9\u53E5\u62A5\u9519\u539F\u6837\u544A\u8BC9\u7528\u6237\uFF0C\u8BA9\u4ED6\u8054\u7CFB\u670D\u52A1\u5546\u3002\u91CD\u8BD5\u591A\u534A\u4E0D\u4F1A\u597D\u3002"}})}:{ok:!0}}catch(i){return{ok:!1,envelope:c("UPLOAD_FAILED",`\u4E0A\u4F20\u4E2D\u65AD\uFF1A${i instanceof Error?i.message:String(i)}`,{nextAction:{type:"ask_user",message:"\u4E0A\u4F20\u6CA1\u80FD\u5B8C\u6210\uFF0C\u539F\u56E0\u89C1\u4E0A\u9762\u7684\u62A5\u9519\u539F\u6587\u3002\u544A\u8BC9\u7528\u6237\uFF0C\u7A0D\u540E\u91CD\u65B0\u8D70\u4E00\u904D"}})}}}function Jt(e,t){let n=Bt[t.kind];if(!(0,R.existsSync)(e))return{ok:!1,envelope:c("VALIDATION_FAILED",`\u627E\u4E0D\u5230\u6587\u4EF6\uFF1A${e}`,{nextAction:{type:"ask_user",message:"\u8BA9\u7528\u6237\u786E\u8BA4\u6587\u4EF6\u8DEF\u5F84\u3002\u76F8\u5BF9\u8DEF\u5F84\u662F\u76F8\u5BF9\u4F60\u5F53\u524D\u7684\u5DE5\u4F5C\u76EE\u5F55\u7B97\u7684"}})};let r=(0,R.statSync)(e);if(!r.isFile())return{ok:!1,envelope:c("VALIDATION_FAILED",`${e} \u4E0D\u662F\u4E00\u4E2A\u6587\u4EF6`)};let i=mt(e);return n.extensions.includes(i)?r.size>n.maxBytes?{ok:!1,envelope:c("VALIDATION_FAILED",`${n.label}\u6700\u5927 ${X(n.maxBytes)}\uFF0C\u5F53\u524D ${X(r.size)}\uFF0C\u8D85\u51FA ${X(r.size-n.maxBytes)}`,{nextAction:{type:"ask_user",message:`\u544A\u8BC9\u7528\u6237\u8FD9\u4E2A\u6587\u4EF6\u8D85\u4E86\u591A\u5C11\uFF0C\u5E76\u95EE\u4ED6\u8981\u4E0D\u8981\u4F60\u5148\u628A\u5B83\u538B\u5230 ${X(n.maxBytes)} \u4EE5\u5185\u518D\u4F20\u3002\u4F60\u53EF\u4EE5\u7528\u7528\u6237\u673A\u5668\u4E0A\u73B0\u6210\u7684\u5DE5\u5177\u5904\u7406\uFF08macOS \u81EA\u5E26 sips\uFF0C\u591A\u6570\u673A\u5668\u6709 ffmpeg\uFF09\uFF0C\u5904\u7406\u5B8C\u7528\u65B0\u6587\u4EF6\u91CD\u65B0 plan\u3002`}})}:{ok:!0,size:r.size}:{ok:!1,envelope:c("VALIDATION_FAILED",`${n.label}\u53EA\u652F\u6301 ${n.extensions.join(" / ")}\uFF0C\u5F53\u524D\u662F ${i||"(\u6CA1\u6709\u6269\u5C55\u540D)"}`,{nextAction:{type:"ask_user",message:`\u628A\u8FD9\u4E2A\u9650\u5236\u544A\u8BC9\u7528\u6237\uFF0C\u95EE\u4ED6\u8981\u4E0D\u8981\u4F60\u5148\u628A\u6587\u4EF6\u8F6C\u6210 ${n.extensions[0]} \u518D\u4F20`}})}}function zt(e){return c("VALIDATION_FAILED",`\u7F3A\u5C11 ${e.pathKey}`,{nextAction:{type:"ask_user",message:`${e.pathKey} \u8981\u7ED9\u4E00\u4E2A\u672C\u673A\u6587\u4EF6\u8DEF\u5F84\u3002\u95EE\u7528\u6237\u6587\u4EF6\u653E\u5728\u54EA\uFF0C\u4E0D\u8981\u81EA\u5DF1\u7F16\u4E00\u4E2A\u8DEF\u5F84\u3002`}})}function X(e){return e>=1024*1024?`${(e/1024/1024).toFixed(1)}MB`:`${Math.max(1,Math.round(e/1024))}KB`}function Qt(e){try{let t=JSON.parse(e),n=Number(t.statusCode);if(Number.isFinite(n)&&n!==0&&n!==200)return typeof t.message=="string"?t.message:`statusCode ${n}`}catch{}return null}function mt(e){let t=e.lastIndexOf(".");return t===-1?"":e.toLowerCase().slice(t)}async function ft(e,t,n){var b;let r=nt();if(!e||!r.includes(e)){a(c("VALIDATION_FAILED",`\u672A\u77E5\u7684\u5199\u64CD\u4F5C\uFF1A${e!=null?e:"(\u7A7A)"}`,{data:{available:r},nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo capabilities \u67E5\u770B\u53EF\u7528\u80FD\u529B\u548C\u5B83\u4EEC\u7684\u5165\u53C2"}}));return}if(!t&&(n!=null&&n.trim().startsWith("{"))){a(c("VALIDATION_FAILED","\u5165\u53C2\u8981\u653E\u5728 --input \u540E\u9762",{nextAction:{type:"ask_user",message:`\u6B63\u786E\u5199\u6CD5\uFF1Abest-geo plan ${e} --input '<JSON>'`}}));return}let i;try{i=t?JSON.parse(t):{}}catch{a(c("VALIDATION_FAILED","--input \u4E0D\u662F\u5408\u6CD5 JSON"));return}let s=z(e,i);if(s.length>0){a(Q(e,s));return}let o=i,d=null;if(at(e)){let k=ut(e,i);if(!k.ok){a(k.envelope);return}o=k.input,d=k.paths}let m=await q();if(!m.ok){a(m.envelope);return}let u=await y("/plans",{method:"POST",apiKey:m.apiKey,body:{operation:e,input:o}});u.ok&&d&&((b=u.data)!=null&&b.planId)&&dt(u.data.planId,d),a(u)}async function gt(e){if(!e){a(c("VALIDATION_FAILED","\u7F3A\u5C11 planId",{nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo plan <operation> \u751F\u6210\u8BA1\u5212\uFF0C\u628A\u6458\u8981\u7ED9\u7528\u6237\u786E\u8BA4\u540E\u518D\u6267\u884C"}}));return}let t=await q();if(!t.ok){a(t.envelope);return}let n;if(ct(e)){let i=await lt(e,t.apiKey);if(!i.ok){a(i.envelope);return}n=i.uploads}let r=await y(`/plans/${encodeURIComponent(e)}/apply`,{method:"POST",apiKey:t.apiKey,body:n?{uploads:n}:{},isWrite:!0});r.ok&&pt(e),a(r)}function yt(e){let t={};for(let n=0;n<e.length;n+=1){let r=e[n];if(!r.startsWith("--"))continue;let i=r.slice(2),s=e[n+1];s&&!s.startsWith("--")?(t[i]=s,n+=1):t[i]=!0}return t}function ht(e,t){let n=C();if(e.reason==="denied")return c("HOST_PERMISSION_REQUIRED",`\u6CA1\u6709\u6743\u9650\u8BFB\u5199\u672C\u673A\u914D\u7F6E\u6587\u4EF6\uFF1A${n}`,{nextAction:{type:"request_host_approval",message:`Best GEO \u9700\u8981\u8BFB\u5199 ${n} \u6765\u4FDD\u5B58\u672C\u673A\u7684\u8BBE\u5907\u8EAB\u4EFD\u548C\u6388\u6743\u3002\u8BF7\u7528\u5F53\u524D\u5DE5\u5177\u81EA\u5E26\u7684\u6743\u9650\u786E\u8BA4\u673A\u5236\u7533\u8BF7\u5BF9\u8BE5\u6587\u4EF6\u7684\u8BFB\u5199\u6743\u9650\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\uFF0C\u4E0D\u8981\u5173\u95ED\u6574\u4E2A\u6C99\u7BB1\uFF0C\u4E5F\u4E0D\u8981\u8BA9\u7528\u6237\u628A\u5BC6\u94A5\u8D34\u8FDB\u5BF9\u8BDD\u3002`,capability:t.capability,...t.retryCommand?{command:t.retryCommand}:{}}});if(e.reason==="permissions_too_open"||e.reason==="not_owner"){let r=e.reason==="not_owner"?"\u8BE5\u6587\u4EF6\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7CFB\u7EDF\u7528\u6237\uFF0C\u8BF7\u8BA9\u7528\u6237\u786E\u8BA4\u540E\u5220\u9664\u6216\u4FEE\u6B63\u5C5E\u4E3B":`\u8BF7\u8BA9\u7528\u6237\u6267\u884C\uFF1Achmod 600 ${n}`;return c("HOST_PERMISSION_REQUIRED",`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u6743\u9650\u4E0D\u5B89\u5168\uFF1A${n}`,{nextAction:{type:"ask_user",message:`${e.message}\u3002${r}\uFF0C\u7136\u540E\u91CD\u8BD5\u3002`}})}return c("HOST_PERMISSION_REQUIRED",`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u5DF2\u635F\u574F\uFF1A${n}`,{nextAction:{type:"ask_user",message:`\u8BF7\u8BA9\u7528\u6237\u5220\u9664 ${n} \u540E\u91CD\u65B0\u6267\u884C\u767B\u5F55\u3002\u8BE5\u6587\u4EF6\u91CC\u53EA\u6709\u672C\u673A\u8BBE\u5907\u8EAB\u4EFD\u548C\u6388\u6743\uFF0C\u5220\u9664\u4E0D\u4F1A\u5F71\u54CD\u670D\u52A1\u7AEF\u6570\u636E\u3002`,command:`${l} auth login`}})}function Et(e){return e instanceof A}async function Xt(){let[e,...t]=process.argv.slice(2),n=yt(t);switch(e){case void 0:case"help":ze();return;case"version":await Qe(n.check===!0);return;case"capabilities":Xe();return;case"skill":if(t[0]==="get"){We(n.raw===!0);return}break;case"guide":if(t[0]==="list"){Ye();return}if(t[0]==="get"&&t[1]){Ze(t[1]);return}break;case"auth":if(t[0]==="login")return qe();if(t[0]==="status")return Ke();if(t[0]==="logout")return Fe();break;case"plan":await ft(t[0],typeof n.input=="string"?n.input:void 0,t[1]);return;case"apply":await gt(t[0]);return;case"call":if(t[0]){await ot(t[0],typeof n.input=="string"?n.input:void 0);return}break;default:break}a(c("VALIDATION_FAILED",`\u65E0\u6CD5\u8BC6\u522B\u7684\u547D\u4EE4\uFF1A${[e,...t].filter(Boolean).join(" ")}`,{nextAction:{type:"ask_user",message:"\u6267\u884C best-geo help \u67E5\u770B\u53EF\u7528\u547D\u4EE4"}})),process.exitCode=1}Xt().catch(e=>{if(Et(e)){a(ht(e,{capability:e.reason==="denied"?"config_write":"config_read",retryCommand:Wt()})),process.exitCode=1;return}a(c("SERVER_ERROR",e instanceof Error?e.message:String(e))),process.exitCode=1});function Wt(){let[e,t]=process.argv.slice(2);if(e==="auth"&&(t==="login"||t==="status"||t==="logout"))return`${l} auth ${t}`}
360
+ </html>`,scriptHash:t}}var Gt=256,Ht=4*1024,ce=3e4;function zt(){if(!1)return ce;let e=Number(process.env.BEST_GEO_TEST_CLAIM_WAIT_MS);return!Number.isFinite(e)||e<=0?ce:Math.min(e,ce)}var Jt=1500,pe=15e3;function Qt(){if(!1)return pe;let e=Number(process.env.BEST_GEO_TEST_RESULT_TTL_MS);return!Number.isFinite(e)||e<=0?pe:Math.min(e,pe)}async function Qe(){let e=(0,_.randomBytes)(16).toString("hex"),t=(0,_.randomBytes)(16).toString("hex"),n=(0,_.randomBytes)(16).toString("hex"),{html:r,scriptHash:o}=He(t),i=(0,_.createHash)("sha256").update(o).digest("base64"),s=null;function d(){let g=new Promise((u,$)=>{s={resolve:u,reject:$}});return g.catch(()=>{}),g}let m=d(),c=!1,I=!1,b=null,C=null,H=null,F=null;function Tt(){F==null&&(F=setTimeout(()=>z(),Jt),F.unref())}let v=(0,Je.createServer)((g,u)=>{Ot(g,u).catch(()=>{u.writeHead(500,{"Content-Type":"application/json"}),u.end(JSON.stringify({ok:!1,message:"internal error"}))})});async function Ot(g,u){var ke,Ee,Ie,ve,we,Ae,Se;let $=new URL((ke=g.url)!=null?ke:"/","http://127.0.0.1");if(g.method==="GET"&&$.pathname==="/"){if($.searchParams.get("state")!==e){u.writeHead(404).end();return}u.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Content-Security-Policy":["default-src 'none'",`script-src 'sha256-${i}'`,"style-src 'unsafe-inline'","connect-src 'self'","form-action 'none'","base-uri 'none'","frame-ancestors 'none'"].join("; "),"Set-Cookie":`bg_session=${n}; HttpOnly; SameSite=Strict; Path=/`,"Cache-Control":"no-store","Referrer-Policy":"no-referrer"}),u.end(r);return}if(g.method==="POST"&&$.pathname==="/submit"){let Nt=g.headers.origin,Lt=`http://127.0.0.1:${v.address().port}`;if(Nt!==Lt){h(u,403,{ok:!1,message:"origin rejected"});return}if(!ze(String((Ee=g.headers["x-csrf-token"])!=null?Ee:""),t)){h(u,403,{ok:!1,message:"csrf rejected"});return}if(!String((Ie=g.headers.cookie)!=null?Ie:"").includes(`bg_session=${n}`)){h(u,403,{ok:!1,message:"session rejected"});return}if(!String((ve=g.headers["content-type"])!=null?ve:"").includes("application/json")){h(u,415,{ok:!1,message:"content-type rejected"});return}if(c){h(u,409,{ok:!1,message:"already submitted"});return}let _e=await Xt(g);if(_e==null){h(u,413,{ok:!1,message:"body too large"});return}let J="";try{J=String((we=JSON.parse(_e).key)!=null?we:"").trim()}catch{h(u,400,{ok:!1,message:"invalid json"});return}if(!J||J.length>Gt){h(u,400,{ok:!1,message:"invalid key"});return}c=!0,I=!0,b=null,h(u,200,{ok:!0}),s==null||s.resolve(J),clearTimeout(re),C=setTimeout(()=>{ye({ok:!1,message:"\u6821\u9A8C\u8D85\u65F6\u3002\u8BF7\u56DE\u5230 AI \u52A9\u624B\u67E5\u770B\u8FD9\u6B21\u767B\u5F55\u7684\u7ED3\u679C\u3002"})},zt()),C.unref();return}if(g.method==="GET"&&$.pathname==="/result"){if(!ze(String((Ae=g.headers["x-csrf-token"])!=null?Ae:""),t)){h(u,403,{ok:!1,message:"csrf rejected"});return}if(!String((Se=g.headers.cookie)!=null?Se:"").includes(`bg_session=${n}`)){h(u,403,{ok:!1,message:"session rejected"});return}if(!I){h(u,409,{ok:!1,message:"not submitted"});return}if(b==null){h(u,200,{state:"pending"});return}h(u,200,{state:"done",...b}),b.retryable||Tt();return}u.writeHead(404).end()}if(process.env.BEST_GEO_TEST_FORCE_LISTEN_ERROR==="1")throw Object.assign(new Error("listen EACCES: permission denied 127.0.0.1"),{code:"EACCES"});v.on("error",g=>{s==null||s.reject(g)}),await new Promise((g,u)=>{v.once("error",u),v.listen(0,"127.0.0.1",()=>{v.removeListener("error",u),g()})});let $t=v.address().port,re=he();function he(){let g=setTimeout(()=>{s==null||s.reject(new Error("LOCAL_INTAKE_TIMEOUT")),z()},Ne);return g.unref(),g}function ye(g){if(b==null){if(b=g,C&&(clearTimeout(C),C=null),g.retryable){c=!1,m=d(),re=he();return}H=setTimeout(()=>z(),Qt()),H.unref()}}let xe=!1;function z(){var g;if(!xe){xe=!0,clearTimeout(re);for(let u of[C,H,F])u&&clearTimeout(u);C=null,H=null,F=null,(g=v.closeAllConnections)==null||g.call(v),v.close()}}return{url:`http://127.0.0.1:${$t}/?state=${e}`,nextKey:()=>m,publishResult:ye,close:z}}function h(e,t,n){e.writeHead(t,{"Content-Type":"application/json","Cache-Control":"no-store"}),e.end(JSON.stringify(n))}async function Xt(e){let t=[],n=0;for await(let r of e){if(n+=r.length,n>Ht)return null;t.push(r)}return Buffer.concat(t).toString("utf8")}function ze(e,t){let n=Buffer.from(e),r=Buffer.from(t);return n.length===r.length&&(0,_.timingSafeEqual)(n,r)}async function j(){let e=qe();if(!e)return null;let t=await tt(e.apiKey);return t.ok?(de({userId:t.data.user.id,agentId:t.data.agentId,companyIds:t.data.companyIds}),null):ae(t)?(le(),null):l("SERVER_ERROR",`\u672C\u673A\u6709\u4E00\u4EFD\u5F85\u786E\u8BA4\u7684\u6388\u6743\uFF0C\u6682\u65F6\u65E0\u6CD5\u4E0E\u670D\u52A1\u7AEF\u786E\u8BA4\uFF1A${t.message}`,{requestId:t.requestId,nextAction:{type:"ask_user",message:"\u7F51\u7EDC\u6062\u590D\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u5373\u53EF\u81EA\u52A8\u6536\u655B\uFF1B\u5728\u6B64\u4E4B\u524D\u4E0D\u8981\u91CD\u65B0\u767B\u5F55\uFF0C\u4E5F\u4E0D\u8981\u5220\u9664\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u3002"}})}async function We(){var d;let e=Y(),t=await j();if(t){a(t);return}let n=P(),r;try{r=await Qe()}catch(m){a(l("HOST_PERMISSION_REQUIRED",`\u65E0\u6CD5\u5728\u672C\u673A\u542F\u52A8\u5F55\u5165\u670D\u52A1\uFF1A${Zt(m)}`,{nextAction:{type:"request_host_approval",message:"Best GEO \u9700\u8981\u5728 127.0.0.1 \u4E0A\u76D1\u542C\u4E00\u4E2A\u968F\u673A\u7AEF\u53E3\u6765\u63A5\u6536\u7528\u6237\u7C98\u8D34\u7684\u5BC6\u94A5\uFF08\u4E0D\u5BF9\u5916\u66B4\u9732\uFF09\u3002\u8BF7\u7528\u5F53\u524D\u5DE5\u5177\u7684\u6743\u9650\u786E\u8BA4\u673A\u5236\u6388\u6743\u672C\u673A\u56DE\u73AF\u7AEF\u53E3\u76D1\u542C\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u3002",capability:"loopback_port",command:`${p} auth login`}}));return}Yt(r.url);let o=`[${p}]`;process.stderr.write(`${o} auth login \u5DF2\u542F\u52A8\u672C\u673A\u5F55\u5165\u670D\u52A1\uFF0C\u4F1A\u963B\u585E\u7B49\u5F85\u7528\u6237\u7C98\u8D34\u5BC6\u94A5\uFF0C\u6700\u957F 5 \u5206\u949F\u3002
361
+ ${o} \u8C03\u7528\u65B9\u8BF7\u4FDD\u6301\u672C\u8FDB\u7A0B\u8FD0\u884C\u76F4\u5230\u5B83\u81EA\u884C\u9000\u51FA\uFF0C\u4E0D\u8981\u4E2D\u65AD\u3001\u4E0D\u8981\u8F6C\u4EA4\u7ED9\u7528\u6237\u5728\u522B\u5904\u6267\u884C\uFF1B
362
+ ${o} \u8FDB\u7A0B\u9000\u51FA\u65F6 stdout \u4F1A\u7ED9\u51FA\u552F\u4E00\u4E00\u4E2A JSON \u7ED3\u679C\uFF0C\u90A3\u65F6\u518D\u5411\u7528\u6237\u6C47\u62A5\u6210\u8D25\u3002
363
+ ${o} \u73B0\u5728\u8BF7\u628A\u4E0B\u9762\u8FD9\u4E2A\u5730\u5740\u8F6C\u8FBE\u7ED9\u7528\u6237\uFF0C\u8BA9\u4ED6\u5728\u6D4F\u89C8\u5668\u91CC\u6253\u5F00\u5E76\u7C98\u8D34\u5BC6\u94A5\uFF08\u5BC6\u94A5\u4E0D\u8981\u7ECF\u8FC7\u4F60\uFF09\uFF1A
364
+ `),process.stderr.write(`${o} \u672C\u5730\u9875\u9762\uFF1A${r.url}
365
+ `),n&&process.stderr.write(`${o} \u672C\u673A\u5DF2\u6709\u4E00\u4EFD\u6388\u6743\uFF0C\u5F55\u5165\u65B0\u5BC6\u94A5\u4F1A\u66FF\u6362\u5B83\u3002
366
+ `);let i;for(;;){let m;try{m=await r.nextKey()}catch{r.close(),a(l("AUTH_REQUIRED","\u672C\u5730\u5F55\u5165\u8D85\u65F6\u6216\u88AB\u53D6\u6D88",{nextAction:{type:"auth_login",message:"\u7528\u6237\u5728 5 \u5206\u949F\u5185\u6CA1\u6709\u5B8C\u6210\u7C98\u8D34\u3002\u5148\u95EE\u6E05\u4ED6\u662F\u5426\u5DF2\u7ECF\u62FF\u5230\u5BC6\u94A5\uFF0C\u518D\u7531\u4F60\u91CD\u65B0\u6267\u884C command\uFF0C\u5E76\u628A\u65B0\u7684\u672C\u5730\u9875\u9762\u5730\u5740\u8F6C\u8FBE\u7ED9\u4ED6\u3002",command:`${p} auth login`}}));return}process.stderr.write(`${o} \u5DF2\u6536\u5230\u5BC6\u94A5\uFF0C\u6B63\u5728\u5411\u670D\u52A1\u7AEF\u6821\u9A8C\u5E76\u7ED1\u5B9A\u672C\u673A\uFF0C\u8BF7\u7EE7\u7EED\u7B49\u5F85\u672C\u8FDB\u7A0B\u9000\u51FA\u3002
367
+ `),je(m),i=await tt(m);let c=!i.ok&&ae(i);if(c&&le(),r.publishResult({ok:i.ok,message:i.ok?"\u5DF2\u5B8C\u6210\u7ED1\u5B9A\uFF0C\u53EF\u4EE5\u56DE\u5230 AI \u52A9\u624B\u7EE7\u7EED\u64CD\u4F5C\u4E86\u3002":Wt(i),retryable:c}),i.ok)break;if(c){process.stderr.write(`${o} \u8FD9\u628A\u5BC6\u94A5\u88AB\u670D\u52A1\u7AEF\u62D2\u7EDD\uFF0C\u9875\u9762\u4E0A\u5DF2\u63D0\u793A\u7528\u6237\u6362\u4E00\u628A\u91CD\u8BD5\u3002
368
+ `);continue}process.stderr.write(`${o} \u672A\u80FD\u786E\u8BA4\u7ED1\u5B9A\u7ED3\u679C\uFF0C\u5DF2\u4FDD\u7559\u8FD9\u628A\u5F85\u786E\u8BA4\u7684\u5BC6\u94A5\u3002\u7F51\u7EDC\u6062\u590D\u540E\u6267\u884C\u4EFB\u610F ${p} \u547D\u4EE4\u5373\u53EF\u81EA\u52A8\u6536\u655B\u3002
369
+ `),a(i);return}let s=de({userId:i.data.user.id,agentId:i.data.agentId,companyIds:i.data.companyIds});a(k({user:i.data.user,device:i.data.device,companyIds:(d=s==null?void 0:s.companyIds)!=null?d:i.data.companyIds,replacedPreviousAuthorization:i.data.replacedPreviousAuthorization,configPath:R()},i.requestId))}async function Ye(){let e=await j();if(e){a(e);return}let t=P();if(!t){a(et());return}let n=await y("/companies",{apiKey:t,query:{page:1,limit:100}});if(!n.ok){a(n);return}let r=Y();a(k({loggedIn:!0,device:{deviceId:r.deviceId,deviceName:r.deviceName,platform:r.platform},user:Z()?{id:Z().userId,agentId:Z().agentId}:null,companies:n.data.data.map(o=>({id:o.id,name:o.name})),configPath:R()},n.requestId))}async function Ze(){let e=await j();if(e){a(e);return}let t=P();if(!t){a(et());return}let n=await y("/auth/logout",{method:"POST",apiKey:t});if(!n.ok){a(n);return}Ge(),a(k({loggedOut:!0,revoked:n.data,note:"\u670D\u52A1\u7AEF\u5BC6\u94A5\u5DF2\u64A4\u9500\uFF0C\u672C\u673A\u51ED\u636E\u5DF2\u6E05\u9664\u3002\u8BBE\u5907\u8EAB\u4EFD\u4FDD\u7559\uFF0C\u91CD\u65B0\u767B\u5F55\u4F1A\u590D\u7528\u540C\u4E00\u53F0\u8BBE\u5907\u3002"},n.requestId))}function et(){return l("AUTH_REQUIRED","\u672C\u673A\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u6388\u6743",{nextAction:{type:"auth_login",message:"\u5148\u8BA9\u7528\u6237\u5230\u6240\u5C5E SaaS \u7F51\u9875\u7684\u5BC6\u94A5\u7BA1\u7406\u91CC\u521B\u5EFA\u300CAI \u52A9\u624B\u5BC6\u94A5\u300D\u5E76\u9009\u597D\u6388\u6743\u516C\u53F8\uFF1B\u7136\u540E\u7531\u4F60\u76F4\u63A5\u6267\u884C command\uFF0C\u5B83\u4F1A\u963B\u585E\u6700\u957F 5 \u5206\u949F\u7B49\u5F85\u7528\u6237\u5728\u672C\u673A\u9875\u9762\u7C98\u8D34\u5BC6\u94A5\u3002\u6267\u884C\u671F\u95F4\u628A stderr \u91CC\u7684\u672C\u5730\u9875\u9762\u5730\u5740\u8F6C\u8FBE\u7ED9\u7528\u6237\uFF0C\u4FDD\u6301\u8FDB\u7A0B\u8FD0\u884C\u76F4\u5230\u5B83\u81EA\u884C\u9000\u51FA\uFF0C\u4E0D\u8981\u4E2D\u65AD\uFF0C\u4E5F\u4E0D\u8981\u8BA9\u7528\u6237\u5728\u522B\u5904\u6267\u884C\u3002",command:`${p} auth login`}})}function Wt(e){var t;return e.code==="AUTH_REQUIRED"?"\u8FD9\u628A\u5BC6\u94A5\u7528\u4E0D\u4E86\uFF08\u65E0\u6548\u6216\u5DF2\u5931\u6548\uFF09\u3002\u8BF7\u786E\u8BA4\u6574\u4E32\u90FD\u590D\u5236\u5B8C\u6574\u4E86\uFF0C\u6216\u5230\u7F51\u9875\u91CD\u65B0\u521B\u5EFA\u4E00\u628A\u518D\u7C98\u8D34\u3002":e.code==="DEVICE_MISMATCH"?"\u8FD9\u628A\u5BC6\u94A5\u5DF2\u7ECF\u7ED1\u5B9A\u5230\u53E6\u4E00\u53F0\u8BBE\u5907\u3002\u8BF7\u5230\u7F51\u9875\u65B0\u5EFA\u4E00\u628A\u5BC6\u94A5\uFF0C\u518D\u7C98\u8D34\u5230\u8FD9\u91CC\u3002":(t=e.message)!=null?t:"\u767B\u5F55\u5931\u8D25\u3002\u8BF7\u56DE\u5230 AI \u52A9\u624B\u67E5\u770B\u8BE6\u60C5\u3002"}function tt(e){let t=Y();return y("/auth/claim",{method:"POST",apiKey:e,body:{...t,cliVersion:x}})}function Yt(e){if(process.env.BEST_GEO_NO_BROWSER==="1")return;let t=process.platform==="darwin"?"open":process.platform==="win32"?"cmd":"xdg-open",n=process.platform==="win32"?["/c","start","",e]:[e];(0,Xe.execFile)(t,n,()=>{})}function Zt(e){return e instanceof Error?e.message:String(e)}async function G(){let e=await j();if(e)return{ok:!1,envelope:e};let t=P();return t?{ok:!0,apiKey:t}:{ok:!1,envelope:l("AUTH_REQUIRED","\u672C\u673A\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u6388\u6743",{nextAction:{type:"auth_login",message:"\u5148\u8BA9\u7528\u6237\u5230\u6240\u5C5E SaaS \u7F51\u9875\u7684\u5BC6\u94A5\u7BA1\u7406\u91CC\u521B\u5EFA\u300CAI \u52A9\u624B\u5BC6\u94A5\u300D\u5E76\u9009\u597D\u6388\u6743\u516C\u53F8\uFF1B\u7136\u540E\u7531\u4F60\u76F4\u63A5\u6267\u884C command\uFF0C\u5B83\u4F1A\u963B\u585E\u6700\u957F 5 \u5206\u949F\u7B49\u5F85\u7528\u6237\u5728\u672C\u673A\u9875\u9762\u7C98\u8D34\u5BC6\u94A5\u3002",command:`${p} auth login`}})}}var rt=require("node:fs"),D=require("node:path"),ot=require("node:url");function en(e){if(e.cjsDir)return(0,D.join)(e.cjsDir,"..");if(!e.moduleUrl)throw new Error("\u7F3A\u5C11 CLI \u8FD0\u884C\u4F4D\u7F6E");return(0,D.join)((0,D.dirname)((0,ot.fileURLToPath)(e.moduleUrl)),"..","..","..")}function tn(){return en({cjsDir:typeof __dirname=="string"?__dirname:void 0,moduleUrl:void 0})}function U(...e){return(0,rt.readFileSync)((0,D.join)(tn(),...e),"utf8")}function it(){a(k({package:L,version:x,protocolVersion:B,commands:[{command:`${p} version --check`,description:"\u68C0\u67E5\u7248\u672C\u662F\u5426\u9700\u8981\u5347\u7EA7"},{command:`${p} capabilities`,description:"\u5217\u51FA\u53EF\u7528\u80FD\u529B\u53CA\u5176\u8F93\u5165 schema"},{command:`${p} skill get --raw > <\u4F60\u7684 skill \u76EE\u5F55>/best-geo/SKILL.md`,description:"\u76F4\u63A5\u628A Skill \u5199\u6210\u6587\u4EF6\uFF08\u63A8\u8350\uFF1B--raw \u8F93\u51FA markdown \u539F\u6587\uFF0C\u4E0D\u662F JSON\uFF09"},{command:`${p} skill get`,description:"\u4EE5 JSON \u4FE1\u5C01\u8FD4\u56DE Skill \u5185\u5BB9\u548C revision"},{command:`${p} guide list`,description:"\u5217\u51FA\u4E1A\u52A1\u6307\u5357"},{command:`${p} guide get <name>`,description:"\u8BFB\u53D6\u4E00\u4EFD\u4E1A\u52A1\u6307\u5357"},{command:`${p} auth login`,description:"\u6253\u5F00\u672C\u5730\u9875\u9762\u5F55\u5165\u5BC6\u94A5\u5E76\u7ED1\u5B9A\u672C\u673A"},{command:`${p} auth status`,description:"\u67E5\u770B\u5F53\u524D\u6388\u6743\u72B6\u6001"},{command:`${p} auth logout`,description:"\u64A4\u9500\u670D\u52A1\u7AEF\u5BC6\u94A5\u5E76\u6E05\u9664\u672C\u673A\u51ED\u636E"},{command:`${p} call <capability> --input '<JSON>'`,description:"\u8C03\u7528\u4E00\u4E2A\u67E5\u8BE2\u80FD\u529B"},{command:`${p} plan <operation> --input '<JSON>'`,description:"\u751F\u6210\u5199\u64CD\u4F5C\u8BA1\u5212\uFF0C\u8FD4\u56DE\u7ED9\u7528\u6237\u770B\u7684\u53D8\u66F4\u6458\u8981\uFF08\u4E0D\u5199\u6570\u636E\uFF09"},{command:`${p} apply <planId>`,description:"\u6267\u884C\u8BA1\u5212\u3002\u5FC5\u987B\u5148\u628A plan \u7684\u6458\u8981\u7ED9\u7528\u6237\u770B\u8FC7\u5E76\u5F97\u5230\u540C\u610F"}],nextAction:{type:"install_skill",command:`${p} skill get --raw`,message:"\u6309\u5F53\u524D AI \u5DE5\u5177\u7684 Skill \u673A\u5236\u9009\u4E00\u4E2A\u5B89\u88C5\u76EE\u5F55\uFF0C\u7528 best-geo skill get --raw \u628A\u5185\u5BB9\u76F4\u63A5\u91CD\u5B9A\u5411\u6210 SKILL.md\uFF0C\u7136\u540E\u52A0\u8F7D\u5B83"}}))}async function st(e){if(!e){a(k({package:L,version:x,protocolVersion:B,env:$e,apiBase:Q}));return}let t=await y("/meta");if(!t.ok){a(t);return}if(nt(x,t.data.minimumCliVersion)<0){a(l("CLI_UPDATE_REQUIRED",`\u5F53\u524D\u7248\u672C ${x} \u4F4E\u4E8E\u6700\u4F4E\u8981\u6C42 ${t.data.minimumCliVersion}`,{requestId:t.requestId,data:{current:x,...t.data},nextAction:{type:"upgrade",message:"\u5347\u7EA7\u540E\u91CD\u8BD5",command:`npm install -g ${L}@latest`}}));return}a(k({current:x,...t.data,updateAvailable:nt(x,t.data.latestCliVersion)<0},t.requestId))}function at(){a(k(JSON.parse(U("capabilities","capabilities.json"))))}function lt(e){let t=pt(U("skills","best-geo","SKILL.md"));if(e){process.stdout.write(t);return}a(k({name:p,revision:1,content:t}))}var ue=["company","product","question","article","knowledge","material","question-task","article-task","scheduled-monitor","publication"];function dt(){a(k({guides:ue.map(e=>{let t=JSON.parse(U("guides",`${e}.json`));return{name:t.name,title:t.title,whenToUse:t.whenToUse}})}))}function ct(e){if(!ue.includes(e)){a(l("GUIDE_NOT_FOUND",`\u6CA1\u6709\u540D\u4E3A ${e} \u7684\u6307\u5357`,{data:{available:ue}}));return}a(k(JSON.parse(pt(U("guides",`${e}.json`)))))}function nt(e,t){var o,i;let n=e.split(".").map(s=>Number.parseInt(s,10)||0),r=t.split(".").map(s=>Number.parseInt(s,10)||0);for(let s=0;s<Math.max(n.length,r.length);s+=1){let d=((o=n[s])!=null?o:0)-((i=r[s])!=null?i:0);if(d!==0)return d<0?-1:1}return 0}function pt(e){return p==="best-geo"?e:e.replace(/\bbest-geo\b(?!-)/g,p)}var me=null,ge=null;function ut(){return me===null&&(me=JSON.parse(U("capabilities","capabilities.json")).capabilities),me}function nn(){return ge===null&&(ge=new Map(ut().filter(e=>e.inputSchema!==void 0).map(e=>[e.name,e.inputSchema]))),ge}function mt(){return ut().filter(e=>e.mode==="write").map(e=>e.name)}function ee(e,t){let n=nn().get(e);return n===void 0?[]:be(t,n,"")}function be(e,t,n){if(t.type==="object"||t.properties!==void 0)return rn(e,t,n);let r=gt(e,t,n);if(r!==null)return[r];let o=[];return typeof e=="string"&&t.minLength!==void 0&&e.length<t.minLength&&o.push(t.minLength===1?`${n} \u4E0D\u80FD\u662F\u7A7A\u5B57\u7B26\u4E32`:`${n} \u81F3\u5C11 ${t.minLength} \u4E2A\u5B57\u7B26\uFF0C\u5F53\u524D ${e.length} \u4E2A`),typeof e=="string"&&t.maxLength!==void 0&&e.length>t.maxLength&&o.push(`${n} \u6700\u591A ${t.maxLength} \u4E2A\u5B57\u7B26\uFF0C\u5F53\u524D ${e.length} \u4E2A`),typeof e=="number"&&(t.maximum!==void 0&&e>t.maximum&&o.push(`${n} \u4E0D\u80FD\u5927\u4E8E ${t.maximum}`),t.minimum!==void 0&&e<t.minimum&&o.push(`${n} \u4E0D\u80FD\u5C0F\u4E8E ${t.minimum}`)),t.enum!==void 0&&!t.enum.includes(e)&&o.push(`${n} \u53EA\u80FD\u662F ${t.enum.join(" / ")} \u4E4B\u4E00\uFF0C\u6536\u5230 ${T(e)}`),Array.isArray(e)&&(t.minItems!==void 0&&e.length<t.minItems&&o.push(`${n} \u81F3\u5C11\u8981 ${t.minItems} \u9879\uFF0C\u5F53\u524D ${e.length} \u9879`),t.maxItems!==void 0&&e.length>t.maxItems&&o.push(`${n} \u6700\u591A ${t.maxItems} \u9879\uFF0C\u5F53\u524D ${e.length} \u9879`),t.items!==void 0&&e.forEach((i,s)=>{o.push(...be(i,t.items,`${n}[${s}]`))})),o}function rn(e,t,n){var d,m;if(typeof e!="object"||e===null||Array.isArray(e))return[`${n||"\u5165\u53C2"} \u5FC5\u987B\u662F\u5BF9\u8C61`];let r=e,o=(d=t.properties)!=null?d:{},i=(m=t.required)!=null?m:[],s=[];for(let c of i)(r[c]===void 0||r[c]===null)&&s.push(`\u7F3A\u5C11\u5FC5\u586B\u5B57\u6BB5 ${fe(n,c)}`);if(t.additionalProperties===!1){let c=Object.keys(o);for(let I of Object.keys(r))c.includes(I)||s.push(`\u4E0D\u8BA4\u8BC6\u7684\u5B57\u6BB5 ${fe(n,I)}\uFF0C\u53EF\u7528\u5B57\u6BB5\uFF1A${c.join("\u3001")}`)}for(let[c,I]of Object.entries(o)){let b=r[c];b===void 0||b===null&&i.includes(c)||s.push(...be(b,I,fe(n,c)))}return s}function gt(e,t,n){if(Array.isArray(t.type)){let r=t.type.map(o=>gt(e,{...t,type:o},n));return r.some(o=>o===null)?null:r[0]}switch(t.type){case"null":return e===null?null:`${n} \u5FC5\u987B\u662F null\uFF0C\u6536\u5230 ${T(e)}`;case"string":return typeof e=="string"?null:`${n} \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\uFF0C\u6536\u5230 ${T(e)}`;case"number":return typeof e=="number"&&Number.isFinite(e)?null:`${n} \u5FC5\u987B\u662F\u6570\u5B57\uFF0C\u6536\u5230 ${T(e)}`;case"integer":return typeof e=="number"&&Number.isInteger(e)?null:`${n} \u5FC5\u987B\u662F\u6574\u6570\uFF0C\u6536\u5230 ${T(e)}`;case"boolean":return typeof e=="boolean"?null:`${n} \u5FC5\u987B\u662F true \u6216 false\uFF0C\u6536\u5230 ${T(e)}`;case"array":return Array.isArray(e)?null:`${n} \u5FC5\u987B\u662F\u6570\u7EC4\uFF0C\u6536\u5230 ${T(e)}`;default:return null}}function fe(e,t){return e===""?t:`${e}.${t}`}function T(e){if(e===null)return"null";if(Array.isArray(e))return"\u6570\u7EC4";if(typeof e=="object")return"\u5BF9\u8C61";let t=String(e);return typeof e=="string"?`\u5B57\u7B26\u4E32 "${on(t)}"`:t}function on(e){return e.length>20?`${e.slice(0,20)}\u2026`:e}function te(e,t){return l("VALIDATION_FAILED",`\u5165\u53C2\u4E0D\u5408\u6CD5\uFF1A${t.join("\uFF1B")}`,{data:{name:e,errors:t},nextAction:{type:"ask_user",message:"\u6309 capabilities \u91CC\u7684 inputSchema \u4FEE\u6B63\u53C2\u6570\u540E\u91CD\u8BD5\uFF1B\u7F3A\u7684\u4FE1\u606F\u95EE\u7528\u6237"}})}var ft={"companies.list":e=>({path:"/companies",query:e}),"companies.get":e=>({path:`/companies/${Number(e.id)}`}),"products.list":e=>({path:"/products",query:e}),"products.get":e=>({path:`/products/${Number(e.id)}`}),"questions.list":e=>({path:"/questions",query:e}),"questions.get":e=>({path:`/questions/${Number(e.id)}`}),"articles.list":e=>({path:"/articles",query:e}),"articles.get":e=>({path:`/articles/${Number(e.id)}`,query:e.withContent===!0?{withContent:"true"}:void 0}),"knowledge.list":e=>({path:"/knowledge",query:e}),"knowledge.get":e=>({path:`/knowledge/${Number(e.id)}`}),"images.list":e=>({path:"/images",query:e}),"images.get":e=>({path:`/images/${Number(e.id)}`}),"videos.list":e=>({path:"/videos",query:e}),"videos.get":e=>({path:`/videos/${Number(e.id)}`}),"prompts.list":e=>({path:"/prompts",query:e}),"models.list":e=>({path:"/models",query:e}),"questionTasks.list":e=>({path:"/question-tasks",query:e}),"questionTasks.get":e=>({path:`/question-tasks/${Number(e.taskId)}`}),"articleTasks.list":e=>({path:"/article-tasks",query:e}),"articleTasks.get":e=>({path:`/article-tasks/${Number(e.taskId)}`}),"keywordTasks.list":e=>({path:"/keyword-tasks",query:e}),"keywordTasks.get":e=>({path:`/keyword-tasks/${Number(e.taskId)}`}),"tags.list":e=>({path:"/tags",query:e}),"folders.list":e=>({path:"/article-folders",query:e}),"publicationPlatforms.list":e=>({path:"/publication-platforms",query:e}),"publicationAccounts.list":e=>({path:"/publication-accounts",query:e}),"publicationTasks.list":e=>({path:"/publication-tasks",query:e}),"publicationRecords.list":e=>({path:"/publication-records",query:e}),"mediaPlatforms.list":e=>({path:"/media-platforms",query:e}),"mediaPlatforms.get":e=>({path:`/media-platforms/${Number(e.mediaId)}`}),"mediaPublications.list":e=>({path:"/media-publications",query:e}),"mediaPublications.summary":e=>({path:"/media-publications/summary",query:e}),"articleTasks.reuseConfig":e=>({path:`/article-tasks/${Number(e.taskId)}/reuse-config`}),"scheduledSentiment.generateQuestions":e=>({path:"/scheduled-sentiment/generate-questions",method:"POST",body:e}),"indexing.suggestCompetitors":e=>({path:"/suggest-competitors",method:"POST",body:e}),"indexingPlatforms.list":()=>({path:"/indexing-platforms"}),"scheduledIndexing.list":e=>({path:"/scheduled-indexing",query:e}),"scheduledIndexing.get":e=>({path:`/scheduled-indexing/${Number(e.planId)}`}),"scheduledIndexing.runs":e=>({path:`/scheduled-indexing/${Number(e.planId)}/runs`,query:E(e)}),"scheduledIndexing.metrics":e=>({path:`/scheduled-indexing/${Number(e.planId)}/metrics`,query:E(e)}),"scheduledSentiment.list":e=>({path:"/scheduled-sentiment",query:e}),"scheduledSentiment.get":e=>({path:`/scheduled-sentiment/${Number(e.planId)}`}),"scheduledSentiment.runs":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/runs`,query:E(e)}),"scheduledSentiment.metrics":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/metrics`,query:E(e)}),"scheduledIndexing.answers":e=>({path:`/scheduled-indexing/${Number(e.planId)}/answers`,query:E(e)}),"scheduledIndexing.citations":e=>({path:`/scheduled-indexing/${Number(e.planId)}/citations`,query:E(e)}),"scheduledIndexing.topicStats":e=>({path:`/scheduled-indexing/${Number(e.planId)}/topic-stats`,query:E(e)}),"scheduledIndexing.topicPlatformMatrix":e=>({path:`/scheduled-indexing/${Number(e.planId)}/topic-platform-matrix`,query:E(e)}),"scheduledSentiment.answers":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/answers`,query:E(e)}),"scheduledSentiment.citations":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/citations`,query:E(e)}),"scheduledSentiment.topicStats":e=>({path:`/scheduled-sentiment/${Number(e.planId)}/topic-stats`,query:E(e)}),"textToImages.models":()=>({path:"/text-to-image-models"}),"textToImages.list":e=>({path:"/text-to-images",query:e}),"textToImages.get":e=>({path:`/text-to-images/${Number(e.id)}`}),"textToImages.countUncompleted":()=>({path:"/text-to-images/count-uncompleted"})};function E(e){let{planId:t,...n}=e;return n}function sn(){return Object.keys(ft)}async function bt(e,t){let n=ft[e];if(!n){a(l("VALIDATION_FAILED",`\u672A\u77E5\u80FD\u529B\uFF1A${e}`,{data:{available:sn()},nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo capabilities \u67E5\u770B\u53EF\u7528\u80FD\u529B"}}));return}let r={};if(t)try{r=JSON.parse(t)}catch{a(l("VALIDATION_FAILED","--input \u4E0D\u662F\u5408\u6CD5 JSON"));return}let o=ee(e,r);if(o.length>0){a(te(e,o));return}let i=await G();if(!i.ok){a(i.envelope);return}let{path:s,query:d,method:m,body:c}=n(r);a(await y(s,{apiKey:i.apiKey,query:d,method:m,body:c}))}var O=require("node:fs"),M=require("node:path");var an={image:{maxBytes:2*1024*1024,extensions:[".png",".jpg",".jpeg"],label:"\u56FE\u7247"},video:{maxBytes:200*1024*1024,extensions:[".mp4"],label:"\u89C6\u9891"},thumbnail:{maxBytes:5*1024*1024,extensions:[".png",".jpg",".jpeg"],label:"\u5C01\u9762\u56FE"}},ln={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".mp4":"video/mp4"},ht={"images.create":[{pathKey:"filePath",metaKey:"file",uploadField:"fileUrl",kind:"image"}],"videos.create":[{pathKey:"videoPath",metaKey:"video",uploadField:"videoUrl",kind:"video"},{pathKey:"thumbnailPath",metaKey:"thumbnail",uploadField:"thumbnail",kind:"thumbnail"}]},dn=900*1e3;function yt(e){return ht[e]!==void 0}function xt(e){return q()[e]!==void 0}function kt(e,t){var i;let n=(i=ht[e])!=null?i:[],r={...t},o={};for(let s of n){let d=t[s.pathKey];if(typeof d!="string"||!d.trim())return{ok:!1,envelope:un(s)};let m=(0,M.resolve)(d.trim()),c=pn(m,s);if(!c.ok)return{ok:!1,envelope:c.envelope};delete r[s.pathKey],r[s.metaKey]={name:(0,M.basename)(m),size:c.size},o[s.uploadField]=m}return{ok:!0,input:r,paths:o}}function Et(e,t){se({...q(),[e]:{paths:t,createdAt:Date.now()}})}async function It(e,t){let n=q()[e];if(!n)return{ok:!1,envelope:l("VALIDATION_FAILED","\u672C\u673A\u6CA1\u6709\u8FD9\u4E2A\u8BA1\u5212\u7684\u5F85\u4F20\u6587\u4EF6\u8BB0\u5F55",{nextAction:{type:"ask_user",message:"\u91CD\u65B0\u6267\u884C best-geo plan \u751F\u6210\u8BA1\u5212\uFF0C\u628A\u6458\u8981\u7ED9\u7528\u6237\u786E\u8BA4\u540E\u518D apply\u2014\u2014\u8BA1\u5212\u548C\u5F85\u4F20\u6587\u4EF6\u662F\u4E00\u8D77\u751F\u6210\u7684"}})};let r={};for(let[o,i]of Object.entries(n.paths)){if(!(0,O.existsSync)(i))return{ok:!1,envelope:l("VALIDATION_FAILED",`\u6587\u4EF6\u5DF2\u7ECF\u4E0D\u5728\u4E86\uFF1A${i}`)};let s=await y(`/plans/${encodeURIComponent(e)}/uploads/presign`,{method:"POST",apiKey:t,body:{field:o,fileName:(0,M.basename)(i)}});if(!s.ok)return{ok:!1,envelope:s};let d=await cn(s.data,i);if(!d.ok)return{ok:!1,envelope:d.envelope};r[o]=s.data.uploadUrl}return{ok:!0,uploads:r}}function vt(e){let t=q();delete t[e],se(t)}async function cn(e,t){let n=ln[wt(t)];if(!n)return{ok:!1,envelope:l("UPLOAD_FAILED",`${t} \u7684\u6587\u4EF6\u7C7B\u578B\u6CA1\u6709\u767B\u8BB0 MIME\uFF0C\u4F20\u4E0D\u4E86`)};let r=new FormData;r.append("key",e.key),r.append("policy",e.policy),r.append("OSSAccessKeyId",e.OSSAccessKeyId),r.append("signature",e.signature),r.append("callback",e.callback),r.append("Content-Disposition",e["Content-Disposition"]),r.append("success_action_status","200"),r.append("file",await(0,O.openAsBlob)(t,{type:n}),(0,M.basename)(t));try{let o=await fetch(e.host,{method:"POST",body:r,signal:AbortSignal.timeout(dn)}),i=(await o.text().catch(()=>"")).slice(0,300);if(!o.ok)return{ok:!1,envelope:l("UPLOAD_FAILED",`\u4E0A\u4F20\u5931\u8D25\uFF08HTTP ${o.status}\uFF09\uFF1A${i}`,{nextAction:{type:"ask_user",message:"\u628A\u8FD9\u4E2A\u60C5\u51B5\u544A\u8BC9\u7528\u6237\uFF0C\u7A0D\u540E\u91CD\u65B0\u6267\u884C\u4E00\u6B21 plan \u518D\u8BD5"}})};let s=mn(i);return s?{ok:!1,envelope:l("UPLOAD_FAILED",`\u6587\u4EF6\u5DF2\u4E0A\u4F20\uFF0C\u4F46\u767B\u8BB0\u5931\u8D25\uFF1A${s}`,{nextAction:{type:"ask_user",message:"\u628A\u8FD9\u53E5\u62A5\u9519\u539F\u6837\u544A\u8BC9\u7528\u6237\uFF0C\u8BA9\u4ED6\u8054\u7CFB\u670D\u52A1\u5546\u3002\u91CD\u8BD5\u591A\u534A\u4E0D\u4F1A\u597D\u3002"}})}:{ok:!0}}catch(o){return{ok:!1,envelope:l("UPLOAD_FAILED",`\u4E0A\u4F20\u4E2D\u65AD\uFF1A${o instanceof Error?o.message:String(o)}`,{nextAction:{type:"ask_user",message:"\u4E0A\u4F20\u6CA1\u80FD\u5B8C\u6210\uFF0C\u539F\u56E0\u89C1\u4E0A\u9762\u7684\u62A5\u9519\u539F\u6587\u3002\u544A\u8BC9\u7528\u6237\uFF0C\u7A0D\u540E\u91CD\u65B0\u8D70\u4E00\u904D"}})}}}function pn(e,t){let n=an[t.kind];if(!(0,O.existsSync)(e))return{ok:!1,envelope:l("VALIDATION_FAILED",`\u627E\u4E0D\u5230\u6587\u4EF6\uFF1A${e}`,{nextAction:{type:"ask_user",message:"\u8BA9\u7528\u6237\u786E\u8BA4\u6587\u4EF6\u8DEF\u5F84\u3002\u76F8\u5BF9\u8DEF\u5F84\u662F\u76F8\u5BF9\u4F60\u5F53\u524D\u7684\u5DE5\u4F5C\u76EE\u5F55\u7B97\u7684"}})};let r=(0,O.statSync)(e);if(!r.isFile())return{ok:!1,envelope:l("VALIDATION_FAILED",`${e} \u4E0D\u662F\u4E00\u4E2A\u6587\u4EF6`)};let o=wt(e);return n.extensions.includes(o)?r.size>n.maxBytes?{ok:!1,envelope:l("VALIDATION_FAILED",`${n.label}\u6700\u5927 ${ne(n.maxBytes)}\uFF0C\u5F53\u524D ${ne(r.size)}\uFF0C\u8D85\u51FA ${ne(r.size-n.maxBytes)}`,{nextAction:{type:"ask_user",message:`\u544A\u8BC9\u7528\u6237\u8FD9\u4E2A\u6587\u4EF6\u8D85\u4E86\u591A\u5C11\uFF0C\u5E76\u95EE\u4ED6\u8981\u4E0D\u8981\u4F60\u5148\u628A\u5B83\u538B\u5230 ${ne(n.maxBytes)} \u4EE5\u5185\u518D\u4F20\u3002\u4F60\u53EF\u4EE5\u7528\u7528\u6237\u673A\u5668\u4E0A\u73B0\u6210\u7684\u5DE5\u5177\u5904\u7406\uFF08macOS \u81EA\u5E26 sips\uFF0C\u591A\u6570\u673A\u5668\u6709 ffmpeg\uFF09\uFF0C\u5904\u7406\u5B8C\u7528\u65B0\u6587\u4EF6\u91CD\u65B0 plan\u3002`}})}:{ok:!0,size:r.size}:{ok:!1,envelope:l("VALIDATION_FAILED",`${n.label}\u53EA\u652F\u6301 ${n.extensions.join(" / ")}\uFF0C\u5F53\u524D\u662F ${o||"(\u6CA1\u6709\u6269\u5C55\u540D)"}`,{nextAction:{type:"ask_user",message:`\u628A\u8FD9\u4E2A\u9650\u5236\u544A\u8BC9\u7528\u6237\uFF0C\u95EE\u4ED6\u8981\u4E0D\u8981\u4F60\u5148\u628A\u6587\u4EF6\u8F6C\u6210 ${n.extensions[0]} \u518D\u4F20`}})}}function un(e){return l("VALIDATION_FAILED",`\u7F3A\u5C11 ${e.pathKey}`,{nextAction:{type:"ask_user",message:`${e.pathKey} \u8981\u7ED9\u4E00\u4E2A\u672C\u673A\u6587\u4EF6\u8DEF\u5F84\u3002\u95EE\u7528\u6237\u6587\u4EF6\u653E\u5728\u54EA\uFF0C\u4E0D\u8981\u81EA\u5DF1\u7F16\u4E00\u4E2A\u8DEF\u5F84\u3002`}})}function ne(e){return e>=1024*1024?`${(e/1024/1024).toFixed(1)}MB`:`${Math.max(1,Math.round(e/1024))}KB`}function mn(e){try{let t=JSON.parse(e),n=Number(t.statusCode);if(Number.isFinite(n)&&n!==0&&n!==200)return typeof t.message=="string"?t.message:`statusCode ${n}`}catch{}return null}function wt(e){let t=e.lastIndexOf(".");return t===-1?"":e.toLowerCase().slice(t)}async function At(e,t,n){var I;let r=mt();if(!e||!r.includes(e)){a(l("VALIDATION_FAILED",`\u672A\u77E5\u7684\u5199\u64CD\u4F5C\uFF1A${e!=null?e:"(\u7A7A)"}`,{data:{available:r},nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo capabilities \u67E5\u770B\u53EF\u7528\u80FD\u529B\u548C\u5B83\u4EEC\u7684\u5165\u53C2"}}));return}if(!t&&(n!=null&&n.trim().startsWith("{"))){a(l("VALIDATION_FAILED","\u5165\u53C2\u8981\u653E\u5728 --input \u540E\u9762",{nextAction:{type:"ask_user",message:`\u6B63\u786E\u5199\u6CD5\uFF1Abest-geo plan ${e} --input '<JSON>'`}}));return}let o;try{o=t?JSON.parse(t):{}}catch{a(l("VALIDATION_FAILED","--input \u4E0D\u662F\u5408\u6CD5 JSON"));return}let i=ee(e,o);if(i.length>0){a(te(e,i));return}let s=o,d=null;if(yt(e)){let b=kt(e,o);if(!b.ok){a(b.envelope);return}s=b.input,d=b.paths}let m=await G();if(!m.ok){a(m.envelope);return}let c=await y("/plans",{method:"POST",apiKey:m.apiKey,body:{operation:e,input:s}});c.ok&&d&&((I=c.data)!=null&&I.planId)&&Et(c.data.planId,d),a(c)}async function St(e){if(!e){a(l("VALIDATION_FAILED","\u7F3A\u5C11 planId",{nextAction:{type:"ask_user",message:"\u5148\u6267\u884C best-geo plan <operation> \u751F\u6210\u8BA1\u5212\uFF0C\u628A\u6458\u8981\u7ED9\u7528\u6237\u786E\u8BA4\u540E\u518D\u6267\u884C"}}));return}let t=await G();if(!t.ok){a(t.envelope);return}let n;if(xt(e)){let o=await It(e,t.apiKey);if(!o.ok){a(o.envelope);return}n=o.uploads}let r=await y(`/plans/${encodeURIComponent(e)}/apply`,{method:"POST",apiKey:t.apiKey,body:n?{uploads:n}:{},isWrite:!0});r.ok&&vt(e),a(r)}function _t(e){let t={};for(let n=0;n<e.length;n+=1){let r=e[n];if(!r.startsWith("--"))continue;let o=r.slice(2),i=e[n+1];i&&!i.startsWith("--")?(t[o]=i,n+=1):t[o]=!0}return t}function Ct(e,t){let n=R();if(e.reason==="denied")return l("HOST_PERMISSION_REQUIRED",`\u6CA1\u6709\u6743\u9650\u8BFB\u5199\u672C\u673A\u914D\u7F6E\u6587\u4EF6\uFF1A${n}`,{nextAction:{type:"request_host_approval",message:`Best GEO \u9700\u8981\u8BFB\u5199 ${n} \u6765\u4FDD\u5B58\u672C\u673A\u7684\u8BBE\u5907\u8EAB\u4EFD\u548C\u6388\u6743\u3002\u8BF7\u7528\u5F53\u524D\u5DE5\u5177\u81EA\u5E26\u7684\u6743\u9650\u786E\u8BA4\u673A\u5236\u7533\u8BF7\u5BF9\u8BE5\u6587\u4EF6\u7684\u8BFB\u5199\u6743\u9650\u540E\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\uFF0C\u4E0D\u8981\u5173\u95ED\u6574\u4E2A\u6C99\u7BB1\uFF0C\u4E5F\u4E0D\u8981\u8BA9\u7528\u6237\u628A\u5BC6\u94A5\u8D34\u8FDB\u5BF9\u8BDD\u3002`,capability:t.capability,...t.retryCommand?{command:t.retryCommand}:{}}});if(e.reason==="permissions_too_open"||e.reason==="not_owner"){let r=e.reason==="not_owner"?"\u8BE5\u6587\u4EF6\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7CFB\u7EDF\u7528\u6237\uFF0C\u8BF7\u8BA9\u7528\u6237\u786E\u8BA4\u540E\u5220\u9664\u6216\u4FEE\u6B63\u5C5E\u4E3B":`\u8BF7\u8BA9\u7528\u6237\u6267\u884C\uFF1Achmod 600 ${n}`;return l("HOST_PERMISSION_REQUIRED",`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u6743\u9650\u4E0D\u5B89\u5168\uFF1A${n}`,{nextAction:{type:"ask_user",message:`${e.message}\u3002${r}\uFF0C\u7136\u540E\u91CD\u8BD5\u3002`}})}return l("HOST_PERMISSION_REQUIRED",`\u672C\u673A\u914D\u7F6E\u6587\u4EF6\u5DF2\u635F\u574F\uFF1A${n}`,{nextAction:{type:"ask_user",message:`\u8BF7\u8BA9\u7528\u6237\u5220\u9664 ${n} \u540E\u91CD\u65B0\u6267\u884C\u767B\u5F55\u3002\u8BE5\u6587\u4EF6\u91CC\u53EA\u6709\u672C\u673A\u8BBE\u5907\u8EAB\u4EFD\u548C\u6388\u6743\uFF0C\u5220\u9664\u4E0D\u4F1A\u5F71\u54CD\u670D\u52A1\u7AEF\u6570\u636E\u3002`,command:`${p} auth login`}})}function Rt(e){return e instanceof w}async function gn(){process.stdout.on("error",r=>process.exit(r.code==="EPIPE"?0:1));let[e,...t]=process.argv.slice(2),n=_t(t);switch(e){case void 0:case"help":it();return;case"version":await st(n.check===!0);return;case"capabilities":at();return;case"skill":if(t[0]==="get"){lt(n.raw===!0);return}break;case"guide":if(t[0]==="list"){dt();return}if(t[0]==="get"&&t[1]){ct(t[1]);return}break;case"auth":if(t[0]==="login")return We();if(t[0]==="status")return Ye();if(t[0]==="logout")return Ze();break;case"plan":await At(t[0],typeof n.input=="string"?n.input:void 0,t[1]);return;case"apply":await St(t[0]);return;case"call":if(t[0]){await bt(t[0],typeof n.input=="string"?n.input:void 0);return}break;default:break}a(l("VALIDATION_FAILED",`\u65E0\u6CD5\u8BC6\u522B\u7684\u547D\u4EE4\uFF1A${[e,...t].filter(Boolean).join(" ")}`,{nextAction:{type:"ask_user",message:"\u6267\u884C best-geo help \u67E5\u770B\u53EF\u7528\u547D\u4EE4"}})),process.exitCode=1}gn().catch(e=>{if(Rt(e)){a(Ct(e,{capability:e.reason==="denied"?"config_write":"config_read",retryCommand:fn()})),process.exitCode=1;return}a(l("SERVER_ERROR",e instanceof Error?e.message:String(e))),process.exitCode=1});function fn(){let[e,t]=process.argv.slice(2);if(e==="auth"&&(t==="login"||t==="status"||t==="logout"))return`${p} auth ${t}`}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "best-geo-test",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "Best GEO CLI — 给本地 AI 助手调用的 GEO 命令行工具",
5
5
  "bin": {
6
6
  "best-geo-test": "dist/index.cjs"