@guandata/guanbi-mcp-server 0.1.38 → 0.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -38,7 +38,9 @@
38
38
  | `GUANBI_MCP_USAGE_STATS` | 否 | 开启 | 匿名聚合使用统计开关;设置为 `0`、`false`、`off` 或 `no` 可关闭。 |
39
39
  | `MCP_TRANSPORT` | 否 | `stdio` | 运行模式;传 `streamable-http` 启用企业 HTTP 模式。 |
40
40
 
41
- stdio PAT 调普通 BI 接口时会固定发送 `X-Guandata-Client: mcp`,无需配置 `BI_PAT_CLIENT`。非 PAT 鉴权不发送该 Header。
41
+ stdio 和 HTTP 模式调用普通 BI、ChatBI 业务接口时,固定发送 `X-Guandata-Client: mcp`,与 PAT 或 uIdToken 鉴权无关。
42
+ HTTP 上游不能覆盖该来源。登录、身份交换、非 PAT 的 profile/版本探测及 ChatBI 能力探测不发送来源头;
43
+ 普通 BI 的 PAT profile/版本探测保留既有来源头,以满足 BI 的 PAT 鉴权要求。ChatBI 服务端用量统计后续单独支持。
42
44
 
43
45
  ### stdio 配置
44
46
 
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
- import"dotenv/config";import{createRequire as pu}from"module";import{z as R}from"zod";var fs="http://guandata-web:8088",gs=R.object({BI_BASE_URL:R.string().url().optional().default(fs),BI_PUBLIC_PATH:R.string().optional().default(""),BI_PAT:R.string().optional(),BI_UID_TOKEN:R.string().optional(),BI_LOGIN_DOMAIN:R.string().optional().default("guanbi"),BI_LOGIN_ID:R.string().optional(),BI_LOGIN_PASSWORD:R.string().optional(),BI_APP_TOKEN:R.string().optional(),BI_LOGIN_ID_HEADER:R.string().optional(),BI_USER_PROPERTY_HEADER:R.string().optional(),BI_USER_PROPERTY_KEY:R.string().optional(),BI_IDENTITY_DEBUG:R.string().optional(),BI_IDENTITY_TOKEN_CACHE_TTL_MS:R.coerce.number().int().positive().default(6e5),BI_REQUEST_TIMEOUT_MS:R.coerce.number().int().positive().default(3e5),BI_MAX_ROWS:R.coerce.number().int().positive().default(1e3),BI_DATA_VERSION:R.string().optional(),GUANBI_MCP_USAGE_STATS:R.string().optional(),MCP_TRANSPORT:R.enum(["stdio","streamable-http"]).optional().default("stdio"),MCP_HTTP_HOST:R.string().optional().default("127.0.0.1"),MCP_HTTP_PORT:R.coerce.number().int().nonnegative().optional().default(9090),MCP_ENTRYPOINT_TOKEN:R.string().optional(),MCP_TRUSTED_GATEWAY:R.string().optional()});function hn(e=process.env){let t=gs.parse(e),n=t.MCP_TRANSPORT==="streamable-http";return{...t,BI_BASE_URL:t.BI_BASE_URL?.replace(/\/+$/,""),BI_PUBLIC_PATH:_s(t.BI_PUBLIC_PATH),BI_PAT:n?void 0:t.BI_PAT?.trim()||void 0,BI_UID_TOKEN:t.BI_UID_TOKEN?.trim()||void 0,BI_LOGIN_DOMAIN:t.BI_LOGIN_DOMAIN?.trim()||"guanbi",BI_LOGIN_ID:t.BI_LOGIN_ID?.trim()||void 0,BI_LOGIN_PASSWORD:t.BI_LOGIN_PASSWORD?.trim()||void 0,BI_APP_TOKEN:t.BI_APP_TOKEN?.trim()||void 0,BI_LOGIN_ID_HEADER:t.BI_LOGIN_ID_HEADER===void 0?"x-guanbi-login-id":_n(t.BI_LOGIN_ID_HEADER),BI_USER_PROPERTY_HEADER:_n(t.BI_USER_PROPERTY_HEADER),BI_USER_PROPERTY_KEY:t.BI_USER_PROPERTY_KEY?.trim()||void 0,BI_IDENTITY_DEBUG:t.BI_IDENTITY_DEBUG?.trim()||void 0,BI_DATA_VERSION:t.BI_DATA_VERSION?.trim()||void 0,GUANBI_MCP_USAGE_STATS:t.GUANBI_MCP_USAGE_STATS?.trim()||void 0,MCP_ENTRYPOINT_TOKEN:t.MCP_ENTRYPOINT_TOKEN?.trim()||void 0,MCP_TRUSTED_GATEWAY:t.MCP_TRUSTED_GATEWAY?.trim()||void 0}}function _s(e){let t=e?.trim().replace(/^\/+|\/+$/g,"")??"";return t?`/${t}`:""}function _n(e){return e?.trim().toLowerCase()||void 0}import{createRequire as Kc}from"module";import{createHash as Wc,randomUUID as Yc}from"crypto";import{createServer as Xc}from"http";import{McpServer as Zc}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as eu}from"@modelcontextprotocol/sdk/server/stdio.js";import{StreamableHTTPServerTransport as tu}from"@modelcontextprotocol/sdk/server/streamableHttp.js";var He=class{record(t){console.error(JSON.stringify({audit:ys({...t})}))}},$e=class{record(){}};function ht(e,t,n,r,i){return{transport:t.transport,tool:e,tenantId:t.audit.tenantId,endUserId:t.audit.endUserId,traceId:t.audit.traceId,status:r,durationMs:Math.max(0,Date.now()-n),failureType:r==="error"?hs(i):void 0}}function hs(e){return e instanceof Error?e.name||"Error":typeof e}function ys(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function Fe(e){if(!e.BI_LOGIN_ID||!e.BI_LOGIN_PASSWORD||!e.BI_LOGIN_DOMAIN)throw new Error("\u5BC6\u7801\u767B\u5F55\u9700\u8981\u914D\u7F6E BI_LOGIN_DOMAIN\u3001BI_LOGIN_ID\u3001BI_LOGIN_PASSWORD\u3002");let t=await fetch(Is(e,"/api/user/sign-in"),{method:"POST",headers:{"Content-Type":"application/json","raw-backend-response":"TRUE"},body:JSON.stringify({domain:e.BI_LOGIN_DOMAIN,loginId:e.BI_LOGIN_ID,password:Buffer.from(e.BI_LOGIN_PASSWORD,"utf8").toString("base64")}),signal:AbortSignal.timeout(e.BI_REQUEST_TIMEOUT_MS)}),n=await t.text();if(!t.ok)throw new Error(`BI \u767B\u5F55\u5931\u8D25\uFF1AHTTP ${t.status} ${Rs(n)}`);let r=bs(t,n);if(!r)throw new Error("BI \u767B\u5F55\u54CD\u5E94\u4E2D\u672A\u627E\u5230 X-Auth-Token/Authorization/uIdToken/authToken/token\u3002");return{token:r}}function Is(e,t){return`${e.BI_BASE_URL}${e.BI_PUBLIC_PATH}${t}`}function bs(e,t){let n=Ts(e.headers);if(n)return n;let r=ws(t);return r||Cs(e.headers)}function Ts(e){let t=e.get("x-auth-token")?.trim();if(t)return t;let n=e.get("authorization")?.trim();return n&&(n.match(/^Bearer\s+(.+)$/i)?.[1]??n).trim()||void 0}function ws(e){try{let t=JSON.parse(e);return yn(t)??yn(Es(t.response))}catch{return}}function Cs(e){return[...e.getSetCookie?.()??[],...Ss(e.get("set-cookie"))].map(n=>n.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1]).find(Boolean)}function Ss(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function yn(e){if(e)for(let t of["uIdToken","authToken","token"]){let n=e[t];if(typeof n=="string"&&n)return n}}function Es(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Rs(e,t=500){return e.length>t?`${e.slice(0,t)}...`:e}var Bs="guanbi_mcp_chatbi",v=class extends Error{detail;retryableForBaseUrl;authExpired;constructor(t,n,r={}){super(t),this.name="ChatBIRequestError",this.detail=n,this.retryableForBaseUrl=!!r.retryableForBaseUrl,this.authExpired=!!r.authExpired}},L=class{constructor(t){this.config=t;this.token=t.BI_UID_TOKEN,this.candidates=t.BI_BASE_URL?As(`${t.BI_BASE_URL}${t.BI_PUBLIC_PATH}`):[]}config;token;resolvedBaseUrl;candidates;triedBaseUrls=new Set;lastError;loginPromise;refreshPromise;getRegisteredTools(){return["chatbi_list_themes","chatbi_query","chatbi_insight_start","chatbi_insight_poll"]}getResolvedBaseUrl(){return this.resolvedBaseUrl}getTriedBaseUrls(){return[...this.triedBaseUrls]}getLastError(){return this.lastError}async probe(){try{return await this.listThemes(),{available:!0,resolvedBaseUrl:this.resolvedBaseUrl,triedBaseUrls:this.getTriedBaseUrls(),registeredTools:this.getRegisteredTools()}}catch(t){let n=In(t,"probe");return{available:!1,lastError:n,failureType:Hs(n),triedBaseUrls:this.getTriedBaseUrls(),registeredTools:this.getRegisteredTools()}}}async listThemes(t={}){let n={filter_enable:!0,list_type:"CHAT"};return typeof t.isInsight=="boolean"&&(n.is_insight=t.isInsight),(await this.request("/theme/list-theme",{operation:"listThemes",body:n,retrySafeBaseUrlFallback:!0,validateResponse:qs})).themes}async query(t){let n=await this.resolveThemeId(t.themeId,t.themeName,!1),r={attachments:[],theme_id:n,message:t.message,config:bn({fast_mode:t.fastMode??!0,n_samples:t.nSamples})};t.sessionId&&(r.session_id=t.sessionId),t.externalContext&&(r.external_context=t.externalContext);let i=await this.request("/chat/send-message-sync",{operation:"query",body:r,includeDeviceId:!0});try{Fs(i)}catch(s){throw this.operationError("query","/chat/send-message-sync",s)}return i}async insight(t){let n=t.timeoutMs??3e5,r=t.pollIntervalMs??2e3,i=Date.now()+n,s=await this.startInsight({...t,requestTimeoutMs:Tn(i)});if(!s.theme_id)throw this.operationError("insight.send","/chat/send-message","ChatBI insight response missing theme_id");if(!s.message_id?.trim())throw this.operationError("insight.send","/chat/send-message","ChatBI insight response missing message_id");for(;;){let o=await this.getAgentAnswer(s.theme_id,s.message_id,Tn(i));switch(o.message_id??=s.message_id,o.session_id??=s.session_id,o.status){case"success":return o;case"failure":case"stopped":throw this.operationError("insight.poll","/chat/get-agent-answer",o.detail?.trim()||"Insight request failed")}await Qs(i,r,n)}}async startInsight(t){let n=await this.resolveThemeId(t.themeId,t.themeName,!0),r={attachments:[],theme_id:n,message:t.message,is_insight:1};t.sessionId&&(r.session_id=t.sessionId),t.externalContext&&(r.external_context=t.externalContext);let i=bn({analysis_expert_id:t.analysisExpertId,agent_mode:t.agentMode,analysis_confirmation_enabled:t.analysisConfirmationEnabled});Object.keys(i).length&&(r.config=i);let s=await this.request("/chat/send-message",{operation:"insight.send",body:r,includeDeviceId:!0,requestTimeoutMs:t.requestTimeoutMs});if(!s.message_id?.trim())throw this.operationError("insight.send","/chat/send-message","ChatBI insight response missing message_id");return s.theme_id=n,s}async pollInsight(t){let n=await this.resolveThemeId(t.themeId,t.themeName,!0),r=await this.getAgentAnswer(n,t.messageId,t.requestTimeoutMs);return r.message_id||(r.message_id=t.messageId),r}async getAgentAnswer(t,n,r){let i=new URLSearchParams({theme_id:t,message_id:n});try{return await this.request(`/chat/get-agent-answer?${i.toString()}`,{operation:"insight.poll",retrySafeBaseUrlFallback:!0,requestTimeoutMs:r})}catch(s){if(Us(s))return{status:"waiting",message_id:n};throw s}}async resolveThemeId(t,n,r){let i=t?.trim();if(i)return i;let s=n?.trim();if(!s)throw new Error("\u7F3A\u5C11\u4E3B\u9898\u9009\u62E9\uFF0C\u8BF7\u4F20 theme_id \u6216 theme_name\u3002");let o=await this.listThemes({isInsight:r?!0:void 0});return $s(o,s)}async request(t,n){this.assertUsableConfig();let r=this.resolvedBaseUrl?[this.resolvedBaseUrl]:this.candidates,i;for(let s of r){this.triedBaseUrls.add(s);try{let o=await this.requestToBaseUrlWithAuthRetry(s,t,n);return n.validateResponse?.(o,{operation:n.operation,baseUrl:s,path:t}),this.resolvedBaseUrl=s,this.lastError=void 0,o}catch(o){if(i=o,this.lastError=In(o,n.operation),!Ds(o,n.retrySafeBaseUrlFallback))throw this.withTriedBaseUrls(o)}}throw this.withTriedBaseUrls(i??new Error("\u65E0\u6CD5\u5B9A\u4F4D ChatBI Public API\u3002"))}withTriedBaseUrls(t){return t instanceof v&&(t.detail.tried_base_urls=this.getTriedBaseUrls(),this.lastError=t.detail),t}operationError(t,n,r){let i=r instanceof Error?r.message:String(r);return new v(i,{operation:t,base_url:this.resolvedBaseUrl,path:n,chatbi_message:i,tried_base_urls:this.getTriedBaseUrls(),detail:i})}async requestToBaseUrlWithAuthRetry(t,n,r){if(this.config.BI_PAT)return this.requestToBaseUrl(t,n,{type:"pat",token:this.config.BI_PAT},r,{operation:r.operation,baseUrl:t,path:n});let i=await this.ensureToken(),s={operation:r.operation,baseUrl:t,path:n};try{return await this.requestToBaseUrl(t,n,{type:"uid",token:i},r,s)}catch(o){if(!vs(o)||!this.canRefreshToken())throw o;let a=await this.refreshToken();return this.requestToBaseUrl(t,n,{type:"uid",token:a},r,{...s,tokenRefreshed:!0})}}async requestToBaseUrl(t,n,r,i,s){let o=i.body===void 0?"GET":"POST",a;try{a=await fetch(`${t}${n}`,{method:o,headers:Os(r,i),body:i.body===void 0?void 0:JSON.stringify(i.body),signal:AbortSignal.timeout(i.requestTimeoutMs??this.config.BI_REQUEST_TIMEOUT_MS)})}catch(d){throw new v(d instanceof Error?d.message:String(d),{operation:s.operation,base_url:s.baseUrl,path:s.path,token_refreshed:s.tokenRefreshed,detail:d instanceof Error?d.message:String(d)})}let c=await a.text(),u=ks(c,a,s);if(!a.ok||Ps(u))throw xs(u,c,a,s);return r.type==="uid"&&this.refreshTokenFromResponse(a,u),u.data}async ensureToken(){return this.token?this.token:(this.loginPromise??=this.signInForToken().finally(()=>{this.loginPromise=void 0}),this.loginPromise)}async refreshToken(){return this.refreshPromise??=this.refreshTokenOnce().finally(()=>{this.refreshPromise=void 0}),this.refreshPromise}async refreshTokenOnce(){if(this.config.BI_UID_TOKEN_REFRESH){let t=await this.config.BI_UID_TOKEN_REFRESH();return this.token=t,t}return this.signInForToken()}async signInForToken(){this.token=void 0;let t=await Fe(this.config);return this.token=t.token,t.token}refreshTokenFromResponse(t,n){let r=Gs(t,n);!r||r===this.token||(this.token=r)}hasPasswordLogin(){return!!(this.config.BI_LOGIN_DOMAIN&&this.config.BI_LOGIN_ID&&this.config.BI_LOGIN_PASSWORD)}canRefreshToken(){return!!this.config.BI_UID_TOKEN_REFRESH||this.hasPasswordLogin()}assertUsableConfig(){if(!this.config.BI_BASE_URL)throw new Error("\u7F3A\u5C11 BI_BASE_URL\uFF0C\u65E0\u6CD5\u63A8\u5BFC ChatBI Public API \u5730\u5740\u3002")}};function As(e){let t=new URL(e),n=[],r=s=>{let o=new URL(t.toString());o.pathname=s,o.search="",o.hash="";let a=o.toString().replace(/\/+$/,"");n.includes(a)||n.push(a)},i=t.pathname.replace(/\/+$/,"");return r("/api/chat/public-api"),i&&r(`${i}/api/chat/public-api`),r(i?`${i}/public-api`:"/public-api"),r("/public-api"),n}function ze(e){return e.BI_BASE_URL?e.BI_PAT||e.BI_UID_TOKEN?!0:!!(e.BI_LOGIN_DOMAIN&&e.BI_LOGIN_ID&&e.BI_LOGIN_PASSWORD):!1}function Os(e,t){let n={"User-Agent":"guanbi-mcp-server",...e.type==="pat"?{"X-Personal-Token":e.token}:{Cookie:`uIdToken=${e.token}`}};return t.body!==void 0&&(n["Content-Type"]="application/json"),t.includeDeviceId&&(n["Device-ID"]=Bs),n}function ks(e,t,n){if(!e)return{};try{return JSON.parse(e)}catch{throw new v("ChatBI response is not valid JSON",{operation:n.operation,base_url:n.baseUrl,path:n.path,http_status:t.status,token_refreshed:n.tokenRefreshed,detail:Sn(e)},{retryableForBaseUrl:!0})}}function Ps(e){let t=wn(e);return typeof t=="number"&&![0,200].includes(t)||e.result==="fail"||e.success===!1}function xs(e,t,n,r){let i=wn(e),s=Ns(e),o=s||t||`ChatBI request failed with status ${n.status}`,a={operation:r.operation,base_url:r.baseUrl,path:r.path,http_status:n.status,chatbi_code:i,chatbi_message:s,token_refreshed:r.tokenRefreshed,detail:Sn(t)},c=Ls(o),u=!c&&Ms(n.status,i);return new v(o,a,{authExpired:u,retryableForBaseUrl:c||js(n.status,i)})}function Ds(e,t){return!!(t&&e instanceof v&&e.retryableForBaseUrl)}function vs(e){return e instanceof v&&e.authExpired}function Ms(e,t){return e===401||e===403||t===401||t===403||t===5001}function js(e,t){return[401,403,404,405].includes(e)||typeof t=="number"&&[401,403,404,405].includes(t)}function Us(e){return e instanceof v&&e.detail.http_status===200&&e.detail.chatbi_code===404&&e.detail.chatbi_message==="Message not found."}function wn(e){if(typeof e.code=="number")return e.code;let t=Ve(e.error);return typeof t?.status=="number"?t.status:void 0}function Ns(e){if(typeof e.message=="string"&&e.message.trim())return e.message;let t=Ve(e.error);return typeof t?.message=="string"&&t.message.trim()?t.message:void 0}function Ls(e){return/No static resource/i.test(e)}function Ve(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function qs(e,t){let n=Ve(e);if(!Array.isArray(n?.themes))throw new v("ChatBI list-theme response missing themes",{operation:t.operation,base_url:t.baseUrl,path:t.path,detail:"missing themes"},{retryableForBaseUrl:!0})}function Gs(e,t){let r=[...e.headers.getSetCookie?.()??[],...Js(e.headers.get("set-cookie"))].map(s=>yt(s.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1])).find(Boolean);if(r)return r;let i=yt(e.headers.get("x-auth-token"));return i||Cn(t)}function Js(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function yt(e){if(typeof e!="string")return;let t=e.trim();return t&&!/\s/.test(t)?t:void 0}function Cn(e){let t=Ve(e);if(t){for(let n of["uIdToken","authToken"]){let r=yt(t[n]);if(r)return r}for(let n of["data","response"]){let r=Cn(t[n]);if(r)return r}}}function In(e,t){return e instanceof v?e.detail:{operation:t,detail:e instanceof Error?e.message:String(e)}}function Sn(e,t=1e3){return e.length>t?`${e.slice(0,t)}...`:e}function Hs(e){let t=`${e.chatbi_message??""} ${e.detail??""}`;return/BI 登录失败|密码登录|sign-?in|login/i.test(t)?"login_failed":e.http_status===401||e.http_status===403||e.chatbi_code===401||e.chatbi_code===403?"permission_denied":/No static resource|not valid JSON/i.test(t)||e.http_status===404||e.http_status===405||e.chatbi_code===404||e.chatbi_code===405?"public_api_unreachable":"unknown"}function $s(e,t){let n=t.trim().toLowerCase(),r,i=[];for(let s of e){let o=s.theme_name.trim().toLowerCase();o===n?r=s:o.includes(n)&&i.push(s)}if(r)return r.theme_id;if(i.length===1)return i[0].theme_id;throw i.length>1?new Error(`\u4E3B\u9898\u540D\u5339\u914D\u5230\u591A\u4E2A\u7ED3\u679C\uFF1A${t}`):new Error(`\u672A\u627E\u5230\u4E3B\u9898\uFF1A${t}`)}function bn(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>typeof t<"u"))}function Fs(e){if([e.final_status,e.answer_status,e.query_status].some(Vs))throw new Error(`ChatBI query failed: ${zs(e.query_context?.err_msg,e.query_context?.detail,e.query_context?.msg,e.answer_context?.detail,e.answer_context?.msg,"unknown failure")}`);if(!e.answer?.explain?.trim()&&!(e.query_result?.columns?.length||e.query_result?.preview?.length))throw new Error("ChatBI response missing query content")}function zs(...e){return e.find(t=>typeof t=="string"&&t.trim())?.trim()}function Vs(e){return typeof e=="string"&&e.trim().toLowerCase()==="failure"}function Tn(e){let t=e-Date.now();if(t<=0)throw new Error("Insight request timed out");return t}async function Qs(e,t,n){let r=e-Date.now();if(r<=0)throw new Error(`Insight request timed out after ${n}ms`);await new Promise(i=>setTimeout(i,Math.min(t,r)))}var Ae="8.2.0",bt=["search_metrics","list_metric_catalog","get_metric_detail","query_metric_data","search_metric_trees","get_metric_tree_detail","query_metric_tree_attribution"],Ks=["inspect_page_insight","generate_page_insight","generate_card_insight","list_dashboard_agents","get_dashboard_agent","ask_dashboard_agent","list_dashboard_agent_sessions","list_dashboard_agent_messages"],Ws=["get_bi_capabilities","global_search",...bt,"execute_sql_query","get_dataset_detail","get_card_info","query_card_data","get_page_info",...Ks],Ys=6e4,Xs="PAT \u6A21\u5F0F\u4EC5\u652F\u6301\u666E\u901A BI \u63A5\u53E3\uFF0C\u4E0D\u652F\u6301 ChatBI public-api\u3002",It=new WeakMap;async function Oe(e,t){let n=It.get(e);return(!n||n.expiresAt<=Date.now())&&It.set(e,{expiresAt:Date.now()+Ys,promise:eo(e,t).catch(r=>Zs(r,t))}),It.get(e).promise}function Bn(e){let t=!e.BI_BASE_URL,n="HTTP \u6A21\u5F0F\u4E0B execute_sql_query \u4F1A\u5728\u8C03\u7528\u65F6\u4F7F\u7528\u5F53\u524D\u7528\u6237 token \u5224\u65AD BI \u7248\u672C/\u80FD\u529B\u3002",r="HTTP \u6A21\u5F0F\u542F\u52A8\u671F\u5C1A\u672A\u89E3\u6790\u8BF7\u6C42\u8C03\u7528\u8005\u3002";return{ok:!t,error:t?"\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u7F3A\u5C11 BI_BASE_URL\u3002":void 0,versionSource:"api",dataVersion:e.BI_DATA_VERSION,service:wt(e,t?["get_bi_capabilities"]:Tt(e)),caller:{ok:!1,error:r,features:{executeSqlQuery:{enabled:!1,minVersion:Ae,reason:r}},chatbi:le(e,r)},features:{executeSqlQuery:{enabled:!t,minVersion:Ae,reason:t?"\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u7F3A\u5C11 BI_BASE_URL\u3002":n}},metricPlatform:{registeredTools:t?[]:bt,readOnly:!0,lastError:t?"\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u7F3A\u5C11 BI_BASE_URL\u3002":void 0},chatbi:le(e,"HTTP \u6A21\u5F0F\u542F\u52A8\u671F\u4E0D\u4F7F\u7528\u67D0\u4E2A\u7528\u6237 token \u63A2\u6D4B ChatBI \u80FD\u529B\u3002")}}async function An(e,t,n){let i=(await Oe(e,t)).features[n];if(!i.enabled)throw new Error(`\u5F53\u524D BI \u73AF\u5883\u4E0D\u652F\u6301 ${n}\uFF1A${i.reason??"\u80FD\u529B\u672A\u542F\u7528"}`)}function Zs(e,t){let n=e instanceof Error?e.message:String(e);return{ok:!1,error:n,versionSource:"api",features:{executeSqlQuery:{enabled:!1,minVersion:Ae,reason:`\u65E0\u6CD5\u786E\u8BA4 BI \u80FD\u529B\uFF1A${n}`}},metricPlatform:{registeredTools:[],readOnly:!0,lastError:n},chatbi:le(t,n),service:wt(t,Tt(t)),caller:{ok:!1,error:n,features:{executeSqlQuery:{enabled:!1,minVersion:Ae,reason:`\u65E0\u6CD5\u786E\u8BA4 BI \u80FD\u529B\uFF1A${n}`}},chatbi:le(t,n)}}}async function eo(e,t){let n=no(t);if(n.length)throw new Error(`\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A${n.join("\uFF1B")}\u3002`);let r=t.BI_DATA_VERSION?"env":"api",i=t.BI_DATA_VERSION?{dataVersion:t.BI_DATA_VERSION,capabilityVersion:t.BI_DATA_VERSION}:await ro(e),s=io(i.capabilityVersion,Ae),o=await to(t);return{ok:!0,appVersion:i.appVersion,dataVersion:i.dataVersion,versionSource:r,service:wt(t,Tt(t)),caller:{ok:!0,features:{executeSqlQuery:s},chatbi:o},features:{executeSqlQuery:s},metricPlatform:{registeredTools:bt,readOnly:!0},chatbi:o}}function Tt(e){let t=new Set(Ws);if(!e.BI_PAT&&(ze(e)||e.MCP_TRANSPORT==="streamable-http"))for(let n of new L(e).getRegisteredTools())t.add(n);return[...t]}function wt(e,t){return{mode:e.MCP_TRANSPORT??"stdio",toolList:t,boundBISite:{configured:!!e.BI_BASE_URL,baseUrl:e.BI_BASE_URL,publicPath:e.BI_PUBLIC_PATH}}}async function to(e){if(e.BI_PAT)return le(e,Xs);let t=new L(e);return ze(e)?t.probe():le(e,"\u7F3A\u5C11 BI_BASE_URL \u6216\u9274\u6743\u914D\u7F6E\u3002")}function le(e,t){return{available:!1,registeredTools:e.BI_PAT||!ze(e)?[]:new L(e).getRegisteredTools(),failureType:"unknown",triedBaseUrls:[],lastError:{operation:"probe",chatbi_message:t,detail:t}}}function no(e){let t=[];if(e.BI_BASE_URL||t.push("\u7F3A\u5C11 BI_BASE_URL"),!e.BI_PAT&&!e.BI_UID_TOKEN){let n=[["BI_LOGIN_DOMAIN",e.BI_LOGIN_DOMAIN],["BI_LOGIN_ID",e.BI_LOGIN_ID],["BI_LOGIN_PASSWORD",e.BI_LOGIN_PASSWORD]].filter(([,r])=>!r).map(([r])=>r);n.length&&t.push(`\u7F3A\u5C11\u9274\u6743\u914D\u7F6E\uFF1A\u8BF7\u914D\u7F6E BI_PAT\u3001BI_UID_TOKEN\uFF0C\u6216\u8865\u5168\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u914D\u7F6E\uFF08\u7F3A\u5C11 ${n.join("\u3001")}\uFF09`)}return t}async function ro(e){let t=await e.get("/api/server-version"),n=Rn(t.version),r=Rn(t.dataVersion)??n;if(!r)throw new Error("BI \u7248\u672C\u63A5\u53E3\u672A\u8FD4\u56DE version \u6216 dataVersion\u3002");return{appVersion:n,dataVersion:r,capabilityVersion:r}}function io(e,t){let n=En(e),r=En(t);if(!r)throw new Error(`\u5185\u90E8\u914D\u7F6E\u9519\u8BEF\uFF1A\u65E0\u6CD5\u89E3\u6790\u6700\u4F4E\u7248\u672C ${t}\u3002`);if(!n)return{enabled:!1,minVersion:t,reason:`\u65E0\u6CD5\u4ECE\u7248\u672C\u5B57\u7B26\u4E32 "${e}" \u4E2D\u89E3\u6790\u4EA7\u54C1\u7248\u672C\uFF0C\u8BF7\u914D\u7F6E BI_DATA_VERSION\u3002`};let i=so(n,r)>=0;return{enabled:i,minVersion:t,reason:i?void 0:`\u9700\u8981 BI ${t}+\uFF0C\u5F53\u524D\u7248\u672C\u4E3A ${e}\u3002`}}function En(e){let t=e.match(/(\d+)\.(\d+)\.(\d+)/);if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}function so(e,t){for(let n=0;n<e.length;n+=1){let r=e[n]-t[n];if(r!==0)return r}return 0}function Rn(e){return typeof e=="string"&&e.trim()?e.trim():void 0}var Qe=class{constructor(t){this.config=t}config;cache=new Map;async exchange(t){let n=On(t),r=this.cache.get(this.cacheKey(n));if(r&&r.expiresAtMs>Date.now())return this.result(n,r.token,r.biExpireAt);let i=await this.fetchLoginIdToken(n);return this.cache.set(this.cacheKey(n),{token:i.token,expiresAtMs:this.resolveCacheExpiresAt(i.expireAt),biExpireAt:i.expireAt}),this.result(n,i.token,i.expireAt)}async exchangeUserProperty(t){let n=await this.fetchLoginIdByUserProperty(t);return this.exchange(n)}async refresh(t){return this.cache.delete(this.cacheKey(t)),(await this.exchange(t)).token}result(t,n,r){return{token:n,expireAt:r,refresh:()=>this.refresh(t)}}async fetchLoginIdByUserProperty(t){let n=oo(t.value);if(!this.config.BI_BASE_URL)throw this.debugError("BI_BASE_URL is required for user property identity exchange.",{operation:"userPropertyLookup",request:{userPropertyValue:n}});if(!this.config.BI_APP_TOKEN)throw this.debugError("BI_APP_TOKEN is required for user property identity exchange.",{operation:"userPropertyLookup",request:{userPropertyValue:n}});let r=t.key?.trim();if(!r)throw this.debugError("BI_USER_PROPERTY_KEY is required for user property identity exchange.",{operation:"userPropertyLookup",request:{userPropertyValue:n}});let i=this.buildUrl("/public-api/user/properties/list"),s={token:this.config.BI_APP_TOKEN,userPropertyKey:r,userPropertyValue:n,enabled:!0,offset:0,limit:2},o;try{o=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","raw-backend-response":"TRUE"},body:JSON.stringify(s),signal:AbortSignal.timeout(this.config.BI_REQUEST_TIMEOUT_MS)})}catch(l){throw this.debugError(`BI user property lookup request failed: ${l instanceof Error?l.message:String(l)}`,{operation:"userPropertyLookup",request:{method:"POST",url:i,body:s},error:l instanceof Error?l.message:String(l)},[this.config.BI_APP_TOKEN])}let a=await o.text(),c=kn(a);if(!o.ok||Pn(c))throw this.debugError(`BI user property lookup failed: HTTP ${o.status} ${Ct(a,[this.config.BI_APP_TOKEN,r,n])}`,{operation:"userPropertyLookup",request:{method:"POST",url:i,body:s},response:{status:o.status,body:a}},[this.config.BI_APP_TOKEN]);let u=c?.response?.list??[],d=c?.response?.total??u.length;if(d!==1||u.length!==1)throw this.debugError(`BI user property lookup must match exactly one user: matched ${d} user(s) for ${r}.`,{operation:"userPropertyLookup",request:{method:"POST",url:i,body:s},response:{status:o.status,total:d,listCount:u.length,matchedLoginIds:u.map(l=>l.loginId).filter(Boolean)}},[this.config.BI_APP_TOKEN]);return On(u[0]?.loginId??"")}async fetchLoginIdToken(t){if(!this.config.BI_BASE_URL)throw this.debugError("BI_BASE_URL is required for loginId identity exchange.",{operation:"loginIdSignIn",request:{loginId:t}});if(!this.config.BI_APP_TOKEN)throw this.debugError("BI_APP_TOKEN is required for loginId identity exchange.",{operation:"loginIdSignIn",request:{loginId:t}});let n=this.buildUrl("/public-api/user/loginId/sign-in"),r={token:this.config.BI_APP_TOKEN,loginId:t},i;try{i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","raw-backend-response":"TRUE"},body:JSON.stringify(r),signal:AbortSignal.timeout(this.config.BI_REQUEST_TIMEOUT_MS)})}catch(c){throw this.debugError(`BI loginId token exchange request failed: ${c instanceof Error?c.message:String(c)}`,{operation:"loginIdSignIn",request:{method:"POST",url:n,body:r},error:c instanceof Error?c.message:String(c)},[this.config.BI_APP_TOKEN])}let s=await i.text(),o=kn(s),a=o?.response?.token?.trim();if(!i.ok||Pn(o)||!a)throw this.debugError(`BI loginId token exchange failed: HTTP ${i.status} ${Ct(s,[this.config.BI_APP_TOKEN,a,t])}`,{operation:"loginIdSignIn",request:{method:"POST",url:n,body:r},response:{status:i.status,body:s}},[this.config.BI_APP_TOKEN,a]);return{token:a,expireAt:o?.response?.expireAt}}buildUrl(t){let n=t.startsWith("/")?t:`/${t}`;return`${this.config.BI_BASE_URL}${this.config.BI_PUBLIC_PATH}${n}`}cacheKey(t){return`${this.config.BI_BASE_URL??""}${this.config.BI_PUBLIC_PATH}\0${t}`}resolveCacheExpiresAt(t){let n=Date.now()+this.config.BI_IDENTITY_TOKEN_CACHE_TTL_MS,r=ao(t);return r?Math.min(n,r):n}debugError(t,n,r=[]){if(!uo(this.config))return new Error(t);let i=St(n,[this.config.BI_APP_TOKEN,...r]);return console.error(JSON.stringify({identityExchangeDebug:i})),new Error(`${t}
3
- identity_debug=${JSON.stringify(i,null,2)}`)}};function On(e){let t=e.trim();if(!t)throw new Error("GuanBI loginId is required for loginId identity exchange.");return t}function oo(e){let t=e.trim();if(!t)throw new Error("BI user property value is required for user property identity exchange.");return t}function kn(e){if(e.trim())try{return JSON.parse(e)}catch{return}}function Pn(e){return!e||e.result&&!["ok","success"].includes(e.result.toLowerCase())?!0:e.success===!1}function ao(e){if(!e)return;let t=e.replace(" ","T"),n=Date.parse(t);return Number.isFinite(n)?n:void 0}function Ct(e,t){let n=t.filter(r=>!!r).reduce((r,i)=>r.split(i).join("[redacted]"),e);return lo(n)}function St(e,t){let n=t.filter(r=>!!r);return typeof e=="string"?Ct(e,n):Array.isArray(e)?e.map(r=>St(r,n)):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).map(([r,i])=>[r,co(r)?"[redacted]":St(i,n)]))}function co(e){return["token","authorization","cookie","uidtoken","uIdToken".toLowerCase()].includes(e.toLowerCase())}function uo(e){return["1","true","yes","on"].includes(e.BI_IDENTITY_DEBUG?.trim().toLowerCase()??"")}function lo(e,t=1e3){return e.length>t?`${e.slice(0,t)}\u2026`:e}var ke="bi-user-property-header",Pe="bi-user-property-key",po=new Set(["authorization","proxy-authorization","cookie","set-cookie","x-personal-token","x-guanbi-uid-token",ke,Pe]);function Dn(e){let t=xn(e,ke),n=xn(e,Pe);if(t===void 0&&n===void 0)return;if(!t||!n)throw new Error("\u7528\u6237\u5C5E\u6027\u6620\u5C04\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u8BF7\u540C\u65F6\u4F20\u5165 bi-user-property-header \u548C bi-user-property-key\u3002");if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(t)||po.has(t.toLowerCase()))throw new Error("\u7528\u6237\u5C5E\u6027\u6620\u5C04\u6765\u6E90\u65E0\u6548\uFF1A\u8BF7\u6307\u5B9A\u5408\u6CD5\u7684\u7528\u6237\u8EAB\u4EFD\u8BF7\u6C42\u5934\uFF0C\u4E0D\u80FD\u4F7F\u7528\u51ED\u8BC1\u5934\u6216\u6620\u5C04\u914D\u7F6E\u5934\u3002");let r=e.filter(([i])=>i.toLowerCase()===t.toLowerCase());if(r.length!==1||!r[0]?.[1].trim())throw new Error(`\u7528\u6237\u5C5E\u6027\u6620\u5C04\u7F3A\u5C11\u8EAB\u4EFD\u503C\uFF1A\u8BF7\u901A\u8FC7 ${t} \u8BF7\u6C42\u5934\u4F20\u5165\u5355\u4E2A\u975E\u7A7A\u7528\u6237\u8EAB\u4EFD\u503C\u3002`);return{key:n,value:r[0][1].trim()}}function xn(e,t){let n=e.filter(([i])=>i.toLowerCase()===t);if(n.length===0)return;if(n.length>1||n[0][1].includes(","))throw new Error(`\u7528\u6237\u5C5E\u6027\u6620\u5C04\u914D\u7F6E\u65E0\u6548\uFF1A${t} \u53EA\u80FD\u4F20\u5165\u4E00\u4E2A\u503C\uFF0C\u4E0D\u80FD\u91CD\u590D\u6216\u5305\u542B\u9017\u53F7\u3002`);let r=n[0][1].trim();if(!r)throw new Error(`\u7528\u6237\u5C5E\u6027\u6620\u5C04\u914D\u7F6E\u65E0\u6548\uFF1A${t} \u4E0D\u80FD\u4E3A\u7A7A\u3002`);return r}var ge="x-personal-token";function mo(e){return{transport:"stdio",...e.BI_PAT?{biPatToken:e.BI_PAT}:{},biUidToken:e.BI_UID_TOKEN,audit:{}}}function jn(e){return{resolve:()=>mo(e)}}function Ke(e){let t=xe(e);if(t)return{transport:"streamable-http",biPatToken:t,audit:me(e)};let n=Y(e,"x-guanbi-uid-token")?.trim();if(!n)throw new Error("\u7F3A\u5C11 GuanBI \u7528\u6237\u4EE4\u724C\uFF1A\u8BF7\u901A\u8FC7 X-GuanBI-Uid-Token \u4F20\u5165\u5F53\u524D\u7528\u6237 uIdToken\u3002");return{transport:"streamable-http",biUidToken:n,audit:me(e)}}function Un(e,t={}){let n=e?new Qe(e):void 0,r=t.exchangeLoginId??t.exchange??(n?n.exchange.bind(n):void 0),i=t.exchangeUserProperty??(n?n.exchangeUserProperty.bind(n):void 0);return{resolve:async s=>{if(!s?.requestInfo?.headers)return e?.BI_PAT?{transport:"streamable-http",biPatToken:e.BI_PAT,audit:{}}:{transport:"streamable-http",audit:{}};let o=s.requestInfo.headers,a=xe(o);if(a)return{transport:"streamable-http",biPatToken:a,audit:me(o)};if(e?.BI_PAT)return{transport:"streamable-http",biPatToken:e.BI_PAT,audit:me(o)};if(Y(o,"x-guanbi-uid-token")?.trim()||!e)return Ke(o);let u=e.BI_LOGIN_ID_HEADER,d=u?fe(Y(o,u)):void 0;if(d){let f=await r?.(d);return f?{transport:"streamable-http",biUidToken:f.token,biUidTokenRefresh:f.refresh,loginId:d,audit:me(o)}:Ke(o)}let l;try{l=Dn(We(o))}catch(f){throw vn(o,e,f.message)}if(!l&&e.BI_USER_PROPERTY_HEADER){let f=fe(Y(o,e.BI_USER_PROPERTY_HEADER));f&&(l={key:e.BI_USER_PROPERTY_KEY,value:f})}if(l){let f=await i?.(l);return f?{transport:"streamable-http",biUidToken:f.token,biUidTokenRefresh:f.refresh,audit:me(o)}:Ke(o)}throw vn(o,e)}}}function xe(e){return fe(Y(e,ge))}function Y(e,t){if(e instanceof Headers)return e.get(t)??void 0;let n=e.get;if(typeof n=="function")return n.call(e,t)??void 0;let r=t.toLowerCase();for(let[i,s]of Object.entries(e))if(i.toLowerCase()===r)return Array.isArray(s)?s[0]:s}function fe(e){return e?.trim()||void 0}function me(e){return{tenantId:fe(Y(e,"x-tenant-id")),endUserId:fe(Y(e,"x-end-user-id")),traceId:fe(Y(e,"x-trace-id"))}}function vn(e,t,n="\u7F3A\u5C11 GuanBI \u7528\u6237\u4EE4\u724C\uFF1A\u8BF7\u4F20\u5165 X-GuanBI-Uid-Token\uFF0C\u6216\u901A\u8FC7 bi-user-property-header \u548C bi-user-property-key \u914D\u7F6E\u7528\u6237\u5C5E\u6027\u6620\u5C04\u3002"){if(!yo(t))return new Error(n);let r={operation:"resolveHttpCallerContext",expectedIdentityHeaders:fo(e,t),receivedHeaderNames:go(e),receivedIdentityLikeHeaders:Mn(Object.fromEntries(We(e).filter(([i])=>ho(i.toLowerCase()))),[ge,"x-guanbi-uid-token",t.BI_LOGIN_ID_HEADER,t.BI_USER_PROPERTY_HEADER]),receivedHeaders:Mn(e,[ge,"x-guanbi-uid-token",t.BI_LOGIN_ID_HEADER,t.BI_USER_PROPERTY_HEADER])};return console.error(JSON.stringify({identityExchangeDebug:r})),new Error(`${n}
4
- identity_debug=${JSON.stringify(r,null,2)}`)}function fo(e,t){return[{source:"pat",name:ge,present:pe(e,ge)},{source:"uidToken",name:"x-guanbi-uid-token",present:pe(e,"x-guanbi-uid-token")},{source:"userPropertyHeader",name:ke,present:pe(e,ke)},{source:"userPropertyKey",name:Pe,present:pe(e,Pe)},...t.BI_LOGIN_ID_HEADER?[{source:"loginId",name:t.BI_LOGIN_ID_HEADER,present:pe(e,t.BI_LOGIN_ID_HEADER)}]:[],...t.BI_USER_PROPERTY_HEADER?[{source:"userProperty",name:t.BI_USER_PROPERTY_HEADER,present:pe(e,t.BI_USER_PROPERTY_HEADER),userPropertyKey:t.BI_USER_PROPERTY_KEY}]:[]]}function pe(e,t){return Y(e,t)!==void 0}function go(e){return[...new Set(We(e).map(([t])=>t.toLowerCase()))].sort()}function Mn(e,t){let n=new Set(t.filter(r=>!!r).map(r=>r.toLowerCase()));return Object.fromEntries(We(e).map(([r,i])=>{let s=r.toLowerCase();return _o(s)?[s,"<redacted>"]:[s,n.has(s)?i:"<present>"]}))}function We(e){if(e instanceof Headers)return[...e.entries()];let t=e.entries;return typeof t=="function"?[...t.call(e)]:Object.entries(e).filter(([,n])=>n!==void 0).map(([n,r])=>[n,Array.isArray(r)?r.join(","):String(r)])}function _o(e){return["authorization","proxy-authorization","cookie","set-cookie","x-guanbi-uid-token",ge].includes(e)}function ho(e){return e.startsWith("x-")||e.includes("auth")||e.includes("login")||e.includes("token")||e.includes("uid")||e.includes("user")}function yo(e){return["1","true","yes","on"].includes(e.BI_IDENTITY_DEBUG?.trim().toLowerCase()??"")}import{AsyncLocalStorage as Io}from"async_hooks";var _e={client:"X-Guandata-Client",clientVersion:"X-Guandata-Client-Version",command:"X-Guandata-Command"},bo=new Set(Object.values(_e).map(e=>e.toLowerCase())),Nn=new Io;function Ln(e,t){return Nn.run(e,t)}function To(e,t="mcp"){e=Nn.getStore()??e;let n={};n[_e.client]=e?.client.trim()||t.trim()||"mcp";let r=e?.clientVersion?.trim();r&&(n[_e.clientVersion]=r);let i=e?.command?.trim();return i&&(n[_e.command]=i),n}function qn(e,t,n="mcp"){let r=To(t,n);return{...Et(e),...r}}function Et(e){return Object.fromEntries(Object.entries(e).filter(([t])=>!bo.has(t.toLowerCase())))}var Gn=64*1024,Rt=16*1024*1024,wo=8*1024,he=class extends Error{constructor(n,r){super(r);this.status=n;this.name="BIHttpResponseError"}status},Xe=class{constructor(t){this.config=t;this.token=t.BI_UID_TOKEN}config;token;async get(t,n){return this.request("GET",t,void 0,n)}async post(t,n,r){return this.request("POST",t,n,r)}async put(t,n,r){return this.request("PUT",t,n,r)}async getText(t,n){if(this.config.BI_PAT){let s=await fetch(this.buildUrl(t),{method:"GET",headers:this.patHeaders(this.config.BI_PAT,{"raw-backend-response":"TRUE"}),signal:De(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)});return s.ok||await Ye(s,"GET",t),s.text()}let r=await this.ensureToken(),i=await fetch(this.buildUrl(t),{method:"GET",headers:this.uidHeaders(r,{"raw-backend-response":"TRUE"}),signal:De(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)});if(this.shouldRefreshToken(i)){await Bt(i,"retrying after BI authentication expired");let s=await this.refreshToken();i=await fetch(this.buildUrl(t),{method:"GET",headers:this.uidHeaders(s,{"raw-backend-response":"TRUE"}),signal:De(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)})}return i.ok||await Ye(i,"GET",t),this.refreshTokenFromResponse(i),i.text()}async request(t,n,r,i){if(this.config.BI_PAT){let c=await this.fetchWithPat(t,n,this.config.BI_PAT,r,i);c.ok||await Ye(c,t,n);let u=await Jn(c,t,n);return Fn(u)}let s=await this.ensureToken(),o=await this.fetchWithToken(t,n,s,r,i);if(this.shouldRefreshToken(o)){await Bt(o,"retrying after BI authentication expired");let c=await this.refreshToken();o=await this.fetchWithToken(t,n,c,r,i)}o.ok||await Ye(o,t,n);let a=await Jn(o,t,n);return this.refreshTokenFromResponse(o),Fn(a)}async fetchWithToken(t,n,r,i,s){return fetch(this.buildUrl(n),{method:t,headers:this.uidHeaders(r,{"Content-Type":"application/json","raw-backend-response":"TRUE",...s?.headers}),body:t==="POST"||t==="PUT"?JSON.stringify(i??{}):void 0,signal:De(this.config.BI_REQUEST_TIMEOUT_MS,s?.signal)})}async fetchWithPat(t,n,r,i,s){return fetch(this.buildUrl(n),{method:t,headers:this.patHeaders(r,{"Content-Type":"application/json","raw-backend-response":"TRUE",...s?.headers}),body:t==="POST"||t==="PUT"?JSON.stringify(i??{}):void 0,signal:De(this.config.BI_REQUEST_TIMEOUT_MS,s?.signal)})}async ensureToken(){if(this.token)return this.token;let t=await Fe(this.config);return this.token=t.token,t.token}async refreshToken(){if(this.config.BI_UID_TOKEN_REFRESH){let t=await this.config.BI_UID_TOKEN_REFRESH();return this.token=t,t}return this.token=void 0,this.ensureToken()}refreshTokenFromResponse(t){let n=Ro(t);!n||n===this.token||(this.token=n)}shouldRefreshToken(t){return(!!this.config.BI_UID_TOKEN_REFRESH||this.hasPasswordLogin())&&t.status===401}hasPasswordLogin(){return!!(this.config.BI_LOGIN_DOMAIN&&this.config.BI_LOGIN_ID&&this.config.BI_LOGIN_PASSWORD)}uidHeaders(t,n){return{...Et(n),Cookie:`uIdToken=${t}`}}patHeaders(t,n){return qn({...n,"X-Personal-Token":t},this.config.BI_REQUEST_METADATA,this.config.BI_PAT_CLIENT)}buildUrl(t){let n=t.startsWith("/")?t:`/${t}`;return`${this.config.BI_BASE_URL}${this.config.BI_PUBLIC_PATH}${n}`}};function De(e,t){if(t?.aborted)return t;let n=AbortSignal.timeout(e);return t?AbortSignal.any([t,n]):n}async function Ye(e,t,n){let r=await zn(e,Gn),i=r.truncated?` [truncated after ${Gn} bytes]`:"";throw new he(e.status,`BI \u8BF7\u6C42\u5931\u8D25\uFF1A${t} ${n} HTTP ${e.status} ${ko(r.text)}${i}`)}async function Jn(e,t,n){let r=So(e);r!==void 0&&r>Rt&&(await Bt(e,"BI JSON response exceeded byte limit"),Hn(t,n));let i=await zn(e,Rt);return i.truncated&&Hn(t,n),i.text}function Hn(e,t){throw new Error(`BI JSON \u54CD\u5E94\u8FC7\u5927\uFF1A${e} ${t} \u8D85\u8FC7 ${Rt} \u5B57\u8282\uFF1B\u8BF7\u7F29\u5C0F\u67E5\u8BE2\u8303\u56F4\u6216\u964D\u4F4E query_card_data \u7684 limit/columns \u540E\u6309 next_offset \u5206\u9875\u8BFB\u53D6\u3002`)}async function zn(e,t){if(!e.body)return{text:"",truncated:!1};let n=e.body.getReader(),r=new Uint8Array(Math.min(wo,t)),i=0;try{for(;;){let{done:s,value:o}=await n.read();if(s)return{text:new TextDecoder().decode(r.subarray(0,i)),truncated:!1};let a=t-i;if(o.byteLength>a)return a>0&&(r=$n(r,t,i+a),r.set(o.subarray(0,a),i),i+=a),await Co(n,"response body exceeded byte limit"),{text:new TextDecoder().decode(r.subarray(0,i)),truncated:!0};r=$n(r,t,i+o.byteLength),r.set(o,i),i+=o.byteLength}}finally{n.releaseLock()}}function $n(e,t,n){if(n<=e.byteLength)return e;let r=Math.min(t,Math.max(n,Math.max(1,e.byteLength)*2)),i=new Uint8Array(r);return i.set(e),i}async function Co(e,t){try{await e.cancel(new Error(t))}catch{}}async function Bt(e,t){if(e.body)try{await e.body.cancel(new Error(t))}catch{}}function So(e){let t=e.headers.get("content-length");if(!t)return;let n=Number(t);return Number.isSafeInteger(n)&&n>=0?n:void 0}function Fn(e){if(!e)return;let t=JSON.parse(e);if(!Eo(t))return t;if(t.result&&!["ok","success"].includes(t.result.toLowerCase()))throw new Error(`BI \u8FD4\u56DE\u9519\u8BEF\uFF1A${t.message??JSON.stringify(t.error??t)}`);if(t.success===!1)throw new Error(`BI \u8FD4\u56DE\u9519\u8BEF\uFF1A${t.message??JSON.stringify(t.error??t)}`);return"response"in t?t.response:t}function Eo(e){return!e||typeof e!="object"||Array.isArray(e)?!1:"response"in e||"result"in e||"success"in e}function Ro(e){return Bo(e.headers)??Oo(e.headers)}function Bo(e){return[...e.getSetCookie?.()??[],...Ao(e.get("set-cookie"))].map(n=>Vn(n.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1])).find(Boolean)}function Ao(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function Oo(e){return Vn(e.get("x-auth-token"))}function Vn(e){if(typeof e!="string")return;let t=e.trim();return t&&!/\s/.test(t)?t:void 0}function ko(e,t=1e3){return e.length>t?`${e.slice(0,t)}...`:e}var Ze=class{constructor(t,n={}){this.baseConfig=t;this.options=n}baseConfig;options;stdioClient;create(t,n){let r=this.resolveRequestMetadata(n);if(t.transport==="stdio"&&this.stdioClient)return{...this.stdioClient,config:{...this.stdioClient.config,BI_REQUEST_METADATA:r}};let i=this.resolveConfig(t,t.transport==="stdio"?this.resolveRequestMetadata(void 0):r),s={client:this.options.clientFactory?.(i)??new Xe(i),config:{...i,BI_REQUEST_METADATA:r},context:t};return t.transport==="stdio"&&(this.stdioClient={...s,config:i}),s}resolveConfig(t,n){let r=t.biPatToken??this.baseConfig.BI_PAT,i=t.biUidToken??(t.transport==="stdio"?this.baseConfig.BI_UID_TOKEN:void 0),s=!!r;return{...this.baseConfig,BI_PAT:r,BI_UID_TOKEN:s?void 0:i,BI_UID_TOKEN_REFRESH:!s&&t.transport==="streamable-http"?t.biUidTokenRefresh:void 0,BI_LOGIN_DOMAIN:!s&&t.transport==="stdio"?this.baseConfig.BI_LOGIN_DOMAIN:"",BI_LOGIN_ID:!s&&t.transport==="stdio"?this.baseConfig.BI_LOGIN_ID:void 0,BI_LOGIN_PASSWORD:!s&&t.transport==="stdio"?this.baseConfig.BI_LOGIN_PASSWORD:void 0,BI_REQUEST_METADATA:n}}resolveRequestMetadata(t){let n=this.options.requestMetadata;if(n)return t?{...n,command:t}:{...n}}};var Qn={endpoint:"https://www.google-analytics.com/mp/collect",measurementId:"G-800H8JWDPP",apiSecret:"poAwpMEhQteDl1rXKtNIqg",eventName:"guanbi_mcp_tool_call",clientId:"0000000000.0000000000",sessionId:1,engagementTimeMsec:1,timeoutMs:3e3,maxResponseBytes:1024},et=class{serviceDomain;appVersion;enabled;sender;now;constructor({config:t,appVersion:n,sender:r=Do(),now:i=Date.now}){this.serviceDomain=Mo(t.BI_BASE_URL),this.appVersion=n,this.enabled=vo(t),this.sender=r,this.now=i}observeToolCallStart(t){return{toolName:t,startedAtMs:this.now()}}observeToolCallEnd(t,n){if(!this.enabled||!this.serviceDomain)return;let r={service_domain:this.serviceDomain,app_version:this.appVersion,tool:t.toolName,success:n.success,duration_ms_bucket:jo(this.now()-t.startedAtMs),error_type:n.success?"none":No(n.error)};try{Promise.resolve(this.sender(r)).catch(()=>{})}catch{}}};function Po(e=Qn){return t=>xo(t,e)}async function xo(e,t=Qn){try{if(!t.endpoint||!t.measurementId||!t.apiSecret||!e.tool)return;let n=new URL(t.endpoint);n.searchParams.set("measurement_id",t.measurementId),n.searchParams.set("api_secret",t.apiSecret);let r=JSON.stringify({client_id:t.clientId,events:[{name:t.eventName,params:{service_domain:e.service_domain,app_version:e.app_version,tool:e.tool,success:e.success,duration_ms_bucket:e.duration_ms_bucket,error_type:e.error_type,session_id:t.sessionId,engagement_time_msec:t.engagementTimeMsec}}]}),i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:r,signal:AbortSignal.timeout(t.timeoutMs)});await Uo(i,t.maxResponseBytes)}catch{}}function Do(){return Lo(process.env)?()=>{}:Po()}function vo(e){let t=e.GUANBI_MCP_USAGE_STATS?.trim().toLowerCase();return t?["0","false","off","no"].includes(t)?!1:(["1","true","on","yes"].includes(t),!0):!0}function Kn(e,t,n){return(async(...r)=>{let i=n.observeToolCallStart(e);try{let s=await t(...r);return n.observeToolCallEnd(i,{success:!0}),s}catch(s){throw n.observeToolCallEnd(i,{success:!1,error:s}),s}})}function Mo(e){if(e)try{return new URL(e).hostname}catch{return}}function jo(e){return e<1e3?"<1s":e<5e3?"1-5s":e<3e4?"5-30s":e<12e4?"30-120s":">120s"}async function Uo(e,t){let n=e.body?.getReader();if(!n)return;let r=0;try{for(;r<t;){let{done:i,value:s}=await n.read();if(i)return;r+=s.byteLength}}finally{await n.cancel().catch(()=>{})}}function No(e){let t=e instanceof Error?e.message:String(e);return/校验|验证|validation|invalid|schema|zod/i.test(t)?"validation":/鉴权|登录|认证|unauthorized|unauthenticated|401|auth/i.test(t)?"auth":/权限|forbidden|permission|403/i.test(t)?"permission":/timeout|network|fetch|econn|enotfound|socket/i.test(t)?"network":/BI 请求失败|BI 返回错误|HTTP \d{3}/i.test(t)?"bi_error":"unknown"}function Lo(e){return e.NODE_ENV==="test"||e.VITEST==="true"}var qo=5e3;function Yn(e){return e+qo}var tt=class{constructor(t,n,r=new $e,i=3e5){this.callerContextResolver=t;this.clientFactory=n;this.auditLogger=r;this.requestTimeoutMs=i}callerContextResolver;clientFactory;auditLogger;requestTimeoutMs;async run(t,n,r,i){let s=Date.now(),o=Go(n?.signal,this.requestTimeoutMs);o.throwIfAborted();let a=await Wn(this.callerContextResolver.resolve(n),o),c=this.clientFactory.create(a,r),u={...c,signal:o};try{let d=await Wn(Ln(c.config.BI_REQUEST_METADATA,()=>t(u)),o,i?.abortRecoveryGraceMs);if(r){let l=Jo(d)?"error":"success";this.auditLogger.record(ht(r,a,s,l,d))}return d}catch(d){throw r&&this.auditLogger.record(ht(r,a,s,"error",d)),d}}};function Go(e,t){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}function Wn(e,t,n=0){return new Promise((r,i)=>{if(t.aborted){i(t.reason);return}let s,o=()=>{t.removeEventListener("abort",a),s&&clearTimeout(s)},a=()=>{if(n<=0){o(),i(t.reason);return}s=setTimeout(()=>{o(),i(t.reason)},n)};t.addEventListener("abort",a,{once:!0}),Promise.resolve(e).then(c=>{o(),r(c)},c=>{o(),i(c)})})}function Jo(e){return!!(e&&typeof e=="object"&&e.isError===!0)}function D(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}function E(e,t={}){let n=Ot(e),r=t.text===void 0?n:t.text;return{content:[{type:"text",text:typeof r=="string"?r:JSON.stringify(r,null,2)}],structuredContent:n}}function te(e){let t=Ot(e);return{content:[{type:"text",text:JSON.stringify(t,null,2)}],isError:!0}}function ve(e,t,n={}){return te({status:"error",diagnostic:At(e,t,n)})}function At(e,t,n={}){let r=t instanceof Error?t.message:String(t),i=r.match(/BI 请求失败:(?<method>[A-Z]+) (?<path>\S+) HTTP (?<status>\d+)/);return Ot({operation:e,path:i?.groups?.path,status:i?.groups?.status?Number(i.groups.status):void 0,message:r,...n})}function Ot(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var Xn={};async function Zn(e,t){return D(await Oe(e,t))}import{z as I}from"zod";var re=class extends Error{constructor(n,r){super(n.message,{cause:r});this.detail=n;this.name="MetricPlatformRequestError"}detail},V=class{constructor(t,n){this.client=t;this.config=n}client;config;contextHeadersPromise;listProjects(){return this.get("listProjects","/api/metric-platform/projects")}searchMetrics(t){let n=_({projectId:t.projectId,dirId:t.dirId,status:t.status,nameLike:t.keyword,subTypes:t.subTypes?.join(","),orderBy:t.orderBy});return this.post("searchMetrics","/api/metric-platform/metrics",n)}listMetricFullTree(t){return this.get("listMetricFullTree",Pt("/api/metric-platform/metrics/full-tree",{projectId:t.projectId,nameLike:t.keyword}))}listMetricDirectoryTree(t){return this.get("listMetricDirectoryTree",Pt("/api/directory/METRIC_PLATFORM/unauthorized-tree",{projectId:t}))}getMetricDetail(t){return this.get("getMetricDetail",`/api/metric-platform/metrics/${encodeURIComponent(t)}`)}getMetricLineage(t,n){return this.post("getMetricLineage",`/api/resource-atlas/${encodeURIComponent(t)}`,{resourceTypeName:n})}queryMetricData(t){let{metricId:n,metricName:r,...i}=t;return this.post("queryMetricData","/api/metric-platform/metric-data/v2",_(i))}getCardEditSession(t){return this.get("getCardEditSession",`/api/card/${encodeURIComponent(t)}/edit/session`)}getCardEditMeta(t){return this.get("getCardEditMeta",`/api/card/${encodeURIComponent(t)}/edit`)}modifyCardEditMeta(t,n,r){return this.put("modifyCardEditMeta",`/api/oriput/card/${encodeURIComponent(t)}/edit/${encodeURIComponent(n)}/modify`,r)}queryCardEditData(t,n,r){return this.post("queryCardEditData",`/api/card/${encodeURIComponent(t)}/edit/${encodeURIComponent(n)}/data`,r)}searchMetricTrees(t){return this.get("searchMetricTrees",Pt("/api/metric-platform/metric-tree/search",{nameLike:t.keyword,projectId:t.projectId,parentDirId:t.parentDirId,orderBy:t.orderBy}))}async getMetricTreeDetail(t){return this.get("getMetricTreeDetail",`/api/metric-platform/metric-tree/${encodeURIComponent(t)}`,await this.metricTreeHeaders(t,"dimension"))}async queryMetricTreeDrill(t,n){return this.post("queryMetricTreeDrill",`/api/metric-platform/metric-tree/${encodeURIComponent(t)}/drill`,n,await this.metricTreeHeaders(t,"dimension"))}async queryMetricTreeDecompose(t,n){return this.post("queryMetricTreeDecompose",`/api/metric-platform/metric-tree/${encodeURIComponent(t)}/metric-decompose`,n,await this.metricTreeHeaders(t,"metric"))}async put(t,n,r,i){try{return await this.client.put(n,r,i?{headers:i}:void 0)}catch(s){throw kt(t,n,s)}}async get(t,n,r){try{return await this.client.get(n,r?{headers:r}:void 0)}catch(i){throw kt(t,n,i)}}async post(t,n,r,i){try{return await this.client.post(n,r,i?{headers:i}:void 0)}catch(s){throw kt(t,n,s)}}async metricTreeHeaders(t,n){return{Referer:`${this.config.BI_BASE_URL??""}${this.config.BI_PUBLIC_PATH}/metrics-store/hierarchy/${encodeURIComponent(t)}/edit/${n}`,...await this.contextHeaders()}}async contextHeaders(){return this.contextHeadersPromise||(this.contextHeadersPromise=this.resolveContextHeaders()),this.contextHeadersPromise}async resolveContextHeaders(){let t={};if(this.config.BI_LOGIN_DOMAIN&&(t["x-dom-id"]=ye(this.config.BI_LOGIN_DOMAIN)),this.config.BI_LOGIN_ID&&(t["user-id"]=ye(this.config.BI_LOGIN_ID)),t["x-dom-id"]&&t["user-id"])return t;try{let n=await this.get("getUserProfile","/api/user/profile"),r=er(n.domId,n.domainId,n.domain,n.dom_id),i=er(n.email,n.loginId,n.userId,n.uId,n.uid);!t["x-dom-id"]&&r&&(t["x-dom-id"]=ye(r)),!t["user-id"]&&i&&(t["user-id"]=ye(i))}catch{}return t["x-dom-id"]||(t["x-dom-id"]=ye(this.config.BI_LOGIN_DOMAIN||"guanbi")),t["user-id"]||(t["user-id"]=ye(this.config.BI_LOGIN_ID||"unknown")),t}};function kt(e,t,n){let r=n instanceof Error?n.message:String(n),i=r.match(/\bHTTP\s+(\d{3})\b/);return new re({operation:e,path:t,status:i?Number(i[1]):void 0,message:r},n)}function Pt(e,t){let n=new URLSearchParams;for(let[i,s]of Object.entries(t))s!==void 0&&s!==""&&n.set(i,s);let r=n.toString();return r?`${e}?${r}`:e}function _(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function ye(e){return Buffer.from(e,"utf8").toString("base64")}function er(...e){for(let t of e)if(typeof t=="string"&&t.trim())return t.trim()}import{z as nt}from"zod";var rr=nt.object({dimension:nt.string().trim().min(1).max(512).describe("\u52A8\u6001\u7EF4\u5EA6\u540D\u79F0\u6216 dzId\u3002"),fields:nt.array(nt.string().trim().min(1).max(512)).min(1).max(100).describe("\u52A8\u6001\u7EF4\u5EA6\u5019\u9009\u5B57\u6BB5\u540D\u79F0\u3001\u522B\u540D\u3001fdId \u6216 key\uFF1BmultiSelect=true \u65F6\u53EF\u4F20\u591A\u4E2A\u3002")}),rt=100,xt=512;function ir(e,t,n){if(!n.length)return{dynamicFieldFilters:[]};let r=Ho(e);if(!r.size){let o=n[0].dimension;return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(o),diagnostic_values_truncated:X(o),message:"\u5F53\u524D\u5361\u7247\u672A\u66B4\u9732\u52A8\u6001\u7EF4\u5EA6\u914D\u7F6E\uFF1B\u8BF7\u5148\u7528 get_card_info \u67E5\u770B dynamicZoneInfo\u3002"}}}for(let o of r.values()){let a=o.name||o.dzId;if(o.sourceRefsInvalid)return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(a),dz_id:A(o.dzId),diagnostic_values_truncated:X(a,o.dzId),reason:"invalid_source_dz_ids",message:"\u52A8\u6001\u7EF4\u5EA6 sourceDzIds \u5143\u6570\u636E\u683C\u5F0F\u975E\u6CD5\uFF0C\u65E0\u6CD5\u5B89\u5168\u6784\u5EFA\u5B8C\u6574\u9009\u62E9\u96C6\u3002"}};if(o.sourceRefs.length){let c=o.sourceRefs[0];return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(a),dz_id:A(o.dzId),source_cd_id:A(c.cdId),source_dz_id:A(c.dzId),diagnostic_values_truncated:X(a,o.dzId,c.cdId,c.dzId),message:"\u5F53\u524D\u4EC5\u652F\u6301\u6240\u6709\u52A8\u6001\u7EF4\u5EA6\u5747\u65E0 sourceDzIds \u7684\u5361\u7247\u81EA\u8EAB\u52A8\u6001\u7EF4\u5EA6\u3002"}}}}let i=new Map;for(let o of n){let a=$o(r,o.dimension);if("unsupported"in a)return a;let c=a.meta;if(!c.keys.size){let d=o.dimension;return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(d),dz_id:A(c.dzId),diagnostic_values_truncated:X(d,c.dzId),message:"\u52A8\u6001\u7EF4\u5EA6\u672A\u66B4\u9732\u53EF\u7528\u5B57\u6BB5\uFF1B\u8BF7\u5148\u7528 get_card_info \u67E5\u770B\u5019\u9009 key\u3002"}}}let u=i.get(c.dzId);u||(u={meta:c,keys:[],seen:new Set},i.set(c.dzId,u));for(let d of o.fields){let l=Fo(c,d);if("unsupported"in l)return l;u.seen.has(l.key)||(u.seen.add(l.key),u.keys.push(l.key))}}let s=[];for(let o of r.values()){let c=i.get(o.dzId)?.keys??o.defaultKeys;if(!o.multiSelect&&c.length>1){let u=o.name||o.dzId;return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(u),dz_id:A(o.dzId),diagnostic_values_truncated:X(u,o.dzId),message:"\u8BE5\u52A8\u6001\u7EF4\u5EA6\u662F\u5355\u9009\u914D\u7F6E\uFF0C\u4E0D\u80FD\u540C\u65F6\u6307\u5B9A\u591A\u4E2A\u5B57\u6BB5\u3002"}}}s.push(...c.map(u=>({dzId:o.dzId,key:u,sourceCdId:t})))}return{dynamicFieldFilters:s}}function Ho(e){let t=ie(ie(ie(e.content).meta).chartMain),n=tr(ie(t.dynamicZoneInfo).dzMappings),r=new Map;for(let s of n){let o=Q(s.dzId);if(!o)continue;let a=r.get(o)??{dzId:o,name:"",keys:new Set,defaultKeys:[],options:[],multiSelect:!1,sourceRefs:[],sourceRefsInvalid:!1};a.name=Q(s.name),a.multiSelect=zo(s.multiSelect)===!0;for(let c of nr(s.defaultValue).map(Q).filter(Boolean))a.keys.has(c)||a.defaultKeys.push(c),a.keys.add(c);"sourceDzIds"in s&&!Array.isArray(s.sourceDzIds)?a.sourceRefsInvalid=!0:a.sourceRefs.push(...nr(s.sourceDzIds).map(ie).map(c=>({cdId:Q(c.cdId),dzId:Q(c.dzId)}))),r.set(o,a)}let i=new Set;for(let s of Object.values(ie(t.zoneData)))for(let o of tr(s)){let a=Q(o.dzId),c=Q(o.key),u=r.get(a);if(!u||!c)continue;u.keys.add(c);let d=`${a}\0${c}`;i.has(d)||(i.add(d),u.options.push({key:c,fdId:Q(o.fdId),name:Q(o.name),alias:Q(o.alias)}))}return r}function $o(e,t){let n=t.trim(),r=new Map,i=e.get(n);i&&r.set(i.dzId,i);for(let c of e.values())c.name===n&&r.set(c.dzId,c);if(r.size===1)return{meta:r.values().next().value};let s=[...e.values()].map(c=>_({name:c.name?A(c.name):void 0,dz_id:A(c.dzId)})),o=[...e.values()].some(c=>X(c.name,c.dzId)),a=A(n);return{unsupported:{capability:"unsupported_dynamic_fields",dimension:a,diagnostic_values_truncated:X(n),message:r.size>1?`\u52A8\u6001\u7EF4\u5EA6\u6807\u8BC6\u540C\u65F6\u5339\u914D\u540D\u79F0\u548C dzId\uFF0C\u5F53\u524D\u65E0\u6CD5\u5B89\u5168\u6D88\u6B67\uFF1A${a}`:`\u672A\u627E\u5230\u52A8\u6001\u7EF4\u5EA6\uFF1A${a}`,supported_dimensions:s.slice(0,rt),supported_dimension_count:s.length,supported_dimensions_truncated:s.length>rt,supported_dimension_values_truncated:o}}}function Fo(e,t){let n=t.trim(),r=new Map;e.keys.has(n)&&r.set(n,{key:n,fdId:"",name:"",alias:""});for(let u of e.options)(u.fdId===n||u.name===n||u.alias===n)&&r.set(u.key,u);if(r.size===1)return{key:r.keys().next().value};let i=e.options.map(u=>_({name:u.name?A(u.name):void 0,alias:u.alias?A(u.alias):void 0,fd_id:u.fdId?A(u.fdId):void 0,key:A(u.key)})),s=e.options.some(u=>X(u.name,u.alias,u.fdId,u.key)),o=e.name||e.dzId,a=A(o),c=A(n);return{unsupported:{capability:"unsupported_dynamic_fields",dimension:a,dz_id:A(e.dzId),field:c,diagnostic_values_truncated:X(o,e.dzId,n),message:r.size>1?`\u52A8\u6001\u7EF4\u5EA6\u5B57\u6BB5\u6807\u8BC6\u540C\u65F6\u5339\u914D key \u4E0E\u540D\u79F0\u3001\u522B\u540D\u6216 fdId\uFF0C\u5F53\u524D\u65E0\u6CD5\u5B89\u5168\u6D88\u6B67\uFF1A${c}`:`\u5B57\u6BB5\u4E0D\u5C5E\u4E8E\u52A8\u6001\u7EF4\u5EA6 ${a}\uFF1A${c}`,supported_fields:i.slice(0,rt),supported_field_count:i.length,supported_fields_truncated:i.length>rt,supported_field_values_truncated:s}}}function tr(e){return Array.isArray(e)?e.map(ie).filter(t=>Object.keys(t).length):[]}function nr(e){return Array.isArray(e)?e:[]}function ie(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Q(e){return typeof e=="string"?e:""}function zo(e){return typeof e=="boolean"?e:void 0}function A(e){return e.length<=xt?e:`${e.slice(0,xt-1)}\u2026`}function X(...e){return e.some(t=>t.length>xt)}async function sr(e,t,n,r){if(!n.length)return{dynamicParams:[]};let i=new Map,s=[];for(let l of n){let f=l.parameter.trim();if(i.has(f))return{unsupported:{capability:"unsupported_dynamic_params",parameter:f,message:`\u52A8\u6001\u53C2\u6570\u88AB\u91CD\u590D\u6307\u5B9A\uFF1A${f}`}};s.push(f),i.set(f,Me(l.value))}let o=it(or(t),Qo()),a=s.some(l=>!o.some(f=>Z(f,"dpId","dp_id")===l||Z(f,"name")===l)),c=Me(t.pgId).trim();if(a&&c){r?.throwIfAborted();let l=`/api/page/${encodeURIComponent(c)}`,f=r?await e.get(l,{signal:r}):await e.get(l);r?.throwIfAborted(),o=it(o,Vo(f,Me(t.cdId)))}let u=[],d=new Map;for(let l of s){let f=Ko(o,l);if("unsupported"in f)return{unsupported:f.unsupported};let y=Yo(f.param),h=Z(y,"dpId","dp_id"),T=d.get(h);if(T)return{unsupported:{capability:"unsupported_dynamic_params",parameter:l,message:`\u52A8\u6001\u53C2\u6570 ${T} \u548C ${l} \u6307\u5411\u540C\u4E00\u4E2A dpId\uFF1A${h}`}};d.set(h,l),y.defaultValue=i.get(l)??"";let x=Wo(y,l);if("unsupported"in x)return{unsupported:x.unsupported};u.push(y)}return{dynamicParams:u}}function or(e){let t=K(e.content),n=K(K(K(t.meta).chartMain).props),r=K(K(t.dsInfo).config);return it(Dt(n.dynamicParameters),Dt(r.dynamicParameters))}function Vo(e,t){let n=Dt(e.cards),r=n.find(s=>Me(s.cdId)===t),i=n.filter(s=>s.cdType==="SELECTOR"&&K(s.content).selectorType==="PARAMETER").map(s=>K(K(s.content).parameter));return it(r?or(r):[],i)}function it(e,t){let n=[],r=new Set;for(let i of[...e,...t]){let s=Z(i,"dpId","dp_id");s&&r.has(s)||(s&&r.add(s),Object.keys(i).length&&n.push(i))}return n}function Qo(){return[{dpId:"DATE_RANGE_PARAM_LEFT",name:"\u5F00\u59CB\u65E5\u671F\u53C2\u6570",valueType:"DATE",defaultValue:"",optionValue:[]},{dpId:"DATE_RANGE_PARAM_RIGHT",name:"\u7ED3\u675F\u65E5\u671F\u53C2\u6570",valueType:"DATE",defaultValue:"",optionValue:[]}]}function Ko(e,t){let n=e.find(i=>Z(i,"dpId","dp_id")===t);if(n)return{param:n};let r=e.filter(i=>Z(i,"name")===t);return r.length===1?{param:r[0]}:r.length>1?{unsupported:{capability:"unsupported_dynamic_params",parameter:t,message:`\u52A8\u6001\u53C2\u6570\u540D\u5B58\u5728\u591A\u4E2A\u5339\u914D\u9879\uFF0C\u8BF7\u6539\u7528 dpId\uFF1A${t}`}}:{unsupported:{capability:"unsupported_dynamic_params",parameter:t,message:`\u5361\u7247\u53CA\u6240\u5C5E\u9875\u9762\u672A\u66B4\u9732\u52A8\u6001\u53C2\u6570\uFF1A${t}\uFF0C\u8BF7\u901A\u8FC7 get_card_info/get_page_info \u6838\u5BF9\u53C2\u6570\u540D\u6216 dpId\u3002`}}}function Wo(e,t){let n=[Z(e,"dpId","dp_id")?void 0:"dpId",Z(e,"name")?void 0:"name",Z(e,"valueType","value_type")?void 0:"valueType"].filter(r=>!!r);return n.length?{unsupported:{capability:"unsupported_dynamic_params",parameter:t,message:`\u52A8\u6001\u53C2\u6570\u7F3A\u5C11\u5FC5\u8981 BI \u5143\u4FE1\u606F\uFF1A${t}`,missing_metadata:n}}:typeof e.defaultValue!="string"?{unsupported:{capability:"unsupported_dynamic_params",parameter:t,message:`\u52A8\u6001\u53C2\u6570 defaultValue \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\uFF1A${t}`}}:{ok:!0}}function Z(e,...t){for(let n of t){let r=Me(e[n]);if(r)return r}return""}function Dt(e){return Array.isArray(e)?e.map(K).filter(t=>Object.keys(t).length):[]}function Yo(e){return JSON.parse(JSON.stringify(e))}function K(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Me(e){return typeof e=="string"?e:e==null?"":String(e)}var Xo=I.enum(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN","GT","GE","LT","LE","EQ","NE","IN","NI","IS_NULL","NOT_NULL","CONTAINS","NOT_CONTAINS","STARTSWITH","ENDSWITH","NOT_STARTSWITH","NOT_ENDSWITH","STARTSWITH_USER_PROPERTIES","STARTSWITH_GLOBAL_PARAMS"]),ar=new Set(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN"]),Mt=new Set(["IS_NULL","NOT_NULL"]),Zo=I.object({field:I.string().min(1).describe("\u5361\u7247\u5173\u8054\u6570\u636E\u96C6\u4E2D\u7684\u7B5B\u9009\u5B57\u6BB5\u540D\u79F0\u3001\u522B\u540D\u6216\u5B57\u6BB5 ID\u3002"),operator:Xo.describe("BI \u539F\u751F\u7B5B\u9009\u64CD\u4F5C\u7B26\uFF0C\u4F8B\u5982 EQ/NI/GE/BT/CONTAINS\u3002"),values:I.array(I.union([I.string(),I.number(),I.boolean()])).optional().describe("\u7B5B\u9009\u503C\u3002IS_NULL/NOT_NULL \u4E0D\u9700\u8981\u4F20\u503C\u3002"),fd_id:I.string().min(1).optional().describe("\u5DF2\u77E5\u5B57\u6BB5 ID \u65F6\u53EF\u76F4\u63A5\u6307\u5B9A\u3002")}).superRefine((e,t)=>{let n=e.values?.length??0;Mt.has(e.operator)&&n>0&&t.addIssue({code:I.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u4E0D\u63A5\u53D7\u7B5B\u9009\u503C\u3002`}),ar.has(e.operator)&&n!==2&&t.addIssue({code:I.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u9700\u8981\u6070\u597D 2 \u4E2A\u503C\u3002`}),!ar.has(e.operator)&&!Mt.has(e.operator)&&n<1&&t.addIssue({code:I.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u81F3\u5C11\u9700\u8981 1 \u4E2A\u503C\u3002`})}),ea=I.object({parameter:I.string().min(1).describe("\u52A8\u6001\u53C2\u6570\u540D\u79F0\u6216 dpId\u3002"),value:I.union([I.string(),I.number(),I.boolean()]).describe("\u52A8\u6001\u53C2\u6570\u8986\u76D6\u503C\uFF0C\u4F1A\u6309 BI dynamicParams.defaultValue \u4EE5\u5B57\u7B26\u4E32\u53D1\u9001\u3002")}),ta=I.object({returned_count:I.number().int().nonnegative(),offset:I.number().int().nonnegative(),limit:I.number().int().positive(),has_more:I.boolean(),next_offset:I.number().int().nonnegative().optional(),total_count:I.number().int().nonnegative().optional()}),lr={cd_id:I.string().min(1).max(512).describe("\u5361\u7247 ID\u3002"),filters:I.array(Zo).optional().describe("\u7ED3\u6784\u5316\u7B5B\u9009\u6761\u4EF6\u3002\u4E0D\u652F\u6301 CLI \u98CE\u683C\u7B5B\u9009\u5B57\u7B26\u4E32\u3002"),dynamic_params:I.array(ea).optional().describe("\u56FE\u8868\u5361\u52A8\u6001\u53C2\u6570\u8986\u76D6\uFF0Cparameter \u53EF\u4F20\u53C2\u6570\u540D\u6216 dpId\uFF1B\u5B9A\u4E49\u6765\u81EA\u5361\u7247\u6216\u6240\u5C5E\u9875\u9762\uFF0C\u4EC5\u8986\u76D6\u672C\u6B21 CHART \u67E5\u8BE2\u3002"),dynamic_fields:I.array(rr).max(100).optional().describe("\u56FE\u8868\u5361\u52A8\u6001\u7EF4\u5EA6\u8986\u76D6\uFF0Cdimension \u53EF\u4F20\u52A8\u6001\u7EF4\u5EA6\u540D\u6216 dzId\uFF0Cfields \u53EF\u4F20\u5B57\u6BB5\u540D\u3001\u522B\u540D\u3001fdId \u6216 key\u3002"),columns:I.array(I.string().min(1)).optional().describe("\u5BF9\u5DF2\u5C55\u5E73\u7ED3\u679C\u505A\u672C\u5730\u5217\u88C1\u526A\uFF0C\u4E0D\u53C2\u4E0E BI \u67E5\u8BE2\u8BED\u4E49\u3002"),offset:I.number().int().nonnegative().optional().default(0).describe("\u5F53\u524D\u9875\u8D77\u59CB\u504F\u79FB\u91CF\uFF0C\u9ED8\u8BA4 0\u3002"),limit:I.number().int().positive().optional().default(100).describe("\u5F53\u524D\u9875\u671F\u671B\u8FD4\u56DE\u884C\u6570\uFF0C\u9ED8\u8BA4 100\uFF1B\u5927\u4E8E 1000 \u65F6\u4ECD\u6309\u5355\u9875 1000 \u884C\u67E5\u8BE2\uFF0C\u5E76\u901A\u8FC7 next_offset \u7EED\u9875\u3002"),raw:I.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},pr={summary:I.unknown().optional(),columns:I.array(I.unknown()).optional(),rows:I.array(I.unknown()).optional(),page:ta.optional(),diagnostic:I.unknown().optional(),raw:I.unknown().optional(),status:I.string().optional(),next_action:I.string().optional()},na=1e3,je=4*1024*1024,st=1024*1024,mr=64*1024,cr=512;async function fr(e,t,n){try{let r=t.limit??100,i=Math.min(r,na),s=t.offset??0,o=await ra(e,t.cd_id,t.filters??[],t.dynamic_params??[],t.dynamic_fields??[],n);if("unsupported"in o)return oa("query_card_data",o.unsupported);let{card:a,cardType:c,filters:u,dynamicParams:d,dynamicFieldFilters:l}=o;if(c==="TEXT")return sa(t.cd_id,a,t.columns,t.raw,s,i);let f=await pa(e,la(t.cd_id,c,i,u,d,l,s),n),{endpoint:y}=f.requests[0],h=f.data,T=c==="CHART"?ga(w(h.chartMain)):void 0,x=T?.rows??ha(h),N=Cr(x.slice(0,i),t.columns),k=je-mr-(t.raw?st:0),S=yr(N,k),$=Ra(c,h,s,i,N.length);if(c==="TREE_SELECTOR"&&S.truncated)return ia(t.cd_id,s,i,$.page.total_count);if(S.oversizedFirstRow)return gr(t.cd_id,c,s,i,$.page.total_count);let F=S.rows,Ee=S.truncated||$.page.has_more===!0,Re=$.backendLimitReached&&!S.truncated,Be=Ee&&F.length>0&&!Re?s+(c==="TREE_SELECTOR"?i:F.length):void 0,ue=_({...$.page,returned_count:F.length,has_more:Ee,next_offset:Be}),de=t.raw===!0&&Ir(f.raw,st)&&!S.truncated;return ot({summary:_({cd_id:t.cd_id,card_type:c,chart_type:c==="CHART"?C(w(a.content).chartType):void 0,row_count:F.length,truncated:ue.has_more}),columns:S.columns,rows:F,page:ue,diagnostic:_({mode:ma(c),card_type:c,endpoint:y,request:{offset:s,limit:i,requested_limit:r>i?r:void 0,filter_count:u.length,dynamic_param_count:d.length},request_count:1,partial_reason:S.truncated?"response_bytes":Re?"backend_limit":r>i&&Ee?"page_limit":void 0,response_byte_limit:S.truncated?je:void 0,alignment_issue_count:T?.alignmentIssueCount||void 0,alignment_issues:T?.alignmentIssues.length?T.alignmentIssues:void 0,raw_returned:de,raw_omitted_reason:t.raw===!0&&!de?"response_bytes":void 0}),raw:de?f.raw:void 0,next_action:Re?"BI \u5DF2\u8FBE\u5230\u7B5B\u9009\u5668\u540E\u7AEF\u884C\u6570\u4E0A\u9650\uFF1B\u8BF7\u589E\u52A0 filters \u7F29\u5C0F\u67E5\u8BE2\u8303\u56F4\u540E\u4ECE offset=0 \u91CD\u65B0\u5206\u9875\u3002":r>i&&Be!==void 0?`\u8BF7\u6C42\u7684 limit=${r} \u5DF2\u6309\u5355\u9875\u4E0A\u9650 ${i} \u6267\u884C\uFF1B\u7EE7\u7EED\u8C03\u7528 query_card_data\uFF0C\u5E76\u4F20\u5165 offset=${Be} \u83B7\u53D6\u4E0B\u4E00\u9875\u3002`:void 0})}catch(r){return te({status:"error",diagnostic:At("query_card_data",r)})}}async function ra(e,t,n=[],r=[],i=[],s){s?.throwIfAborted();let o=await Tr(e,`/api/card/${encodeURIComponent(t)}`,s);s?.throwIfAborted();let a=da(o);if(r.length&&a!=="CHART")return{unsupported:aa(a)};let c=C(o.cdType).toUpperCase()||"UNKNOWN";if(i.length&&!["CHART","METRIC_CHART"].includes(c))return{unsupported:ca(c)};let u=a==="SELECTOR"?ua(o):void 0;if(u)return{unsupported:u};if(a==="TEXT")return{card:o,cardType:a,filters:[],dynamicParams:[],dynamicFieldFilters:[]};let d=ir(o,t,i);if("unsupported"in d)return d;let l=await Ta(e,o,n,s);s?.throwIfAborted();let f=Ia(n,l,a);if("unsupported"in f)return f;let y=await sr(e,o,r,s);return s?.throwIfAborted(),"unsupported"in y?y:{card:o,cardType:a,filters:f.filters,dynamicParams:y.dynamicParams,dynamicFieldFilters:d.dynamicFieldFilters}}function gr(e,t,n,r,i){return ot({status:"response_too_large",summary:{cd_id:e,card_type:t,row_count:0,truncated:!0},columns:[],rows:[],page:_({returned_count:0,offset:n,limit:r,has_more:!0,total_count:i}),next_action:"\u5355\u884C\u6570\u636E\u5DF2\u8D85\u8FC7 MCP \u5185\u8054\u54CD\u5E94\u9884\u7B97\uFF0C\u8BF7\u4F7F\u7528 columns \u88C1\u526A\u5217\u3001\u51CF\u5C0F limit \u6216\u589E\u52A0\u7B5B\u9009\u6761\u4EF6\u540E\u91CD\u8BD5\u3002",diagnostic:{mode:"response_too_large",reason:"response_bytes",response_byte_limit:je}})}function ia(e,t,n,r){return ot({status:"response_too_large",summary:{cd_id:e,card_type:"TREE_SELECTOR",row_count:0,truncated:!0},columns:[],rows:[],page:_({returned_count:0,offset:t,limit:n,has_more:!0,total_count:r}),next_action:"\u6811\u7B5B\u9009\u5668\u5F53\u524D\u9875\u8D85\u8FC7 MCP \u5185\u8054\u54CD\u5E94\u9884\u7B97\uFF1B\u8BF7\u4FDD\u6301 offset \u4E0D\u53D8\u5E76\u51CF\u5C0F limit \u540E\u91CD\u8BD5\u3002",diagnostic:{mode:"response_too_large",reason:"response_bytes",response_byte_limit:je}})}function ot(e){let t=w(e.page),n=w(e.diagnostic),r=wr(t.next_offset),i=Ue(t.has_more)===!0,s=C(e.status)||(i?"partial":"success");return E({...e,status:s},{text:_({status:s,summary:e.summary,columns:e.columns,rows:e.rows,page:e.page,next_action:e.next_action??(r===void 0?void 0:`\u7EE7\u7EED\u8C03\u7528 query_card_data\uFF0C\u5E76\u4F20\u5165 offset=${r} \u83B7\u53D6\u4E0B\u4E00\u9875\u3002`),diagnostic:_({mode:n.mode,endpoint:n.endpoint,partial_reason:n.partial_reason,response_byte_limit:n.response_byte_limit,raw_returned:n.raw_returned,raw_omitted_reason:n.raw_omitted_reason})})})}function sa(e,t,n,r,i,s){let o=w(t.content),a=ya(o),c=a?[{content:a}]:[],u=Cr(c.slice(i,i+s),n),d=r===!0&&Ir(t,st),l=je-mr-(d?st:0),f=yr(u,l);if(f.oversizedFirstRow)return gr(e,"TEXT",i,s,c.length);let y=f.rows,h=f.truncated||i+y.length<c.length,T=d&&!f.truncated;return ot({summary:{cd_id:e,card_type:"TEXT",row_count:y.length,truncated:h},columns:f.columns,rows:y,page:_({returned_count:y.length,offset:i,limit:s,has_more:h,next_offset:h?i+y.length:void 0,total_count:c.length}),diagnostic:{mode:"text_card_content",card_type:"TEXT",endpoint:`/api/card/${encodeURIComponent(e)}`,raw_returned:T,raw_omitted_reason:r===!0&&!T?"response_bytes":void 0},raw:T?t:void 0})}function oa(e,t){return E({status:"unsupported",diagnostic:{tool:e,...t}})}function aa(e){return{capability:"unsupported_dynamic_params",message:`dynamic_params \u4EC5\u652F\u6301 CHART \u56FE\u8868\u5361\u7247\uFF0C\u5F53\u524D\u5361\u7247\u7C7B\u578B\u4E3A ${e}`,card_type:e}}function ca(e){let t=Aa(e);return{capability:"unsupported_dynamic_fields",message:`dynamic_fields \u4EC5\u652F\u6301 CHART/METRIC_CHART \u56FE\u8868\u5361\u7247\uFF0C\u5F53\u524D\u5361\u7247\u7C7B\u578B\u4E3A ${t}`,card_type:t,diagnostic_values_truncated:t!==e}}function ua(e){let t=w(e.content);if(C(t.selectorType).toUpperCase()!=="PARAMETER")return;let n=w(t.parameter);if(!(["STRING","TEXT"].includes(C(n.valueType).toUpperCase())&&Ue(n.customize)!==!0&&C(w(t.source).dsId)!==""))return{capability:"unsupported_parameter_selector_data",message:"\u56FA\u5B9A\u9009\u9879\u3001\u81EA\u5B9A\u4E49\u503C\u6216\u975E\u6587\u672C\u53C2\u6570\u9009\u62E9\u5668\u6CA1\u6709\u53EF\u9760\u7684\u540E\u7AEF offset \u7EED\u9875\u8BED\u4E49\u3002",card_type:"SELECTOR",selector_type:"PARAMETER"}}function da(e){let t=C(e.cdType).toUpperCase();if(t==="SELECTOR"){let n=C(w(e.content).selectorType).toUpperCase();return n==="TREE"||n==="TREE_SELECTOR"?"TREE_SELECTOR":"SELECTOR"}return t==="TREE_SELECTOR"?"TREE_SELECTOR":t==="TEXT"?"TEXT":"CHART"}function la(e,t,n,r,i,s,o=0){let a=encodeURIComponent(e);return t==="SELECTOR"?{endpoint:`/api/selector/${a}/data`,requestBody:_({fieldQuery:{offset:o,limit:n},filters:r.length?r:void 0})}:t==="TREE_SELECTOR"?{endpoint:`/api/treeSelector/${a}/data`,requestBody:_({offset:o,limit:n,filters:r.length?r:void 0})}:{endpoint:`/api/card/${a}/data`,requestBody:_({view:"GRID",isUniversalStructure:!0,offset:o>0?o:void 0,limit:n,filters:r.length?r:void 0,dynamicParams:i.length?i:void 0,dynamicFieldFilters:s.length?s:void 0})}}async function pa(e,t,n){let r=await Ba(e,t.endpoint,t.requestBody,n);return{raw:r,data:fa(r),requests:[t]}}function ma(e){return e==="SELECTOR"?"selector_card_data":e==="TREE_SELECTOR"?"tree_selector_card_data":"chart_card_data"}function fa(e){let t=w(e),n=w(t.data),r=w(w(t.content).data);return Object.keys(n).length?n:Object.keys(r).length?r:t}function ga(e){if(!Object.keys(e).length)return{rows:[],alignmentIssueCount:0,alignmentIssues:[]};let t=w(e.row),n=w(e.column),r=ee(t.data??t.values),i=ee(e.data),o=Ie(t.fields??t.meta).map((k,S)=>({header:Ut(k)||`row_${S+1}`,shrinked:Ue(k.isShrinkedInGroupTable)===!0})),a=_a(n),c=o.filter(k=>!k.shrinked).length,u=r.reduce((k,S)=>Math.max(k,ee(S).length),c),d=Array.from({length:u-c},(k,S)=>`row_extra_${S+1}`),l=i.reduce((k,S)=>Math.max(k,ee(S).length),a.length),f=Array.from({length:l},(k,S)=>a[S]||`metric_${S+1}`),y=Oa([...o.map(k=>k.header),...d,...f]),h=Math.max(r.length,i.length),T=[],x=[],N=0;for(let k=0;k<h;k+=1){let S=ee(r[k]),$=ee(i[k]),F=0,Ee=o.map(Je=>{if(Je.shrinked)return null;let z=F<S.length?vt(S[F]):null;return F+=1,z}),Re=d.map((Je,z)=>{let gn=F+z;return gn<S.length?vt(S[gn]):null}),Be=f.map((Je,z)=>z<$.length?vt($[z]):null),ue=[...Ee,...Re,...Be];if(!ue.length)continue;let _t=S.length!==c,de=$.length!==a.length;(_t||de)&&(N+=1,x.length<20&&x.push(_({row_number:k+1,row_value_count:_t?{expected:c,actual:S.length}:void 0,metric_value_count:de?{expected:a.length,actual:$.length}:void 0})));let ms=Math.max(y.length,ue.length);T.push(Object.fromEntries(Array.from({length:ms},(Je,z)=>[y[z]??`column_${z+1}`,ue[z]??null])))}return{rows:T,alignmentIssueCount:N,alignmentIssues:x}}function _a(e){let n=ee(e.data??e.values).map((r,i)=>{let s=ee(r).map(br).filter(Boolean).join("/");return s||Ut(Ie(e.fields??e.meta)[i])||`metric_${i+1}`}).filter(Boolean);return n.length?n:Ie(e.fields??e.meta).map(Ut).filter(Boolean)}function ha(e){return Ie(e.result)}function ya(e){let n=ee(w(e.body).blocks).map(r=>C(w(r).text)).filter(r=>r!=="");return n.length?n.join(`
5
- `):C(e.text)}function Ia(e,t,n){let r=[];for(let i of e){let s=Ca(t,i.field,i.fd_id);if("unsupported"in s)return{unsupported:s.unsupported};r.push(_({name:s.field.name,fdId:s.field.fdId,fdType:s.field.fdType,filterLevel:n==="CHART"?wa(s.field.metaType):void 0,filterType:i.operator,filterValue:ba(i)}))}return{filters:r}}function ba(e){return Mt.has(e.operator)?[]:(e.values??[]).map(C)}async function Ta(e,t,n,r){let i=Sa(t);if(!n.some(a=>{let c=_r(i,a.field,a.fd_id);return!c||!C(c.fd_id)}))return i;let s=w(w(t.content).dsInfo),o=q(s.dsId,s.ds_id);if(!o)return i;try{r?.throwIfAborted();let a=await Tr(e,`/api/data-source/${encodeURIComponent(o)}`,r);return r?.throwIfAborted(),[...i,...hr(a)]}catch{return r?.throwIfAborted(),i}}function wa(e){return e.toUpperCase()==="METRIC"?"AGGREGATION":"DETAIL"}function Ca(e,t,n){let r=_r(e,t,n);if(!r)return{unsupported:{capability:"unsupported_filter_field",parameter:t,message:`\u7B5B\u9009\u5B57\u6BB5\u65E0\u6CD5\u4ECE\u5361\u7247\u5173\u8054\u6570\u636E\u96C6\u89E3\u6790\uFF1A${t}`,supported_fields:e.map(u=>_({name:C(u.name),fd_id:C(u.fd_id),meta_type:C(u.meta_type)}))}};let i=C(r.name),s=C(r.fd_id),o=C(r.fd_type),a=C(r.meta_type).toUpperCase(),c=[i?void 0:"name",s?void 0:"fdId",o?void 0:"fdType",a?void 0:"metaType"].filter(u=>!!u);return c.length?{unsupported:{capability:"unsupported_filter_field",parameter:t,message:`\u7B5B\u9009\u5B57\u6BB5\u7F3A\u5C11\u5FC5\u8981 BI \u5143\u4FE1\u606F\uFF1A${t}`,missing_metadata:c}}:{field:{name:i,fdId:s,fdType:o,metaType:a}}}function _r(e,t,n){if(n)return e.find(i=>C(i.fd_id)===n||C(i.id)===n);let r=t.trim();return e.find(i=>[i.fd_id,i.id].map(C).includes(r))??ur(e.filter(i=>C(i.name)===r))??ur(e.filter(i=>C(i.alias)===r))}function ur(e){return e.find(t=>C(t.fd_id))??e[0]}function Sa(e){let t=w(e.content),n=hr(w(t.dsInfo)),r=w(w(t.source).field);Object.keys(r).length&&n.push(jt(r));let i=w(w(t.meta).chartMain),s=w(i.zoneData);for(let[o,a]of Object.entries(s))n.push(...Ie(a).map(c=>jt(c,o)));return Ea(n)}function hr(e){return Ie(e.columns).map(t=>({...jt(t),meta_type:q(t.metaType,t.meta_type)??"DIM"}))}function jt(e,t){return _({name:q(e.name,e.title,e.originTitle,e.alias),alias:q(e.alias,e.title),id:C(e.id),fd_id:q(e.fdId,e.fd_id,e.id),fd_type:q(e.fdType,e.fd_type),meta_type:q(e.metaType,e.meta_type),zone_id:q(e.zoneId,e.zone_id,t)})}function Ea(e){let t=new Set;return e.filter(n=>{let r=q(n.fd_id,n.id,n.name,n.alias);return!r||t.has(r)?!1:(t.add(r),!0)})}function Ra(e,t,n,r,i){let s=e==="CHART"?w(t.chartMain):t,o=wr(s.count),a=e==="TREE_SELECTOR"?r:i,c=o===void 0?void 0:n+a<o,u=e!=="CHART"&&Ue(s.exceedLimit)===!0,d=u&&(o===void 0||n+a>=o),l=d||(e==="CHART"?Ue(s.hasMoreData)??c??i===r:c??i===r);return{backendLimitReached:d,page:_({returned_count:i,offset:n,limit:r,has_more:l,next_offset:l&&!d&&i>0?n+(e==="TREE_SELECTOR"?r:i):void 0,total_count:u?void 0:o})}}function yr(e,t){let n=[],r=[],i=new Set,s=2,o=2;for(let a of e){let c=n.length?1:0,u=t-s-o-c,d=Nt(a,u),l=Object.keys(a).filter(h=>!i.has(h)),f=0,y=!0;for(let h=0;h<l.length;h+=1){let T=r.length+h>0?1:0,x=t-s-o-c-d-f-T,N=Lt(l[h],x);if(N>x){y=!1;break}f+=T+N}if(d>u||!y)return{rows:n,columns:r,truncated:!0,oversizedFirstRow:n.length===0};n.push(a),s+=c+d,o+=f;for(let h of l)r.push(h),i.add(h)}return{rows:n,columns:r,truncated:!1,oversizedFirstRow:!1}}function Ir(e,t){return Nt(e,t)<=t}function Nt(e,t){if(t<0)return t+1;if(e==null)return 4;if(typeof e=="string")return Lt(e,t);if(typeof e=="number"||typeof e=="boolean")return Buffer.byteLength(JSON.stringify(e));if(Array.isArray(e))return dr(e.map(n=>[void 0,n]),t);if(typeof e=="object"){let n=Object.entries(e).filter(([,r])=>r!==void 0);return dr(n,t)}return 4}function dr(e,t){let n=2;for(let r=0;r<e.length;r+=1){let[i,s]=e[r];if(n+=r>0?1:0,i!==void 0){let a=Lt(i,t-n);n+=a+1}let o=Nt(s,t-n);if(n+=o,n>t)return t+1}return n}function Lt(e,t){let n=2;for(let r of e){let i=r.codePointAt(0)??0;if(i===34||i===92?n+=2:i<=31||i>=55296&&i<=57343?n+=6:n+=Buffer.byteLength(r),n>t)return t+1}return n}function Ut(e){return q(e.title,e.alias,e.originTitle,e.name,e.fdId,e.id)??""}function br(e){let t=w(e);return Object.keys(t).length?q(t.title,t.name,t.originTitle,t.alias,t.v,t.value)??"":C(e)}function vt(e){let t=w(e);return Object.keys(t).length?"v"in t?t.v:"value"in t?t.value:br(e):e}function Ie(e){return Array.isArray(e)?e.map(w).filter(t=>Object.keys(t).length):[]}function ee(e){return Array.isArray(e)?e:[]}function w(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Tr(e,t,n){return n?e.get(t,{signal:n}):e.get(t)}function Ba(e,t,n,r){return r?e.post(t,n,{signal:r}):e.post(t,n)}function C(e){return typeof e=="string"?e:e==null?"":String(e)}function q(...e){return e.map(C).find(t=>t.trim())?.trim()}function Ue(e){return typeof e=="boolean"?e:void 0}function Aa(e){return e.length<=cr?e:`${e.slice(0,cr-1)}\u2026`}function wr(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Cr(e,t){return t?.length?e.map(n=>Object.fromEntries(t.map(r=>[r,n[r]??null]))):e}function Oa(e){let t=e.map((i,s)=>i||`column_${s+1}`),n=new Set(t),r=new Set;return t.map(i=>{if(!r.has(i))return r.add(i),i;for(let s=2;;s+=1){let o=`${i}_${s}`;if(!n.has(o)&&!r.has(o))return r.add(o),o}})}import{createHash as ka}from"crypto";import{z as g}from"zod";var Pa=6e4,se=1e4,Sr=10*6e4,at=new Map,ct=new Map,qt=new Map,Gt=new Map,Er=g.object({format:g.literal("markdown").describe("\u6700\u7EC8\u7ED3\u679C\u683C\u5F0F\u3002"),content:g.string().describe("\u6700\u7EC8\u5C55\u793A\u7ED9\u8C03\u7528\u8005\u6216\u7528\u6237\u7684 markdown \u5185\u5BB9\u3002")}),Rr={themes:g.array(g.object({theme_id:g.string().optional(),theme_name:g.string().optional(),is_insight_enabled:g.boolean().optional()}).passthrough()),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},Br={session_id:g.string().optional(),message_id:g.string().optional(),answer:g.unknown().optional().describe("ChatBI \u540E\u7AEF\u8FD4\u56DE\u7684\u95EE\u6570\u89E3\u91CA\u6216\u539F\u59CB\u7B54\u6848\u7ED3\u6784\u3002"),sql:g.unknown().optional().describe("ChatBI \u540E\u7AEF\u751F\u6210\u7684 SQL \u4FE1\u606F\u3002"),answer_status:g.string().optional(),final_status:g.string().optional(),query_result:g.unknown().optional().describe("ChatBI \u540E\u7AEF\u8FD4\u56DE\u7684\u7ED3\u6784\u5316\u67E5\u8BE2\u7ED3\u679C\uFF0C\u901A\u5E38\u5305\u542B columns\u3001preview\u3001truncated\u3001row_limit\u3002"),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},sd={message_id:g.string().optional(),session_id:g.string().optional(),status:g.string(),detail:g.string().nullable().optional(),question:g.string().nullable().optional(),answer:g.unknown().optional(),final_result:Er.describe("\u6700\u7EC8\u5C55\u793A\u7ED3\u679C\uFF1B\u8C03\u7528\u65B9\u5E94\u4F18\u5148\u8BFB\u53D6 final_result.content\uFF0Canswer \u4EC5\u4FDD\u7559\u540E\u7AEF\u539F\u59CB\u7ED3\u679C\u3002"),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},Ar={theme_id:g.string().optional(),message_id:g.string().optional(),session_id:g.string().optional(),status:g.literal("started"),deduped:g.boolean(),retry_after_ms:g.number().int().nonnegative(),next_action:g.string().optional(),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},Or={message_id:g.string().optional(),session_id:g.string().optional(),status:g.string(),detail:g.string().nullable().optional(),question:g.string().nullable().optional(),answer:g.unknown().optional(),throttled:g.boolean(),retry_after_ms:g.number().int().nonnegative(),final_result:Er.describe("\u6700\u7EC8\u5C55\u793A\u7ED3\u679C\uFF1B\u4EC5\u5728 status \u4E3A success \u65F6\u5B58\u5728\u3002\u8C03\u7528\u65B9\u5E94\u4F18\u5148\u8BFB\u53D6 final_result.content\uFF0Canswer \u4EC5\u4FDD\u7559\u540E\u7AEF\u539F\u59CB\u7ED3\u679C\u3002").optional(),next_action:g.string().optional(),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},kr={is_insight:g.boolean().optional().describe("\u662F\u5426\u53EA\u5217\u51FA\u6D1E\u5BDF\u4E3B\u9898\u3002")},Pr={theme_id:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:g.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u95EE\u6570\u95EE\u9898\u3002"),session_id:g.string().min(1).optional().describe("\u53EF\u9009\u4F1A\u8BDD ID\uFF0C\u7528\u4E8E\u95EE\u6570\u7EED\u95EE\u3002\u540C\u4E00\u4E2A session_id \u53EA\u80FD\u7EE7\u7EED\u95EE\u6570\uFF0C\u4E0D\u80FD\u518D\u7528\u4E8E\u6D1E\u5BDF\u3002"),external_context:g.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002")},od={theme_id:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:g.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u6D1E\u5BDF\u95EE\u9898\u3002"),session_id:g.string().min(1).optional().describe("\u53EF\u9009\u4F1A\u8BDD ID\uFF0C\u7528\u4E8E\u6D1E\u5BDF\u7EED\u95EE\u3002\u540C\u4E00\u4E2A session_id \u53EA\u80FD\u7EE7\u7EED\u6D1E\u5BDF\uFF0C\u4E0D\u80FD\u518D\u7528\u4E8E\u95EE\u6570\u3002"),external_context:g.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002"),timeout_ms:g.number().int().positive().optional().describe("\u7B49\u5F85\u6D1E\u5BDF\u5B8C\u6210\u7684\u8D85\u65F6\u65F6\u95F4\uFF0C\u9ED8\u8BA4 300000ms\u3002"),poll_interval_ms:g.number().int().positive().optional().describe("\u8F6E\u8BE2\u95F4\u9694\uFF0C\u9ED8\u8BA4 2000ms\u3002")},xr={theme_id:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:g.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u6D1E\u5BDF\u95EE\u9898\u3002\u6D1E\u5BDF\u901A\u5E38\u8017\u65F6 2-3 \u5206\u949F\uFF0C5 \u5206\u949F\u89C6\u4E3A\u8D85\u65F6\uFF1B\u540C\u4E00\u95EE\u9898\u53EA\u53D1\u8D77\u4E00\u6B21\u3002"),session_id:g.string().min(1).optional().describe("\u53EF\u9009\u4F1A\u8BDD ID\uFF0C\u7528\u4E8E\u6D1E\u5BDF\u7EED\u95EE\u3002\u540C\u4E00\u4E2A session_id \u53EA\u80FD\u7EE7\u7EED\u6D1E\u5BDF\uFF0C\u4E0D\u80FD\u518D\u7528\u4E8E\u95EE\u6570\u3002"),external_context:g.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002")},Dr={theme_id:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002\u4F18\u5148\u4F7F\u7528 chatbi_insight_start \u8FD4\u56DE\u7684 theme_id\u3002"),theme_name:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\uFF1B\u672A\u63D0\u4F9B theme_id \u65F6\u4F1A\u6309\u540D\u79F0\u67E5\u627E\u6D1E\u5BDF\u4E3B\u9898\u3002"),message_id:g.string().min(1).describe("chatbi_insight_start \u8FD4\u56DE\u7684\u6D88\u606F ID\u3002\u5EFA\u8BAE\u81F3\u5C11\u95F4\u9694 10 \u79D2\u67E5\u8BE2\u4E00\u6B21\uFF0C5 \u5206\u949F\u540E\u505C\u6B62\u7B49\u5F85\u3002")};async function vr(e,t){let n=new L(e);try{let r=await n.listThemes({isInsight:t.is_insight});return E({themes:r,resolved_base_url:n.getResolvedBaseUrl(),tried_base_urls:n.getTriedBaseUrls()})}catch(r){return dt(n,r,"listThemes")}}async function Mr(e,t){let n=new L(e);try{let r=await n.query({themeId:t.theme_id,themeName:t.theme_name,message:t.message,sessionId:t.session_id,externalContext:t.external_context,fastMode:!0});return E({session_id:r.session_id,message_id:r.message_id,answer:r.answer,sql:r.sql,answer_status:r.answer_status,final_status:r.final_status,query_result:r.query_result,resolved_base_url:n.getResolvedBaseUrl(),tried_base_urls:n.getTriedBaseUrls()})}catch(r){return dt(n,r,"query")}}async function jr(e,t){let n=new L(e);try{let r=Nr({caller_scope:Lr(e),theme_id:t.theme_id,theme_name:t.theme_name,message:t.message,session_id:t.session_id,external_context:t.external_context}),i=xa(r);if(i)return E({...i,deduped:!0,retry_after_ms:se,next_action:"\u540C\u4E00\u6D1E\u5BDF\u95EE\u9898\u521A\u521A\u5DF2\u7ECF\u53D1\u8D77\uFF0C\u5DF2\u590D\u7528\u5DF2\u6709 message_id\u3002\u8BF7\u4F7F\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002"});let s=qt.get(r);if(s){let c=await s;return E({...c,deduped:!0,retry_after_ms:se,next_action:"\u540C\u4E00\u6D1E\u5BDF\u95EE\u9898\u6B63\u5728\u53D1\u8D77\u4E2D\uFF0C\u5DF2\u590D\u7528\u5DF2\u6709\u8BF7\u6C42\u7ED3\u679C\u3002\u8BF7\u4F7F\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002"})}let o=n.startInsight({themeId:t.theme_id,themeName:t.theme_name,message:t.message,sessionId:t.session_id,externalContext:t.external_context}).then(c=>{let u={theme_id:c.theme_id,message_id:c.message_id,session_id:c.session_id,status:"started"};return Da(r,u),u}).finally(()=>{qt.delete(r)});qt.set(r,o);let a=await o;return E({...a,deduped:!1,retry_after_ms:se,next_action:"\u6D1E\u5BDF\u4EFB\u52A1\u5DF2\u53D1\u8D77\u3002\u6D1E\u5BDF\u901A\u5E38\u8017\u65F6 2-3 \u5206\u949F\uFF0C\u8BF7\u4F7F\u7528 chatbi_insight_poll \u643A\u5E26 theme_id \u548C message_id \u67E5\u8BE2\u7ED3\u679C\uFF1B5 \u5206\u949F\u540E\u4ECD\u672A\u6210\u529F\u53EF\u89C6\u4E3A\u8D85\u65F6\u3002",resolved_base_url:n.getResolvedBaseUrl(),tried_base_urls:n.getTriedBaseUrls()})}catch(r){return dt(n,r,"insight.start")}}async function Ur(e,t){let n=new L(e);try{let r=Nr({caller_scope:Lr(e),message_id:t.message_id}),i=va(r);if(i){let l=Jt(i.result),f=$t(i.result,!0);return E({message_id:i.result.message_id,session_id:i.result.session_id,status:i.result.status,detail:Ht(i.result),question:i.result.question,answer:i.result.answer,throttled:!0,retry_after_ms:i.retryAfterMs,...l,next_action:f})}let s=Gt.get(r);if(s){let l=await s,f=zt(l.status),y=Jt(l),h=$t(l,!0);return E({message_id:l.message_id,session_id:l.session_id,status:l.status,detail:Ht(l),question:l.question,answer:l.answer,throttled:!0,retry_after_ms:f?0:se,...y,next_action:h})}let o=n.pollInsight({themeId:t.theme_id,themeName:t.theme_name,messageId:t.message_id}).then(l=>(Ma(r,l),l)).finally(()=>{Gt.delete(r)});Gt.set(r,o);let a=await o,c=zt(a.status),u=Jt(a),d=$t(a,!1);return E({message_id:a.message_id,session_id:a.session_id,status:a.status,detail:Ht(a),question:a.question,answer:a.answer,throttled:!1,retry_after_ms:c?0:se,...u,next_action:d,resolved_base_url:n.getResolvedBaseUrl(),tried_base_urls:n.getTriedBaseUrls()})}catch(r){return dt(n,r,"insight.poll")}}function Jt(e){return e.status!=="success"?{}:{final_result:{format:"markdown",content:qr(e)}}}function Ht(e){return e.detail!=null?e.detail:e.status==="failure"||e.status==="stopped"?ja(e):e.detail}function $t(e,t){if(e.status!=="success")return e.status==="waiting"?t?"\u540C\u4E00 message_id \u6B63\u5728\u67E5\u8BE2\u4E2D\u6216\u521A\u521A\u67E5\u8BE2\u8FC7\uFF0C\u5DF2\u8FD4\u56DE\u5DF2\u6709\u7ED3\u679C\uFF1B\u8BF7\u81F3\u5C11\u95F4\u9694 10 \u79D2\u518D\u67E5\u3002":"\u6D1E\u5BDF\u4EFB\u52A1\u4ECD\u5728\u6267\u884C\u4E2D\uFF0C\u8BF7\u7A0D\u540E\u7EE7\u7EED\u8C03\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002":e.status==="failure"||e.status==="stopped"?"\u6D1E\u5BDF\u4EFB\u52A1\u672A\u6210\u529F\u5B8C\u6210\uFF0C\u8BF7\u67E5\u770B detail\uFF1B\u5982\u9700\u91CD\u8BD5\u8BF7\u91CD\u65B0\u8C03\u7528 chatbi_insight_start\u3002":"\u6D1E\u5BDF\u4EFB\u52A1\u5904\u4E8E\u975E\u6210\u529F\u72B6\u6001\uFF0C\u8BF7\u67E5\u770B status \u548C detail \u540E\u51B3\u5B9A\u662F\u5426\u7EE7\u7EED\u67E5\u8BE2\u3002"}function xa(e){ut();let t=at.get(e);if(!(!t||Date.now()-t.createdAt>=Pa))return t.result}function Da(e,t){ut(),at.set(e,{createdAt:Date.now(),result:t})}function va(e){ut();let t=ct.get(e);if(!t)return;let n=Date.now()-t.checkedAt,r=zt(t.result.status);if(!(!r&&n>=se))return{result:t.result,retryAfterMs:r?0:Math.max(0,se-n)}}function zt(e){return e==="success"||e==="failure"||e==="stopped"}function Ma(e,t){ut(),ct.set(e,{checkedAt:Date.now(),result:t})}function ut(){let e=Date.now();for(let[t,n]of at)e-n.createdAt>=Sr&&at.delete(t);for(let[t,n]of ct)e-n.checkedAt>=Sr&&ct.delete(t)}function Nr(e){return JSON.stringify(Object.keys(e).sort().reduce((t,n)=>{let r=e[n];return typeof r<"u"&&(t[n]=r),t},{}))}function Lr(e){return e.BI_PAT?`pat:${Ft(e.BI_PAT)}`:e.BI_UID_TOKEN?`uid:${Ft(e.BI_UID_TOKEN)}`:`login:${Ft(`${e.BI_LOGIN_DOMAIN??""}\0${e.BI_LOGIN_ID??""}`)}`}function Ft(e){return ka("sha256").update(e).digest("hex").slice(0,16)}function qr(e){let t=e.answer?.trim();if(t)return Ga(t);let n=e.detail?.trim();return n||"\u5206\u6790\u5DF2\u5B8C\u6210\uFF0C\u4F46\u6CA1\u6709\u53EF\u5C55\u793A\u7684 markdown \u5185\u5BB9\u3002"}function ja(e){switch(e.status){case"success":return qr(e);case"waiting":return"\u6D1E\u5BDF\u4EFB\u52A1\u4ECD\u5728\u6267\u884C\u4E2D\uFF0C\u8BF7\u7A0D\u540E\u7EE7\u7EED\u8C03\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002";case"failure":case"stopped":return e.detail?.trim()||"\u6D1E\u5BDF\u4EFB\u52A1\u672A\u6210\u529F\u5B8C\u6210\u3002";default:return e.detail?.trim()||`\u6D1E\u5BDF\u4EFB\u52A1\u5F53\u524D\u72B6\u6001\uFF1A${e.status}`}}function Ua(e,t){let n=[`| ${e.join(" | ")} |`,`|${e.map(()=>" --- ").join("|")}|`];for(let r of t)n.push(`| ${e.map((i,s)=>La(Na(r[s]))).join(" | ")} |`);return n.join(`
2
+ import"dotenv/config";import{createRequire as pu}from"module";import{z as R}from"zod";var fs="http://guandata-web:8088",gs=R.object({BI_BASE_URL:R.string().url().optional().default(fs),BI_PUBLIC_PATH:R.string().optional().default(""),BI_PAT:R.string().optional(),BI_UID_TOKEN:R.string().optional(),BI_LOGIN_DOMAIN:R.string().optional().default("guanbi"),BI_LOGIN_ID:R.string().optional(),BI_LOGIN_PASSWORD:R.string().optional(),BI_APP_TOKEN:R.string().optional(),BI_LOGIN_ID_HEADER:R.string().optional(),BI_USER_PROPERTY_HEADER:R.string().optional(),BI_USER_PROPERTY_KEY:R.string().optional(),BI_IDENTITY_DEBUG:R.string().optional(),BI_IDENTITY_TOKEN_CACHE_TTL_MS:R.coerce.number().int().positive().default(6e5),BI_REQUEST_TIMEOUT_MS:R.coerce.number().int().positive().default(3e5),BI_MAX_ROWS:R.coerce.number().int().positive().default(1e3),BI_DATA_VERSION:R.string().optional(),GUANBI_MCP_USAGE_STATS:R.string().optional(),MCP_TRANSPORT:R.enum(["stdio","streamable-http"]).optional().default("stdio"),MCP_HTTP_HOST:R.string().optional().default("127.0.0.1"),MCP_HTTP_PORT:R.coerce.number().int().nonnegative().optional().default(9090),MCP_ENTRYPOINT_TOKEN:R.string().optional(),MCP_TRUSTED_GATEWAY:R.string().optional()});function yn(e=process.env){let t=gs.parse(e),n=t.MCP_TRANSPORT==="streamable-http";return{...t,BI_BASE_URL:t.BI_BASE_URL?.replace(/\/+$/,""),BI_PUBLIC_PATH:_s(t.BI_PUBLIC_PATH),BI_PAT:n?void 0:t.BI_PAT?.trim()||void 0,BI_UID_TOKEN:t.BI_UID_TOKEN?.trim()||void 0,BI_LOGIN_DOMAIN:t.BI_LOGIN_DOMAIN?.trim()||"guanbi",BI_LOGIN_ID:t.BI_LOGIN_ID?.trim()||void 0,BI_LOGIN_PASSWORD:t.BI_LOGIN_PASSWORD?.trim()||void 0,BI_APP_TOKEN:t.BI_APP_TOKEN?.trim()||void 0,BI_LOGIN_ID_HEADER:t.BI_LOGIN_ID_HEADER===void 0?"x-guanbi-login-id":hn(t.BI_LOGIN_ID_HEADER),BI_USER_PROPERTY_HEADER:hn(t.BI_USER_PROPERTY_HEADER),BI_USER_PROPERTY_KEY:t.BI_USER_PROPERTY_KEY?.trim()||void 0,BI_IDENTITY_DEBUG:t.BI_IDENTITY_DEBUG?.trim()||void 0,BI_DATA_VERSION:t.BI_DATA_VERSION?.trim()||void 0,GUANBI_MCP_USAGE_STATS:t.GUANBI_MCP_USAGE_STATS?.trim()||void 0,MCP_ENTRYPOINT_TOKEN:t.MCP_ENTRYPOINT_TOKEN?.trim()||void 0,MCP_TRUSTED_GATEWAY:t.MCP_TRUSTED_GATEWAY?.trim()||void 0}}function _s(e){let t=e?.trim().replace(/^\/+|\/+$/g,"")??"";return t?`/${t}`:""}function hn(e){return e?.trim().toLowerCase()||void 0}import{createRequire as Kc}from"module";import{createHash as Wc,randomUUID as Yc}from"crypto";import{createServer as Xc}from"http";import{McpServer as Zc}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as eu}from"@modelcontextprotocol/sdk/server/stdio.js";import{StreamableHTTPServerTransport as tu}from"@modelcontextprotocol/sdk/server/streamableHttp.js";var Je=class{record(t){console.error(JSON.stringify({audit:ys({...t})}))}},He=class{record(){}};function ht(e,t,n,r,i){return{transport:t.transport,tool:e,tenantId:t.audit.tenantId,endUserId:t.audit.endUserId,traceId:t.audit.traceId,status:r,durationMs:Math.max(0,Date.now()-n),failureType:r==="error"?hs(i):void 0}}function hs(e){return e instanceof Error?e.name||"Error":typeof e}function ys(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function $e(e){if(!e.BI_LOGIN_ID||!e.BI_LOGIN_PASSWORD||!e.BI_LOGIN_DOMAIN)throw new Error("\u5BC6\u7801\u767B\u5F55\u9700\u8981\u914D\u7F6E BI_LOGIN_DOMAIN\u3001BI_LOGIN_ID\u3001BI_LOGIN_PASSWORD\u3002");let t=await fetch(Is(e,"/api/user/sign-in"),{method:"POST",headers:{"Content-Type":"application/json","raw-backend-response":"TRUE"},body:JSON.stringify({domain:e.BI_LOGIN_DOMAIN,loginId:e.BI_LOGIN_ID,password:Buffer.from(e.BI_LOGIN_PASSWORD,"utf8").toString("base64")}),signal:AbortSignal.timeout(e.BI_REQUEST_TIMEOUT_MS)}),n=await t.text();if(!t.ok)throw new Error(`BI \u767B\u5F55\u5931\u8D25\uFF1AHTTP ${t.status} ${Rs(n)}`);let r=bs(t,n);if(!r)throw new Error("BI \u767B\u5F55\u54CD\u5E94\u4E2D\u672A\u627E\u5230 X-Auth-Token/Authorization/uIdToken/authToken/token\u3002");return{token:r}}function Is(e,t){return`${e.BI_BASE_URL}${e.BI_PUBLIC_PATH}${t}`}function bs(e,t){let n=Ts(e.headers);if(n)return n;let r=ws(t);return r||Cs(e.headers)}function Ts(e){let t=e.get("x-auth-token")?.trim();if(t)return t;let n=e.get("authorization")?.trim();return n&&(n.match(/^Bearer\s+(.+)$/i)?.[1]??n).trim()||void 0}function ws(e){try{let t=JSON.parse(e);return In(t)??In(Es(t.response))}catch{return}}function Cs(e){return[...e.getSetCookie?.()??[],...Ss(e.get("set-cookie"))].map(n=>n.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1]).find(Boolean)}function Ss(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function In(e){if(e)for(let t of["uIdToken","authToken","token"]){let n=e[t];if(typeof n=="string"&&n)return n}}function Es(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Rs(e,t=500){return e.length>t?`${e.slice(0,t)}...`:e}import{AsyncLocalStorage as Bs}from"async_hooks";var Fe={client:"X-Guandata-Client",clientVersion:"X-Guandata-Client-Version",command:"X-Guandata-Command"},As=new Set(Object.values(Fe).map(e=>e.toLowerCase())),bn=new Bs;function Tn(e,t){return bn.run(e,t)}function Os(e){e=bn.getStore()??e;let t={};t[Fe.client]="mcp";let n=e?.clientVersion?.trim();n&&(t[Fe.clientVersion]=n);let r=e?.command?.trim();return r&&(t[Fe.command]=r),t}function ze(e,t){let n=Os(t);return{...yt(e),...n}}function yt(e){return Object.fromEntries(Object.entries(e).filter(([t])=>!As.has(t.toLowerCase())))}var ks="guanbi_mcp_chatbi",v=class extends Error{detail;retryableForBaseUrl;authExpired;constructor(t,n,r={}){super(t),this.name="ChatBIRequestError",this.detail=n,this.retryableForBaseUrl=!!r.retryableForBaseUrl,this.authExpired=!!r.authExpired}},L=class{constructor(t){this.config=t;this.token=t.BI_UID_TOKEN,this.candidates=t.BI_BASE_URL?Ps(`${t.BI_BASE_URL}${t.BI_PUBLIC_PATH}`):[]}config;token;resolvedBaseUrl;candidates;triedBaseUrls=new Set;lastError;loginPromise;refreshPromise;getRegisteredTools(){return["chatbi_list_themes","chatbi_query","chatbi_insight_start","chatbi_insight_poll"]}getResolvedBaseUrl(){return this.resolvedBaseUrl}getTriedBaseUrls(){return[...this.triedBaseUrls]}getLastError(){return this.lastError}async probe(){try{return await this.listThemesRequest({},!1),{available:!0,resolvedBaseUrl:this.resolvedBaseUrl,triedBaseUrls:this.getTriedBaseUrls(),registeredTools:this.getRegisteredTools()}}catch(t){let n=wn(t,"probe");return{available:!1,lastError:n,failureType:zs(n),triedBaseUrls:this.getTriedBaseUrls(),registeredTools:this.getRegisteredTools()}}}async listThemes(t={}){return this.listThemesRequest(t,!0)}async listThemesRequest(t,n){let r={filter_enable:!0,list_type:"CHAT"};return typeof t.isInsight=="boolean"&&(r.is_insight=t.isInsight),(await this.request("/theme/list-theme",{operation:"listThemes",body:r,includeRequestMetadata:n,retrySafeBaseUrlFallback:!0,validateResponse:Hs})).themes}async query(t){let n=await this.resolveThemeId(t.themeId,t.themeName,!1),r={attachments:[],theme_id:n,message:t.message,config:Cn({fast_mode:t.fastMode??!0,n_samples:t.nSamples})};t.sessionId&&(r.session_id=t.sessionId),t.externalContext&&(r.external_context=t.externalContext);let i=await this.request("/chat/send-message-sync",{operation:"query",body:r,includeDeviceId:!0});try{Qs(i)}catch(s){throw this.operationError("query","/chat/send-message-sync",s)}return i}async insight(t){let n=t.timeoutMs??3e5,r=t.pollIntervalMs??2e3,i=Date.now()+n,s=await this.startInsight({...t,requestTimeoutMs:Sn(i)});if(!s.theme_id)throw this.operationError("insight.send","/chat/send-message","ChatBI insight response missing theme_id");if(!s.message_id?.trim())throw this.operationError("insight.send","/chat/send-message","ChatBI insight response missing message_id");for(;;){let o=await this.getAgentAnswer(s.theme_id,s.message_id,Sn(i));switch(o.message_id??=s.message_id,o.session_id??=s.session_id,o.status){case"success":return o;case"failure":case"stopped":throw this.operationError("insight.poll","/chat/get-agent-answer",o.detail?.trim()||"Insight request failed")}await Ys(i,r,n)}}async startInsight(t){let n=await this.resolveThemeId(t.themeId,t.themeName,!0),r={attachments:[],theme_id:n,message:t.message,is_insight:1};t.sessionId&&(r.session_id=t.sessionId),t.externalContext&&(r.external_context=t.externalContext);let i=Cn({analysis_expert_id:t.analysisExpertId,agent_mode:t.agentMode,analysis_confirmation_enabled:t.analysisConfirmationEnabled});Object.keys(i).length&&(r.config=i);let s=await this.request("/chat/send-message",{operation:"insight.send",body:r,includeDeviceId:!0,requestTimeoutMs:t.requestTimeoutMs});if(!s.message_id?.trim())throw this.operationError("insight.send","/chat/send-message","ChatBI insight response missing message_id");return s.theme_id=n,s}async pollInsight(t){let n=await this.resolveThemeId(t.themeId,t.themeName,!0),r=await this.getAgentAnswer(n,t.messageId,t.requestTimeoutMs);return r.message_id||(r.message_id=t.messageId),r}async getAgentAnswer(t,n,r){let i=new URLSearchParams({theme_id:t,message_id:n});try{return await this.request(`/chat/get-agent-answer?${i.toString()}`,{operation:"insight.poll",retrySafeBaseUrlFallback:!0,requestTimeoutMs:r})}catch(s){if(qs(s))return{status:"waiting",message_id:n};throw s}}async resolveThemeId(t,n,r){let i=t?.trim();if(i)return i;let s=n?.trim();if(!s)throw new Error("\u7F3A\u5C11\u4E3B\u9898\u9009\u62E9\uFF0C\u8BF7\u4F20 theme_id \u6216 theme_name\u3002");let o=await this.listThemes({isInsight:r?!0:void 0});return Vs(o,s)}async request(t,n){this.assertUsableConfig();let r=this.resolvedBaseUrl?[this.resolvedBaseUrl]:this.candidates,i;for(let s of r){this.triedBaseUrls.add(s);try{let o=await this.requestToBaseUrlWithAuthRetry(s,t,n);return n.validateResponse?.(o,{operation:n.operation,baseUrl:s,path:t}),this.resolvedBaseUrl=s,this.lastError=void 0,o}catch(o){if(i=o,this.lastError=wn(o,n.operation),!js(o,n.retrySafeBaseUrlFallback))throw this.withTriedBaseUrls(o)}}throw this.withTriedBaseUrls(i??new Error("\u65E0\u6CD5\u5B9A\u4F4D ChatBI Public API\u3002"))}withTriedBaseUrls(t){return t instanceof v&&(t.detail.tried_base_urls=this.getTriedBaseUrls(),this.lastError=t.detail),t}operationError(t,n,r){let i=r instanceof Error?r.message:String(r);return new v(i,{operation:t,base_url:this.resolvedBaseUrl,path:n,chatbi_message:i,tried_base_urls:this.getTriedBaseUrls(),detail:i})}async requestToBaseUrlWithAuthRetry(t,n,r){if(this.config.BI_PAT)return this.requestToBaseUrl(t,n,{type:"pat",token:this.config.BI_PAT},r,{operation:r.operation,baseUrl:t,path:n});let i=await this.ensureToken(),s={operation:r.operation,baseUrl:t,path:n};try{return await this.requestToBaseUrl(t,n,{type:"uid",token:i},r,s)}catch(o){if(!Us(o)||!this.canRefreshToken())throw o;let c=await this.refreshToken();return this.requestToBaseUrl(t,n,{type:"uid",token:c},r,{...s,tokenRefreshed:!0})}}async requestToBaseUrl(t,n,r,i,s){let o=i.body===void 0?"GET":"POST",c=xs(r,i),a;try{a=await fetch(`${t}${n}`,{method:o,headers:i.includeRequestMetadata===!1?c:ze(c,this.config.BI_REQUEST_METADATA),body:i.body===void 0?void 0:JSON.stringify(i.body),signal:AbortSignal.timeout(i.requestTimeoutMs??this.config.BI_REQUEST_TIMEOUT_MS)})}catch(l){throw new v(l instanceof Error?l.message:String(l),{operation:s.operation,base_url:s.baseUrl,path:s.path,token_refreshed:s.tokenRefreshed,detail:l instanceof Error?l.message:String(l)})}let u=await a.text(),d=Ds(u,a,s);if(!a.ok||vs(d))throw Ms(d,u,a,s);return r.type==="uid"&&this.refreshTokenFromResponse(a,d),d.data}async ensureToken(){return this.token?this.token:(this.loginPromise??=this.signInForToken().finally(()=>{this.loginPromise=void 0}),this.loginPromise)}async refreshToken(){return this.refreshPromise??=this.refreshTokenOnce().finally(()=>{this.refreshPromise=void 0}),this.refreshPromise}async refreshTokenOnce(){if(this.config.BI_UID_TOKEN_REFRESH){let t=await this.config.BI_UID_TOKEN_REFRESH();return this.token=t,t}return this.signInForToken()}async signInForToken(){this.token=void 0;let t=await $e(this.config);return this.token=t.token,t.token}refreshTokenFromResponse(t,n){let r=$s(t,n);!r||r===this.token||(this.token=r)}hasPasswordLogin(){return!!(this.config.BI_LOGIN_DOMAIN&&this.config.BI_LOGIN_ID&&this.config.BI_LOGIN_PASSWORD)}canRefreshToken(){return!!this.config.BI_UID_TOKEN_REFRESH||this.hasPasswordLogin()}assertUsableConfig(){if(!this.config.BI_BASE_URL)throw new Error("\u7F3A\u5C11 BI_BASE_URL\uFF0C\u65E0\u6CD5\u63A8\u5BFC ChatBI Public API \u5730\u5740\u3002")}};function Ps(e){let t=new URL(e),n=[],r=s=>{let o=new URL(t.toString());o.pathname=s,o.search="",o.hash="";let c=o.toString().replace(/\/+$/,"");n.includes(c)||n.push(c)},i=t.pathname.replace(/\/+$/,"");return r("/api/chat/public-api"),i&&r(`${i}/api/chat/public-api`),r(i?`${i}/public-api`:"/public-api"),r("/public-api"),n}function Ve(e){return e.BI_BASE_URL?e.BI_PAT||e.BI_UID_TOKEN?!0:!!(e.BI_LOGIN_DOMAIN&&e.BI_LOGIN_ID&&e.BI_LOGIN_PASSWORD):!1}function xs(e,t){let n={"User-Agent":"guanbi-mcp-server",...e.type==="pat"?{"X-Personal-Token":e.token}:{Cookie:`uIdToken=${e.token}`}};return t.body!==void 0&&(n["Content-Type"]="application/json"),t.includeDeviceId&&(n["Device-ID"]=ks),n}function Ds(e,t,n){if(!e)return{};try{return JSON.parse(e)}catch{throw new v("ChatBI response is not valid JSON",{operation:n.operation,base_url:n.baseUrl,path:n.path,http_status:t.status,token_refreshed:n.tokenRefreshed,detail:Bn(e)},{retryableForBaseUrl:!0})}}function vs(e){let t=En(e);return typeof t=="number"&&![0,200].includes(t)||e.result==="fail"||e.success===!1}function Ms(e,t,n,r){let i=En(e),s=Gs(e),o=s||t||`ChatBI request failed with status ${n.status}`,c={operation:r.operation,base_url:r.baseUrl,path:r.path,http_status:n.status,chatbi_code:i,chatbi_message:s,token_refreshed:r.tokenRefreshed,detail:Bn(t)},a=Js(o),u=!a&&Ns(n.status,i);return new v(o,c,{authExpired:u,retryableForBaseUrl:a||Ls(n.status,i)})}function js(e,t){return!!(t&&e instanceof v&&e.retryableForBaseUrl)}function Us(e){return e instanceof v&&e.authExpired}function Ns(e,t){return e===401||e===403||t===401||t===403||t===5001}function Ls(e,t){return[401,403,404,405].includes(e)||typeof t=="number"&&[401,403,404,405].includes(t)}function qs(e){return e instanceof v&&e.detail.http_status===200&&e.detail.chatbi_code===404&&e.detail.chatbi_message==="Message not found."}function En(e){if(typeof e.code=="number")return e.code;let t=Qe(e.error);return typeof t?.status=="number"?t.status:void 0}function Gs(e){if(typeof e.message=="string"&&e.message.trim())return e.message;let t=Qe(e.error);return typeof t?.message=="string"&&t.message.trim()?t.message:void 0}function Js(e){return/No static resource/i.test(e)}function Qe(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Hs(e,t){let n=Qe(e);if(!Array.isArray(n?.themes))throw new v("ChatBI list-theme response missing themes",{operation:t.operation,base_url:t.baseUrl,path:t.path,detail:"missing themes"},{retryableForBaseUrl:!0})}function $s(e,t){let r=[...e.headers.getSetCookie?.()??[],...Fs(e.headers.get("set-cookie"))].map(s=>It(s.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1])).find(Boolean);if(r)return r;let i=It(e.headers.get("x-auth-token"));return i||Rn(t)}function Fs(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function It(e){if(typeof e!="string")return;let t=e.trim();return t&&!/\s/.test(t)?t:void 0}function Rn(e){let t=Qe(e);if(t){for(let n of["uIdToken","authToken"]){let r=It(t[n]);if(r)return r}for(let n of["data","response"]){let r=Rn(t[n]);if(r)return r}}}function wn(e,t){return e instanceof v?e.detail:{operation:t,detail:e instanceof Error?e.message:String(e)}}function Bn(e,t=1e3){return e.length>t?`${e.slice(0,t)}...`:e}function zs(e){let t=`${e.chatbi_message??""} ${e.detail??""}`;return/BI 登录失败|密码登录|sign-?in|login/i.test(t)?"login_failed":e.http_status===401||e.http_status===403||e.chatbi_code===401||e.chatbi_code===403?"permission_denied":/No static resource|not valid JSON/i.test(t)||e.http_status===404||e.http_status===405||e.chatbi_code===404||e.chatbi_code===405?"public_api_unreachable":"unknown"}function Vs(e,t){let n=t.trim().toLowerCase(),r,i=[];for(let s of e){let o=s.theme_name.trim().toLowerCase();o===n?r=s:o.includes(n)&&i.push(s)}if(r)return r.theme_id;if(i.length===1)return i[0].theme_id;throw i.length>1?new Error(`\u4E3B\u9898\u540D\u5339\u914D\u5230\u591A\u4E2A\u7ED3\u679C\uFF1A${t}`):new Error(`\u672A\u627E\u5230\u4E3B\u9898\uFF1A${t}`)}function Cn(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>typeof t<"u"))}function Qs(e){if([e.final_status,e.answer_status,e.query_status].some(Ws))throw new Error(`ChatBI query failed: ${Ks(e.query_context?.err_msg,e.query_context?.detail,e.query_context?.msg,e.answer_context?.detail,e.answer_context?.msg,"unknown failure")}`);if(!e.answer?.explain?.trim()&&!(e.query_result?.columns?.length||e.query_result?.preview?.length))throw new Error("ChatBI response missing query content")}function Ks(...e){return e.find(t=>typeof t=="string"&&t.trim())?.trim()}function Ws(e){return typeof e=="string"&&e.trim().toLowerCase()==="failure"}function Sn(e){let t=e-Date.now();if(t<=0)throw new Error("Insight request timed out");return t}async function Ys(e,t,n){let r=e-Date.now();if(r<=0)throw new Error(`Insight request timed out after ${n}ms`);await new Promise(i=>setTimeout(i,Math.min(t,r)))}var Be="8.2.0",Tt=["search_metrics","list_metric_catalog","get_metric_detail","query_metric_data","search_metric_trees","get_metric_tree_detail","query_metric_tree_attribution"],Xs=["inspect_page_insight","generate_page_insight","generate_card_insight","list_dashboard_agents","get_dashboard_agent","ask_dashboard_agent","list_dashboard_agent_sessions","list_dashboard_agent_messages"],Zs=["get_bi_capabilities","global_search",...Tt,"execute_sql_query","get_dataset_detail","get_card_info","query_card_data","get_page_info",...Xs],eo=6e4,to="PAT \u6A21\u5F0F\u4EC5\u652F\u6301\u666E\u901A BI \u63A5\u53E3\uFF0C\u4E0D\u652F\u6301 ChatBI public-api\u3002",bt=new WeakMap;async function Ae(e,t){let n=bt.get(e);return(!n||n.expiresAt<=Date.now())&&bt.set(e,{expiresAt:Date.now()+eo,promise:ro(e,t).catch(r=>no(r,t))}),bt.get(e).promise}function kn(e){let t=!e.BI_BASE_URL,n="HTTP \u6A21\u5F0F\u4E0B execute_sql_query \u4F1A\u5728\u8C03\u7528\u65F6\u4F7F\u7528\u5F53\u524D\u7528\u6237 token \u5224\u65AD BI \u7248\u672C/\u80FD\u529B\u3002",r="HTTP \u6A21\u5F0F\u542F\u52A8\u671F\u5C1A\u672A\u89E3\u6790\u8BF7\u6C42\u8C03\u7528\u8005\u3002";return{ok:!t,error:t?"\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u7F3A\u5C11 BI_BASE_URL\u3002":void 0,versionSource:"api",dataVersion:e.BI_DATA_VERSION,service:Ct(e,t?["get_bi_capabilities"]:wt(e)),caller:{ok:!1,error:r,features:{executeSqlQuery:{enabled:!1,minVersion:Be,reason:r}},chatbi:le(e,r)},features:{executeSqlQuery:{enabled:!t,minVersion:Be,reason:t?"\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u7F3A\u5C11 BI_BASE_URL\u3002":n}},metricPlatform:{registeredTools:t?[]:Tt,readOnly:!0,lastError:t?"\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u7F3A\u5C11 BI_BASE_URL\u3002":void 0},chatbi:le(e,"HTTP \u6A21\u5F0F\u542F\u52A8\u671F\u4E0D\u4F7F\u7528\u67D0\u4E2A\u7528\u6237 token \u63A2\u6D4B ChatBI \u80FD\u529B\u3002")}}async function Pn(e,t,n){let i=(await Ae(e,t)).features[n];if(!i.enabled)throw new Error(`\u5F53\u524D BI \u73AF\u5883\u4E0D\u652F\u6301 ${n}\uFF1A${i.reason??"\u80FD\u529B\u672A\u542F\u7528"}`)}function no(e,t){let n=e instanceof Error?e.message:String(e);return{ok:!1,error:n,versionSource:"api",features:{executeSqlQuery:{enabled:!1,minVersion:Be,reason:`\u65E0\u6CD5\u786E\u8BA4 BI \u80FD\u529B\uFF1A${n}`}},metricPlatform:{registeredTools:[],readOnly:!0,lastError:n},chatbi:le(t,n),service:Ct(t,wt(t)),caller:{ok:!1,error:n,features:{executeSqlQuery:{enabled:!1,minVersion:Be,reason:`\u65E0\u6CD5\u786E\u8BA4 BI \u80FD\u529B\uFF1A${n}`}},chatbi:le(t,n)}}}async function ro(e,t){let n=so(t);if(n.length)throw new Error(`\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A${n.join("\uFF1B")}\u3002`);let r=t.BI_DATA_VERSION?"env":"api",i=t.BI_DATA_VERSION?{dataVersion:t.BI_DATA_VERSION,capabilityVersion:t.BI_DATA_VERSION}:await oo(e,t),s=ao(i.capabilityVersion,Be),o=await io(t);return{ok:!0,appVersion:i.appVersion,dataVersion:i.dataVersion,versionSource:r,service:Ct(t,wt(t)),caller:{ok:!0,features:{executeSqlQuery:s},chatbi:o},features:{executeSqlQuery:s},metricPlatform:{registeredTools:Tt,readOnly:!0},chatbi:o}}function wt(e){let t=new Set(Zs);if(!e.BI_PAT&&(Ve(e)||e.MCP_TRANSPORT==="streamable-http"))for(let n of new L(e).getRegisteredTools())t.add(n);return[...t]}function Ct(e,t){return{mode:e.MCP_TRANSPORT??"stdio",toolList:t,boundBISite:{configured:!!e.BI_BASE_URL,baseUrl:e.BI_BASE_URL,publicPath:e.BI_PUBLIC_PATH}}}async function io(e){if(e.BI_PAT)return le(e,to);let t=new L(e);return Ve(e)?t.probe():le(e,"\u7F3A\u5C11 BI_BASE_URL \u6216\u9274\u6743\u914D\u7F6E\u3002")}function le(e,t){return{available:!1,registeredTools:e.BI_PAT||!Ve(e)?[]:new L(e).getRegisteredTools(),failureType:"unknown",triedBaseUrls:[],lastError:{operation:"probe",chatbi_message:t,detail:t}}}function so(e){let t=[];if(e.BI_BASE_URL||t.push("\u7F3A\u5C11 BI_BASE_URL"),!e.BI_PAT&&!e.BI_UID_TOKEN){let n=[["BI_LOGIN_DOMAIN",e.BI_LOGIN_DOMAIN],["BI_LOGIN_ID",e.BI_LOGIN_ID],["BI_LOGIN_PASSWORD",e.BI_LOGIN_PASSWORD]].filter(([,r])=>!r).map(([r])=>r);n.length&&t.push(`\u7F3A\u5C11\u9274\u6743\u914D\u7F6E\uFF1A\u8BF7\u914D\u7F6E BI_PAT\u3001BI_UID_TOKEN\uFF0C\u6216\u8865\u5168\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u914D\u7F6E\uFF08\u7F3A\u5C11 ${n.join("\u3001")}\uFF09`)}return t}async function oo(e,t){let n=await e.get("/api/server-version",{includeRequestMetadata:!!t.BI_PAT}),r=On(n.version),i=On(n.dataVersion)??r;if(!i)throw new Error("BI \u7248\u672C\u63A5\u53E3\u672A\u8FD4\u56DE version \u6216 dataVersion\u3002");return{appVersion:r,dataVersion:i,capabilityVersion:i}}function ao(e,t){let n=An(e),r=An(t);if(!r)throw new Error(`\u5185\u90E8\u914D\u7F6E\u9519\u8BEF\uFF1A\u65E0\u6CD5\u89E3\u6790\u6700\u4F4E\u7248\u672C ${t}\u3002`);if(!n)return{enabled:!1,minVersion:t,reason:`\u65E0\u6CD5\u4ECE\u7248\u672C\u5B57\u7B26\u4E32 "${e}" \u4E2D\u89E3\u6790\u4EA7\u54C1\u7248\u672C\uFF0C\u8BF7\u914D\u7F6E BI_DATA_VERSION\u3002`};let i=co(n,r)>=0;return{enabled:i,minVersion:t,reason:i?void 0:`\u9700\u8981 BI ${t}+\uFF0C\u5F53\u524D\u7248\u672C\u4E3A ${e}\u3002`}}function An(e){let t=e.match(/(\d+)\.(\d+)\.(\d+)/);if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}function co(e,t){for(let n=0;n<e.length;n+=1){let r=e[n]-t[n];if(r!==0)return r}return 0}function On(e){return typeof e=="string"&&e.trim()?e.trim():void 0}var Ke=class{constructor(t){this.config=t}config;cache=new Map;async exchange(t){let n=xn(t),r=this.cache.get(this.cacheKey(n));if(r&&r.expiresAtMs>Date.now())return this.result(n,r.token,r.biExpireAt);let i=await this.fetchLoginIdToken(n);return this.cache.set(this.cacheKey(n),{token:i.token,expiresAtMs:this.resolveCacheExpiresAt(i.expireAt),biExpireAt:i.expireAt}),this.result(n,i.token,i.expireAt)}async exchangeUserProperty(t){let n=await this.fetchLoginIdByUserProperty(t);return this.exchange(n)}async refresh(t){return this.cache.delete(this.cacheKey(t)),(await this.exchange(t)).token}result(t,n,r){return{token:n,expireAt:r,refresh:()=>this.refresh(t)}}async fetchLoginIdByUserProperty(t){let n=uo(t.value);if(!this.config.BI_BASE_URL)throw this.debugError("BI_BASE_URL is required for user property identity exchange.",{operation:"userPropertyLookup",request:{userPropertyValue:n}});if(!this.config.BI_APP_TOKEN)throw this.debugError("BI_APP_TOKEN is required for user property identity exchange.",{operation:"userPropertyLookup",request:{userPropertyValue:n}});let r=t.key?.trim();if(!r)throw this.debugError("BI_USER_PROPERTY_KEY is required for user property identity exchange.",{operation:"userPropertyLookup",request:{userPropertyValue:n}});let i=this.buildUrl("/public-api/user/properties/list"),s={token:this.config.BI_APP_TOKEN,userPropertyKey:r,userPropertyValue:n,enabled:!0,offset:0,limit:2},o;try{o=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","raw-backend-response":"TRUE"},body:JSON.stringify(s),signal:AbortSignal.timeout(this.config.BI_REQUEST_TIMEOUT_MS)})}catch(l){throw this.debugError(`BI user property lookup request failed: ${l instanceof Error?l.message:String(l)}`,{operation:"userPropertyLookup",request:{method:"POST",url:i,body:s},error:l instanceof Error?l.message:String(l)},[this.config.BI_APP_TOKEN])}let c=await o.text(),a=Dn(c);if(!o.ok||vn(a))throw this.debugError(`BI user property lookup failed: HTTP ${o.status} ${St(c,[this.config.BI_APP_TOKEN,r,n])}`,{operation:"userPropertyLookup",request:{method:"POST",url:i,body:s},response:{status:o.status,body:c}},[this.config.BI_APP_TOKEN]);let u=a?.response?.list??[],d=a?.response?.total??u.length;if(d!==1||u.length!==1)throw this.debugError(`BI user property lookup must match exactly one user: matched ${d} user(s) for ${r}.`,{operation:"userPropertyLookup",request:{method:"POST",url:i,body:s},response:{status:o.status,total:d,listCount:u.length,matchedLoginIds:u.map(l=>l.loginId).filter(Boolean)}},[this.config.BI_APP_TOKEN]);return xn(u[0]?.loginId??"")}async fetchLoginIdToken(t){if(!this.config.BI_BASE_URL)throw this.debugError("BI_BASE_URL is required for loginId identity exchange.",{operation:"loginIdSignIn",request:{loginId:t}});if(!this.config.BI_APP_TOKEN)throw this.debugError("BI_APP_TOKEN is required for loginId identity exchange.",{operation:"loginIdSignIn",request:{loginId:t}});let n=this.buildUrl("/public-api/user/loginId/sign-in"),r={token:this.config.BI_APP_TOKEN,loginId:t},i;try{i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","raw-backend-response":"TRUE"},body:JSON.stringify(r),signal:AbortSignal.timeout(this.config.BI_REQUEST_TIMEOUT_MS)})}catch(a){throw this.debugError(`BI loginId token exchange request failed: ${a instanceof Error?a.message:String(a)}`,{operation:"loginIdSignIn",request:{method:"POST",url:n,body:r},error:a instanceof Error?a.message:String(a)},[this.config.BI_APP_TOKEN])}let s=await i.text(),o=Dn(s),c=o?.response?.token?.trim();if(!i.ok||vn(o)||!c)throw this.debugError(`BI loginId token exchange failed: HTTP ${i.status} ${St(s,[this.config.BI_APP_TOKEN,c,t])}`,{operation:"loginIdSignIn",request:{method:"POST",url:n,body:r},response:{status:i.status,body:s}},[this.config.BI_APP_TOKEN,c]);return{token:c,expireAt:o?.response?.expireAt}}buildUrl(t){let n=t.startsWith("/")?t:`/${t}`;return`${this.config.BI_BASE_URL}${this.config.BI_PUBLIC_PATH}${n}`}cacheKey(t){return`${this.config.BI_BASE_URL??""}${this.config.BI_PUBLIC_PATH}\0${t}`}resolveCacheExpiresAt(t){let n=Date.now()+this.config.BI_IDENTITY_TOKEN_CACHE_TTL_MS,r=lo(t);return r?Math.min(n,r):n}debugError(t,n,r=[]){if(!mo(this.config))return new Error(t);let i=Et(n,[this.config.BI_APP_TOKEN,...r]);return console.error(JSON.stringify({identityExchangeDebug:i})),new Error(`${t}
3
+ identity_debug=${JSON.stringify(i,null,2)}`)}};function xn(e){let t=e.trim();if(!t)throw new Error("GuanBI loginId is required for loginId identity exchange.");return t}function uo(e){let t=e.trim();if(!t)throw new Error("BI user property value is required for user property identity exchange.");return t}function Dn(e){if(e.trim())try{return JSON.parse(e)}catch{return}}function vn(e){return!e||e.result&&!["ok","success"].includes(e.result.toLowerCase())?!0:e.success===!1}function lo(e){if(!e)return;let t=e.replace(" ","T"),n=Date.parse(t);return Number.isFinite(n)?n:void 0}function St(e,t){let n=t.filter(r=>!!r).reduce((r,i)=>r.split(i).join("[redacted]"),e);return fo(n)}function Et(e,t){let n=t.filter(r=>!!r);return typeof e=="string"?St(e,n):Array.isArray(e)?e.map(r=>Et(r,n)):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).map(([r,i])=>[r,po(r)?"[redacted]":Et(i,n)]))}function po(e){return["token","authorization","cookie","uidtoken","uIdToken".toLowerCase()].includes(e.toLowerCase())}function mo(e){return["1","true","yes","on"].includes(e.BI_IDENTITY_DEBUG?.trim().toLowerCase()??"")}function fo(e,t=1e3){return e.length>t?`${e.slice(0,t)}\u2026`:e}var Oe="bi-user-property-header",ke="bi-user-property-key",go=new Set(["authorization","proxy-authorization","cookie","set-cookie","x-personal-token","x-guanbi-uid-token",Oe,ke]);function jn(e){let t=Mn(e,Oe),n=Mn(e,ke);if(t===void 0&&n===void 0)return;if(!t||!n)throw new Error("\u7528\u6237\u5C5E\u6027\u6620\u5C04\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u8BF7\u540C\u65F6\u4F20\u5165 bi-user-property-header \u548C bi-user-property-key\u3002");if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(t)||go.has(t.toLowerCase()))throw new Error("\u7528\u6237\u5C5E\u6027\u6620\u5C04\u6765\u6E90\u65E0\u6548\uFF1A\u8BF7\u6307\u5B9A\u5408\u6CD5\u7684\u7528\u6237\u8EAB\u4EFD\u8BF7\u6C42\u5934\uFF0C\u4E0D\u80FD\u4F7F\u7528\u51ED\u8BC1\u5934\u6216\u6620\u5C04\u914D\u7F6E\u5934\u3002");let r=e.filter(([i])=>i.toLowerCase()===t.toLowerCase());if(r.length!==1||!r[0]?.[1].trim())throw new Error(`\u7528\u6237\u5C5E\u6027\u6620\u5C04\u7F3A\u5C11\u8EAB\u4EFD\u503C\uFF1A\u8BF7\u901A\u8FC7 ${t} \u8BF7\u6C42\u5934\u4F20\u5165\u5355\u4E2A\u975E\u7A7A\u7528\u6237\u8EAB\u4EFD\u503C\u3002`);return{key:n,value:r[0][1].trim()}}function Mn(e,t){let n=e.filter(([i])=>i.toLowerCase()===t);if(n.length===0)return;if(n.length>1||n[0][1].includes(","))throw new Error(`\u7528\u6237\u5C5E\u6027\u6620\u5C04\u914D\u7F6E\u65E0\u6548\uFF1A${t} \u53EA\u80FD\u4F20\u5165\u4E00\u4E2A\u503C\uFF0C\u4E0D\u80FD\u91CD\u590D\u6216\u5305\u542B\u9017\u53F7\u3002`);let r=n[0][1].trim();if(!r)throw new Error(`\u7528\u6237\u5C5E\u6027\u6620\u5C04\u914D\u7F6E\u65E0\u6548\uFF1A${t} \u4E0D\u80FD\u4E3A\u7A7A\u3002`);return r}var ge="x-personal-token";function _o(e){return{transport:"stdio",...e.BI_PAT?{biPatToken:e.BI_PAT}:{},biUidToken:e.BI_UID_TOKEN,audit:{}}}function Ln(e){return{resolve:()=>_o(e)}}function We(e){let t=Pe(e);if(t)return{transport:"streamable-http",biPatToken:t,audit:me(e)};let n=Y(e,"x-guanbi-uid-token")?.trim();if(!n)throw new Error("\u7F3A\u5C11 GuanBI \u7528\u6237\u4EE4\u724C\uFF1A\u8BF7\u901A\u8FC7 X-GuanBI-Uid-Token \u4F20\u5165\u5F53\u524D\u7528\u6237 uIdToken\u3002");return{transport:"streamable-http",biUidToken:n,audit:me(e)}}function qn(e,t={}){let n=e?new Ke(e):void 0,r=t.exchangeLoginId??t.exchange??(n?n.exchange.bind(n):void 0),i=t.exchangeUserProperty??(n?n.exchangeUserProperty.bind(n):void 0);return{resolve:async s=>{if(!s?.requestInfo?.headers)return e?.BI_PAT?{transport:"streamable-http",biPatToken:e.BI_PAT,audit:{}}:{transport:"streamable-http",audit:{}};let o=s.requestInfo.headers,c=Pe(o);if(c)return{transport:"streamable-http",biPatToken:c,audit:me(o)};if(e?.BI_PAT)return{transport:"streamable-http",biPatToken:e.BI_PAT,audit:me(o)};if(Y(o,"x-guanbi-uid-token")?.trim()||!e)return We(o);let u=e.BI_LOGIN_ID_HEADER,d=u?fe(Y(o,u)):void 0;if(d){let f=await r?.(d);return f?{transport:"streamable-http",biUidToken:f.token,biUidTokenRefresh:f.refresh,loginId:d,audit:me(o)}:We(o)}let l;try{l=jn(Ye(o))}catch(f){throw Un(o,e,f.message)}if(!l&&e.BI_USER_PROPERTY_HEADER){let f=fe(Y(o,e.BI_USER_PROPERTY_HEADER));f&&(l={key:e.BI_USER_PROPERTY_KEY,value:f})}if(l){let f=await i?.(l);return f?{transport:"streamable-http",biUidToken:f.token,biUidTokenRefresh:f.refresh,audit:me(o)}:We(o)}throw Un(o,e)}}}function Pe(e){return fe(Y(e,ge))}function Y(e,t){if(e instanceof Headers)return e.get(t)??void 0;let n=e.get;if(typeof n=="function")return n.call(e,t)??void 0;let r=t.toLowerCase();for(let[i,s]of Object.entries(e))if(i.toLowerCase()===r)return Array.isArray(s)?s[0]:s}function fe(e){return e?.trim()||void 0}function me(e){return{tenantId:fe(Y(e,"x-tenant-id")),endUserId:fe(Y(e,"x-end-user-id")),traceId:fe(Y(e,"x-trace-id"))}}function Un(e,t,n="\u7F3A\u5C11 GuanBI \u7528\u6237\u4EE4\u724C\uFF1A\u8BF7\u4F20\u5165 X-GuanBI-Uid-Token\uFF0C\u6216\u901A\u8FC7 bi-user-property-header \u548C bi-user-property-key \u914D\u7F6E\u7528\u6237\u5C5E\u6027\u6620\u5C04\u3002"){if(!To(t))return new Error(n);let r={operation:"resolveHttpCallerContext",expectedIdentityHeaders:ho(e,t),receivedHeaderNames:yo(e),receivedIdentityLikeHeaders:Nn(Object.fromEntries(Ye(e).filter(([i])=>bo(i.toLowerCase()))),[ge,"x-guanbi-uid-token",t.BI_LOGIN_ID_HEADER,t.BI_USER_PROPERTY_HEADER]),receivedHeaders:Nn(e,[ge,"x-guanbi-uid-token",t.BI_LOGIN_ID_HEADER,t.BI_USER_PROPERTY_HEADER])};return console.error(JSON.stringify({identityExchangeDebug:r})),new Error(`${n}
4
+ identity_debug=${JSON.stringify(r,null,2)}`)}function ho(e,t){return[{source:"pat",name:ge,present:pe(e,ge)},{source:"uidToken",name:"x-guanbi-uid-token",present:pe(e,"x-guanbi-uid-token")},{source:"userPropertyHeader",name:Oe,present:pe(e,Oe)},{source:"userPropertyKey",name:ke,present:pe(e,ke)},...t.BI_LOGIN_ID_HEADER?[{source:"loginId",name:t.BI_LOGIN_ID_HEADER,present:pe(e,t.BI_LOGIN_ID_HEADER)}]:[],...t.BI_USER_PROPERTY_HEADER?[{source:"userProperty",name:t.BI_USER_PROPERTY_HEADER,present:pe(e,t.BI_USER_PROPERTY_HEADER),userPropertyKey:t.BI_USER_PROPERTY_KEY}]:[]]}function pe(e,t){return Y(e,t)!==void 0}function yo(e){return[...new Set(Ye(e).map(([t])=>t.toLowerCase()))].sort()}function Nn(e,t){let n=new Set(t.filter(r=>!!r).map(r=>r.toLowerCase()));return Object.fromEntries(Ye(e).map(([r,i])=>{let s=r.toLowerCase();return Io(s)?[s,"<redacted>"]:[s,n.has(s)?i:"<present>"]}))}function Ye(e){if(e instanceof Headers)return[...e.entries()];let t=e.entries;return typeof t=="function"?[...t.call(e)]:Object.entries(e).filter(([,n])=>n!==void 0).map(([n,r])=>[n,Array.isArray(r)?r.join(","):String(r)])}function Io(e){return["authorization","proxy-authorization","cookie","set-cookie","x-guanbi-uid-token",ge].includes(e)}function bo(e){return e.startsWith("x-")||e.includes("auth")||e.includes("login")||e.includes("token")||e.includes("uid")||e.includes("user")}function To(e){return["1","true","yes","on"].includes(e.BI_IDENTITY_DEBUG?.trim().toLowerCase()??"")}var Gn=64*1024,Rt=16*1024*1024,wo=8*1024,_e=class extends Error{constructor(n,r){super(r);this.status=n;this.name="BIHttpResponseError"}status},Ze=class{constructor(t){this.config=t;this.token=t.BI_UID_TOKEN}config;token;async get(t,n){return this.request("GET",t,void 0,n)}async post(t,n,r){return this.request("POST",t,n,r)}async put(t,n,r){return this.request("PUT",t,n,r)}async getText(t,n){if(this.config.BI_PAT){let s=await fetch(this.buildUrl(t),{method:"GET",headers:this.patHeaders(this.config.BI_PAT,{"raw-backend-response":"TRUE"},n),signal:xe(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)});return s.ok||await Xe(s,"GET",t),s.text()}let r=await this.ensureToken(),i=await fetch(this.buildUrl(t),{method:"GET",headers:this.uidHeaders(r,{"raw-backend-response":"TRUE"},n),signal:xe(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)});if(this.shouldRefreshToken(i)){await Bt(i,"retrying after BI authentication expired");let s=await this.refreshToken();i=await fetch(this.buildUrl(t),{method:"GET",headers:this.uidHeaders(s,{"raw-backend-response":"TRUE"},n),signal:xe(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)})}return i.ok||await Xe(i,"GET",t),this.refreshTokenFromResponse(i),i.text()}async request(t,n,r,i){if(this.config.BI_PAT){let a=await this.fetchWithPat(t,n,this.config.BI_PAT,r,i);a.ok||await Xe(a,t,n);let u=await Jn(a,t,n);return Fn(u)}let s=await this.ensureToken(),o=await this.fetchWithToken(t,n,s,r,i);if(this.shouldRefreshToken(o)){await Bt(o,"retrying after BI authentication expired");let a=await this.refreshToken();o=await this.fetchWithToken(t,n,a,r,i)}o.ok||await Xe(o,t,n);let c=await Jn(o,t,n);return this.refreshTokenFromResponse(o),Fn(c)}async fetchWithToken(t,n,r,i,s){return fetch(this.buildUrl(n),{method:t,headers:this.uidHeaders(r,{"Content-Type":"application/json","raw-backend-response":"TRUE",...s?.headers},s),body:t==="POST"||t==="PUT"?JSON.stringify(i??{}):void 0,signal:xe(this.config.BI_REQUEST_TIMEOUT_MS,s?.signal)})}async fetchWithPat(t,n,r,i,s){return fetch(this.buildUrl(n),{method:t,headers:this.patHeaders(r,{"Content-Type":"application/json","raw-backend-response":"TRUE",...s?.headers},s),body:t==="POST"||t==="PUT"?JSON.stringify(i??{}):void 0,signal:xe(this.config.BI_REQUEST_TIMEOUT_MS,s?.signal)})}async ensureToken(){if(this.token)return this.token;let t=await $e(this.config);return this.token=t.token,t.token}async refreshToken(){if(this.config.BI_UID_TOKEN_REFRESH){let t=await this.config.BI_UID_TOKEN_REFRESH();return this.token=t,t}return this.token=void 0,this.ensureToken()}refreshTokenFromResponse(t){let n=Ro(t);!n||n===this.token||(this.token=n)}shouldRefreshToken(t){return(!!this.config.BI_UID_TOKEN_REFRESH||this.hasPasswordLogin())&&t.status===401}hasPasswordLogin(){return!!(this.config.BI_LOGIN_DOMAIN&&this.config.BI_LOGIN_ID&&this.config.BI_LOGIN_PASSWORD)}uidHeaders(t,n,r){return this.requestHeaders({...n,Cookie:`uIdToken=${t}`},r)}patHeaders(t,n,r){return this.requestHeaders({...n,"X-Personal-Token":t},r)}requestHeaders(t,n){return n?.includeRequestMetadata===!1?yt(t):ze(t,this.config.BI_REQUEST_METADATA)}buildUrl(t){let n=t.startsWith("/")?t:`/${t}`;return`${this.config.BI_BASE_URL}${this.config.BI_PUBLIC_PATH}${n}`}};function xe(e,t){if(t?.aborted)return t;let n=AbortSignal.timeout(e);return t?AbortSignal.any([t,n]):n}async function Xe(e,t,n){let r=await zn(e,Gn),i=r.truncated?` [truncated after ${Gn} bytes]`:"";throw new _e(e.status,`BI \u8BF7\u6C42\u5931\u8D25\uFF1A${t} ${n} HTTP ${e.status} ${ko(r.text)}${i}`)}async function Jn(e,t,n){let r=So(e);r!==void 0&&r>Rt&&(await Bt(e,"BI JSON response exceeded byte limit"),Hn(t,n));let i=await zn(e,Rt);return i.truncated&&Hn(t,n),i.text}function Hn(e,t){throw new Error(`BI JSON \u54CD\u5E94\u8FC7\u5927\uFF1A${e} ${t} \u8D85\u8FC7 ${Rt} \u5B57\u8282\uFF1B\u8BF7\u7F29\u5C0F\u67E5\u8BE2\u8303\u56F4\u6216\u964D\u4F4E query_card_data \u7684 limit/columns \u540E\u6309 next_offset \u5206\u9875\u8BFB\u53D6\u3002`)}async function zn(e,t){if(!e.body)return{text:"",truncated:!1};let n=e.body.getReader(),r=new Uint8Array(Math.min(wo,t)),i=0;try{for(;;){let{done:s,value:o}=await n.read();if(s)return{text:new TextDecoder().decode(r.subarray(0,i)),truncated:!1};let c=t-i;if(o.byteLength>c)return c>0&&(r=$n(r,t,i+c),r.set(o.subarray(0,c),i),i+=c),await Co(n,"response body exceeded byte limit"),{text:new TextDecoder().decode(r.subarray(0,i)),truncated:!0};r=$n(r,t,i+o.byteLength),r.set(o,i),i+=o.byteLength}}finally{n.releaseLock()}}function $n(e,t,n){if(n<=e.byteLength)return e;let r=Math.min(t,Math.max(n,Math.max(1,e.byteLength)*2)),i=new Uint8Array(r);return i.set(e),i}async function Co(e,t){try{await e.cancel(new Error(t))}catch{}}async function Bt(e,t){if(e.body)try{await e.body.cancel(new Error(t))}catch{}}function So(e){let t=e.headers.get("content-length");if(!t)return;let n=Number(t);return Number.isSafeInteger(n)&&n>=0?n:void 0}function Fn(e){if(!e)return;let t=JSON.parse(e);if(!Eo(t))return t;if(t.result&&!["ok","success"].includes(t.result.toLowerCase()))throw new Error(`BI \u8FD4\u56DE\u9519\u8BEF\uFF1A${t.message??JSON.stringify(t.error??t)}`);if(t.success===!1)throw new Error(`BI \u8FD4\u56DE\u9519\u8BEF\uFF1A${t.message??JSON.stringify(t.error??t)}`);return"response"in t?t.response:t}function Eo(e){return!e||typeof e!="object"||Array.isArray(e)?!1:"response"in e||"result"in e||"success"in e}function Ro(e){return Bo(e.headers)??Oo(e.headers)}function Bo(e){return[...e.getSetCookie?.()??[],...Ao(e.get("set-cookie"))].map(n=>Vn(n.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1])).find(Boolean)}function Ao(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function Oo(e){return Vn(e.get("x-auth-token"))}function Vn(e){if(typeof e!="string")return;let t=e.trim();return t&&!/\s/.test(t)?t:void 0}function ko(e,t=1e3){return e.length>t?`${e.slice(0,t)}...`:e}var et=class{constructor(t,n={}){this.baseConfig=t;this.options=n}baseConfig;options;stdioClient;create(t,n){let r=this.resolveRequestMetadata(n);if(t.transport==="stdio"&&this.stdioClient)return{...this.stdioClient,config:{...this.stdioClient.config,BI_REQUEST_METADATA:r}};let i=this.resolveConfig(t,t.transport==="stdio"?this.resolveRequestMetadata(void 0):r),s={client:this.options.clientFactory?.(i)??new Ze(i),config:{...i,BI_REQUEST_METADATA:r},context:t};return t.transport==="stdio"&&(this.stdioClient={...s,config:i}),s}resolveConfig(t,n){let r=t.biPatToken??this.baseConfig.BI_PAT,i=t.biUidToken??(t.transport==="stdio"?this.baseConfig.BI_UID_TOKEN:void 0),s=!!r;return{...this.baseConfig,BI_PAT:r,BI_UID_TOKEN:s?void 0:i,BI_UID_TOKEN_REFRESH:!s&&t.transport==="streamable-http"?t.biUidTokenRefresh:void 0,BI_LOGIN_DOMAIN:!s&&t.transport==="stdio"?this.baseConfig.BI_LOGIN_DOMAIN:"",BI_LOGIN_ID:!s&&t.transport==="stdio"?this.baseConfig.BI_LOGIN_ID:void 0,BI_LOGIN_PASSWORD:!s&&t.transport==="stdio"?this.baseConfig.BI_LOGIN_PASSWORD:void 0,BI_REQUEST_METADATA:n}}resolveRequestMetadata(t){let n=this.options.requestMetadata;if(n)return t?{...n,command:t}:{...n}}};var Qn={endpoint:"https://www.google-analytics.com/mp/collect",measurementId:"G-800H8JWDPP",apiSecret:"poAwpMEhQteDl1rXKtNIqg",eventName:"guanbi_mcp_tool_call",clientId:"0000000000.0000000000",sessionId:1,engagementTimeMsec:1,timeoutMs:3e3,maxResponseBytes:1024},tt=class{serviceDomain;appVersion;enabled;sender;now;constructor({config:t,appVersion:n,sender:r=Do(),now:i=Date.now}){this.serviceDomain=Mo(t.BI_BASE_URL),this.appVersion=n,this.enabled=vo(t),this.sender=r,this.now=i}observeToolCallStart(t){return{toolName:t,startedAtMs:this.now()}}observeToolCallEnd(t,n){if(!this.enabled||!this.serviceDomain)return;let r={service_domain:this.serviceDomain,app_version:this.appVersion,tool:t.toolName,success:n.success,duration_ms_bucket:jo(this.now()-t.startedAtMs),error_type:n.success?"none":No(n.error)};try{Promise.resolve(this.sender(r)).catch(()=>{})}catch{}}};function Po(e=Qn){return t=>xo(t,e)}async function xo(e,t=Qn){try{if(!t.endpoint||!t.measurementId||!t.apiSecret||!e.tool)return;let n=new URL(t.endpoint);n.searchParams.set("measurement_id",t.measurementId),n.searchParams.set("api_secret",t.apiSecret);let r=JSON.stringify({client_id:t.clientId,events:[{name:t.eventName,params:{service_domain:e.service_domain,app_version:e.app_version,tool:e.tool,success:e.success,duration_ms_bucket:e.duration_ms_bucket,error_type:e.error_type,session_id:t.sessionId,engagement_time_msec:t.engagementTimeMsec}}]}),i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:r,signal:AbortSignal.timeout(t.timeoutMs)});await Uo(i,t.maxResponseBytes)}catch{}}function Do(){return Lo(process.env)?()=>{}:Po()}function vo(e){let t=e.GUANBI_MCP_USAGE_STATS?.trim().toLowerCase();return t?["0","false","off","no"].includes(t)?!1:(["1","true","on","yes"].includes(t),!0):!0}function Kn(e,t,n){return(async(...r)=>{let i=n.observeToolCallStart(e);try{let s=await t(...r);return n.observeToolCallEnd(i,{success:!0}),s}catch(s){throw n.observeToolCallEnd(i,{success:!1,error:s}),s}})}function Mo(e){if(e)try{return new URL(e).hostname}catch{return}}function jo(e){return e<1e3?"<1s":e<5e3?"1-5s":e<3e4?"5-30s":e<12e4?"30-120s":">120s"}async function Uo(e,t){let n=e.body?.getReader();if(!n)return;let r=0;try{for(;r<t;){let{done:i,value:s}=await n.read();if(i)return;r+=s.byteLength}}finally{await n.cancel().catch(()=>{})}}function No(e){let t=e instanceof Error?e.message:String(e);return/校验|验证|validation|invalid|schema|zod/i.test(t)?"validation":/鉴权|登录|认证|unauthorized|unauthenticated|401|auth/i.test(t)?"auth":/权限|forbidden|permission|403/i.test(t)?"permission":/timeout|network|fetch|econn|enotfound|socket/i.test(t)?"network":/BI 请求失败|BI 返回错误|HTTP \d{3}/i.test(t)?"bi_error":"unknown"}function Lo(e){return e.NODE_ENV==="test"||e.VITEST==="true"}var qo=5e3;function Yn(e){return e+qo}var nt=class{constructor(t,n,r=new He,i=3e5){this.callerContextResolver=t;this.clientFactory=n;this.auditLogger=r;this.requestTimeoutMs=i}callerContextResolver;clientFactory;auditLogger;requestTimeoutMs;async run(t,n,r,i){let s=Date.now(),o=Go(n?.signal,this.requestTimeoutMs);o.throwIfAborted();let c=await Wn(this.callerContextResolver.resolve(n),o),a=this.clientFactory.create(c,r),u={...a,signal:o};try{let d=await Wn(Tn(a.config.BI_REQUEST_METADATA,()=>t(u)),o,i?.abortRecoveryGraceMs);if(r){let l=Jo(d)?"error":"success";this.auditLogger.record(ht(r,c,s,l,d))}return d}catch(d){throw r&&this.auditLogger.record(ht(r,c,s,"error",d)),d}}};function Go(e,t){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}function Wn(e,t,n=0){return new Promise((r,i)=>{if(t.aborted){i(t.reason);return}let s,o=()=>{t.removeEventListener("abort",c),s&&clearTimeout(s)},c=()=>{if(n<=0){o(),i(t.reason);return}s=setTimeout(()=>{o(),i(t.reason)},n)};t.addEventListener("abort",c,{once:!0}),Promise.resolve(e).then(a=>{o(),r(a)},a=>{o(),i(a)})})}function Jo(e){return!!(e&&typeof e=="object"&&e.isError===!0)}function D(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}function E(e,t={}){let n=Ot(e),r=t.text===void 0?n:t.text;return{content:[{type:"text",text:typeof r=="string"?r:JSON.stringify(r,null,2)}],structuredContent:n}}function te(e){let t=Ot(e);return{content:[{type:"text",text:JSON.stringify(t,null,2)}],isError:!0}}function De(e,t,n={}){return te({status:"error",diagnostic:At(e,t,n)})}function At(e,t,n={}){let r=t instanceof Error?t.message:String(t),i=r.match(/BI 请求失败:(?<method>[A-Z]+) (?<path>\S+) HTTP (?<status>\d+)/);return Ot({operation:e,path:i?.groups?.path,status:i?.groups?.status?Number(i.groups.status):void 0,message:r,...n})}function Ot(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var Xn={};async function Zn(e,t){return D(await Ae(e,t))}import{z as I}from"zod";var re=class extends Error{constructor(n,r){super(n.message,{cause:r});this.detail=n;this.name="MetricPlatformRequestError"}detail},V=class{constructor(t,n){this.client=t;this.config=n}client;config;contextHeadersPromise;listProjects(){return this.get("listProjects","/api/metric-platform/projects")}searchMetrics(t){let n=_({projectId:t.projectId,dirId:t.dirId,status:t.status,nameLike:t.keyword,subTypes:t.subTypes?.join(","),orderBy:t.orderBy});return this.post("searchMetrics","/api/metric-platform/metrics",n)}listMetricFullTree(t){return this.get("listMetricFullTree",Pt("/api/metric-platform/metrics/full-tree",{projectId:t.projectId,nameLike:t.keyword}))}listMetricDirectoryTree(t){return this.get("listMetricDirectoryTree",Pt("/api/directory/METRIC_PLATFORM/unauthorized-tree",{projectId:t}))}getMetricDetail(t){return this.get("getMetricDetail",`/api/metric-platform/metrics/${encodeURIComponent(t)}`)}getMetricLineage(t,n){return this.post("getMetricLineage",`/api/resource-atlas/${encodeURIComponent(t)}`,{resourceTypeName:n})}queryMetricData(t){let{metricId:n,metricName:r,...i}=t;return this.post("queryMetricData","/api/metric-platform/metric-data/v2",_(i))}getCardEditSession(t){return this.get("getCardEditSession",`/api/card/${encodeURIComponent(t)}/edit/session`)}getCardEditMeta(t){return this.get("getCardEditMeta",`/api/card/${encodeURIComponent(t)}/edit`)}modifyCardEditMeta(t,n,r){return this.put("modifyCardEditMeta",`/api/oriput/card/${encodeURIComponent(t)}/edit/${encodeURIComponent(n)}/modify`,r)}queryCardEditData(t,n,r){return this.post("queryCardEditData",`/api/card/${encodeURIComponent(t)}/edit/${encodeURIComponent(n)}/data`,r)}searchMetricTrees(t){return this.get("searchMetricTrees",Pt("/api/metric-platform/metric-tree/search",{nameLike:t.keyword,projectId:t.projectId,parentDirId:t.parentDirId,orderBy:t.orderBy}))}async getMetricTreeDetail(t){return this.get("getMetricTreeDetail",`/api/metric-platform/metric-tree/${encodeURIComponent(t)}`,await this.metricTreeHeaders(t,"dimension"))}async queryMetricTreeDrill(t,n){return this.post("queryMetricTreeDrill",`/api/metric-platform/metric-tree/${encodeURIComponent(t)}/drill`,n,await this.metricTreeHeaders(t,"dimension"))}async queryMetricTreeDecompose(t,n){return this.post("queryMetricTreeDecompose",`/api/metric-platform/metric-tree/${encodeURIComponent(t)}/metric-decompose`,n,await this.metricTreeHeaders(t,"metric"))}async put(t,n,r,i){try{return await this.client.put(n,r,i?{headers:i}:void 0)}catch(s){throw kt(t,n,s)}}async get(t,n,r){try{return await this.client.get(n,r?{headers:r}:void 0)}catch(i){throw kt(t,n,i)}}async post(t,n,r,i){try{return await this.client.post(n,r,i?{headers:i}:void 0)}catch(s){throw kt(t,n,s)}}async metricTreeHeaders(t,n){return{Referer:`${this.config.BI_BASE_URL??""}${this.config.BI_PUBLIC_PATH}/metrics-store/hierarchy/${encodeURIComponent(t)}/edit/${n}`,...await this.contextHeaders()}}async contextHeaders(){return this.contextHeadersPromise||(this.contextHeadersPromise=this.resolveContextHeaders()),this.contextHeadersPromise}async resolveContextHeaders(){let t={};if(this.config.BI_LOGIN_DOMAIN&&(t["x-dom-id"]=he(this.config.BI_LOGIN_DOMAIN)),this.config.BI_LOGIN_ID&&(t["user-id"]=he(this.config.BI_LOGIN_ID)),t["x-dom-id"]&&t["user-id"])return t;try{let n=await this.client.get("/api/user/profile",{includeRequestMetadata:!!this.config.BI_PAT}),r=er(n.domId,n.domainId,n.domain,n.dom_id),i=er(n.email,n.loginId,n.userId,n.uId,n.uid);!t["x-dom-id"]&&r&&(t["x-dom-id"]=he(r)),!t["user-id"]&&i&&(t["user-id"]=he(i))}catch{}return t["x-dom-id"]||(t["x-dom-id"]=he(this.config.BI_LOGIN_DOMAIN||"guanbi")),t["user-id"]||(t["user-id"]=he(this.config.BI_LOGIN_ID||"unknown")),t}};function kt(e,t,n){let r=n instanceof Error?n.message:String(n),i=r.match(/\bHTTP\s+(\d{3})\b/);return new re({operation:e,path:t,status:i?Number(i[1]):void 0,message:r},n)}function Pt(e,t){let n=new URLSearchParams;for(let[i,s]of Object.entries(t))s!==void 0&&s!==""&&n.set(i,s);let r=n.toString();return r?`${e}?${r}`:e}function _(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function he(e){return Buffer.from(e,"utf8").toString("base64")}function er(...e){for(let t of e)if(typeof t=="string"&&t.trim())return t.trim()}import{z as rt}from"zod";var rr=rt.object({dimension:rt.string().trim().min(1).max(512).describe("\u52A8\u6001\u7EF4\u5EA6\u540D\u79F0\u6216 dzId\u3002"),fields:rt.array(rt.string().trim().min(1).max(512)).min(1).max(100).describe("\u52A8\u6001\u7EF4\u5EA6\u5019\u9009\u5B57\u6BB5\u540D\u79F0\u3001\u522B\u540D\u3001fdId \u6216 key\uFF1BmultiSelect=true \u65F6\u53EF\u4F20\u591A\u4E2A\u3002")}),it=100,xt=512;function ir(e,t,n){if(!n.length)return{dynamicFieldFilters:[]};let r=Ho(e);if(!r.size){let o=n[0].dimension;return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(o),diagnostic_values_truncated:X(o),message:"\u5F53\u524D\u5361\u7247\u672A\u66B4\u9732\u52A8\u6001\u7EF4\u5EA6\u914D\u7F6E\uFF1B\u8BF7\u5148\u7528 get_card_info \u67E5\u770B dynamicZoneInfo\u3002"}}}for(let o of r.values()){let c=o.name||o.dzId;if(o.sourceRefsInvalid)return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(c),dz_id:A(o.dzId),diagnostic_values_truncated:X(c,o.dzId),reason:"invalid_source_dz_ids",message:"\u52A8\u6001\u7EF4\u5EA6 sourceDzIds \u5143\u6570\u636E\u683C\u5F0F\u975E\u6CD5\uFF0C\u65E0\u6CD5\u5B89\u5168\u6784\u5EFA\u5B8C\u6574\u9009\u62E9\u96C6\u3002"}};if(o.sourceRefs.length){let a=o.sourceRefs[0];return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(c),dz_id:A(o.dzId),source_cd_id:A(a.cdId),source_dz_id:A(a.dzId),diagnostic_values_truncated:X(c,o.dzId,a.cdId,a.dzId),message:"\u5F53\u524D\u4EC5\u652F\u6301\u6240\u6709\u52A8\u6001\u7EF4\u5EA6\u5747\u65E0 sourceDzIds \u7684\u5361\u7247\u81EA\u8EAB\u52A8\u6001\u7EF4\u5EA6\u3002"}}}}let i=new Map;for(let o of n){let c=$o(r,o.dimension);if("unsupported"in c)return c;let a=c.meta;if(!a.keys.size){let d=o.dimension;return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(d),dz_id:A(a.dzId),diagnostic_values_truncated:X(d,a.dzId),message:"\u52A8\u6001\u7EF4\u5EA6\u672A\u66B4\u9732\u53EF\u7528\u5B57\u6BB5\uFF1B\u8BF7\u5148\u7528 get_card_info \u67E5\u770B\u5019\u9009 key\u3002"}}}let u=i.get(a.dzId);u||(u={meta:a,keys:[],seen:new Set},i.set(a.dzId,u));for(let d of o.fields){let l=Fo(a,d);if("unsupported"in l)return l;u.seen.has(l.key)||(u.seen.add(l.key),u.keys.push(l.key))}}let s=[];for(let o of r.values()){let a=i.get(o.dzId)?.keys??o.defaultKeys;if(!o.multiSelect&&a.length>1){let u=o.name||o.dzId;return{unsupported:{capability:"unsupported_dynamic_fields",dimension:A(u),dz_id:A(o.dzId),diagnostic_values_truncated:X(u,o.dzId),message:"\u8BE5\u52A8\u6001\u7EF4\u5EA6\u662F\u5355\u9009\u914D\u7F6E\uFF0C\u4E0D\u80FD\u540C\u65F6\u6307\u5B9A\u591A\u4E2A\u5B57\u6BB5\u3002"}}}s.push(...a.map(u=>({dzId:o.dzId,key:u,sourceCdId:t})))}return{dynamicFieldFilters:s}}function Ho(e){let t=ie(ie(ie(e.content).meta).chartMain),n=tr(ie(t.dynamicZoneInfo).dzMappings),r=new Map;for(let s of n){let o=Q(s.dzId);if(!o)continue;let c=r.get(o)??{dzId:o,name:"",keys:new Set,defaultKeys:[],options:[],multiSelect:!1,sourceRefs:[],sourceRefsInvalid:!1};c.name=Q(s.name),c.multiSelect=zo(s.multiSelect)===!0;for(let a of nr(s.defaultValue).map(Q).filter(Boolean))c.keys.has(a)||c.defaultKeys.push(a),c.keys.add(a);"sourceDzIds"in s&&!Array.isArray(s.sourceDzIds)?c.sourceRefsInvalid=!0:c.sourceRefs.push(...nr(s.sourceDzIds).map(ie).map(a=>({cdId:Q(a.cdId),dzId:Q(a.dzId)}))),r.set(o,c)}let i=new Set;for(let s of Object.values(ie(t.zoneData)))for(let o of tr(s)){let c=Q(o.dzId),a=Q(o.key),u=r.get(c);if(!u||!a)continue;u.keys.add(a);let d=`${c}\0${a}`;i.has(d)||(i.add(d),u.options.push({key:a,fdId:Q(o.fdId),name:Q(o.name),alias:Q(o.alias)}))}return r}function $o(e,t){let n=t.trim(),r=new Map,i=e.get(n);i&&r.set(i.dzId,i);for(let a of e.values())a.name===n&&r.set(a.dzId,a);if(r.size===1)return{meta:r.values().next().value};let s=[...e.values()].map(a=>_({name:a.name?A(a.name):void 0,dz_id:A(a.dzId)})),o=[...e.values()].some(a=>X(a.name,a.dzId)),c=A(n);return{unsupported:{capability:"unsupported_dynamic_fields",dimension:c,diagnostic_values_truncated:X(n),message:r.size>1?`\u52A8\u6001\u7EF4\u5EA6\u6807\u8BC6\u540C\u65F6\u5339\u914D\u540D\u79F0\u548C dzId\uFF0C\u5F53\u524D\u65E0\u6CD5\u5B89\u5168\u6D88\u6B67\uFF1A${c}`:`\u672A\u627E\u5230\u52A8\u6001\u7EF4\u5EA6\uFF1A${c}`,supported_dimensions:s.slice(0,it),supported_dimension_count:s.length,supported_dimensions_truncated:s.length>it,supported_dimension_values_truncated:o}}}function Fo(e,t){let n=t.trim(),r=new Map;e.keys.has(n)&&r.set(n,{key:n,fdId:"",name:"",alias:""});for(let u of e.options)(u.fdId===n||u.name===n||u.alias===n)&&r.set(u.key,u);if(r.size===1)return{key:r.keys().next().value};let i=e.options.map(u=>_({name:u.name?A(u.name):void 0,alias:u.alias?A(u.alias):void 0,fd_id:u.fdId?A(u.fdId):void 0,key:A(u.key)})),s=e.options.some(u=>X(u.name,u.alias,u.fdId,u.key)),o=e.name||e.dzId,c=A(o),a=A(n);return{unsupported:{capability:"unsupported_dynamic_fields",dimension:c,dz_id:A(e.dzId),field:a,diagnostic_values_truncated:X(o,e.dzId,n),message:r.size>1?`\u52A8\u6001\u7EF4\u5EA6\u5B57\u6BB5\u6807\u8BC6\u540C\u65F6\u5339\u914D key \u4E0E\u540D\u79F0\u3001\u522B\u540D\u6216 fdId\uFF0C\u5F53\u524D\u65E0\u6CD5\u5B89\u5168\u6D88\u6B67\uFF1A${a}`:`\u5B57\u6BB5\u4E0D\u5C5E\u4E8E\u52A8\u6001\u7EF4\u5EA6 ${c}\uFF1A${a}`,supported_fields:i.slice(0,it),supported_field_count:i.length,supported_fields_truncated:i.length>it,supported_field_values_truncated:s}}}function tr(e){return Array.isArray(e)?e.map(ie).filter(t=>Object.keys(t).length):[]}function nr(e){return Array.isArray(e)?e:[]}function ie(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Q(e){return typeof e=="string"?e:""}function zo(e){return typeof e=="boolean"?e:void 0}function A(e){return e.length<=xt?e:`${e.slice(0,xt-1)}\u2026`}function X(...e){return e.some(t=>t.length>xt)}async function sr(e,t,n,r){if(!n.length)return{dynamicParams:[]};let i=new Map,s=[];for(let l of n){let f=l.parameter.trim();if(i.has(f))return{unsupported:{capability:"unsupported_dynamic_params",parameter:f,message:`\u52A8\u6001\u53C2\u6570\u88AB\u91CD\u590D\u6307\u5B9A\uFF1A${f}`}};s.push(f),i.set(f,ve(l.value))}let o=st(or(t),Qo()),c=s.some(l=>!o.some(f=>Z(f,"dpId","dp_id")===l||Z(f,"name")===l)),a=ve(t.pgId).trim();if(c&&a){r?.throwIfAborted();let l=`/api/page/${encodeURIComponent(a)}`,f=r?await e.get(l,{signal:r}):await e.get(l);r?.throwIfAborted(),o=st(o,Vo(f,ve(t.cdId)))}let u=[],d=new Map;for(let l of s){let f=Ko(o,l);if("unsupported"in f)return{unsupported:f.unsupported};let y=Yo(f.param),h=Z(y,"dpId","dp_id"),T=d.get(h);if(T)return{unsupported:{capability:"unsupported_dynamic_params",parameter:l,message:`\u52A8\u6001\u53C2\u6570 ${T} \u548C ${l} \u6307\u5411\u540C\u4E00\u4E2A dpId\uFF1A${h}`}};d.set(h,l),y.defaultValue=i.get(l)??"";let x=Wo(y,l);if("unsupported"in x)return{unsupported:x.unsupported};u.push(y)}return{dynamicParams:u}}function or(e){let t=K(e.content),n=K(K(K(t.meta).chartMain).props),r=K(K(t.dsInfo).config);return st(Dt(n.dynamicParameters),Dt(r.dynamicParameters))}function Vo(e,t){let n=Dt(e.cards),r=n.find(s=>ve(s.cdId)===t),i=n.filter(s=>s.cdType==="SELECTOR"&&K(s.content).selectorType==="PARAMETER").map(s=>K(K(s.content).parameter));return st(r?or(r):[],i)}function st(e,t){let n=[],r=new Set;for(let i of[...e,...t]){let s=Z(i,"dpId","dp_id");s&&r.has(s)||(s&&r.add(s),Object.keys(i).length&&n.push(i))}return n}function Qo(){return[{dpId:"DATE_RANGE_PARAM_LEFT",name:"\u5F00\u59CB\u65E5\u671F\u53C2\u6570",valueType:"DATE",defaultValue:"",optionValue:[]},{dpId:"DATE_RANGE_PARAM_RIGHT",name:"\u7ED3\u675F\u65E5\u671F\u53C2\u6570",valueType:"DATE",defaultValue:"",optionValue:[]}]}function Ko(e,t){let n=e.find(i=>Z(i,"dpId","dp_id")===t);if(n)return{param:n};let r=e.filter(i=>Z(i,"name")===t);return r.length===1?{param:r[0]}:r.length>1?{unsupported:{capability:"unsupported_dynamic_params",parameter:t,message:`\u52A8\u6001\u53C2\u6570\u540D\u5B58\u5728\u591A\u4E2A\u5339\u914D\u9879\uFF0C\u8BF7\u6539\u7528 dpId\uFF1A${t}`}}:{unsupported:{capability:"unsupported_dynamic_params",parameter:t,message:`\u5361\u7247\u53CA\u6240\u5C5E\u9875\u9762\u672A\u66B4\u9732\u52A8\u6001\u53C2\u6570\uFF1A${t}\uFF0C\u8BF7\u901A\u8FC7 get_card_info/get_page_info \u6838\u5BF9\u53C2\u6570\u540D\u6216 dpId\u3002`}}}function Wo(e,t){let n=[Z(e,"dpId","dp_id")?void 0:"dpId",Z(e,"name")?void 0:"name",Z(e,"valueType","value_type")?void 0:"valueType"].filter(r=>!!r);return n.length?{unsupported:{capability:"unsupported_dynamic_params",parameter:t,message:`\u52A8\u6001\u53C2\u6570\u7F3A\u5C11\u5FC5\u8981 BI \u5143\u4FE1\u606F\uFF1A${t}`,missing_metadata:n}}:typeof e.defaultValue!="string"?{unsupported:{capability:"unsupported_dynamic_params",parameter:t,message:`\u52A8\u6001\u53C2\u6570 defaultValue \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\uFF1A${t}`}}:{ok:!0}}function Z(e,...t){for(let n of t){let r=ve(e[n]);if(r)return r}return""}function Dt(e){return Array.isArray(e)?e.map(K).filter(t=>Object.keys(t).length):[]}function Yo(e){return JSON.parse(JSON.stringify(e))}function K(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function ve(e){return typeof e=="string"?e:e==null?"":String(e)}var Xo=I.enum(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN","GT","GE","LT","LE","EQ","NE","IN","NI","IS_NULL","NOT_NULL","CONTAINS","NOT_CONTAINS","STARTSWITH","ENDSWITH","NOT_STARTSWITH","NOT_ENDSWITH","STARTSWITH_USER_PROPERTIES","STARTSWITH_GLOBAL_PARAMS"]),ar=new Set(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN"]),Mt=new Set(["IS_NULL","NOT_NULL"]),Zo=I.object({field:I.string().min(1).describe("\u5361\u7247\u5173\u8054\u6570\u636E\u96C6\u4E2D\u7684\u7B5B\u9009\u5B57\u6BB5\u540D\u79F0\u3001\u522B\u540D\u6216\u5B57\u6BB5 ID\u3002"),operator:Xo.describe("BI \u539F\u751F\u7B5B\u9009\u64CD\u4F5C\u7B26\uFF0C\u4F8B\u5982 EQ/NI/GE/BT/CONTAINS\u3002"),values:I.array(I.union([I.string(),I.number(),I.boolean()])).optional().describe("\u7B5B\u9009\u503C\u3002IS_NULL/NOT_NULL \u4E0D\u9700\u8981\u4F20\u503C\u3002"),fd_id:I.string().min(1).optional().describe("\u5DF2\u77E5\u5B57\u6BB5 ID \u65F6\u53EF\u76F4\u63A5\u6307\u5B9A\u3002")}).superRefine((e,t)=>{let n=e.values?.length??0;Mt.has(e.operator)&&n>0&&t.addIssue({code:I.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u4E0D\u63A5\u53D7\u7B5B\u9009\u503C\u3002`}),ar.has(e.operator)&&n!==2&&t.addIssue({code:I.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u9700\u8981\u6070\u597D 2 \u4E2A\u503C\u3002`}),!ar.has(e.operator)&&!Mt.has(e.operator)&&n<1&&t.addIssue({code:I.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u81F3\u5C11\u9700\u8981 1 \u4E2A\u503C\u3002`})}),ea=I.object({parameter:I.string().min(1).describe("\u52A8\u6001\u53C2\u6570\u540D\u79F0\u6216 dpId\u3002"),value:I.union([I.string(),I.number(),I.boolean()]).describe("\u52A8\u6001\u53C2\u6570\u8986\u76D6\u503C\uFF0C\u4F1A\u6309 BI dynamicParams.defaultValue \u4EE5\u5B57\u7B26\u4E32\u53D1\u9001\u3002")}),ta=I.object({returned_count:I.number().int().nonnegative(),offset:I.number().int().nonnegative(),limit:I.number().int().positive(),has_more:I.boolean(),next_offset:I.number().int().nonnegative().optional(),total_count:I.number().int().nonnegative().optional()}),lr={cd_id:I.string().min(1).max(512).describe("\u5361\u7247 ID\u3002"),filters:I.array(Zo).optional().describe("\u7ED3\u6784\u5316\u7B5B\u9009\u6761\u4EF6\u3002\u4E0D\u652F\u6301 CLI \u98CE\u683C\u7B5B\u9009\u5B57\u7B26\u4E32\u3002"),dynamic_params:I.array(ea).optional().describe("\u56FE\u8868\u5361\u52A8\u6001\u53C2\u6570\u8986\u76D6\uFF0Cparameter \u53EF\u4F20\u53C2\u6570\u540D\u6216 dpId\uFF1B\u5B9A\u4E49\u6765\u81EA\u5361\u7247\u6216\u6240\u5C5E\u9875\u9762\uFF0C\u4EC5\u8986\u76D6\u672C\u6B21 CHART \u67E5\u8BE2\u3002"),dynamic_fields:I.array(rr).max(100).optional().describe("\u56FE\u8868\u5361\u52A8\u6001\u7EF4\u5EA6\u8986\u76D6\uFF0Cdimension \u53EF\u4F20\u52A8\u6001\u7EF4\u5EA6\u540D\u6216 dzId\uFF0Cfields \u53EF\u4F20\u5B57\u6BB5\u540D\u3001\u522B\u540D\u3001fdId \u6216 key\u3002"),columns:I.array(I.string().min(1)).optional().describe("\u5BF9\u5DF2\u5C55\u5E73\u7ED3\u679C\u505A\u672C\u5730\u5217\u88C1\u526A\uFF0C\u4E0D\u53C2\u4E0E BI \u67E5\u8BE2\u8BED\u4E49\u3002"),offset:I.number().int().nonnegative().optional().default(0).describe("\u5F53\u524D\u9875\u8D77\u59CB\u504F\u79FB\u91CF\uFF0C\u9ED8\u8BA4 0\u3002"),limit:I.number().int().positive().optional().default(100).describe("\u5F53\u524D\u9875\u671F\u671B\u8FD4\u56DE\u884C\u6570\uFF0C\u9ED8\u8BA4 100\uFF1B\u5927\u4E8E 1000 \u65F6\u4ECD\u6309\u5355\u9875 1000 \u884C\u67E5\u8BE2\uFF0C\u5E76\u901A\u8FC7 next_offset \u7EED\u9875\u3002"),raw:I.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},pr={summary:I.unknown().optional(),columns:I.array(I.unknown()).optional(),rows:I.array(I.unknown()).optional(),page:ta.optional(),diagnostic:I.unknown().optional(),raw:I.unknown().optional(),status:I.string().optional(),next_action:I.string().optional()},na=1e3,Me=4*1024*1024,ot=1024*1024,mr=64*1024,cr=512;async function fr(e,t,n){try{let r=t.limit??100,i=Math.min(r,na),s=t.offset??0,o=await ra(e,t.cd_id,t.filters??[],t.dynamic_params??[],t.dynamic_fields??[],n);if("unsupported"in o)return oa("query_card_data",o.unsupported);let{card:c,cardType:a,filters:u,dynamicParams:d,dynamicFieldFilters:l}=o;if(a==="TEXT")return sa(t.cd_id,c,t.columns,t.raw,s,i);let f=await pa(e,la(t.cd_id,a,i,u,d,l,s),n),{endpoint:y}=f.requests[0],h=f.data,T=a==="CHART"?ga(w(h.chartMain)):void 0,x=T?.rows??ha(h),N=Cr(x.slice(0,i),t.columns),k=Me-mr-(t.raw?ot:0),S=yr(N,k),$=Ra(a,h,s,i,N.length);if(a==="TREE_SELECTOR"&&S.truncated)return ia(t.cd_id,s,i,$.page.total_count);if(S.oversizedFirstRow)return gr(t.cd_id,a,s,i,$.page.total_count);let F=S.rows,Se=S.truncated||$.page.has_more===!0,Ee=$.backendLimitReached&&!S.truncated,Re=Se&&F.length>0&&!Ee?s+(a==="TREE_SELECTOR"?i:F.length):void 0,ue=_({...$.page,returned_count:F.length,has_more:Se,next_offset:Re}),de=t.raw===!0&&Ir(f.raw,ot)&&!S.truncated;return at({summary:_({cd_id:t.cd_id,card_type:a,chart_type:a==="CHART"?C(w(c.content).chartType):void 0,row_count:F.length,truncated:ue.has_more}),columns:S.columns,rows:F,page:ue,diagnostic:_({mode:ma(a),card_type:a,endpoint:y,request:{offset:s,limit:i,requested_limit:r>i?r:void 0,filter_count:u.length,dynamic_param_count:d.length},request_count:1,partial_reason:S.truncated?"response_bytes":Ee?"backend_limit":r>i&&Se?"page_limit":void 0,response_byte_limit:S.truncated?Me:void 0,alignment_issue_count:T?.alignmentIssueCount||void 0,alignment_issues:T?.alignmentIssues.length?T.alignmentIssues:void 0,raw_returned:de,raw_omitted_reason:t.raw===!0&&!de?"response_bytes":void 0}),raw:de?f.raw:void 0,next_action:Ee?"BI \u5DF2\u8FBE\u5230\u7B5B\u9009\u5668\u540E\u7AEF\u884C\u6570\u4E0A\u9650\uFF1B\u8BF7\u589E\u52A0 filters \u7F29\u5C0F\u67E5\u8BE2\u8303\u56F4\u540E\u4ECE offset=0 \u91CD\u65B0\u5206\u9875\u3002":r>i&&Re!==void 0?`\u8BF7\u6C42\u7684 limit=${r} \u5DF2\u6309\u5355\u9875\u4E0A\u9650 ${i} \u6267\u884C\uFF1B\u7EE7\u7EED\u8C03\u7528 query_card_data\uFF0C\u5E76\u4F20\u5165 offset=${Re} \u83B7\u53D6\u4E0B\u4E00\u9875\u3002`:void 0})}catch(r){return te({status:"error",diagnostic:At("query_card_data",r)})}}async function ra(e,t,n=[],r=[],i=[],s){s?.throwIfAborted();let o=await Tr(e,`/api/card/${encodeURIComponent(t)}`,s);s?.throwIfAborted();let c=da(o);if(r.length&&c!=="CHART")return{unsupported:aa(c)};let a=C(o.cdType).toUpperCase()||"UNKNOWN";if(i.length&&!["CHART","METRIC_CHART"].includes(a))return{unsupported:ca(a)};let u=c==="SELECTOR"?ua(o):void 0;if(u)return{unsupported:u};if(c==="TEXT")return{card:o,cardType:c,filters:[],dynamicParams:[],dynamicFieldFilters:[]};let d=ir(o,t,i);if("unsupported"in d)return d;let l=await Ta(e,o,n,s);s?.throwIfAborted();let f=Ia(n,l,c);if("unsupported"in f)return f;let y=await sr(e,o,r,s);return s?.throwIfAborted(),"unsupported"in y?y:{card:o,cardType:c,filters:f.filters,dynamicParams:y.dynamicParams,dynamicFieldFilters:d.dynamicFieldFilters}}function gr(e,t,n,r,i){return at({status:"response_too_large",summary:{cd_id:e,card_type:t,row_count:0,truncated:!0},columns:[],rows:[],page:_({returned_count:0,offset:n,limit:r,has_more:!0,total_count:i}),next_action:"\u5355\u884C\u6570\u636E\u5DF2\u8D85\u8FC7 MCP \u5185\u8054\u54CD\u5E94\u9884\u7B97\uFF0C\u8BF7\u4F7F\u7528 columns \u88C1\u526A\u5217\u3001\u51CF\u5C0F limit \u6216\u589E\u52A0\u7B5B\u9009\u6761\u4EF6\u540E\u91CD\u8BD5\u3002",diagnostic:{mode:"response_too_large",reason:"response_bytes",response_byte_limit:Me}})}function ia(e,t,n,r){return at({status:"response_too_large",summary:{cd_id:e,card_type:"TREE_SELECTOR",row_count:0,truncated:!0},columns:[],rows:[],page:_({returned_count:0,offset:t,limit:n,has_more:!0,total_count:r}),next_action:"\u6811\u7B5B\u9009\u5668\u5F53\u524D\u9875\u8D85\u8FC7 MCP \u5185\u8054\u54CD\u5E94\u9884\u7B97\uFF1B\u8BF7\u4FDD\u6301 offset \u4E0D\u53D8\u5E76\u51CF\u5C0F limit \u540E\u91CD\u8BD5\u3002",diagnostic:{mode:"response_too_large",reason:"response_bytes",response_byte_limit:Me}})}function at(e){let t=w(e.page),n=w(e.diagnostic),r=wr(t.next_offset),i=je(t.has_more)===!0,s=C(e.status)||(i?"partial":"success");return E({...e,status:s},{text:_({status:s,summary:e.summary,columns:e.columns,rows:e.rows,page:e.page,next_action:e.next_action??(r===void 0?void 0:`\u7EE7\u7EED\u8C03\u7528 query_card_data\uFF0C\u5E76\u4F20\u5165 offset=${r} \u83B7\u53D6\u4E0B\u4E00\u9875\u3002`),diagnostic:_({mode:n.mode,endpoint:n.endpoint,partial_reason:n.partial_reason,response_byte_limit:n.response_byte_limit,raw_returned:n.raw_returned,raw_omitted_reason:n.raw_omitted_reason})})})}function sa(e,t,n,r,i,s){let o=w(t.content),c=ya(o),a=c?[{content:c}]:[],u=Cr(a.slice(i,i+s),n),d=r===!0&&Ir(t,ot),l=Me-mr-(d?ot:0),f=yr(u,l);if(f.oversizedFirstRow)return gr(e,"TEXT",i,s,a.length);let y=f.rows,h=f.truncated||i+y.length<a.length,T=d&&!f.truncated;return at({summary:{cd_id:e,card_type:"TEXT",row_count:y.length,truncated:h},columns:f.columns,rows:y,page:_({returned_count:y.length,offset:i,limit:s,has_more:h,next_offset:h?i+y.length:void 0,total_count:a.length}),diagnostic:{mode:"text_card_content",card_type:"TEXT",endpoint:`/api/card/${encodeURIComponent(e)}`,raw_returned:T,raw_omitted_reason:r===!0&&!T?"response_bytes":void 0},raw:T?t:void 0})}function oa(e,t){return E({status:"unsupported",diagnostic:{tool:e,...t}})}function aa(e){return{capability:"unsupported_dynamic_params",message:`dynamic_params \u4EC5\u652F\u6301 CHART \u56FE\u8868\u5361\u7247\uFF0C\u5F53\u524D\u5361\u7247\u7C7B\u578B\u4E3A ${e}`,card_type:e}}function ca(e){let t=Aa(e);return{capability:"unsupported_dynamic_fields",message:`dynamic_fields \u4EC5\u652F\u6301 CHART/METRIC_CHART \u56FE\u8868\u5361\u7247\uFF0C\u5F53\u524D\u5361\u7247\u7C7B\u578B\u4E3A ${t}`,card_type:t,diagnostic_values_truncated:t!==e}}function ua(e){let t=w(e.content);if(C(t.selectorType).toUpperCase()!=="PARAMETER")return;let n=w(t.parameter);if(!(["STRING","TEXT"].includes(C(n.valueType).toUpperCase())&&je(n.customize)!==!0&&C(w(t.source).dsId)!==""))return{capability:"unsupported_parameter_selector_data",message:"\u56FA\u5B9A\u9009\u9879\u3001\u81EA\u5B9A\u4E49\u503C\u6216\u975E\u6587\u672C\u53C2\u6570\u9009\u62E9\u5668\u6CA1\u6709\u53EF\u9760\u7684\u540E\u7AEF offset \u7EED\u9875\u8BED\u4E49\u3002",card_type:"SELECTOR",selector_type:"PARAMETER"}}function da(e){let t=C(e.cdType).toUpperCase();if(t==="SELECTOR"){let n=C(w(e.content).selectorType).toUpperCase();return n==="TREE"||n==="TREE_SELECTOR"?"TREE_SELECTOR":"SELECTOR"}return t==="TREE_SELECTOR"?"TREE_SELECTOR":t==="TEXT"?"TEXT":"CHART"}function la(e,t,n,r,i,s,o=0){let c=encodeURIComponent(e);return t==="SELECTOR"?{endpoint:`/api/selector/${c}/data`,requestBody:_({fieldQuery:{offset:o,limit:n},filters:r.length?r:void 0})}:t==="TREE_SELECTOR"?{endpoint:`/api/treeSelector/${c}/data`,requestBody:_({offset:o,limit:n,filters:r.length?r:void 0})}:{endpoint:`/api/card/${c}/data`,requestBody:_({view:"GRID",isUniversalStructure:!0,offset:o>0?o:void 0,limit:n,filters:r.length?r:void 0,dynamicParams:i.length?i:void 0,dynamicFieldFilters:s.length?s:void 0})}}async function pa(e,t,n){let r=await Ba(e,t.endpoint,t.requestBody,n);return{raw:r,data:fa(r),requests:[t]}}function ma(e){return e==="SELECTOR"?"selector_card_data":e==="TREE_SELECTOR"?"tree_selector_card_data":"chart_card_data"}function fa(e){let t=w(e),n=w(t.data),r=w(w(t.content).data);return Object.keys(n).length?n:Object.keys(r).length?r:t}function ga(e){if(!Object.keys(e).length)return{rows:[],alignmentIssueCount:0,alignmentIssues:[]};let t=w(e.row),n=w(e.column),r=ee(t.data??t.values),i=ee(e.data),o=ye(t.fields??t.meta).map((k,S)=>({header:Ut(k)||`row_${S+1}`,shrinked:je(k.isShrinkedInGroupTable)===!0})),c=_a(n),a=o.filter(k=>!k.shrinked).length,u=r.reduce((k,S)=>Math.max(k,ee(S).length),a),d=Array.from({length:u-a},(k,S)=>`row_extra_${S+1}`),l=i.reduce((k,S)=>Math.max(k,ee(S).length),c.length),f=Array.from({length:l},(k,S)=>c[S]||`metric_${S+1}`),y=Oa([...o.map(k=>k.header),...d,...f]),h=Math.max(r.length,i.length),T=[],x=[],N=0;for(let k=0;k<h;k+=1){let S=ee(r[k]),$=ee(i[k]),F=0,Se=o.map(Ge=>{if(Ge.shrinked)return null;let z=F<S.length?vt(S[F]):null;return F+=1,z}),Ee=d.map((Ge,z)=>{let _n=F+z;return _n<S.length?vt(S[_n]):null}),Re=f.map((Ge,z)=>z<$.length?vt($[z]):null),ue=[...Se,...Ee,...Re];if(!ue.length)continue;let _t=S.length!==a,de=$.length!==c.length;(_t||de)&&(N+=1,x.length<20&&x.push(_({row_number:k+1,row_value_count:_t?{expected:a,actual:S.length}:void 0,metric_value_count:de?{expected:c.length,actual:$.length}:void 0})));let ms=Math.max(y.length,ue.length);T.push(Object.fromEntries(Array.from({length:ms},(Ge,z)=>[y[z]??`column_${z+1}`,ue[z]??null])))}return{rows:T,alignmentIssueCount:N,alignmentIssues:x}}function _a(e){let n=ee(e.data??e.values).map((r,i)=>{let s=ee(r).map(br).filter(Boolean).join("/");return s||Ut(ye(e.fields??e.meta)[i])||`metric_${i+1}`}).filter(Boolean);return n.length?n:ye(e.fields??e.meta).map(Ut).filter(Boolean)}function ha(e){return ye(e.result)}function ya(e){let n=ee(w(e.body).blocks).map(r=>C(w(r).text)).filter(r=>r!=="");return n.length?n.join(`
5
+ `):C(e.text)}function Ia(e,t,n){let r=[];for(let i of e){let s=Ca(t,i.field,i.fd_id);if("unsupported"in s)return{unsupported:s.unsupported};r.push(_({name:s.field.name,fdId:s.field.fdId,fdType:s.field.fdType,filterLevel:n==="CHART"?wa(s.field.metaType):void 0,filterType:i.operator,filterValue:ba(i)}))}return{filters:r}}function ba(e){return Mt.has(e.operator)?[]:(e.values??[]).map(C)}async function Ta(e,t,n,r){let i=Sa(t);if(!n.some(c=>{let a=_r(i,c.field,c.fd_id);return!a||!C(a.fd_id)}))return i;let s=w(w(t.content).dsInfo),o=q(s.dsId,s.ds_id);if(!o)return i;try{r?.throwIfAborted();let c=await Tr(e,`/api/data-source/${encodeURIComponent(o)}`,r);return r?.throwIfAborted(),[...i,...hr(c)]}catch{return r?.throwIfAborted(),i}}function wa(e){return e.toUpperCase()==="METRIC"?"AGGREGATION":"DETAIL"}function Ca(e,t,n){let r=_r(e,t,n);if(!r)return{unsupported:{capability:"unsupported_filter_field",parameter:t,message:`\u7B5B\u9009\u5B57\u6BB5\u65E0\u6CD5\u4ECE\u5361\u7247\u5173\u8054\u6570\u636E\u96C6\u89E3\u6790\uFF1A${t}`,supported_fields:e.map(u=>_({name:C(u.name),fd_id:C(u.fd_id),meta_type:C(u.meta_type)}))}};let i=C(r.name),s=C(r.fd_id),o=C(r.fd_type),c=C(r.meta_type).toUpperCase(),a=[i?void 0:"name",s?void 0:"fdId",o?void 0:"fdType",c?void 0:"metaType"].filter(u=>!!u);return a.length?{unsupported:{capability:"unsupported_filter_field",parameter:t,message:`\u7B5B\u9009\u5B57\u6BB5\u7F3A\u5C11\u5FC5\u8981 BI \u5143\u4FE1\u606F\uFF1A${t}`,missing_metadata:a}}:{field:{name:i,fdId:s,fdType:o,metaType:c}}}function _r(e,t,n){if(n)return e.find(i=>C(i.fd_id)===n||C(i.id)===n);let r=t.trim();return e.find(i=>[i.fd_id,i.id].map(C).includes(r))??ur(e.filter(i=>C(i.name)===r))??ur(e.filter(i=>C(i.alias)===r))}function ur(e){return e.find(t=>C(t.fd_id))??e[0]}function Sa(e){let t=w(e.content),n=hr(w(t.dsInfo)),r=w(w(t.source).field);Object.keys(r).length&&n.push(jt(r));let i=w(w(t.meta).chartMain),s=w(i.zoneData);for(let[o,c]of Object.entries(s))n.push(...ye(c).map(a=>jt(a,o)));return Ea(n)}function hr(e){return ye(e.columns).map(t=>({...jt(t),meta_type:q(t.metaType,t.meta_type)??"DIM"}))}function jt(e,t){return _({name:q(e.name,e.title,e.originTitle,e.alias),alias:q(e.alias,e.title),id:C(e.id),fd_id:q(e.fdId,e.fd_id,e.id),fd_type:q(e.fdType,e.fd_type),meta_type:q(e.metaType,e.meta_type),zone_id:q(e.zoneId,e.zone_id,t)})}function Ea(e){let t=new Set;return e.filter(n=>{let r=q(n.fd_id,n.id,n.name,n.alias);return!r||t.has(r)?!1:(t.add(r),!0)})}function Ra(e,t,n,r,i){let s=e==="CHART"?w(t.chartMain):t,o=wr(s.count),c=e==="TREE_SELECTOR"?r:i,a=o===void 0?void 0:n+c<o,u=e!=="CHART"&&je(s.exceedLimit)===!0,d=u&&(o===void 0||n+c>=o),l=d||(e==="CHART"?je(s.hasMoreData)??a??i===r:a??i===r);return{backendLimitReached:d,page:_({returned_count:i,offset:n,limit:r,has_more:l,next_offset:l&&!d&&i>0?n+(e==="TREE_SELECTOR"?r:i):void 0,total_count:u?void 0:o})}}function yr(e,t){let n=[],r=[],i=new Set,s=2,o=2;for(let c of e){let a=n.length?1:0,u=t-s-o-a,d=Nt(c,u),l=Object.keys(c).filter(h=>!i.has(h)),f=0,y=!0;for(let h=0;h<l.length;h+=1){let T=r.length+h>0?1:0,x=t-s-o-a-d-f-T,N=Lt(l[h],x);if(N>x){y=!1;break}f+=T+N}if(d>u||!y)return{rows:n,columns:r,truncated:!0,oversizedFirstRow:n.length===0};n.push(c),s+=a+d,o+=f;for(let h of l)r.push(h),i.add(h)}return{rows:n,columns:r,truncated:!1,oversizedFirstRow:!1}}function Ir(e,t){return Nt(e,t)<=t}function Nt(e,t){if(t<0)return t+1;if(e==null)return 4;if(typeof e=="string")return Lt(e,t);if(typeof e=="number"||typeof e=="boolean")return Buffer.byteLength(JSON.stringify(e));if(Array.isArray(e))return dr(e.map(n=>[void 0,n]),t);if(typeof e=="object"){let n=Object.entries(e).filter(([,r])=>r!==void 0);return dr(n,t)}return 4}function dr(e,t){let n=2;for(let r=0;r<e.length;r+=1){let[i,s]=e[r];if(n+=r>0?1:0,i!==void 0){let c=Lt(i,t-n);n+=c+1}let o=Nt(s,t-n);if(n+=o,n>t)return t+1}return n}function Lt(e,t){let n=2;for(let r of e){let i=r.codePointAt(0)??0;if(i===34||i===92?n+=2:i<=31||i>=55296&&i<=57343?n+=6:n+=Buffer.byteLength(r),n>t)return t+1}return n}function Ut(e){return q(e.title,e.alias,e.originTitle,e.name,e.fdId,e.id)??""}function br(e){let t=w(e);return Object.keys(t).length?q(t.title,t.name,t.originTitle,t.alias,t.v,t.value)??"":C(e)}function vt(e){let t=w(e);return Object.keys(t).length?"v"in t?t.v:"value"in t?t.value:br(e):e}function ye(e){return Array.isArray(e)?e.map(w).filter(t=>Object.keys(t).length):[]}function ee(e){return Array.isArray(e)?e:[]}function w(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Tr(e,t,n){return n?e.get(t,{signal:n}):e.get(t)}function Ba(e,t,n,r){return r?e.post(t,n,{signal:r}):e.post(t,n)}function C(e){return typeof e=="string"?e:e==null?"":String(e)}function q(...e){return e.map(C).find(t=>t.trim())?.trim()}function je(e){return typeof e=="boolean"?e:void 0}function Aa(e){return e.length<=cr?e:`${e.slice(0,cr-1)}\u2026`}function wr(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Cr(e,t){return t?.length?e.map(n=>Object.fromEntries(t.map(r=>[r,n[r]??null]))):e}function Oa(e){let t=e.map((i,s)=>i||`column_${s+1}`),n=new Set(t),r=new Set;return t.map(i=>{if(!r.has(i))return r.add(i),i;for(let s=2;;s+=1){let o=`${i}_${s}`;if(!n.has(o)&&!r.has(o))return r.add(o),o}})}import{createHash as ka}from"crypto";import{z as g}from"zod";var Pa=6e4,se=1e4,Sr=10*6e4,ct=new Map,ut=new Map,qt=new Map,Gt=new Map,Er=g.object({format:g.literal("markdown").describe("\u6700\u7EC8\u7ED3\u679C\u683C\u5F0F\u3002"),content:g.string().describe("\u6700\u7EC8\u5C55\u793A\u7ED9\u8C03\u7528\u8005\u6216\u7528\u6237\u7684 markdown \u5185\u5BB9\u3002")}),Rr={themes:g.array(g.object({theme_id:g.string().optional(),theme_name:g.string().optional(),is_insight_enabled:g.boolean().optional()}).passthrough()),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},Br={session_id:g.string().optional(),message_id:g.string().optional(),answer:g.unknown().optional().describe("ChatBI \u540E\u7AEF\u8FD4\u56DE\u7684\u95EE\u6570\u89E3\u91CA\u6216\u539F\u59CB\u7B54\u6848\u7ED3\u6784\u3002"),sql:g.unknown().optional().describe("ChatBI \u540E\u7AEF\u751F\u6210\u7684 SQL \u4FE1\u606F\u3002"),answer_status:g.string().optional(),final_status:g.string().optional(),query_result:g.unknown().optional().describe("ChatBI \u540E\u7AEF\u8FD4\u56DE\u7684\u7ED3\u6784\u5316\u67E5\u8BE2\u7ED3\u679C\uFF0C\u901A\u5E38\u5305\u542B columns\u3001preview\u3001truncated\u3001row_limit\u3002"),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},od={message_id:g.string().optional(),session_id:g.string().optional(),status:g.string(),detail:g.string().nullable().optional(),question:g.string().nullable().optional(),answer:g.unknown().optional(),final_result:Er.describe("\u6700\u7EC8\u5C55\u793A\u7ED3\u679C\uFF1B\u8C03\u7528\u65B9\u5E94\u4F18\u5148\u8BFB\u53D6 final_result.content\uFF0Canswer \u4EC5\u4FDD\u7559\u540E\u7AEF\u539F\u59CB\u7ED3\u679C\u3002"),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},Ar={theme_id:g.string().optional(),message_id:g.string().optional(),session_id:g.string().optional(),status:g.literal("started"),deduped:g.boolean(),retry_after_ms:g.number().int().nonnegative(),next_action:g.string().optional(),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},Or={message_id:g.string().optional(),session_id:g.string().optional(),status:g.string(),detail:g.string().nullable().optional(),question:g.string().nullable().optional(),answer:g.unknown().optional(),throttled:g.boolean(),retry_after_ms:g.number().int().nonnegative(),final_result:Er.describe("\u6700\u7EC8\u5C55\u793A\u7ED3\u679C\uFF1B\u4EC5\u5728 status \u4E3A success \u65F6\u5B58\u5728\u3002\u8C03\u7528\u65B9\u5E94\u4F18\u5148\u8BFB\u53D6 final_result.content\uFF0Canswer \u4EC5\u4FDD\u7559\u540E\u7AEF\u539F\u59CB\u7ED3\u679C\u3002").optional(),next_action:g.string().optional(),resolved_base_url:g.string().optional(),tried_base_urls:g.array(g.string()).optional()},kr={is_insight:g.boolean().optional().describe("\u662F\u5426\u53EA\u5217\u51FA\u6D1E\u5BDF\u4E3B\u9898\u3002")},Pr={theme_id:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:g.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u95EE\u6570\u95EE\u9898\u3002"),session_id:g.string().min(1).optional().describe("\u53EF\u9009\u4F1A\u8BDD ID\uFF0C\u7528\u4E8E\u95EE\u6570\u7EED\u95EE\u3002\u540C\u4E00\u4E2A session_id \u53EA\u80FD\u7EE7\u7EED\u95EE\u6570\uFF0C\u4E0D\u80FD\u518D\u7528\u4E8E\u6D1E\u5BDF\u3002"),external_context:g.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002")},ad={theme_id:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:g.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u6D1E\u5BDF\u95EE\u9898\u3002"),session_id:g.string().min(1).optional().describe("\u53EF\u9009\u4F1A\u8BDD ID\uFF0C\u7528\u4E8E\u6D1E\u5BDF\u7EED\u95EE\u3002\u540C\u4E00\u4E2A session_id \u53EA\u80FD\u7EE7\u7EED\u6D1E\u5BDF\uFF0C\u4E0D\u80FD\u518D\u7528\u4E8E\u95EE\u6570\u3002"),external_context:g.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002"),timeout_ms:g.number().int().positive().optional().describe("\u7B49\u5F85\u6D1E\u5BDF\u5B8C\u6210\u7684\u8D85\u65F6\u65F6\u95F4\uFF0C\u9ED8\u8BA4 300000ms\u3002"),poll_interval_ms:g.number().int().positive().optional().describe("\u8F6E\u8BE2\u95F4\u9694\uFF0C\u9ED8\u8BA4 2000ms\u3002")},xr={theme_id:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:g.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u6D1E\u5BDF\u95EE\u9898\u3002\u6D1E\u5BDF\u901A\u5E38\u8017\u65F6 2-3 \u5206\u949F\uFF0C5 \u5206\u949F\u89C6\u4E3A\u8D85\u65F6\uFF1B\u540C\u4E00\u95EE\u9898\u53EA\u53D1\u8D77\u4E00\u6B21\u3002"),session_id:g.string().min(1).optional().describe("\u53EF\u9009\u4F1A\u8BDD ID\uFF0C\u7528\u4E8E\u6D1E\u5BDF\u7EED\u95EE\u3002\u540C\u4E00\u4E2A session_id \u53EA\u80FD\u7EE7\u7EED\u6D1E\u5BDF\uFF0C\u4E0D\u80FD\u518D\u7528\u4E8E\u95EE\u6570\u3002"),external_context:g.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002")},Dr={theme_id:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002\u4F18\u5148\u4F7F\u7528 chatbi_insight_start \u8FD4\u56DE\u7684 theme_id\u3002"),theme_name:g.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\uFF1B\u672A\u63D0\u4F9B theme_id \u65F6\u4F1A\u6309\u540D\u79F0\u67E5\u627E\u6D1E\u5BDF\u4E3B\u9898\u3002"),message_id:g.string().min(1).describe("chatbi_insight_start \u8FD4\u56DE\u7684\u6D88\u606F ID\u3002\u5EFA\u8BAE\u81F3\u5C11\u95F4\u9694 10 \u79D2\u67E5\u8BE2\u4E00\u6B21\uFF0C5 \u5206\u949F\u540E\u505C\u6B62\u7B49\u5F85\u3002")};async function vr(e,t){let n=new L(e);try{let r=await n.listThemes({isInsight:t.is_insight});return E({themes:r,resolved_base_url:n.getResolvedBaseUrl(),tried_base_urls:n.getTriedBaseUrls()})}catch(r){return lt(n,r,"listThemes")}}async function Mr(e,t){let n=new L(e);try{let r=await n.query({themeId:t.theme_id,themeName:t.theme_name,message:t.message,sessionId:t.session_id,externalContext:t.external_context,fastMode:!0});return E({session_id:r.session_id,message_id:r.message_id,answer:r.answer,sql:r.sql,answer_status:r.answer_status,final_status:r.final_status,query_result:r.query_result,resolved_base_url:n.getResolvedBaseUrl(),tried_base_urls:n.getTriedBaseUrls()})}catch(r){return lt(n,r,"query")}}async function jr(e,t){let n=new L(e);try{let r=Nr({caller_scope:Lr(e),theme_id:t.theme_id,theme_name:t.theme_name,message:t.message,session_id:t.session_id,external_context:t.external_context}),i=xa(r);if(i)return E({...i,deduped:!0,retry_after_ms:se,next_action:"\u540C\u4E00\u6D1E\u5BDF\u95EE\u9898\u521A\u521A\u5DF2\u7ECF\u53D1\u8D77\uFF0C\u5DF2\u590D\u7528\u5DF2\u6709 message_id\u3002\u8BF7\u4F7F\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002"});let s=qt.get(r);if(s){let a=await s;return E({...a,deduped:!0,retry_after_ms:se,next_action:"\u540C\u4E00\u6D1E\u5BDF\u95EE\u9898\u6B63\u5728\u53D1\u8D77\u4E2D\uFF0C\u5DF2\u590D\u7528\u5DF2\u6709\u8BF7\u6C42\u7ED3\u679C\u3002\u8BF7\u4F7F\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002"})}let o=n.startInsight({themeId:t.theme_id,themeName:t.theme_name,message:t.message,sessionId:t.session_id,externalContext:t.external_context}).then(a=>{let u={theme_id:a.theme_id,message_id:a.message_id,session_id:a.session_id,status:"started"};return Da(r,u),u}).finally(()=>{qt.delete(r)});qt.set(r,o);let c=await o;return E({...c,deduped:!1,retry_after_ms:se,next_action:"\u6D1E\u5BDF\u4EFB\u52A1\u5DF2\u53D1\u8D77\u3002\u6D1E\u5BDF\u901A\u5E38\u8017\u65F6 2-3 \u5206\u949F\uFF0C\u8BF7\u4F7F\u7528 chatbi_insight_poll \u643A\u5E26 theme_id \u548C message_id \u67E5\u8BE2\u7ED3\u679C\uFF1B5 \u5206\u949F\u540E\u4ECD\u672A\u6210\u529F\u53EF\u89C6\u4E3A\u8D85\u65F6\u3002",resolved_base_url:n.getResolvedBaseUrl(),tried_base_urls:n.getTriedBaseUrls()})}catch(r){return lt(n,r,"insight.start")}}async function Ur(e,t){let n=new L(e);try{let r=Nr({caller_scope:Lr(e),message_id:t.message_id}),i=va(r);if(i){let l=Jt(i.result),f=$t(i.result,!0);return E({message_id:i.result.message_id,session_id:i.result.session_id,status:i.result.status,detail:Ht(i.result),question:i.result.question,answer:i.result.answer,throttled:!0,retry_after_ms:i.retryAfterMs,...l,next_action:f})}let s=Gt.get(r);if(s){let l=await s,f=zt(l.status),y=Jt(l),h=$t(l,!0);return E({message_id:l.message_id,session_id:l.session_id,status:l.status,detail:Ht(l),question:l.question,answer:l.answer,throttled:!0,retry_after_ms:f?0:se,...y,next_action:h})}let o=n.pollInsight({themeId:t.theme_id,themeName:t.theme_name,messageId:t.message_id}).then(l=>(Ma(r,l),l)).finally(()=>{Gt.delete(r)});Gt.set(r,o);let c=await o,a=zt(c.status),u=Jt(c),d=$t(c,!1);return E({message_id:c.message_id,session_id:c.session_id,status:c.status,detail:Ht(c),question:c.question,answer:c.answer,throttled:!1,retry_after_ms:a?0:se,...u,next_action:d,resolved_base_url:n.getResolvedBaseUrl(),tried_base_urls:n.getTriedBaseUrls()})}catch(r){return lt(n,r,"insight.poll")}}function Jt(e){return e.status!=="success"?{}:{final_result:{format:"markdown",content:qr(e)}}}function Ht(e){return e.detail!=null?e.detail:e.status==="failure"||e.status==="stopped"?ja(e):e.detail}function $t(e,t){if(e.status!=="success")return e.status==="waiting"?t?"\u540C\u4E00 message_id \u6B63\u5728\u67E5\u8BE2\u4E2D\u6216\u521A\u521A\u67E5\u8BE2\u8FC7\uFF0C\u5DF2\u8FD4\u56DE\u5DF2\u6709\u7ED3\u679C\uFF1B\u8BF7\u81F3\u5C11\u95F4\u9694 10 \u79D2\u518D\u67E5\u3002":"\u6D1E\u5BDF\u4EFB\u52A1\u4ECD\u5728\u6267\u884C\u4E2D\uFF0C\u8BF7\u7A0D\u540E\u7EE7\u7EED\u8C03\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002":e.status==="failure"||e.status==="stopped"?"\u6D1E\u5BDF\u4EFB\u52A1\u672A\u6210\u529F\u5B8C\u6210\uFF0C\u8BF7\u67E5\u770B detail\uFF1B\u5982\u9700\u91CD\u8BD5\u8BF7\u91CD\u65B0\u8C03\u7528 chatbi_insight_start\u3002":"\u6D1E\u5BDF\u4EFB\u52A1\u5904\u4E8E\u975E\u6210\u529F\u72B6\u6001\uFF0C\u8BF7\u67E5\u770B status \u548C detail \u540E\u51B3\u5B9A\u662F\u5426\u7EE7\u7EED\u67E5\u8BE2\u3002"}function xa(e){dt();let t=ct.get(e);if(!(!t||Date.now()-t.createdAt>=Pa))return t.result}function Da(e,t){dt(),ct.set(e,{createdAt:Date.now(),result:t})}function va(e){dt();let t=ut.get(e);if(!t)return;let n=Date.now()-t.checkedAt,r=zt(t.result.status);if(!(!r&&n>=se))return{result:t.result,retryAfterMs:r?0:Math.max(0,se-n)}}function zt(e){return e==="success"||e==="failure"||e==="stopped"}function Ma(e,t){dt(),ut.set(e,{checkedAt:Date.now(),result:t})}function dt(){let e=Date.now();for(let[t,n]of ct)e-n.createdAt>=Sr&&ct.delete(t);for(let[t,n]of ut)e-n.checkedAt>=Sr&&ut.delete(t)}function Nr(e){return JSON.stringify(Object.keys(e).sort().reduce((t,n)=>{let r=e[n];return typeof r<"u"&&(t[n]=r),t},{}))}function Lr(e){return e.BI_PAT?`pat:${Ft(e.BI_PAT)}`:e.BI_UID_TOKEN?`uid:${Ft(e.BI_UID_TOKEN)}`:`login:${Ft(`${e.BI_LOGIN_DOMAIN??""}\0${e.BI_LOGIN_ID??""}`)}`}function Ft(e){return ka("sha256").update(e).digest("hex").slice(0,16)}function qr(e){let t=e.answer?.trim();if(t)return Ga(t);let n=e.detail?.trim();return n||"\u5206\u6790\u5DF2\u5B8C\u6210\uFF0C\u4F46\u6CA1\u6709\u53EF\u5C55\u793A\u7684 markdown \u5185\u5BB9\u3002"}function ja(e){switch(e.status){case"success":return qr(e);case"waiting":return"\u6D1E\u5BDF\u4EFB\u52A1\u4ECD\u5728\u6267\u884C\u4E2D\uFF0C\u8BF7\u7A0D\u540E\u7EE7\u7EED\u8C03\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002";case"failure":case"stopped":return e.detail?.trim()||"\u6D1E\u5BDF\u4EFB\u52A1\u672A\u6210\u529F\u5B8C\u6210\u3002";default:return e.detail?.trim()||`\u6D1E\u5BDF\u4EFB\u52A1\u5F53\u524D\u72B6\u6001\uFF1A${e.status}`}}function Ua(e,t){let n=[`| ${e.join(" | ")} |`,`|${e.map(()=>" --- ").join("|")}|`];for(let r of t)n.push(`| ${e.map((i,s)=>La(Na(r[s]))).join(" | ")} |`);return n.join(`
6
6
  `)}function Na(e){return e===null||typeof e>"u"||e===""?"-":String(e)}function La(e){return e.replaceAll(`\r
7
7
  `,"<br>").replaceAll(`
8
- `,"<br>").replaceAll("\r","<br>").replaceAll("|","\\|")}function qa(e,t){return e?t&&t>0?`\u7ED3\u679C\u5DF2\u622A\u65AD\uFF0C\u4EC5\u5C55\u793A\u524D ${t} \u884C\u3002`:"\u7ED3\u679C\u5DF2\u622A\u65AD\uFF0C\u4EC5\u5C55\u793A\u90E8\u5206\u6570\u636E\u3002":""}function Ga(e){let t=/```GuanViz\.json\n([\s\S]*?)\n```/g;return e.replace(t,(n,r)=>Ja(r)??n)}function Ja(e){try{let t=JSON.parse(e),n=t.data_info?.columns,r=t.data_info?.preview;if(!Array.isArray(n)||!n.length||!Array.isArray(r))return;let i=n.map(d=>d.name??"-"),s=$a(t.viz_config),o=Fa(i,r,s),a=r.map(d=>i.map((l,f)=>za(d[f],s.get(l),o.get(l)))),c=Ua(i,a),u=qa(!!t.data_info?.truncated,t.data_info?.row_limit);return u?`${c}
8
+ `,"<br>").replaceAll("\r","<br>").replaceAll("|","\\|")}function qa(e,t){return e?t&&t>0?`\u7ED3\u679C\u5DF2\u622A\u65AD\uFF0C\u4EC5\u5C55\u793A\u524D ${t} \u884C\u3002`:"\u7ED3\u679C\u5DF2\u622A\u65AD\uFF0C\u4EC5\u5C55\u793A\u90E8\u5206\u6570\u636E\u3002":""}function Ga(e){let t=/```GuanViz\.json\n([\s\S]*?)\n```/g;return e.replace(t,(n,r)=>Ja(r)??n)}function Ja(e){try{let t=JSON.parse(e),n=t.data_info?.columns,r=t.data_info?.preview;if(!Array.isArray(n)||!n.length||!Array.isArray(r))return;let i=n.map(d=>d.name??"-"),s=$a(t.viz_config),o=Fa(i,r,s),c=r.map(d=>i.map((l,f)=>za(d[f],s.get(l),o.get(l)))),a=Ua(i,c),u=qa(!!t.data_info?.truncated,t.data_info?.row_limit);return u?`${a}
9
9
 
10
- ${u}`:c}catch{return}}var Vt=new Map([["k",1e3],["K",1e3],["M",1e6],["B",1e9],["\u4E07",1e4],["\u4EBF",1e8]]),Ha=[[1e8,"\u4EBF"],[1e4,"\u4E07"]];function $a(e){let t=e?.chartMeta?.chartMain?.zoneData?.metric,n=new Map;if(!Array.isArray(t))return n;for(let r of t)r.name&&r.fieldFormat?.numberFormat&&n.set(r.name,r.fieldFormat.numberFormat);return n}function Fa(e,t,n){let r=new Map;for(let[i,s]of e.entries()){let o=n.get(s);if(o?.prefixUnit!=="auto")continue;let a=0;for(let u of t){let d=Gr(u[i]);typeof d=="number"&&(a=Math.max(a,Math.abs(d/Jr(o))))}let c=Wa(a);c&&r.set(s,c)}return r}function za(e,t,n){if(!t)return e;let r=Gr(e);return typeof r!="number"?e:Va(r,t,n)}function Gr(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e!="string")return;let t=Number(e.trim());return Number.isFinite(t)?t:void 0}function Va(e,t,n){let r=Jr(t),{unit:i,shouldScale:s}=Qa(t,n),o=s&&i?Vt.get(i)??1:1,a=e/r/o,c=Ka(t.decimalPlaces),u=t.useThousandsSeparator?a.toLocaleString("en-US",{minimumFractionDigits:c,maximumFractionDigits:c}):a.toFixed(c),d=i&&t.showPrefixUnit!==!1?i:"",l=t.showSuffix===!1||typeof t.suffix!="string"?"":t.suffix;return`${u}${d}${l}`}function Jr(e){if(e.showPrefixUnit!==!1&&typeof e.prefixUnit=="string"&&e.prefixUnit!=="auto"&&Vt.has(e.prefixUnit))return 1;let t=Number(e.divideDataBy??1);return Number.isFinite(t)&&t!==0?t:1}function Qa(e,t){return e.showPrefixUnit===!1?{unit:"",shouldScale:!1}:e.prefixUnit==="auto"?{unit:t??"",shouldScale:!0}:typeof e.prefixUnit=="string"&&Vt.has(e.prefixUnit)?{unit:e.prefixUnit,shouldScale:!0}:{unit:"",shouldScale:!1}}function Ka(e){return typeof e!="number"||!Number.isFinite(e)?2:Math.max(0,Math.min(100,Math.trunc(e)))}function Wa(e){return Ha.find(([t])=>e>=t)?.[1]??""}function dt(e,t,n){let r=Ya(e,t,n);return te({error:"chatbi_request_failed",requested_operation:n,...r,tried_base_urls:r.tried_base_urls??e.getTriedBaseUrls()})}function Ya(e,t,n){return t instanceof v?t.detail:e.getLastError()??{operation:n,detail:t instanceof Error?t.message:String(t)}}import{z as Qt}from"zod";var Hr={dsId:Qt.string().min(1).describe("\u6570\u636E\u96C6 ID\u3002")},$r={cdId:Qt.string().min(1).describe("\u5361\u7247 ID\u3002")},Fr={pageId:Qt.string().min(1).describe("\u9875\u9762/\u4EEA\u8868\u677F ID\u3002")};async function zr(e,t){let n=await e.get(`/api/data-source/${encodeURIComponent(t.dsId)}`);return D(n)}async function Vr(e,t){let n=await e.get(`/api/card/${encodeURIComponent(t.cdId)}`);return D(n)}async function Qr(e,t){let n=await e.get(`/api/page/${encodeURIComponent(t.pageId)}`);return D(n)}import{z as Ne}from"zod";var Le=Ne.string().trim().min(1),Xa=Ne.object({name:Le.describe("CTE \u540D\u79F0\uFF0C\u4E0D\u80FD\u4E0E\u4EFB\u4E00\u8F93\u5165\u6570\u636E\u96C6\u7684\u7CBE\u786E\u540D\u79F0/name \u76F8\u540C\u3002"),query:Le.describe("\u8BE5 CTE \u7684\u67E5\u8BE2\u4F53\uFF0C\u4E0D\u5305\u542B CTE \u540D\u79F0\u548C AS \u5916\u5C42\u3002")}).strict(),Kr={query:Le.describe("\u5B8C\u6574\u7684\u5355\u6761\u67E5\u8BE2 SQL\uFF0C\u4EC5\u9650 SELECT/WITH\u3002inputs \u53EA\u7ED1\u5B9A\u6570\u636E\u96C6\uFF0CdsId\u3001fdId \u6216 input0 \u4E0D\u80FD\u76F4\u63A5\u4F5C\u4E3A\u8868\u540D\uFF1B\u901A\u5E38\u5148\u4F7F\u7528 get_dataset_detail \u8FD4\u56DE\u7684\u6570\u636E\u96C6\u540D\u79F0/name \u548C columns[].name\u3002\u82E5 TABLE_OR_VIEW_NOT_FOUND \u7684 diagnostic.tableBindings[] \u63D0\u4F9B sqlReference\uFF0C\u6309\u8BE5\u503C\u4FEE\u6B63\u8868\u5F15\u7528\uFF1B\u5355\u6570\u636E\u96C6 Spark \u67E5\u8BE2\u53EF\u80FD\u8FD4\u56DE __THIS__\u3002\u4E2D\u6587\u6216\u7279\u6B8A\u5B57\u7B26\u540D\u79F0\u7528\u53CD\u5F15\u53F7\u3002\u8FD4\u56DE\u884C\u6570\u7531 MCP \u63A7\u5236\uFF0C\u901A\u5E38\u65E0\u9700\u81EA\u884C\u6DFB\u52A0 LIMIT\u3002"),inputs:Ne.array(Le).describe("query \u5B9E\u9645\u5F15\u7528\u7684\u5168\u90E8\u6570\u636E\u96C6 ID\uFF0C\u7528\u4E8E BI \u7ED1\u5B9A\u548C\u6743\u9650\u6821\u9A8C\uFF0C\u4E0D\u80FD\u4F5C\u4E3A SQL \u8868\u540D\u3002\u6BCF\u4E2A FROM/JOIN \u6570\u636E\u96C6\u90FD\u8981\u4F20\u5BF9\u5E94 ID\uFF0C\u4E0D\u8981\u591A\u4F20\u6216\u91CD\u590D\uFF1BSELECT 1 \u7B49\u65E0\u8868\u67E5\u8BE2\u4F20\u7A7A\u6570\u7EC4\u3002\u540E\u7AEF\u9ED8\u8BA4\u6700\u591A\u652F\u6301 10 \u4E2A\u4E0D\u540C\u6570\u636E\u96C6\uFF0C\u5B9E\u9645\u9650\u5236\u4EE5\u90E8\u7F72\u914D\u7F6E\u4E3A\u51C6\u3002"),queryStructure:Ne.object({ctes:Ne.array(Xa).min(1),mainQuery:Le.describe("\u79FB\u9664\u9876\u5C42 WITH/CTE \u5B9A\u4E49\u540E\u7684\u6700\u7EC8 SELECT \u67E5\u8BE2\u3002")}).strict().optional().describe("\u4EC5\u5F53\u5B8C\u6574 query \u662F\u9876\u5C42 WITH/CTE \u67E5\u8BE2\u65F6\u63D0\u4F9B\u3002query \u4ECD\u4FDD\u7559\u5B8C\u6574\u539F\u59CB SQL\uFF1Bctes \u548C mainQuery \u662F\u540C\u4E00 SQL \u7684\u7ED3\u6784\u5316\u62C6\u5206\u3002\u6CA1\u6709 CTE \u65F6\u7701\u7565\u6574\u4E2A\u5B57\u6BB5\u3002")};async function Wr(e,t,n){try{await An(e,t,"executeSqlQuery");let r=await e.post("/api/data-source/execute-sql-query",{...n,query:n.query.trim(),inputs:[...new Set(n.inputs.map(i=>i.trim()))],limit:t.BI_MAX_ROWS,disableCache:!0});return D({maxRowsHint:t.BI_MAX_ROWS,result:r})}catch(r){if(Za(r))return ve("execute_sql_query",r,{hint:"\u8BF7\u5728\u7BA1\u7406\u540E\u53F0 -> \u9AD8\u7EA7\u8BBE\u7F6E -> \u5BF9\u5E94\u57DF\u540D\u4E0B\uFF0C\u6253\u5F00\u9AD8\u7EA7SQL\u67E5\u8BE2\u529F\u80FD\u3002"});if(ec(r)){let i=await nc(e,n.inputs),s=Yr(r)&&i.length===1,o=i.map(a=>s?{...a,sqlReference:"__THIS__"}:a);return ve("execute_sql_query",r,{hint:tc(r,s),tableBindings:o.length>0?o:void 0})}throw r}}function Za(e){return e instanceof Error&&e.message.includes("POST /api/data-source/execute-sql-query HTTP 404")}function ec(e){return e instanceof Error&&e.message.includes("TABLE_OR_VIEW_NOT_FOUND")}function Yr(e){return e instanceof Error&&e.message.includes("SparkViewDataset")}function tc(e,t){return t?"\u8BE5\u8BF7\u6C42\u8D70 Spark \u6570\u636E\u96C6\u6267\u884C\u94FE\u8DEF\u3002\u4FDD\u6301 inputs \u4E0D\u53D8\uFF0C\u5C06 SQL \u4E2D\u8BE5\u6570\u636E\u96C6\u7684 FROM/JOIN \u8868\u5F15\u7528\u6539\u4E3A diagnostic.tableBindings[0].sqlReference\uFF08__THIS__\uFF09\u540E\u91CD\u8BD5\uFF1B\u4E0D\u8981\u518D\u6B21\u4F7F\u7528\u76F8\u540C\u7684\u663E\u793A\u540D\u79F0\u3002":Yr(e)?"\u8BE5\u8BF7\u6C42\u8D70 Spark \u591A\u6570\u636E\u96C6\u6267\u884C\u94FE\u8DEF\uFF0C\u6570\u636E\u96C6\u663E\u793A\u540D\u79F0\u4E0D\u4FDD\u8BC1\u7B49\u4E8E\u5DF2\u6CE8\u518C\u7684 SQL \u5173\u7CFB\u540D\uFF0CMCP \u65E0\u6CD5\u53EF\u9760\u63A8\u5BFC\u5168\u90E8\u8868\u5F15\u7528\uFF1B\u8BF7\u52FF\u539F\u6837\u91CD\u590D\u8C03\u7528\uFF0C\u9700\u8981\u540E\u7AEF\u63D0\u4F9B\u7A33\u5B9A\u522B\u540D\u3002":"\u6570\u636E\u96C6 ID \u53EA\u7528\u4E8E BI \u7ED1\u5B9A\u548C\u6388\u6743\uFF0C\u4E0D\u80FD\u76F4\u63A5\u4F5C\u4E3A\u8868\u540D\u3002\u53EF\u6838\u5BF9 diagnostic.tableBindings[].displayName\uFF0C\u4F46\u663E\u793A\u540D\u79F0\u4E0D\u4FDD\u8BC1\u662F\u5F53\u524D\u6267\u884C\u94FE\u8DEF\u53EF\u7528\u7684 SQL \u5F15\u7528\u3002"}async function nc(e,t){let n=[...new Set(t.map(r=>r.trim()))];return Promise.all(n.map(async r=>{try{let i=await e.get(`/api/data-source/${encodeURIComponent(r)}`);if(!i||typeof i!="object"||!("name"in i)||typeof i.name!="string")return{dsId:r};let s=i.name.trim();return s?{dsId:r,displayName:s}:{dsId:r}}catch{return{dsId:r}}}))}import{z as W}from"zod";var Xr={keyword:W.string().default("").describe("\u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u7559\u7A7A\u65F6\u8FD4\u56DE\u8D44\u6E90\u5217\u8868\u3002"),resourceType:W.enum(["ALL","CARD","DASHBOARD","DATA_SET","ETL"]).optional().default("ALL"),limit:W.number().int().min(1).max(100).optional().default(20),offset:W.number().int().min(0).optional().default(0),utimeStartTime:W.number().int().optional().describe("\u66F4\u65B0\u65F6\u95F4\u8D77\u70B9\uFF0C\u6BEB\u79D2\u65F6\u95F4\u6233\u3002"),utimeEndTime:W.number().int().optional().describe("\u66F4\u65B0\u65F6\u95F4\u7EC8\u70B9\uFF0C\u6BEB\u79D2\u65F6\u95F4\u6233\u3002"),cardType:W.string().optional().describe("\u5361\u7247\u7C7B\u578B\u8FC7\u6EE4\uFF0C\u4EC5 resourceType \u5305\u542B CARD \u65F6\u4F7F\u7528\u3002"),permissionType:W.string().optional(),orderBy:W.string().optional(),isDesc:W.boolean().optional()};async function Zr(e,t){let{cardType:n,...r}=t,i={...r,specificResourceFilters:n?{cardType:n}:void 0},s=await e.post("/api/global-search",i);return D(s)}import{z as j}from"zod";var be=j.string().trim().min(1).max(64),ei=2e3,ti=3e5,ni={offset:j.number().int().nonnegative().optional().default(0).describe("\u5206\u9875\u504F\u79FB\u91CF\uFF0C\u9ED8\u8BA4 0\u3002"),limit:j.number().int().positive().optional().default(200).describe("\u8FD4\u56DE\u6761\u6570\u9650\u5236\uFF0C\u9ED8\u8BA4 200\u3002")},ri={agent_id:be.describe("Dashboard Agent ID\uFF0C\u53EF\u7531 list_dashboard_agents \u83B7\u53D6\u3002")},ii={agent_id:be.describe("Dashboard Agent ID\u3002")},si={session_id:be.describe("Dashboard Agent \u4F1A\u8BDD ID\u3002")},oi={agent_id:be.describe("Dashboard Agent ID\u3002"),question:j.string().trim().min(1).max(1e3).describe("\u53D1\u9001\u7ED9 Dashboard Agent \u7684\u95EE\u9898\u3002"),session_id:be.optional().describe("\u5DF2\u6709\u4F1A\u8BDD ID\uFF1B\u4F20\u5165\u65F6\u5728\u8BE5\u4F1A\u8BDD\u4E2D\u7EE7\u7EED\u8FFD\u95EE\u3002"),expert_id:be.optional().describe("\u6307\u5B9A\u5206\u6790\u4E13\u5BB6 ID\uFF0C\u53EF\u7531 get_dashboard_agent \u83B7\u53D6\u3002"),poll_interval_ms:j.number().int().positive().optional().default(ei).describe("\u5185\u90E8\u8F6E\u8BE2\u95F4\u9694\uFF0C\u9ED8\u8BA4 2000 \u6BEB\u79D2\u3002"),timeout_ms:j.number().int().positive().optional().default(ti).describe("\u672C\u6B21 ask \u7684\u6700\u957F\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4 300000 \u6BEB\u79D2\uFF0C\u540C\u65F6\u53D7\u670D\u52A1\u7AEF\u8BF7\u6C42\u8D85\u65F6\u7EA6\u675F\u3002")},ai={status:j.literal("success"),agent_id:j.string(),session_id:j.string(),message_id:j.string(),task_id:j.string(),answer:j.string(),message:j.unknown()};async function ci(e,t,n){let r=new URLSearchParams;return r.set("offset",String(t.offset??0)),r.set("limit",String(t.limit??200)),D(await e.get(`/api/agent2/list?${r.toString()}`,{signal:n}))}async function ui(e,t,n){return D(await e.get(`/api/agent2/${encodeURIComponent(t.agent_id.trim())}`,{signal:n}))}async function di(e,t,n){let r=encodeURIComponent(t.agent_id.trim());return D(await e.get(`/api/agent2-session/${r}/sessions`,{signal:n}))}async function li(e,t,n){let r=encodeURIComponent(t.session_id.trim());return D(await e.get(`/api/agent2-message/${r}/messages`,{signal:n}))}async function pi(e,t,n){let r=dc(n,t.timeout_ms??ti),i=t.poll_interval_ms??ei,s=t.agent_id.trim(),o=t.session_id?.trim(),a=t.expert_id?.trim(),c=t.question.trim();o&&await rc(e,s,o,r);let u=await e.post("/api/agent2-message/create",pc({sessionId:o,agentId:s,question:c,title:[...c].slice(0,50).join(""),expertId:a}),{signal:r}),d=ic(u);sc(d,s,o);try{let l=await oc(e,d,i,r),f=mi(l);return E({status:"success",agent_id:d.agentId,session_id:d.sessionId,message_id:d.messageId,task_id:d.taskId,answer:f,message:l},{text:f})}catch(l){throw uc(l,d,r.aborted)}}async function rc(e,t,n,r){let i=await e.get(`/api/agent2-session/${encodeURIComponent(t)}/sessions`,{signal:r});if(!lc(i).some(o=>{let a=we(o);return G(a.agentId)===t&&G(a.sessionId)===n}))throw new Error(`\u4F1A\u8BDD ${n} \u4E0D\u5C5E\u4E8E\u4EEA\u8868\u677F\u667A\u80FD\u4F53 ${t}\uFF0C\u672A\u63D0\u4EA4\u95EE\u9898\u3002`)}function ic(e){let t=we(e),n={agentId:G(t.agentId),sessionId:G(t.sessionId),messageId:G(t.messageId),taskId:G(t.taskId)},r=Object.entries(n).filter(([,i])=>!i).map(([i])=>i);if(r.length)throw new Error(`\u521B\u5EFA\u7ED3\u679C\u7F3A\u5C11 ${r.join(", ")}\u3002`);return n}function sc(e,t,n){if(e.agentId!==t)throw new Error(`\u8FD4\u56DE\u7684\u4EEA\u8868\u677F\u667A\u80FD\u4F53\u4E0E\u8BF7\u6C42\u4E0D\u4E00\u81F4\uFF08${lt(e)}\uFF09\u3002`);if(n&&e.sessionId!==n){let r=`requestedSessionId=${n}`;throw new Error(`\u8FD4\u56DE\u7684\u4EEA\u8868\u677F\u667A\u80FD\u4F53\u4F1A\u8BDD\u4E0E\u8BF7\u6C42\u4E0D\u4E00\u81F4\uFF08${r}, ${lt(e)}\uFF09\u3002`)}}async function oc(e,t,n,r){for(;;){r.throwIfAborted();let i=we(await e.get(`/api/task/${encodeURIComponent(t.taskId)}`,{signal:r})),s=G(i.status);if(s==="FINISHED")return ac(e,t,n,r);if(["FAILED","CANCELED","CANCELLED"].includes(s))throw Te(`\u4EFB\u52A1\u6267\u884C\u5931\u8D25: ${cc(i)}`,t);if(!["CREATED","PROCESSING","QUEUEING"].includes(s))throw Te(`\u9047\u5230\u672A\u77E5\u4EFB\u52A1\u72B6\u6001: status=${JSON.stringify(s)}`,t);await fi(n,r)}}async function ac(e,t,n,r){for(;;){r.throwIfAborted();let i=we(await e.get(`/api/agent2-message/${encodeURIComponent(t.messageId)}`,{signal:r}));if(mi(i))return i;let s=G(i.status);if(s==="FAILED")throw Te("\u6D88\u606F\u751F\u6210\u5931\u8D25",t);if(s==="SUCCESS")throw Te("\u6D88\u606F\u5DF2\u5B8C\u6210\u4F46\u6CA1\u6709\u53EF\u7528\u56DE\u7B54",t);if(!["","PENDING","RUNNING"].includes(s))throw Te(`\u9047\u5230\u672A\u77E5\u6D88\u606F\u72B6\u6001: status=${JSON.stringify(s)}`,t);await fi(n,r)}}function cc(e){let t=G(e.errorMessage);if(t)return t;let n=e.result;return typeof n=="string"&&n.trim()?n.trim():G(we(n).error)||"\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE\u5931\u8D25\u539F\u56E0"}function mi(e){return G(we(e.answer).content)}function Te(e,t){return new Error(`${e}\uFF08${lt(t)}\uFF09\u3002`)}function uc(e,t,n){let r=e instanceof Error?e:new Error(String(e));return r.message.includes(lt(t))?r:Te(`${n?"\u672C\u5730\u7B49\u5F85\u5DF2\u505C\u6B62\uFF0C\u670D\u52A1\u7AEF\u4EFB\u52A1\u53EF\u80FD\u4ECD\u5728\u6267\u884C":"\u7B49\u5F85\u4EEA\u8868\u677F\u667A\u80FD\u4F53\u7ED3\u679C\u5931\u8D25"}: ${r.message}`,t)}function lt(e){return`agentId=${e.agentId}, sessionId=${e.sessionId}, messageId=${e.messageId}, taskId=${e.taskId}`}function dc(e,t){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}async function fi(e,t){t.throwIfAborted(),await new Promise((n,r)=>{let i=setTimeout(s,e);t.addEventListener("abort",o,{once:!0});function s(){t.removeEventListener("abort",o),n()}function o(){clearTimeout(i),r(t.reason)}})}function we(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function lc(e){return Array.isArray(e)?e:[]}function G(e){return typeof e=="string"?e.trim():""}function pc(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}import{z as P}from"zod";var Ce=P.string().trim().min(1).max(512),gi=P.object({selector_id:Ce.describe("\u9875\u9762\u7B5B\u9009\u5668\u5361\u7247 ID\u3002"),values:P.array(P.string().trim().min(1)).min(1).describe("\u8BE5\u7B5B\u9009\u5668\u7684\u53D6\u503C\uFF1B\u591A\u9009\u65F6\u5728\u540C\u4E00\u6570\u7EC4\u4E2D\u4F20\u5165\u591A\u4E2A\u503C\u3002")}),_i={page_id:Ce.describe("\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\uFF0C\u53EF\u7531 global_search \u83B7\u53D6\u3002")},hi={page_id:Ce.describe("\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\uFF0C\u53EF\u7531 global_search \u83B7\u53D6\u3002"),selectors:P.array(gi).optional().describe("\u9875\u9762\u7B5B\u9009\u5668\u53D6\u503C\uFF1B\u7B5B\u9009\u5668 ID \u53EF\u4ECE get_page_info \u83B7\u53D6\u3002"),analysis_id:Ce.optional().describe("\u5206\u6790\u601D\u8DEF ID\uFF1B\u5148\u7528 inspect_page_insight \u67E5\u770B\u53EF\u9009\u9879\u3002"),analysis_name:P.string().trim().min(1).max(512).optional().describe("\u5206\u6790\u601D\u8DEF\u540D\u79F0\uFF1B\u4E0E analysis_id \u4E92\u65A5\u3002"),locale:P.string().trim().min(1).max(64).optional().describe("\u8F93\u51FA\u8BED\u8A00\u533A\u57DF\uFF0C\u4F8B\u5982 zh-CN\u3002")},yi={card_id:Ce.describe("\u667A\u80FD\u6D1E\u5BDF\u5361\u7247 ID\uFF0C\u5FC5\u987B\u5C5E\u4E8E page_id \u6307\u5B9A\u7684\u9875\u9762\u3002"),page_id:Ce.describe("\u5361\u7247\u6240\u5C5E\u7684\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\u3002"),selectors:P.array(gi).optional().describe("\u9875\u9762\u7B5B\u9009\u5668\u53D6\u503C\uFF1B\u7B5B\u9009\u5668 ID \u53EF\u4ECE get_page_info \u83B7\u53D6\u3002"),locale:P.string().trim().min(1).max(64).optional().describe("\u8F93\u51FA\u8BED\u8A00\u533A\u57DF\uFF0C\u4F8B\u5982 zh-CN\u3002")},Ii={status:P.literal("success"),page_id:P.string(),page_type:P.string(),prompt_setting:P.unknown(),llm_config:P.unknown()},Yt={status:P.literal("success"),resource_type:P.enum(["page","card"]),page_id:P.string(),card_id:P.string().optional(),content:P.string().optional(),raw:P.unknown()};async function bi(e,t,n){let r=await Xt(e,t.page_id,n);Zt(r);let i=await Ei(e,r.pageId,n),s=await gc(e,r.pageId,n);return E({status:"success",page_id:r.pageId,page_type:r.pageType,prompt_setting:i,llm_config:s})}async function Ti(e,t,n){let r=t.analysis_id?.trim(),i=t.analysis_name?.trim();if(r&&i)throw new Error("analysis_id \u548C analysis_name \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\u3002");let s=await Xt(e,t.page_id,n);Zt(s);let o=Ci(t.selectors);Si(s,o);let a=await Ei(e,s.pageId,n);if(!a.enabled)throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(s.pageId)} \u672A\u5F00\u542F\u667A\u80FD\u6D1E\u5BDF\u3002`);fc(s.pageId,a.analysis,r,i);let c=en({stream:!1,selectorValues:o.length?o:void 0,analysisId:r,analysisName:i,locale:t.locale?.trim()}),u=`/api/page/${encodeURIComponent(s.pageId)}/intelligent-insight/generate`,d=await Ri(e,u,c,"\u4EEA\u8868\u677F",`pgId=${s.pageId}`,n);return Bi("page",s.pageId,void 0,d)}async function wi(e,t,n){let r=await Xt(e,t.page_id,n);Zt(r);let i=t.card_id.trim();mc(r,i);let s=Ci(t.selectors);Si(r,s);let o=en({stream:!1,pgId:r.pageId,selectorValues:s.length?s:void 0,locale:t.locale?.trim()}),a=`/api/card/${encodeURIComponent(i)}/intelligent-insight/generate`,c=await Ri(e,a,o,"\u5361\u7247",`cdId=${i}, pgId=${r.pageId}`,n);return Bi("card",r.pageId,i,c)}async function Xt(e,t,n){let r=t.trim(),i=await e.get(`/api/page/${encodeURIComponent(r)}`,{signal:n}),s=J(i),o=U(s.pgType);if(!o)throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(r)} \u54CD\u5E94\u4E2D\u7F3A\u5C11 pgType\u3002`);if(!Array.isArray(s.cards))throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(r)} \u54CD\u5E94\u4E2D\u7F3A\u5C11 cards\u3002`);let a=new Map;for(let c of s.cards){let u=J(c),d=U(u.cdId);d&&a.set(d,U(u.cdType))}return{pageId:r,pageType:o,cardTypes:a}}function Zt(e){if(e.pageType!=="PAGE")throw new Error(`\u9875\u9762 ${JSON.stringify(e.pageId)} \u4E0D\u652F\u6301\u667A\u80FD\u6D1E\u5BDF\uFF1A\u4EC5\u652F\u6301 pgType=PAGE\uFF0C\u5F53\u524D pgType=${e.pageType}\u3002`)}function mc(e,t){let n=e.cardTypes.get(t);if(n===void 0)throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(e.pageId)} \u4E2D\u4E0D\u5B58\u5728\u6216\u5F53\u524D\u7528\u6237\u4E0D\u53EF\u89C1\u5361\u7247 ${JSON.stringify(t)}\u3002`);if(n!=="INTELLIGENT_INSIGHT")throw new Error(`\u5361\u7247 ${JSON.stringify(t)} \u4E0D\u662F\u667A\u80FD\u6D1E\u5BDF\u5361\u7247\uFF1A\u4EC5\u652F\u6301 cdType=INTELLIGENT_INSIGHT\uFF0C\u5F53\u524D cdType=${n}\u3002`)}function Ci(e=[]){let t=new Map;for(let n of e){let r=n.selector_id.trim(),i=t.get(r)??[];i.push(...n.values.map(s=>s.trim())),t.set(r,i)}return[...t].map(([n,r])=>({selectorId:n,defaultValue:r}))}function Si(e,t){let n=new Set(["SELECTOR","TREE_SELECTOR","MERGE_SELECTOR","CUSTOM_SELECTOR"]);for(let r of t){let i=e.cardTypes.get(r.selectorId);if(i===void 0)throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(e.pageId)} \u4E2D\u4E0D\u5B58\u5728\u7B5B\u9009\u5668 ${JSON.stringify(r.selectorId)}\u3002`);if(!n.has(i))throw new Error(`\u5361\u7247 ${JSON.stringify(r.selectorId)} \u4E0D\u662F\u9875\u9762\u7B5B\u9009\u5668\uFF08cdType=${i}\uFF09\u3002`)}}async function Ei(e,t,n){let r=await e.get(`/api/prompt-setting/PAGE/${encodeURIComponent(t)}`,{signal:n}),i=J(r);if(!U(i.resourceId))return{enabled:!1,analysis:[]};let s=J(i.content),o=Array.isArray(s.analysis)?s.analysis.map(J).map(a=>({id:U(a.id),name:U(a.name)})):[];return{enabled:i.enabled===!0,analysis:o}}function fc(e,t,n,r){if(n&&!t.some(i=>i.id===n))throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(e)} \u4E2D\u4E0D\u5B58\u5728 analysisId=${JSON.stringify(n)}\u3002`);if(r&&!t.some(i=>i.name===r))throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(e)} \u4E2D\u4E0D\u5B58\u5728 analysisName=${JSON.stringify(r)}\u3002`)}async function gc(e,t,n){let r=J(await e.get(`/api/llm-config/resource/${encodeURIComponent(t)}`,{signal:n})),i=U(r.llmConfigId),s=U(r.name);if(i&&i!=="default")return Kt(i,s,!1);let o=await e.get("/api/llm-config/feature-default/list",{signal:n}),a=Wt(o).map(J).find(l=>U(l.featureCode).toLowerCase()==="intelligent_insight"),c=U(a?.llmConfigId);if(!c)return Kt("","\u672A\u8BBE\u7F6E",!0);let u=await e.get("/api/llm-config/list",{signal:n}),d=Wt(u).map(J).find(l=>U(l.llmConfigId)===c);return Kt(c,U(d?.name)||s,!0)}function Kt(e,t,n){let r=t||"\u672A\u8BBE\u7F6E";return{llm_config_id:e,name:r,follow_system_default:n,display_name:n?`\u8DDF\u968F\u7CFB\u7EDF\u9ED8\u8BA4\uFF08${r}\uFF09`:r}}async function Ri(e,t,n,r,i,s){try{return await e.post(t,n,{signal:s})}catch(o){if(o instanceof he&&[404,405].includes(o.status)){let c="\u5F53\u524D BI \u4E0D\u652F\u6301\u8BE5\u63A5\u53E3\uFF0C\u8BF7\u5347\u7EA7 BI \u540E\u91CD\u8BD5\u3002";throw new Error(`\u751F\u6210${r}\u6D1E\u5BDF\u5931\u8D25\uFF08${i}\uFF09\uFF1A${c}`)}if(o instanceof he&&o.status===403&&_c(o,1030))throw new Error(`\u751F\u6210${r}\u6D1E\u5BDF\u5931\u8D25\uFF08${i}\uFF09\uFF1A\u670D\u52A1\u7AEF\u8981\u6C42\u4F7F\u7528 Personal Access Token (PAT)\uFF0C\u8BF7\u6539\u7528 PAT \u540E\u91CD\u8BD5\u3002`,{cause:o});let a=o instanceof Error?o.message:String(o);throw new Error(`\u751F\u6210${r}\u6D1E\u5BDF\u5931\u8D25\uFF08${i}\uFF09\uFF1A${a}`,{cause:o})}}function _c(e,t){return new RegExp(`["']?status["']?\\s*:\\s*${t}(?:\\D|$)`).test(e.message)}function Bi(e,t,n,r){let i=hc(r);return E(en({status:"success",resource_type:e,page_id:t,card_id:n,content:i,raw:r}),{text:i??r})}function hc(e){let t=J(Wt(J(e).choices)[0]);return U(J(t.message).content)||void 0}function J(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Wt(e){return Array.isArray(e)?e:[]}function U(e){return typeof e=="string"?e.trim():""}function en(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var yc=5e3;function Ai(e,t,n){t("inspect_page_insight")&&e("inspect_page_insight",{title:"Inspect Page Insight",description:"\u68C0\u67E5\u666E\u901A\u4EEA\u8868\u677F\u662F\u5426\u5F00\u542F\u667A\u80FD\u6D1E\u5BDF\uFF0C\u5E76\u8FD4\u56DE\u53EF\u7528\u5206\u6790\u601D\u8DEF ID/\u540D\u79F0\u548C LLM \u914D\u7F6E\u6458\u8981\u3002\u4E0D\u4F1A\u8FD4\u56DE\u63D0\u793A\u8BCD\u6B63\u6587\uFF1B\u9875\u9762 ID \u53EF\u7531 global_search \u83B7\u53D6\u3002",inputSchema:_i,outputSchema:Ii},(r,i)=>n.run(({client:s,signal:o})=>bi(s,r,o),i,"inspect_page_insight")),t("generate_page_insight")&&e("generate_page_insight",{title:"Generate Page Insight",description:"\u4E3A\u5DF2\u5F00\u542F\u667A\u80FD\u6D1E\u5BDF\u7684\u666E\u901A\u4EEA\u8868\u677F\u751F\u6210\u5B8C\u6574\u975E\u6D41\u5F0F\u6D1E\u5BDF\u3002\u8C03\u7528\u524D\u901A\u5E38\u5148\u7528 inspect_page_insight \u9009\u62E9 analysis_id/analysis_name\uFF1B\u7B5B\u9009\u5668 ID \u53EF\u4ECE get_page_info \u83B7\u53D6\u3002",inputSchema:hi,outputSchema:Yt},(r,i)=>n.run(({client:s,signal:o})=>Ti(s,r,o),i,"generate_page_insight")),t("generate_card_insight")&&e("generate_card_insight",{title:"Generate Card Insight",description:"\u4E3A\u9875\u9762\u4E2D\u7684 INTELLIGENT_INSIGHT \u5361\u7247\u751F\u6210\u5B8C\u6574\u975E\u6D41\u5F0F\u6D1E\u5BDF\u3002\u5FC5\u987B\u540C\u65F6\u63D0\u4F9B\u5361\u7247\u6240\u5C5E page_id\uFF1B\u5361\u7247\u548C\u7B5B\u9009\u5668 ID \u53EF\u4ECE get_page_info \u83B7\u53D6\u3002",inputSchema:yi,outputSchema:Yt},(r,i)=>n.run(({client:s,signal:o})=>wi(s,r,o),i,"generate_card_insight")),t("list_dashboard_agents")&&e("list_dashboard_agents",{title:"List Dashboard Agents",description:"\u67E5\u8BE2\u5F53\u524D\u7528\u6237\u53EF\u8BBF\u95EE\u7684 Dashboard Agent \u5217\u8868\uFF0C\u8FD4\u56DE agent_id \u4F9B\u8BE6\u60C5\u6216\u63D0\u95EE\u5DE5\u5177\u4F7F\u7528\u3002",inputSchema:ni},(r,i)=>n.run(({client:s,signal:o})=>ci(s,r,o),i,"list_dashboard_agents")),t("get_dashboard_agent")&&e("get_dashboard_agent",{title:"Get Dashboard Agent",description:"\u6309 agent_id \u83B7\u53D6 Dashboard Agent \u8BE6\u60C5\u548C\u4E13\u5BB6\u5217\u8868\uFF1Bexpert_id \u53EF\u4EA4\u7ED9 ask_dashboard_agent\u3002",inputSchema:ri},(r,i)=>n.run(({client:s,signal:o})=>ui(s,r,o),i,"get_dashboard_agent")),t("ask_dashboard_agent")&&e("ask_dashboard_agent",{title:"Ask Dashboard Agent",description:"\u5411 Dashboard Agent \u63D0\u95EE\uFF0C\u5E76\u5728\u4E00\u6B21\u975E\u6D41\u5F0F\u8C03\u7528\u5185\u521B\u5EFA\u6D88\u606F\u3001\u8F6E\u8BE2\u4EFB\u52A1\u3001\u8BFB\u53D6\u6700\u7EC8\u56DE\u7B54\u3002\u4F20 session_id \u53EF\u7EE7\u7EED\u8FFD\u95EE\uFF0C\u4F20 expert_id \u53EF\u6307\u5B9A\u4E13\u5BB6\uFF1B\u6700\u957F\u7B49\u5F85\u540C\u65F6\u53D7 BI_REQUEST_TIMEOUT_MS \u9650\u5236\u3002",inputSchema:oi,outputSchema:ai},(r,i)=>n.run(({client:s,signal:o})=>pi(s,r,o),i,"ask_dashboard_agent",{abortRecoveryGraceMs:yc})),t("list_dashboard_agent_sessions")&&e("list_dashboard_agent_sessions",{title:"List Dashboard Agent Sessions",description:"\u6309 agent_id \u67E5\u8BE2 Dashboard Agent \u7684\u5386\u53F2\u4F1A\u8BDD\uFF0C\u8FD4\u56DE session_id \u4F9B\u67E5\u770B\u6D88\u606F\u6216\u7EE7\u7EED\u8FFD\u95EE\u3002",inputSchema:ii},(r,i)=>n.run(({client:s,signal:o})=>di(s,r,o),i,"list_dashboard_agent_sessions")),t("list_dashboard_agent_messages")&&e("list_dashboard_agent_messages",{title:"List Dashboard Agent Messages",description:"\u6309 session_id \u67E5\u8BE2 Dashboard Agent \u4F1A\u8BDD\u4E2D\u7684\u5386\u53F2\u95EE\u9898\u3001\u56DE\u7B54\u548C\u4E13\u5BB6\u4FE1\u606F\u3002",inputSchema:si},(r,i)=>n.run(({client:s,signal:o})=>li(s,r,o),i,"list_dashboard_agent_messages"))}import{z as m}from"zod";var an=m.enum(["asc","desc"]),Ic=m.enum(["EQ","NE","IN","NI","GT","GE","LT","LE","BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN","IS_NULL","NOT_NULL","CONTAINS","NOT_CONTAINS","STARTSWITH","NOT_STARTSWITH","ENDSWITH","NOT_ENDSWITH","STARTSWITH_USER_PROPERTIES","STARTSWITH_GLOBAL_PARAMS"]),Oi=new Set(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN"]),nn=new Set(["IS_NULL","NOT_NULL"]),Ui=m.object({field:m.string().min(1).describe("\u7B5B\u9009\u5B57\u6BB5\u540D\u79F0\u6216\u5B57\u6BB5 ID\u3002"),operator:Ic.describe("BI \u539F\u751F\u7B5B\u9009\u64CD\u4F5C\u7B26\uFF0C\u4F8B\u5982 GE/LE/NI/CONTAINS\u3002\u533A\u95F4\u64CD\u4F5C\u7B26\u9700\u8981\u4F20\u4E24\u4E2A\u503C\u3002"),values:m.array(m.union([m.string(),m.number(),m.boolean()])).optional().describe("\u7B5B\u9009\u503C\u3002IS_NULL/NOT_NULL \u4E0D\u9700\u8981\u4F20\u503C\u3002"),fd_id:m.string().min(1).optional().describe("\u5DF2\u77E5\u5B57\u6BB5 ID \u65F6\u53EF\u76F4\u63A5\u6307\u5B9A\u3002")}).superRefine((e,t)=>{let n=e.values?.length??0;nn.has(e.operator)&&n>0&&t.addIssue({code:m.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u4E0D\u63A5\u53D7\u7B5B\u9009\u503C\u3002`}),Oi.has(e.operator)&&n!==2&&t.addIssue({code:m.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u9700\u8981\u6070\u597D 2 \u4E2A\u503C\u3002`}),!Oi.has(e.operator)&&!nn.has(e.operator)&&n<1&&t.addIssue({code:m.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u81F3\u5C11\u9700\u8981 1 \u4E2A\u503C\u3002`})}),bc=m.object({field:m.string().min(1).describe("\u6392\u5E8F\u5B57\u6BB5\u540D\u79F0\u6216\u5B57\u6BB5 ID\u3002"),direction:an.describe("\u6392\u5E8F\u65B9\u5411\u3002")}),Tc=m.object({type:m.enum(["compare","xtd","last","recent","percentage","rank_top"]),compare:m.enum(["yoy","mom","qoq","wow","dod"]).optional(),compare_value:m.enum(["value","rate","rawdata"]).optional(),xtd:m.enum(["ytd","qtd","mtd","wtd","dtd"]).optional(),recent:m.string().regex(/^[1-9]\d*[dwmqy]$/).optional(),recent_base:m.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),percentage_dim:m.string().min(1).optional(),rank_top:m.number().int().positive().optional(),rank_order:an.optional(),rank_dim:m.string().min(1).optional()}),Ni={keyword:m.string().min(1).optional().describe("\u6307\u6807\u540D\u79F0\u5173\u952E\u8BCD\u3002"),project_id:m.string().min(1).optional().describe("\u6307\u6807\u4E3B\u9898 ID\uFF1B\u4E0D\u4F20\u5219\u8DE8\u53EF\u8BBF\u95EE\u4E3B\u9898\u641C\u7D22\u3002"),dir_id:m.string().min(1).optional().describe("\u76EE\u5F55 ID\u3002"),status:m.string().min(1).optional().describe("\u4E0A\u7EBF\u72B6\u6001\uFF0C\u4F20\u6307\u6807\u5E73\u53F0\u7684\u72B6\u6001\u4EE3\u7801\uFF1APUBLISHED\uFF08\u5DF2\u4E0A\u7EBF\uFF09\u3001UNPUBLISHED\uFF08\u672A\u4E0A\u7EBF\uFF09\u3002"),sub_types:m.array(m.string().min(1)).optional().describe("\u6307\u6807\u7C7B\u578B\u4EE3\u7801\u5217\u8868\uFF0C\u4F8B\u5982 ATOMIC\uFF08\u539F\u5B50\uFF09\u3001DERIVED\uFF08\u884D\u751F\uFF09\u3001COMPOSITE\uFF08\u590D\u5408\uFF09\u3002"),order_by:m.enum(["utimeDesc","utimeAsc"]).optional().describe("\u6392\u5E8F\u65B9\u5F0F\uFF1AutimeDesc \u6309\u66F4\u65B0\u65F6\u95F4\u5012\u5E8F\uFF0CutimeAsc \u6309\u66F4\u65B0\u65F6\u95F4\u6B63\u5E8F\u3002"),limit:m.number().int().positive().max(200).optional().default(20).describe("\u6700\u591A\u8FD4\u56DE\u6761\u6570\u3002")},Li={project_id:m.string().min(1).optional().describe("\u6307\u6807\u4E3B\u9898 ID\u3002"),keyword:m.string().min(1).optional().describe("\u540D\u79F0\u5173\u952E\u8BCD\uFF0C\u53EF\u5339\u914D\u4E3B\u9898\u3001\u76EE\u5F55\u6216\u6307\u6807\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},qi={metric_id:m.string().min(1).describe("\u6307\u6807 ID\u3002"),brief:m.boolean().optional().describe("\u662F\u5426\u53EA\u8FD4\u56DE\u8BE6\u60C5\uFF0C\u4E0D\u8865\u5145\u8840\u7F18\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u8BE6\u60C5\u3002")},Gi={metric_id:m.string().min(1).describe("\u6307\u6807 ID\u3002"),dimensions:m.array(m.string().min(1)).optional().describe("\u6309\u540D\u79F0\u6216\u5B57\u6BB5 ID \u6307\u5B9A\u67E5\u8BE2\u7EF4\u5EA6\u3002"),filters:m.array(Ui).optional().describe("\u7B5B\u9009\u6761\u4EF6\u3002"),combine_type:m.enum(["AND","OR"]).optional().default("AND").describe("\u591A\u4E2A\u7B5B\u9009\u6761\u4EF6\u7684\u7EC4\u5408\u65B9\u5F0F\u3002"),sort:m.array(bc).optional().describe("\u6392\u5E8F\u5B57\u6BB5\u3002"),columns:m.array(m.string().min(1)).optional().describe("\u7ED3\u679C\u5217\u88C1\u526A\u3002"),limit:m.number().int().positive().max(1e3).optional().default(100).describe("\u6700\u591A\u8FD4\u56DE\u884C\u6570\u3002"),advanced_calc:Tc.optional().describe("\u9AD8\u7EA7\u8BA1\u7B97\uFF0C\u53EA\u4F7F\u7528\u6307\u6807\u6570\u636E\u67E5\u8BE2\u63A5\u53E3\u8868\u8FBE\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},Ji={keyword:m.string().min(1).optional().describe("\u6307\u6807\u6811\u540D\u79F0\u5173\u952E\u8BCD\u3002"),project_id:m.string().min(1).optional().describe("\u6839\u6307\u6807\u6240\u5C5E\u4E3B\u9898 ID\u3002"),parent_dir_id:m.string().min(1).optional().describe("\u6307\u6807\u6811\u76EE\u5F55 ID\u3002"),order_by:m.enum(["utimeDesc","utimeAsc"]).optional().default("utimeDesc").describe("\u6392\u5E8F\u65B9\u5F0F\uFF1AutimeDesc \u6309\u66F4\u65B0\u65F6\u95F4\u5012\u5E8F\uFF08\u9ED8\u8BA4\uFF09\uFF0CutimeAsc \u6309\u66F4\u65B0\u65F6\u95F4\u6B63\u5E8F\u3002"),limit:m.number().int().positive().max(200).optional().default(20).describe("\u6700\u591A\u8FD4\u56DE\u6761\u6570\u3002")},Hi={metric_tree_id:m.string().min(1).describe("\u6307\u6807\u6811 ID\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u8BE6\u60C5\u3002")},$i={metric_tree_id:m.string().min(1).describe("\u6307\u6807\u6811 ID\u3002"),target:m.enum(["metric","dimension","scan"]).describe("\u5F52\u56E0\u7C7B\u578B\uFF1A\u6307\u6807\u62C6\u89E3\u3001\u5355\u7EF4\u62C6\u89E3\u6216\u5168\u7EF4\u626B\u63CF\u3002"),dimension:m.string().min(1).optional().describe("target=dimension \u65F6\u6309\u7EF4\u5EA6\u540D\u79F0\u6307\u5B9A\u3002"),dimension_fd_id:m.string().min(1).optional().describe("target=dimension \u65F6\u6309\u5B57\u6BB5 ID \u6307\u5B9A\u3002"),scan_dimensions:m.array(m.string().min(1)).optional().describe("target=scan \u65F6\u6307\u5B9A\u626B\u63CF\u7EF4\u5EA6\u540D\u79F0\u3002"),exclude_dimensions:m.array(m.string().min(1)).optional().describe("target=scan \u65F6\u6392\u9664\u7EF4\u5EA6\u540D\u79F0\u3002"),period:m.string().min(1).optional().describe("\u5F53\u524D\u671F\uFF0C\u914D\u5408 last_period \u8986\u76D6\u9ED8\u8BA4\u65F6\u95F4\u5BF9\u6BD4\u3002"),last_period:m.string().min(1).optional().describe("\u5BF9\u6BD4\u671F\uFF0C\u914D\u5408 period \u8986\u76D6\u9ED8\u8BA4\u65F6\u95F4\u5BF9\u6BD4\u3002"),time_comparison_json:m.record(m.string(),m.unknown()).optional().describe("\u5B8C\u6574\u65F6\u95F4\u5BF9\u6BD4\u914D\u7F6E\u8986\u76D6\u3002"),filters:m.array(Ui).optional().describe("\u5F52\u56E0\u7B5B\u9009\u6761\u4EF6\u3002"),limit:m.number().int().positive().max(200).optional().default(20).describe("metric/dimension \u8FD4\u56DE\u884C\u6570\u3002"),group_limit:m.number().int().positive().max(50).optional().default(5).describe("scan \u6BCF\u4E2A\u7EF4\u5EA6\u8FD4\u56DE\u884C\u6570\u3002"),sort:an.optional().default("desc").describe("\u6309\u8D21\u732E\u503C\u6392\u5E8F\u65B9\u5411\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},ne={summary:m.unknown().optional(),items:m.array(m.unknown()).optional(),tree:m.unknown().optional(),detail:m.unknown().optional(),columns:m.array(m.unknown()).optional(),rows:m.array(m.unknown()).optional(),raw:m.unknown().optional(),diagnostic:m.unknown().optional(),status:m.string().optional()};async function Fi(e,t,n){let r=new V(e,t);try{let i=n.project_id?[n.project_id]:await wc(r),s=[];for(let a of i){let c=await r.searchMetrics({projectId:a,dirId:n.dir_id,keyword:n.keyword,status:n.status,subTypes:n.sub_types,orderBy:n.order_by});if(s.push(...Cc(c)),s.length>=n.limit)break}let o=Qc(s.map(rn),"metric_id").slice(0,n.limit);return E({summary:{keyword:n.keyword,project_id:n.project_id,count:o.length,searched_project_count:i.length,truncated:o.length<s.length},items:o})}catch(i){return ae(i,"search_metrics")}}async function zi(e,t,n){let r=new V(e,t);try{try{let i=await r.listMetricFullTree({projectId:n.project_id,keyword:n.keyword});return E({summary:{source:"full-tree"},tree:Ec(i),raw:n.raw?i:void 0})}catch(i){let s=n.project_id?[{id:n.project_id}]:await Xi(r),o=[];for(let a of s){let c=p(a.id);if(!c)continue;let u=await r.listMetricDirectoryTree(c);o.push({id:c,name:p(a.name)||c,type:"project",project_id:c,children:Rc(u,c)})}return E({summary:{source:"directory-fallback",fallback_reason:i instanceof Error?i.message:String(i)},tree:o})}}catch(i){return ae(i,"list_metric_catalog")}}async function Vi(e,t,n){let r=new V(e,t);try{let i=await r.getMetricDetail(n.metric_id),s=Bc(i),o,a;if(!n.brief){let c=p(i.uniformResourceType)||"METRIC_PLATFORM_METRIC";try{o=Ac(await r.getMetricLineage(n.metric_id,c))}catch(u){a=u instanceof re?u.detail:String(u)}}return E({detail:{...s,lineage:o,lineage_error:a},raw:n.raw?i:void 0})}catch(i){return ae(i,"get_metric_detail")}}async function Qi(e,t,n){let r=new V(e,t);try{let i=await r.getMetricDetail(n.metric_id);if(!n.advanced_calc){let a=Pi(i,n);if("unsupported"in a)return H("query_metric_data",a.unsupported);let c=async l=>{let f=await r.getCardEditSession(a.cardId),y=p(f.sessionId);if(!y)throw new Error("\u6307\u6807\u5361\u7247\u9884\u89C8\u4F1A\u8BDD\u54CD\u5E94\u7F3A\u5C11 sessionId\u3002");return a.dimensions.length&&await Oc(r,a.cardId,y,a.dimensions),{raw:await r.queryCardEditData(a.cardId,y,l),sessionId:y}};if(n.combine_type==="OR"&&(n.filters?.length??0)>1){let l=[],f=[];for(let y of n.filters??[]){let h=Pi(i,{...n,combine_type:"AND",filters:[y]});if("unsupported"in h)return H("query_metric_data",h.unsupported);let{raw:T}=await c(h.body);f.push(T),l.push(...xi(T))}return pt(i,l,n,{mode:"metric_card_preview_data",card_id:a.cardId,card_kind:a.cardKind,combine_type:"OR",query_count:f.length},n.raw?f:void 0)}let{raw:u,sessionId:d}=await c(a.body);return pt(i,xi(u),n,{mode:"metric_card_preview_data",card_id:a.cardId,card_kind:a.cardKind,session_id:d,request_body:a.body},n.raw?u:void 0)}let s=ki(i,n);if("unsupported"in s)return H("query_metric_data",s.unsupported);if(n.combine_type==="OR"&&(n.filters?.length??0)>1){let a=[],c=[];for(let u of n.filters??[]){let d=ki(i,{...n,combine_type:"AND",filters:[u]});if("unsupported"in d)return H("query_metric_data",d.unsupported);let l=await r.queryMetricData(d.input);c.push(l),a.push(...qe(l))}return pt(i,a,n,{mode:"metric_data_v2",combine_type:"OR",query_count:c.length},n.raw?c:void 0)}let o=await r.queryMetricData(s.input);return pt(i,qe(o),n,{mode:"metric_data_v2",request_body:s.input},n.raw?o:void 0)}catch(i){return Vc(i)?H("query_metric_data",{capability:"metric_data_v2_unavailable",message:"\u5F53\u524D BI \u73AF\u5883\u672A\u63D0\u4F9B /api/metric-platform/metric-data/v2\uFF0C\u65E0\u6CD5\u6267\u884C\u9AD8\u7EA7\u8BA1\u7B97\u67E5\u8BE2\u3002",diagnostic:i.detail}):ae(i,"query_metric_data")}}async function Ki(e,t,n){let r=new V(e,t);try{let i=await r.searchMetricTrees({keyword:n.keyword,projectId:n.project_id,parentDirId:n.parent_dir_id,orderBy:n.order_by}),s=Sc(i).map(rs).slice(0,n.limit);return E({summary:{keyword:n.keyword,count:s.length},items:s})}catch(i){return ae(i,"search_metric_trees")}}async function Wi(e,t,n){let r=new V(e,t);try{let i=await r.getMetricTreeDetail(n.metric_tree_id);return E({detail:jc(i),raw:n.raw?i:void 0})}catch(i){return ae(i,"get_metric_tree_detail")}}async function Yi(e,t,n){let r=new V(e,t);try{if(n.target==="dimension"&&!n.dimension&&!n.dimension_fd_id)return H("query_metric_tree_attribution",{capability:"dimension_attribution_requires_dimension",message:"target=dimension \u65F6\u5FC5\u987B\u6307\u5B9A dimension \u6216 dimension_fd_id\u3002"});let i=await r.getMetricTreeDetail(n.metric_tree_id),s=p(i.metricId);if(!s)return H("query_metric_tree_attribution",{capability:"missing_root_metric",message:"\u6307\u6807\u6811\u8BE6\u60C5\u7F3A\u5C11\u6839\u6307\u6807 ID\uFF0C\u65E0\u6CD5\u6267\u884C\u5F52\u56E0\u3002"});let o=await r.getMetricDetail(s),a=Ge(o),c=cn(n.filters??[],a);if("unsupported"in c)return H("query_metric_tree_attribution",c.unsupported);let u=c.filters,d=Uc(i,n);if("unsupported"in d)return H("query_metric_tree_attribution",d.unsupported);if(n.target==="metric"){let h=Nc(i,d.value,u),T=await r.queryMetricTreeDecompose(n.metric_tree_id,h);return tn(i,"metric",Lc(T),n,n.raw?T:void 0)}if(n.target==="dimension"){let h=Se(a,n.dimension,n.dimension_fd_id);if(!h)return H("query_metric_tree_attribution",{capability:"unknown_dimension",message:`\u7EF4\u5EA6\u4E0D\u5B58\u5728\u6216\u4E0D\u9002\u7528\u4E8E\u6839\u6307\u6807\uFF1A${n.dimension??n.dimension_fd_id}`});let T=vi(i,h,d.value,u,n.limit,n.sort),x=await r.queryMetricTreeDrill(n.metric_tree_id,T);return tn(i,"dimension",Mi(x,p(h.name)),n,n.raw?x:void 0)}let l=qc(i,a,n.scan_dimensions,n.exclude_dimensions);if(!l.length)return H("query_metric_tree_attribution",{capability:"no_scan_dimensions",message:"\u6CA1\u6709\u53EF\u626B\u63CF\u7EF4\u5EA6\uFF0C\u8BF7\u6307\u5B9A scan_dimensions \u6216\u68C0\u67E5\u6307\u6807\u6811\u7EF4\u5EA6\u62C6\u89E3\u914D\u7F6E\u3002"});let f=[],y=[];for(let h of l){let T=vi(i,h,d.value,u,n.group_limit,n.sort),x=await r.queryMetricTreeDrill(n.metric_tree_id,T);y.push({dimension:p(h.name),raw:x}),f.push(...Mi(x,p(h.name)).slice(0,n.group_limit))}return tn(i,"scan",f,n,n.raw?y:void 0,{scanned_dimensions:l.map(h=>p(h.name))})}catch(i){return ae(i,"query_metric_tree_attribution")}}async function wc(e){return(await Xi(e)).map(t=>p(t.id)).filter(Boolean)}async function Xi(e){return O(await e.listProjects()).map(b).filter(Boolean)}function Cc(e){let t=b(e);return O(t.contents??t.items??t.data)}function Sc(e){let t=b(e);return O(t.data??t.contents??t.items)}function rn(e){return _({metric_id:p(e.id),name:p(e.name),project_id:p(e.projectId),dir_id:B(e.parentDirId,e.dirId),status:p(e.status),sub_type:p(e.subType),description:p(e.desc),dataset:os(e.dsInfo),statistics:e.statisticsData,creator:ft(e.creator),business_owner:ft(e.businessOwner),updated_at:p(e.utime),raw:e})}function Ec(e){return O(e).map(t=>Zi(t,void 0))}function Zi(e,t){let n=!!e.isMetric,r=p(e.id),i=!t&&!n?r:t;return _({id:r,name:p(e.name),type:n?"metric":t?"directory":"project",project_id:i,dir_id:!n&&t?r:void 0,metric_id:n?r:void 0,parent_id:p(e.parentId),children:O(e.children).map(s=>Zi(s,i))})}function Rc(e,t){let n=b(e);return p(n.id)?[sn(n,t)]:O(n.contents??n.children).map(r=>sn(r,t))}function sn(e,t){return _({id:p(e.id),name:p(e.name),type:"directory",project_id:t,dir_id:p(e.id),parent_id:B(e.parentDirId,e.parentId),can_use:M(e.canUse),can_manage:M(e.canManage),metric_count:ji(e.metricCnt),all_metric_count:ji(e.allMetricCnt),children:O(e.contents??e.children).map(n=>sn(n,t))})}function Bc(e){return _({metric_id:p(e.id),name:p(e.name),english_name:p(e.engName),status:p(e.status),sub_type:p(e.subType),description:p(e.desc),project_id:p(e.projectId),project_name:p(e.projectName),dir_id:B(e.parentDirId,e.dirId),dir_path:as(e.dirPath),dataset:os(e.dsInfo),source_fields:O(e.fdInfos).map(mt),aggregation:B(e.aggrType,e.aggregationType),formula:B(e.formula,e.expression),derive_setting:e.deriveSetting,format:e.format,applicable_dimensions:Ge(e),time_dimension:b(e.timeDim)?mt(b(e.timeDim)):void 0,business_attributes:O(e.bizAttrs).map(zc),business_owner:ft(e.businessOwner),creator:ft(e.creator),referenced_metrics:O(e.referencedMetrics).map(rn),base_metric:b(e.baseMetric)?rn(b(e.baseMetric)):void 0,linked_metric_id:p(e.linkMetricId),statistics:e.statisticsData,permissions:_({can_use:M(e.canUse),can_manage:M(e.canManage)}),created_at:p(e.ctime),updated_at:p(e.utime),has_draft:M(e.hasDraft)})}function Ac(e){let t=b(e);return _({current:t.crtNode,upstream:t.backwardAtlas,downstream:t.forwardAtlas})}function ki(e,t){let n=p(e.name),r=p(e.projectId);if(!n||!r)return{unsupported:{capability:"metric_detail_incomplete",message:"\u6307\u6807\u8BE6\u60C5\u7F3A\u5C11 name \u6216 projectId\u3002"}};let i=Ge(e),s=[...i,...is(e)],o=[];for(let d of t.dimensions??[]){let l=Se(i,d);if(!l)return{unsupported:{capability:"unsupported_dimension",parameter:d,supported_dimensions:i}};o.push(Gc(l))}let a=Pc(e,i,t.advanced_calc);if("unsupported"in a)return{unsupported:a.unsupported};let c=cn(t.filters??[],s);if("unsupported"in c)return{unsupported:c.unsupported};let u=es(t.sort??[],s);return"unsupported"in u?{unsupported:u.unsupported}:{input:{projectId:r,metricId:t.metric_id,metricName:n,metricItems:[_({name:n,alias:xc(n,t.advanced_calc),advCalc:a.value})],dimensions:o,filters:c.filters,sorting:u.sorting,limit:t.limit}}}function Pi(e,t){let n=b(e.metricChartConfig),r=p(n.metricChartCdId),i=p(n.metricValueCdId),s=r||i;if(!s)return{unsupported:{capability:"missing_metric_card",message:"\u6307\u6807\u8BE6\u60C5\u7F3A\u5C11 metricChartConfig.metricChartCdId \u6216 metricValueCdId\uFF0C\u65E0\u6CD5\u8D70\u53EA\u8BFB\u5361\u7247\u53D6\u6570\u3002"}};let o=[...Ge(e),...is(e)],a=[];for(let f of t.dimensions??[]){let y=Se(o,f);if(!y||p(y.meta_type).toUpperCase()==="METRIC")return{unsupported:{capability:"unsupported_dimension",parameter:f,supported_dimensions:Ge(e)}};a.push(Jc(y))}let c=cn(t.filters??[],o);if("unsupported"in c)return{unsupported:c.unsupported};let u=c.filters,d=es(t.sort??[],o);if("unsupported"in d)return{unsupported:d.unsupported};let l=d.sorting;return{cardId:s,cardKind:r?"chart":"value",dimensions:a,body:_({limit:t.limit,filters:u.length?u:void 0,combineType:t.filters?.length?t.combine_type:void 0,sorting:l.length?l:void 0})}}async function Oc(e,t,n,r){let i=cs(await e.getCardEditMeta(t))??{},s=kc(i);s.row=r,s.sorting=[],await e.modifyCardEditMeta(t,n,i)}function kc(e){let t=b(e.content),n=b(t.meta),r=b(n.chartMain),i=b(r.zoneData);if(!Object.keys(i).length)throw new Error("\u6307\u6807\u5361\u7247\u7F16\u8F91\u914D\u7F6E\u7F3A\u5C11 content.meta.chartMain.zoneData\u3002");return t.meta=n,n.chartMain=r,r.zoneData=i,e.content=t,i}function Pc(e,t,n){if(!n)return{value:void 0};let r=b(e.timeDim),i=p(r?.fdId);if(["compare","last"].includes(n.type)&&!i)return{unsupported:{capability:"advanced_calc_requires_time_dimension",parameter:n.type}};if(n.type==="compare"){let a=n.compare??"yoy",c={yoy:["YEAR","YEAR"],mom:["MONTH","MONTH"],qoq:["QUARTER","QUARTER"],wow:["WEEK","WEEK"],dod:["DAY","DAY"]},[u,d]=c[a];return{value:{advType:"COMPARATIVE",advValue:{advType:"COMPARATIVE",dateFdId:i,valueType:(n.compare_value??"value").toUpperCase(),offset:1,offsetType:u,granularity:d}}}}if(n.type==="xtd")return{value:{advType:"XTD",advValue:{advType:"XTD",granularity:{ytd:"YEAR",qtd:"QUARTER",mtd:"MONTH",wtd:"WEEK",dtd:"DAY"}[n.xtd??"ytd"],includeCurrentValue:!0}}};if(n.type==="last")return{value:{advType:"LAST",advValue:{advType:"LAST",dateFdId:i}}};if(n.type==="recent"){let a=Dc(n.recent??"7d");return a?{value:{advType:"RECENT_X",advValue:{advType:"RECENT_X",granularity:a.granularity,baselineOffset:[a.count-1,0],includeCurrentValue:!0,baseline:n.recent_base}}}:{unsupported:{capability:"invalid_recent_spec",parameter:n.recent}}}if(n.type==="percentage"){let a=n.percentage_dim?Se(t,n.percentage_dim):void 0;return n.percentage_dim&&!a?{unsupported:{capability:"unknown_percentage_dimension",parameter:n.percentage_dim}}:{value:{advType:"LEVEL_PERCENTAGE",advValue:_({advType:"LEVEL_PERCENTAGE",auto:!a,tfdId:p(a?.fd_id)})}}}let o=n.rank_dim?Se(t,n.rank_dim):void 0;return n.rank_dim&&!o?{unsupported:{capability:"unknown_rank_dimension",parameter:n.rank_dim}}:{value:{advType:"RANK",advValue:_({advType:"RANK",calDimension:"FIELD",rankType:"RANK",sorting:(n.rank_order??"desc").toUpperCase(),tfdId:p(o?.fd_id),topN:{topType:"CUSTOM_NUMBER",count:n.rank_top??10,calculationType:"COUNT"}})}}}function xc(e,t){return t?t.type==="compare"?`${e}_${t.compare??"yoy"}`:t.type==="xtd"?`${e}_${t.xtd??"ytd"}`:t.type==="recent"?`${e}_recent_${t.recent??"7d"}`:`${e}_${t.type}`:e}function Dc(e){let t=e.match(/^([1-9]\d*)([dwmqy])$/);if(!t)return;let n={d:"DAY",w:"WEEK",m:"MONTH",q:"QUARTER",y:"YEAR"};return{count:Number(t[1]),granularity:n[t[2]]}}function cn(e,t){let n=[];for(let r of e){let i=ts(t,r.field,r.fd_id,"filter");if("unsupported"in i)return{unsupported:i.unsupported};n.push(_({name:i.field.name,fdId:i.field.fdId,fdType:i.field.fdType,metaType:i.field.metaType,filterType:r.operator,filterValue:vc(r)}))}return{filters:n}}function vc(e){return nn.has(e.operator)?[]:e.values??[]}function es(e,t){let n=[];for(let r of e){let i=ts(t,r.field,void 0,"sort");if("unsupported"in i)return{unsupported:i.unsupported};n.push(_({name:i.field.name,ordering:r.direction,key:i.field.fdId,fdId:i.field.fdId,fdType:i.field.fdType,metaType:i.field.metaType}))}return{sorting:n}}function ts(e,t,n,r){let i=Se(e,t,n),s=r==="filter"?"unsupported_filter_field":"unsupported_sort_field",o=r==="filter"?"\u7B5B\u9009":"\u6392\u5E8F";if(!i)return{unsupported:{capability:s,parameter:t,message:`${o}\u5B57\u6BB5\u65E0\u6CD5\u4ECE\u5F53\u524D\u67E5\u8BE2\u4E0A\u4E0B\u6587\u89E3\u6790\uFF1A${t}`,supported_fields:e.map(f=>_({name:p(f.name),fd_id:p(f.fd_id),meta_type:p(f.meta_type)}))}};let a=p(i.name),c=p(i.fd_id),u=p(i.fd_type),d=p(i.meta_type).toUpperCase(),l=[a?void 0:"name",c?void 0:"fdId",u?void 0:"fdType",d?void 0:"metaType"].filter(f=>!!f);return l.length?{unsupported:{capability:s,parameter:t,message:`${o}\u5B57\u6BB5\u7F3A\u5C11\u5FC5\u8981 BI \u5143\u4FE1\u606F\uFF1A${t}`,missing_metadata:l}}:{field:{name:a,fdId:c,fdType:u,metaType:d}}}function pt(e,t,n,r,i){let s=Hc(t.slice(0,n.limit),n.columns);return E({summary:{metric_id:n.metric_id,metric_name:p(e.name),row_count:s.length,truncated:t.length>s.length},columns:ss(s),rows:s,diagnostic:r,raw:i})}function qe(e){let t=b(e),n=b(t.data)??t,r=O(n.values??n.rows??t.values??t.rows);if(r.length)return r;let i=O(n.columns??t.columns).map(o=>p(b(o)?.name??o)).filter(Boolean),s=O(n.preview??n.contents);return i.length?s.map(o=>{let a=Array.isArray(o)?o:[];return Object.fromEntries(i.map((c,u)=>[c,a[u]]))}):s}function xi(e){let t=b(e),n=b(t.data)??t,r=b(n.chartMain??t.chartMain??b(b(t.content).data).chartMain);if(!Object.keys(r).length)return qe(e);let i=b(r.row),s=b(r.column),o=O(i.fields),a=oe(i.data),c=oe(r.data),u=Mc(s),d=o.map(on).filter(Boolean),l=$c([...d,...u]),f=Math.max(a.length,c.length),y=[];for(let h=0;h<f;h+=1){let T=[];T.push(...oe(a[h]).map(Di)),T.push(...oe(c[h]).map(Di)),T.length&&y.push(Object.fromEntries(T.map((x,N)=>[l[N]??`column_${N+1}`,x])))}return y}function Mc(e){let n=oe(e.data).map((r,i)=>{let s=oe(r).map(ns).filter(Boolean).join("/");return s||on(O(e.fields)[i])||`metric_${i+1}`}).filter(Boolean);return n.length?n:O(e.fields).map(on).filter(Boolean)}function on(e){return B(e.alias,e.title,e.originTitle,e.name,e.fdId,e.id)??""}function ns(e){let t=b(e);return Object.keys(t).length?B(t.title,t.name,t.originTitle,t.alias,t.v,t.value)??"":p(e)}function Di(e){let t=b(e);return Object.keys(t).length?"v"in t?t.v:"value"in t?t.value:ns(e):e}function rs(e){return _({metric_tree_id:p(e.metricTreeId),name:p(e.metricTreeName),root_metric_id:p(e.metricId),root_metric_name:p(e.metricName),project_id:p(e.projectId),project_name:p(e.projectName),parent_dir_id:p(e.parentDirId),dir_path:as(e.dirPath),creator_id:p(e.creatorId),creator_name:p(e.creatorName),can_use:M(e.canUse),can_manage:M(e.canManage),updated_at:p(e.utime)})}function jc(e){let t=b(e.config)??{};return _({...rs(e),dom_id:p(e.domId),created_at:p(e.ctime),time_comparison:t.timeComparisonSetting,comparison_enabled:M(t.comparisonEnabled),contribution_calc_enabled:M(t.contributionCalcEnabled),dimension_decomposition:t.dimensionDecompositionContent,metric_decomposition:t.metricDecompositionContent,permissions:_({can_use:M(e.canUse),can_manage:M(e.canManage)})})}function Uc(e,t){let n=b(e.config)??{},r=t.time_comparison_json??cs(b(n.timeComparisonSetting)),i=M(n.comparisonEnabled)??!!r,s=M(n.contributionCalcEnabled)??!1;if(t.period||t.last_period){if(!t.period||!t.last_period)return{unsupported:{capability:"period_requires_last_period",message:"period \u548C last_period \u9700\u8981\u540C\u65F6\u6307\u5B9A\u3002"}};r=r??{};let o=b(r.advValue)??{};r.advValue=o,o.window={period:[t.period],withMacro:!1};let a=Fc(t.period,t.last_period);if(!a)return{unsupported:{capability:"unsupported_period_granularity",message:"\u76EE\u524D\u4EC5\u652F\u6301 YYYY-MM-DD \u683C\u5F0F\u7684 period/last_period\u3002"}};Object.assign(o,a,{mode:"NORMAL"}),r.advType="COMPARATIVE",i=!0}return{value:{setting:r,comparisonEnabled:i,contributionEnabled:s}}}function Nc(e,t,n){let r=b(e.config)??{},i=b(r.metricDecompositionContent)??{};return _({timeComparisonSetting:t.setting,comparisonEnabled:t.comparisonEnabled,contributionCalcEnabled:!1,metricDecomposeInfo:{metricRelationTree:i.metricRelationTree,filters:n}})}function vi(e,t,n,r,i,s){return _({timeComparisonSetting:n.setting,comparisonEnabled:n.comparisonEnabled,contributionCalcEnabled:n.contributionEnabled,drillInfo:{dimensionFdId:p(t.fd_id),drillFilters:r,nodeNum:i,orderBy:s==="asc"?"contributionAsc":"contributionDesc"}})}function Lc(e){return qe(e).map(t=>_({child_metric:p(b(t.metricInfo)?.name),child_metric_id:p(b(t.metricInfo)?.metricId),current_value:t.currentValue,comparison_value:t.comparisonValue,change_value:t.changeValue,change_rate:t.changeRate,contribution_value:t.contributionValue,contribution_rate:t.contributionRate}))}function Mi(e,t){return qe(e).map((n,r)=>_({dimension:t,dimension_value:Array.isArray(n.dimensionValue)?n.dimensionValue.join("/"):n.dimensionValue,current_value:n.currentValue,comparison_value:n.comparisonValue,change_value:n.changeValue,change_rate:n.changeRate,contribution_value:n.contributionValue,contribution_rate:n.contributionRate,rank:r+1}))}function tn(e,t,n,r,i,s){let o=t==="scan"?n:n.slice(0,r.limit);return E({summary:{metric_tree_id:r.metric_tree_id,metric_tree_name:p(e.metricTreeName),root_metric_id:p(e.metricId),root_metric_name:p(e.metricName),target:t,row_count:o.length,...s},columns:ss(o),rows:o,raw:i})}function qc(e,t,n,r){let i=new Set((n??[]).map(u=>u.trim()).filter(Boolean)),s=new Set((r??[]).map(u=>u.trim()).filter(Boolean)),o=new Map(t.map(u=>[p(u.name),u])),a=new Map(t.map(u=>[p(u.fd_id),u])),c=i.size?[...i].map(u=>o.get(u)).filter(u=>!!u):[];if(!c.length){let u=b(e.config)??{},d=b(u.dimensionDecompositionContent)??{};c=oe(d.decomposableDimensionIds).map(l=>a.get(String(l))).filter(l=>!!l)}return c.length||(c=t),c.filter(u=>!s.has(p(u.name)))}function Ge(e){let t=new Set,n=[],r=i=>{if(!i)return;let s=p(i.fdId),o=p(i.name),a=s||o;if(!(!a||t.has(a))){t.add(a),n.push(mt(i));for(let c of O(i.subs))r(c)}};for(let i of O(e.applicableDims))r(i);return r(b(e.timeDim)),n}function is(e){let t=O(e.fdInfos).map(mt);return p(e.name)&&!t.some(n=>p(n.name)===p(e.name))&&t.push(_({id:B(e.id,e.name),fd_id:p(e.id),name:p(e.name),fd_type:B(t[0]?.fd_type,"DOUBLE"),meta_type:"METRIC"})),t}function mt(e){return _({id:B(e.id,e.fdId),fd_id:p(e.fdId),name:p(e.name),fd_type:p(e.fdType),meta_type:p(e.metaType),ds_id:p(e.dsId),granularity:p(e.granularity)})}function Se(e,t,n){let r=(n??t)?.trim();if(r)return e.find(i=>[i.fd_id,i.id,i.name].map(p).includes(r))}function Gc(e){return _({name:p(e.name),alias:p(e.name),fdType:B(e.fd_type),metaType:"DIM",key:B(e.fd_id,e.id,e.name),fdId:B(e.fd_id),dsId:B(e.ds_id),granularity:B(e.granularity)})}function Jc(e){return _({name:p(e.name),alias:B(e.name),fdType:B(e.fd_type),metaType:"DIM",key:B(e.fd_id,e.id,e.name),fdId:B(e.fd_id),dsId:B(e.ds_id),granularity:B(e.granularity)})}function Hc(e,t){return t?.length?e.map(n=>Object.fromEntries(t.map(r=>[r,n[r]]))):e}function ss(e){return[...new Set(e.flatMap(t=>Object.keys(t)))]}function $c(e){let t=new Map;return e.map((n,r)=>{let i=n||`column_${r+1}`,s=t.get(i)??0;return t.set(i,s+1),s?`${i}_${s+1}`:i})}function Fc(e,t){let n=Date.parse(e),r=Date.parse(t);if(!/^\d{4}-\d{2}-\d{2}$/.test(e)||!/^\d{4}-\d{2}-\d{2}$/.test(t)||Number.isNaN(n)||Number.isNaN(r))return;let i=Math.round((n-r)/864e5);if(!(i<=0))return{offset:i,offsetType:"DAY",granularity:"DAY"}}function os(e){let t=b(e);if(t)return _({dataset_id:p(t.dsId),name:p(t.name)})}function ft(e){let t=b(e);if(t)return _({user_id:B(t.uId,t.id),name:p(t.name),deleted:M(t.isDel)})}function zc(e){return _({id:p(e.id),name:p(e.name),type:p(e.valueType),values:O(e.values)})}function as(e){return O(e).map(t=>p(t.dirName??t.name)).filter(Boolean)}function H(e,t){return E({status:"unsupported",diagnostic:{tool:e,...t}})}function ae(e,t){return e instanceof re?te({operation:t,diagnostic:e.detail}):te({operation:t,message:e instanceof Error?e.message:String(e)})}function Vc(e){return e instanceof re&&e.detail.operation==="queryMetricData"&&e.detail.path==="/api/metric-platform/metric-data/v2"&&/No static resource metric-platform\/metric-data\/v2/i.test(e.detail.message)}function O(e){return Array.isArray(e)?e.map(b).filter(Boolean):[]}function oe(e){return Array.isArray(e)?e:[]}function b(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function p(e){return typeof e=="string"?e:e==null?"":String(e)}function B(...e){return e.map(p).find(t=>t.trim())?.trim()}function M(e){return typeof e=="boolean"?e:void 0}function ji(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Qc(e,t){let n=new Set;return e.filter(r=>{let i=p(r[t]);return!i||n.has(i)?!1:(n.add(i),!0)})}function cs(e){return e?JSON.parse(JSON.stringify(e)):void 0}function us(e,t,n,r,i={}){let s=i.usageTelemetry??new et({config:n,appVersion:i.appVersion??"unknown"}),o=(c,u,d)=>{let l=e.registerTool,f=Kn(c,d,s),y=async(...h)=>{try{return await f(...h)}catch(T){return ve(c,T)}};l.call(e,c,u,y)},a=c=>!r.service||r.service.toolList.includes(c);o("get_bi_capabilities",{title:"Get BI Capabilities",description:"\u83B7\u53D6\u5F53\u524D BI \u73AF\u5883\u7248\u672C\u548C MCP \u529F\u80FD\u542F\u7528\u72B6\u6001\u3002",inputSchema:Xn},(c,u)=>t.run(({client:d,config:l})=>Zn(d,l),u,"get_bi_capabilities")),["chatbi_list_themes","chatbi_query","chatbi_insight_start","chatbi_insight_poll"].some(a)&&(o("chatbi_list_themes",{title:"List ChatBI Themes",description:"\u5217\u51FA\u5F53\u524D\u767B\u5F55\u7528\u6237\u53EF\u8BBF\u95EE\u7684 ChatBI \u4E3B\u9898\uFF0C\u53EF\u7B5B\u9009\u6D1E\u5BDF\u4E3B\u9898\u3002",inputSchema:kr,outputSchema:Rr},(c,u)=>t.run(({config:d})=>vr(d,c),u,"chatbi_list_themes")),o("chatbi_query",{title:"ChatBI Query",description:"\u6267\u884C ChatBI L1 \u540C\u6B65\u95EE\u6570\uFF0C\u7528\u81EA\u7136\u8BED\u8A00\u76F4\u63A5\u63D0\u95EE\uFF0C\u6700\u7701\u4E8B\uFF0C\u9002\u5408\u4E1A\u52A1\u95EE\u9898\u8868\u8FF0\u660E\u786E\u3001\u65E0\u9700\u7CBE\u786E\u63A7\u5236\u7EF4\u5EA6\u6216 SQL \u7684\u573A\u666F\uFF1B\u9700\u8981\u7CBE\u786E\u6307\u5B9A\u7EF4\u5EA6/\u7B5B\u9009\u7528 query_metric_data\uFF0C\u9700\u8981\u81EA\u5B9A\u4E49 SQL \u7528 execute_sql_query\u3002\u652F\u6301\u4E3B\u9898 ID \u6216\u4E3B\u9898\u540D\u3002\u6210\u529F\u7ED3\u679C\u76F4\u63A5\u900F\u51FA answer\u3001sql\u3001query_result \u7B49\u7ED3\u6784\u5316\u5B57\u6BB5\uFF0C\u7531\u8C03\u7528\u65B9\u81EA\u884C\u7EC4\u7EC7\u6700\u7EC8\u56DE\u590D\u3002session_id \u53EA\u80FD\u7528\u4E8E\u95EE\u6570\u7EED\u95EE\uFF0C\u4E0D\u80FD\u4E0E ChatBI \u6D1E\u5BDF\u4F1A\u8BDD\u6DF7\u7528\u3002",inputSchema:Pr,outputSchema:Br},(c,u)=>t.run(({config:d})=>Mr(d,c),u,"chatbi_query")),o("chatbi_insight_start",{title:"Start ChatBI Insight",description:"\u53D1\u8D77 ChatBI L2 \u6D1E\u5BDF\u5206\u6790\u5E76\u5728\u8BF7\u6C42\u53D7\u7406\u540E\u7ACB\u5373\u8FD4\u56DE message_id\uFF0C\u4E0D\u7B49\u5F85\u6700\u7EC8\u62A5\u544A\uFF0C\u4E5F\u4E0D\u8FD4\u56DE final_result\u3002\u6D1E\u5BDF\u901A\u5E38\u8017\u65F6 2-3 \u5206\u949F\uFF0C5 \u5206\u949F\u89C6\u4E3A\u8D85\u65F6\uFF1B\u540C\u4E00\u95EE\u9898\u53EA\u8C03\u7528\u4E00\u6B21\uFF0C\u540E\u7EED\u4F7F\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002",inputSchema:xr,outputSchema:Ar},(c,u)=>t.run(({config:d})=>jr(d,c),u,"chatbi_insight_start")),o("chatbi_insight_poll",{title:"Poll ChatBI Insight",description:"\u67E5\u8BE2 ChatBI L2 \u6D1E\u5BDF\u4EFB\u52A1\u72B6\u6001\u548C\u6700\u7EC8\u62A5\u544A\u3002status=success \u65F6\u6700\u7EC8\u5C55\u793A\u5185\u5BB9\u8BFB\u53D6 structuredContent.final_result.content\uFF1Banswer \u4E3A\u540E\u7AEF\u539F\u59CB\u7B54\u6848\u3002\u4F7F\u7528 chatbi_insight_start \u8FD4\u56DE\u7684 theme_id \u548C message_id\uFF1B\u4E0D\u8981\u9AD8\u9891\u8C03\u7528\uFF0C\u5EFA\u8BAE\u81F3\u5C11\u95F4\u9694 10 \u79D2\uFF0C\u6D1E\u5BDF\u901A\u5E38\u8017\u65F6 2-3 \u5206\u949F\uFF0C5 \u5206\u949F\u540E\u505C\u6B62\u7B49\u5F85\u3002",inputSchema:Dr,outputSchema:Or},(c,u)=>t.run(({config:d})=>Ur(d,c),u,"chatbi_insight_poll"))),r.ok&&(a("global_search")&&o("global_search",{title:"Global Search",description:"\u6309\u5173\u952E\u8BCD\u641C\u7D22 BI \u4E2D\u7684\u5361\u7247\u3001\u4EEA\u8868\u677F\u3001\u6570\u636E\u96C6\u548C ETL \u8D44\u6E90\uFF0C\u9002\u5408\u5B9A\u4F4D\u67D0\u4E2A\u5DF2\u6709\u8D44\u4EA7\u6216\u5176 ID\u3002\u8FD4\u56DE\u7684\u5361\u7247 ID \u53EF\u4EA4\u7ED9 get_card_info/query_card_data\uFF0C\u6570\u636E\u96C6 ID \u53EF\u4EA4\u7ED9 get_dataset_detail/execute_sql_query\u3002\u6307\u6807\u76F8\u5173\u68C0\u7D22\u8BF7\u7528 search_metrics\u3002",inputSchema:Xr},(c,u)=>t.run(({client:d})=>Zr(d,c),u,"global_search")),a("search_metrics")&&o("search_metrics",{title:"Search Metrics",description:"\u6309\u5173\u952E\u8BCD\u641C\u7D22\u6307\u6807\u5E73\u53F0\u6307\u6807\uFF0C\u8FD4\u56DE metric_id\u3001\u540D\u79F0\u3001\u4E3B\u9898\u3001\u76EE\u5F55\u3001\u7C7B\u578B\u3001\u72B6\u6001\u548C\u4E1A\u52A1\u53E3\u5F84\u6458\u8981\u3002\u5DF2\u6709\u5173\u952E\u8BCD\u65F6\u4F18\u5148\u7528\u672C\u5DE5\u5177\uFF1B\u4E0D\u6E05\u695A\u6709\u54EA\u4E9B\u6307\u6807\u65F6\u6539\u7528 list_metric_catalog \u6D4F\u89C8\u3002\u8FD4\u56DE\u7684 metric_id \u53EF\u7EE7\u7EED\u4EA4\u7ED9 get_metric_detail \u770B\u53E3\u5F84\u3001query_metric_data \u53D6\u6570\u3002",inputSchema:Ni,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Fi(d,l,c),u,"search_metrics")),a("list_metric_catalog")&&o("list_metric_catalog",{title:"List Metric Catalog",description:"\u6309\u4E3B\u9898/\u76EE\u5F55\u5C42\u7EA7\u6D4F\u89C8\u6307\u6807\u8282\u70B9\uFF0C\u9002\u5408\u4E0D\u77E5\u9053\u5173\u952E\u8BCD\u3001\u9700\u8981\u5148\u53D1\u73B0\u6709\u54EA\u4E9B\u53EF\u7528\u6307\u6807\u7684\u573A\u666F\u3002\u5DF2\u6709\u660E\u786E\u5173\u952E\u8BCD\u65F6\u6539\u7528 search_metrics\u3002\u8FD4\u56DE\u7684 metric_id \u53EF\u7EE7\u7EED\u4EA4\u7ED9 get_metric_detail\u3001query_metric_data\u3002",inputSchema:Li,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>zi(d,l,c),u,"list_metric_catalog")),a("get_metric_detail")&&o("get_metric_detail",{title:"Get Metric Detail",description:"\u6309 metric_id \u83B7\u53D6\u6307\u6807\u7684\u4E1A\u52A1\u53E3\u5F84\u3001\u8BA1\u7B97\u53E3\u5F84\u3001\u9002\u7528\u7EF4\u5EA6\u3001\u65F6\u95F4\u7EF4\u3001\u8840\u7F18/\u5F15\u7528\u6458\u8981\u548C\u6743\u9650\u4FE1\u606F\u3002\u5EFA\u8BAE\u5728 query_metric_data \u53D6\u6570\u524D\u5148\u8C03\u7528\uFF0C\u786E\u8BA4\u53EF\u7528\u7EF4\u5EA6\u4E0E\u53E3\u5F84\u3002metric_id \u6765\u81EA search_metrics \u6216 list_metric_catalog\u3002",inputSchema:qi,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Vi(d,l,c),u,"get_metric_detail")),a("query_metric_data")&&o("query_metric_data",{title:"Query Metric Data",description:"\u6309\u5DF2\u77E5 metric_id \u7CBE\u786E\u67E5\u8BE2\u6307\u6807\u6570\u636E\uFF0C\u9002\u5408\u9700\u8981\u6307\u5B9A\u7EF4\u5EA6\u3001\u7B5B\u9009\u3001\u6392\u5E8F\u7684\u53D6\u6570\u573A\u666F\uFF1B\u7EF4\u5EA6\u5EFA\u8BAE\u5148\u7528 get_metric_detail \u786E\u8BA4\u3002\u53EA\u8BFB\u5B89\u5168\uFF1A\u8BFB\u53D6\u6307\u6807\u5361\u9884\u89C8\u6570\u636E\uFF0C\u7EF4\u5EA6\u67E5\u8BE2\u53EA\u6539\u4E34\u65F6 session\uFF0C\u4E0D\u89E6\u53D1 save\u3001update\u3001delete\u3001publish \u7B49\u6301\u4E45\u5316\u64CD\u4F5C\u3002\u9700\u8981\u81EA\u7136\u8BED\u8A00\u95EE\u6570\u7528 chatbi_query\uFF0C\u9700\u8981\u5199 SQL \u7528 execute_sql_query\u3002",inputSchema:Gi,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Qi(d,l,c),u,"query_metric_data")),a("search_metric_trees")&&o("search_metric_trees",{title:"Search Metric Trees",description:"\u6309\u5173\u952E\u8BCD\u641C\u7D22\u6307\u6807\u6811\u8D44\u6E90\uFF0C\u8FD4\u56DE metric_tree_id\u3002\u5F52\u56E0\u5206\u6790\u7684\u5165\u53E3\u5DE5\u5177\uFF1A\u62FF\u5230 metric_tree_id \u540E\u7528 get_metric_tree_detail \u770B\u7ED3\u6784\u3001query_metric_tree_attribution \u505A\u5F52\u56E0\u3002",inputSchema:Ji,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Ki(d,l,c),u,"search_metric_trees")),a("get_metric_tree_detail")&&o("get_metric_tree_detail",{title:"Get Metric Tree Detail",description:"\u6309 metric_tree_id \u83B7\u53D6\u6307\u6807\u6811\u8BE6\u60C5\u3001\u6839\u6307\u6807\u3001\u65F6\u95F4\u5BF9\u6BD4\u914D\u7F6E\u3001\u7EF4\u5EA6\u62C6\u89E3\u914D\u7F6E\u548C\u6307\u6807\u5173\u7CFB\u6811\u3002\u5EFA\u8BAE\u5728 query_metric_tree_attribution \u5F52\u56E0\u524D\u5148\u8C03\u7528\uFF0C\u786E\u8BA4\u53EF\u62C6\u89E3\u7EF4\u5EA6\u4E0E\u5BF9\u6BD4\u914D\u7F6E\u3002metric_tree_id \u6765\u81EA search_metric_trees\u3002",inputSchema:Hi,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Wi(d,l,c),u,"get_metric_tree_detail")),a("query_metric_tree_attribution")&&o("query_metric_tree_attribution",{title:"Query Metric Tree Attribution",description:"\u6309\u5DF2\u77E5 metric_tree_id \u6267\u884C\u6307\u6807\u62C6\u89E3\u3001\u5355\u7EF4\u62C6\u89E3\u6216\u5168\u7EF4\u626B\u63CF\u5F52\u56E0\uFF0C\u9002\u5408\u5206\u6790\u67D0\u6307\u6807\u53D8\u5316\u7531\u54EA\u4E9B\u56E0\u7D20/\u7EF4\u5EA6\u8D21\u732E\u3002\u5EFA\u8BAE\u5148\u7528 get_metric_tree_detail \u786E\u8BA4\u53EF\u62C6\u89E3\u7EF4\u5EA6\u3002",inputSchema:$i,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Yi(d,l,c),u,"query_metric_tree_attribution")),a("execute_sql_query")&&o("execute_sql_query",{title:"Execute SQL Query",description:`\u57FA\u4E8E\u4E00\u4E2A\u6216\u591A\u4E2A\u6570\u636E\u96C6\u6267\u884C\u67E5\u8BE2 SQL\u3002\u82E5\u672C\u8F6E\u5C1A\u672A\u8BFB\u53D6\u6570\u636E\u96C6\u8BE6\u60C5\uFF0C\u5148\u8C03\u7528 get_dataset_detail \u83B7\u53D6\u6570\u636E\u96C6\u540D\u79F0/name \u548C columns[].name\u3002inputs \u53EA\u4F20\u5BF9\u5E94\u6570\u636E\u96C6 ID\uFF0C\u4E0D\u5F97\u628A dsId\u3001fdId \u6216 input0 \u5F53\u8868\u540D\uFF1BSQL \u901A\u5E38\u5148\u7528\u6570\u636E\u96C6\u540D\u79F0\u4F5C\u4E3A FROM/JOIN \u8868\u5F15\u7528\u3002\u82E5 TABLE_OR_VIEW_NOT_FOUND \u7684 diagnostic.tableBindings[] \u63D0\u4F9B sqlReference\uFF0C\u5FC5\u987B\u6309\u8BE5\u503C\u4FEE\u6B63\uFF1B\u5355\u6570\u636E\u96C6 Spark \u67E5\u8BE2\u53EF\u80FD\u8FD4\u56DE\u7A33\u5B9A\u5F15\u7528 __THIS__\uFF0C\u4E0D\u8981\u539F\u6837\u91CD\u590D\u5931\u8D25 SQL\u3002\u4E2D\u6587\u6216\u7279\u6B8A\u5B57\u7B26\u540D\u79F0\u7528\u53CD\u5F15\u53F7\uFF0C\u4F8B\u5982 SELECT * FROM \`\u9500\u552E\u6570\u636E\u96C6\`\u3002\u65E0\u8868\u67E5\u8BE2\u4F20 inputs: []\u3002\u591A\u6570\u636E\u96C6\u67E5\u8BE2\u8981\u6C42\u6570\u636E\u96C6\u80FD\u5728\u540C\u4E00\u6267\u884C\u94FE\u8DEF\u4E2D\u67E5\u8BE2\u3002\u8FD4\u56DE\u884C\u6570\u7531 BI_MAX_ROWS \u63A7\u5236\uFF0C\u5F53\u524D\u4E3A ${n.BI_MAX_ROWS} \u884C\uFF0C\u65E0\u9700\u81EA\u884C\u6DFB\u52A0 LIMIT\u3002`,inputSchema:Kr},(c,u)=>t.run(({client:d,config:l})=>Wr(d,l,c),u,"execute_sql_query")),a("get_dataset_detail")&&o("get_dataset_detail",{title:"Get Dataset Detail",description:"\u6309\u6570\u636E\u96C6 ID \u83B7\u53D6\u57FA\u7840\u4FE1\u606F\u3001\u5B57\u6BB5\u7ED3\u6784\u548C\u76F8\u5173\u914D\u7F6E\u3002\u5EFA\u8BAE\u5728 execute_sql_query \u5199 SQL \u524D\u5148\u8C03\u7528\uFF0C\u786E\u8BA4\u6570\u636E\u96C6\u540D\u79F0\u4E0E\u53EF\u7528\u5B57\u6BB5\u3002\u6570\u636E\u96C6 ID \u6765\u81EA global_search\u3002",inputSchema:Hr},(c,u)=>t.run(({client:d})=>zr(d,c),u,"get_dataset_detail")),a("get_card_info")&&o("get_card_info",{title:"Get Card Info",description:"\u6309\u5361\u7247 ID \u83B7\u53D6\u57FA\u7840\u4FE1\u606F\u3001\u56FE\u8868\u7C7B\u578B\u3001\u6570\u636E\u6765\u6E90\u548C\u914D\u7F6E\u3002\u5EFA\u8BAE\u5728 query_card_data \u53D6\u6570\u524D\u5148\u8C03\u7528\uFF0C\u786E\u8BA4\u5B57\u6BB5\u4E0E\u6570\u636E\u6765\u6E90\u3002\u5361\u7247 ID \u6765\u81EA global_search \u6216 get_page_info\u3002",inputSchema:$r},(c,u)=>t.run(({client:d})=>Vr(d,c),u,"get_card_info")),a("query_card_data")&&o("query_card_data",{title:"Query Card Data",description:"\u6309\u5DF2\u77E5\u5361\u7247 ID \u5B89\u5168\u53EA\u8BFB\u67E5\u8BE2\u4E00\u9875 BI \u5361\u7247\u9884\u89C8\u6570\u636E\uFF0C\u652F\u6301\u7ED3\u6784\u5316\u7B5B\u9009\u3001\u52A8\u6001\u53C2\u6570\u548C\u5F53\u524D\u5361\u7247\u81EA\u8EAB\u7684\u52A8\u6001\u7EF4\u5EA6\u8986\u76D6\u3002\u5355\u6B21\u6700\u591A 1000 \u884C\uFF1Bpage.has_more=true \u65F6\u4F7F\u7528 next_offset \u7EED\u9875\u3002",inputSchema:lr,outputSchema:pr},(c,u)=>t.run(({client:d,signal:l})=>fr(d,c,l),u,"query_card_data")),a("get_page_info")&&o("get_page_info",{title:"Get Page Info",description:"\u6309\u9875\u9762/\u4EEA\u8868\u677F ID \u83B7\u53D6\u57FA\u7840\u4FE1\u606F\u3001\u5E03\u5C40\u3001\u5361\u7247\u5217\u8868\u548C\u76F8\u5173\u914D\u7F6E\uFF0C\u53EF\u4ECE\u4E2D\u62FF\u5230\u5361\u7247 ID \u518D\u4EA4\u7ED9 get_card_info/query_card_data\u3002\u9875\u9762 ID \u6765\u81EA global_search\u3002",inputSchema:Fr},(c,u)=>t.run(({client:d})=>Qr(d,c),u,"get_page_info")),Ai(o,a,t))}var nu=Kc(import.meta.url),fn=nu("../package.json"),dn=class{record(t){console.error(JSON.stringify({runtime:uu(t)}))}};function ls(e,t={}){let n=t.mode??e.MCP_TRANSPORT??"stdio",r={appVersion:t.appVersion,clientFactory:t.clientFactory,callerContextResolver:t.callerContextResolver,guanBIClientFactory:t.guanBIClientFactory,capabilityResolver:t.capabilityResolver,transportFactory:t.transportFactory};return n==="streamable-http"?new pn(e,r):new ln(e,r)}var ru=`\u89C2\u8FDC BI\uFF08Guandata\uFF09MCP Server\uFF0C\u7528\u4E8E\u5728\u89C2\u8FDC BI \u5E73\u53F0\u4E0A\u505A\u6570\u636E\u53D1\u73B0\u3001\u770B\u8D44\u4EA7\u8BE6\u60C5\u3001\u5B89\u5168\u53EA\u8BFB\u53D6\u6570\u548C\u6307\u6807\u5206\u6790\u3002\u6240\u6709\u5DE5\u5177\u5747\u4E3A\u53EA\u8BFB\uFF0C\u4E0D\u4F1A\u4FEE\u6539\u3001\u4FDD\u5B58\u6216\u5220\u9664 BI \u8D44\u4EA7\u3002
10
+ ${u}`:a}catch{return}}var Vt=new Map([["k",1e3],["K",1e3],["M",1e6],["B",1e9],["\u4E07",1e4],["\u4EBF",1e8]]),Ha=[[1e8,"\u4EBF"],[1e4,"\u4E07"]];function $a(e){let t=e?.chartMeta?.chartMain?.zoneData?.metric,n=new Map;if(!Array.isArray(t))return n;for(let r of t)r.name&&r.fieldFormat?.numberFormat&&n.set(r.name,r.fieldFormat.numberFormat);return n}function Fa(e,t,n){let r=new Map;for(let[i,s]of e.entries()){let o=n.get(s);if(o?.prefixUnit!=="auto")continue;let c=0;for(let u of t){let d=Gr(u[i]);typeof d=="number"&&(c=Math.max(c,Math.abs(d/Jr(o))))}let a=Wa(c);a&&r.set(s,a)}return r}function za(e,t,n){if(!t)return e;let r=Gr(e);return typeof r!="number"?e:Va(r,t,n)}function Gr(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e!="string")return;let t=Number(e.trim());return Number.isFinite(t)?t:void 0}function Va(e,t,n){let r=Jr(t),{unit:i,shouldScale:s}=Qa(t,n),o=s&&i?Vt.get(i)??1:1,c=e/r/o,a=Ka(t.decimalPlaces),u=t.useThousandsSeparator?c.toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a}):c.toFixed(a),d=i&&t.showPrefixUnit!==!1?i:"",l=t.showSuffix===!1||typeof t.suffix!="string"?"":t.suffix;return`${u}${d}${l}`}function Jr(e){if(e.showPrefixUnit!==!1&&typeof e.prefixUnit=="string"&&e.prefixUnit!=="auto"&&Vt.has(e.prefixUnit))return 1;let t=Number(e.divideDataBy??1);return Number.isFinite(t)&&t!==0?t:1}function Qa(e,t){return e.showPrefixUnit===!1?{unit:"",shouldScale:!1}:e.prefixUnit==="auto"?{unit:t??"",shouldScale:!0}:typeof e.prefixUnit=="string"&&Vt.has(e.prefixUnit)?{unit:e.prefixUnit,shouldScale:!0}:{unit:"",shouldScale:!1}}function Ka(e){return typeof e!="number"||!Number.isFinite(e)?2:Math.max(0,Math.min(100,Math.trunc(e)))}function Wa(e){return Ha.find(([t])=>e>=t)?.[1]??""}function lt(e,t,n){let r=Ya(e,t,n);return te({error:"chatbi_request_failed",requested_operation:n,...r,tried_base_urls:r.tried_base_urls??e.getTriedBaseUrls()})}function Ya(e,t,n){return t instanceof v?t.detail:e.getLastError()??{operation:n,detail:t instanceof Error?t.message:String(t)}}import{z as Qt}from"zod";var Hr={dsId:Qt.string().min(1).describe("\u6570\u636E\u96C6 ID\u3002")},$r={cdId:Qt.string().min(1).describe("\u5361\u7247 ID\u3002")},Fr={pageId:Qt.string().min(1).describe("\u9875\u9762/\u4EEA\u8868\u677F ID\u3002")};async function zr(e,t){let n=await e.get(`/api/data-source/${encodeURIComponent(t.dsId)}`);return D(n)}async function Vr(e,t){let n=await e.get(`/api/card/${encodeURIComponent(t.cdId)}`);return D(n)}async function Qr(e,t){let n=await e.get(`/api/page/${encodeURIComponent(t.pageId)}`);return D(n)}import{z as Ue}from"zod";var Ne=Ue.string().trim().min(1),Xa=Ue.object({name:Ne.describe("CTE \u540D\u79F0\uFF0C\u4E0D\u80FD\u4E0E\u4EFB\u4E00\u8F93\u5165\u6570\u636E\u96C6\u7684\u7CBE\u786E\u540D\u79F0/name \u76F8\u540C\u3002"),query:Ne.describe("\u8BE5 CTE \u7684\u67E5\u8BE2\u4F53\uFF0C\u4E0D\u5305\u542B CTE \u540D\u79F0\u548C AS \u5916\u5C42\u3002")}).strict(),Kr={query:Ne.describe("\u5B8C\u6574\u7684\u5355\u6761\u67E5\u8BE2 SQL\uFF0C\u4EC5\u9650 SELECT/WITH\u3002inputs \u53EA\u7ED1\u5B9A\u6570\u636E\u96C6\uFF0CdsId\u3001fdId \u6216 input0 \u4E0D\u80FD\u76F4\u63A5\u4F5C\u4E3A\u8868\u540D\uFF1B\u901A\u5E38\u5148\u4F7F\u7528 get_dataset_detail \u8FD4\u56DE\u7684\u6570\u636E\u96C6\u540D\u79F0/name \u548C columns[].name\u3002\u82E5 TABLE_OR_VIEW_NOT_FOUND \u7684 diagnostic.tableBindings[] \u63D0\u4F9B sqlReference\uFF0C\u6309\u8BE5\u503C\u4FEE\u6B63\u8868\u5F15\u7528\uFF1B\u5355\u6570\u636E\u96C6 Spark \u67E5\u8BE2\u53EF\u80FD\u8FD4\u56DE __THIS__\u3002\u4E2D\u6587\u6216\u7279\u6B8A\u5B57\u7B26\u540D\u79F0\u7528\u53CD\u5F15\u53F7\u3002\u8FD4\u56DE\u884C\u6570\u7531 MCP \u63A7\u5236\uFF0C\u901A\u5E38\u65E0\u9700\u81EA\u884C\u6DFB\u52A0 LIMIT\u3002"),inputs:Ue.array(Ne).describe("query \u5B9E\u9645\u5F15\u7528\u7684\u5168\u90E8\u6570\u636E\u96C6 ID\uFF0C\u7528\u4E8E BI \u7ED1\u5B9A\u548C\u6743\u9650\u6821\u9A8C\uFF0C\u4E0D\u80FD\u4F5C\u4E3A SQL \u8868\u540D\u3002\u6BCF\u4E2A FROM/JOIN \u6570\u636E\u96C6\u90FD\u8981\u4F20\u5BF9\u5E94 ID\uFF0C\u4E0D\u8981\u591A\u4F20\u6216\u91CD\u590D\uFF1BSELECT 1 \u7B49\u65E0\u8868\u67E5\u8BE2\u4F20\u7A7A\u6570\u7EC4\u3002\u540E\u7AEF\u9ED8\u8BA4\u6700\u591A\u652F\u6301 10 \u4E2A\u4E0D\u540C\u6570\u636E\u96C6\uFF0C\u5B9E\u9645\u9650\u5236\u4EE5\u90E8\u7F72\u914D\u7F6E\u4E3A\u51C6\u3002"),queryStructure:Ue.object({ctes:Ue.array(Xa).min(1),mainQuery:Ne.describe("\u79FB\u9664\u9876\u5C42 WITH/CTE \u5B9A\u4E49\u540E\u7684\u6700\u7EC8 SELECT \u67E5\u8BE2\u3002")}).strict().optional().describe("\u4EC5\u5F53\u5B8C\u6574 query \u662F\u9876\u5C42 WITH/CTE \u67E5\u8BE2\u65F6\u63D0\u4F9B\u3002query \u4ECD\u4FDD\u7559\u5B8C\u6574\u539F\u59CB SQL\uFF1Bctes \u548C mainQuery \u662F\u540C\u4E00 SQL \u7684\u7ED3\u6784\u5316\u62C6\u5206\u3002\u6CA1\u6709 CTE \u65F6\u7701\u7565\u6574\u4E2A\u5B57\u6BB5\u3002")};async function Wr(e,t,n){try{await Pn(e,t,"executeSqlQuery");let r=await e.post("/api/data-source/execute-sql-query",{...n,query:n.query.trim(),inputs:[...new Set(n.inputs.map(i=>i.trim()))],limit:t.BI_MAX_ROWS,disableCache:!0});return D({maxRowsHint:t.BI_MAX_ROWS,result:r})}catch(r){if(Za(r))return De("execute_sql_query",r,{hint:"\u8BF7\u5728\u7BA1\u7406\u540E\u53F0 -> \u9AD8\u7EA7\u8BBE\u7F6E -> \u5BF9\u5E94\u57DF\u540D\u4E0B\uFF0C\u6253\u5F00\u9AD8\u7EA7SQL\u67E5\u8BE2\u529F\u80FD\u3002"});if(ec(r)){let i=await nc(e,n.inputs),s=Yr(r)&&i.length===1,o=i.map(c=>s?{...c,sqlReference:"__THIS__"}:c);return De("execute_sql_query",r,{hint:tc(r,s),tableBindings:o.length>0?o:void 0})}throw r}}function Za(e){return e instanceof Error&&e.message.includes("POST /api/data-source/execute-sql-query HTTP 404")}function ec(e){return e instanceof Error&&e.message.includes("TABLE_OR_VIEW_NOT_FOUND")}function Yr(e){return e instanceof Error&&e.message.includes("SparkViewDataset")}function tc(e,t){return t?"\u8BE5\u8BF7\u6C42\u8D70 Spark \u6570\u636E\u96C6\u6267\u884C\u94FE\u8DEF\u3002\u4FDD\u6301 inputs \u4E0D\u53D8\uFF0C\u5C06 SQL \u4E2D\u8BE5\u6570\u636E\u96C6\u7684 FROM/JOIN \u8868\u5F15\u7528\u6539\u4E3A diagnostic.tableBindings[0].sqlReference\uFF08__THIS__\uFF09\u540E\u91CD\u8BD5\uFF1B\u4E0D\u8981\u518D\u6B21\u4F7F\u7528\u76F8\u540C\u7684\u663E\u793A\u540D\u79F0\u3002":Yr(e)?"\u8BE5\u8BF7\u6C42\u8D70 Spark \u591A\u6570\u636E\u96C6\u6267\u884C\u94FE\u8DEF\uFF0C\u6570\u636E\u96C6\u663E\u793A\u540D\u79F0\u4E0D\u4FDD\u8BC1\u7B49\u4E8E\u5DF2\u6CE8\u518C\u7684 SQL \u5173\u7CFB\u540D\uFF0CMCP \u65E0\u6CD5\u53EF\u9760\u63A8\u5BFC\u5168\u90E8\u8868\u5F15\u7528\uFF1B\u8BF7\u52FF\u539F\u6837\u91CD\u590D\u8C03\u7528\uFF0C\u9700\u8981\u540E\u7AEF\u63D0\u4F9B\u7A33\u5B9A\u522B\u540D\u3002":"\u6570\u636E\u96C6 ID \u53EA\u7528\u4E8E BI \u7ED1\u5B9A\u548C\u6388\u6743\uFF0C\u4E0D\u80FD\u76F4\u63A5\u4F5C\u4E3A\u8868\u540D\u3002\u53EF\u6838\u5BF9 diagnostic.tableBindings[].displayName\uFF0C\u4F46\u663E\u793A\u540D\u79F0\u4E0D\u4FDD\u8BC1\u662F\u5F53\u524D\u6267\u884C\u94FE\u8DEF\u53EF\u7528\u7684 SQL \u5F15\u7528\u3002"}async function nc(e,t){let n=[...new Set(t.map(r=>r.trim()))];return Promise.all(n.map(async r=>{try{let i=await e.get(`/api/data-source/${encodeURIComponent(r)}`);if(!i||typeof i!="object"||!("name"in i)||typeof i.name!="string")return{dsId:r};let s=i.name.trim();return s?{dsId:r,displayName:s}:{dsId:r}}catch{return{dsId:r}}}))}import{z as W}from"zod";var Xr={keyword:W.string().default("").describe("\u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u7559\u7A7A\u65F6\u8FD4\u56DE\u8D44\u6E90\u5217\u8868\u3002"),resourceType:W.enum(["ALL","CARD","DASHBOARD","DATA_SET","ETL"]).optional().default("ALL"),limit:W.number().int().min(1).max(100).optional().default(20),offset:W.number().int().min(0).optional().default(0),utimeStartTime:W.number().int().optional().describe("\u66F4\u65B0\u65F6\u95F4\u8D77\u70B9\uFF0C\u6BEB\u79D2\u65F6\u95F4\u6233\u3002"),utimeEndTime:W.number().int().optional().describe("\u66F4\u65B0\u65F6\u95F4\u7EC8\u70B9\uFF0C\u6BEB\u79D2\u65F6\u95F4\u6233\u3002"),cardType:W.string().optional().describe("\u5361\u7247\u7C7B\u578B\u8FC7\u6EE4\uFF0C\u4EC5 resourceType \u5305\u542B CARD \u65F6\u4F7F\u7528\u3002"),permissionType:W.string().optional(),orderBy:W.string().optional(),isDesc:W.boolean().optional()};async function Zr(e,t){let{cardType:n,...r}=t,i={...r,specificResourceFilters:n?{cardType:n}:void 0},s=await e.post("/api/global-search",i);return D(s)}import{z as j}from"zod";var Ie=j.string().trim().min(1).max(64),ei=2e3,ti=3e5,ni={offset:j.number().int().nonnegative().optional().default(0).describe("\u5206\u9875\u504F\u79FB\u91CF\uFF0C\u9ED8\u8BA4 0\u3002"),limit:j.number().int().positive().optional().default(200).describe("\u8FD4\u56DE\u6761\u6570\u9650\u5236\uFF0C\u9ED8\u8BA4 200\u3002")},ri={agent_id:Ie.describe("Dashboard Agent ID\uFF0C\u53EF\u7531 list_dashboard_agents \u83B7\u53D6\u3002")},ii={agent_id:Ie.describe("Dashboard Agent ID\u3002")},si={session_id:Ie.describe("Dashboard Agent \u4F1A\u8BDD ID\u3002")},oi={agent_id:Ie.describe("Dashboard Agent ID\u3002"),question:j.string().trim().min(1).max(1e3).describe("\u53D1\u9001\u7ED9 Dashboard Agent \u7684\u95EE\u9898\u3002"),session_id:Ie.optional().describe("\u5DF2\u6709\u4F1A\u8BDD ID\uFF1B\u4F20\u5165\u65F6\u5728\u8BE5\u4F1A\u8BDD\u4E2D\u7EE7\u7EED\u8FFD\u95EE\u3002"),expert_id:Ie.optional().describe("\u6307\u5B9A\u5206\u6790\u4E13\u5BB6 ID\uFF0C\u53EF\u7531 get_dashboard_agent \u83B7\u53D6\u3002"),poll_interval_ms:j.number().int().positive().optional().default(ei).describe("\u5185\u90E8\u8F6E\u8BE2\u95F4\u9694\uFF0C\u9ED8\u8BA4 2000 \u6BEB\u79D2\u3002"),timeout_ms:j.number().int().positive().optional().default(ti).describe("\u672C\u6B21 ask \u7684\u6700\u957F\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4 300000 \u6BEB\u79D2\uFF0C\u540C\u65F6\u53D7\u670D\u52A1\u7AEF\u8BF7\u6C42\u8D85\u65F6\u7EA6\u675F\u3002")},ai={status:j.literal("success"),agent_id:j.string(),session_id:j.string(),message_id:j.string(),task_id:j.string(),answer:j.string(),message:j.unknown()};async function ci(e,t,n){let r=new URLSearchParams;return r.set("offset",String(t.offset??0)),r.set("limit",String(t.limit??200)),D(await e.get(`/api/agent2/list?${r.toString()}`,{signal:n}))}async function ui(e,t,n){return D(await e.get(`/api/agent2/${encodeURIComponent(t.agent_id.trim())}`,{signal:n}))}async function di(e,t,n){let r=encodeURIComponent(t.agent_id.trim());return D(await e.get(`/api/agent2-session/${r}/sessions`,{signal:n}))}async function li(e,t,n){let r=encodeURIComponent(t.session_id.trim());return D(await e.get(`/api/agent2-message/${r}/messages`,{signal:n}))}async function pi(e,t,n){let r=dc(n,t.timeout_ms??ti),i=t.poll_interval_ms??ei,s=t.agent_id.trim(),o=t.session_id?.trim(),c=t.expert_id?.trim(),a=t.question.trim();o&&await rc(e,s,o,r);let u=await e.post("/api/agent2-message/create",pc({sessionId:o,agentId:s,question:a,title:[...a].slice(0,50).join(""),expertId:c}),{signal:r}),d=ic(u);sc(d,s,o);try{let l=await oc(e,d,i,r),f=mi(l);return E({status:"success",agent_id:d.agentId,session_id:d.sessionId,message_id:d.messageId,task_id:d.taskId,answer:f,message:l},{text:f})}catch(l){throw uc(l,d,r.aborted)}}async function rc(e,t,n,r){let i=await e.get(`/api/agent2-session/${encodeURIComponent(t)}/sessions`,{signal:r});if(!lc(i).some(o=>{let c=Te(o);return G(c.agentId)===t&&G(c.sessionId)===n}))throw new Error(`\u4F1A\u8BDD ${n} \u4E0D\u5C5E\u4E8E\u4EEA\u8868\u677F\u667A\u80FD\u4F53 ${t}\uFF0C\u672A\u63D0\u4EA4\u95EE\u9898\u3002`)}function ic(e){let t=Te(e),n={agentId:G(t.agentId),sessionId:G(t.sessionId),messageId:G(t.messageId),taskId:G(t.taskId)},r=Object.entries(n).filter(([,i])=>!i).map(([i])=>i);if(r.length)throw new Error(`\u521B\u5EFA\u7ED3\u679C\u7F3A\u5C11 ${r.join(", ")}\u3002`);return n}function sc(e,t,n){if(e.agentId!==t)throw new Error(`\u8FD4\u56DE\u7684\u4EEA\u8868\u677F\u667A\u80FD\u4F53\u4E0E\u8BF7\u6C42\u4E0D\u4E00\u81F4\uFF08${pt(e)}\uFF09\u3002`);if(n&&e.sessionId!==n){let r=`requestedSessionId=${n}`;throw new Error(`\u8FD4\u56DE\u7684\u4EEA\u8868\u677F\u667A\u80FD\u4F53\u4F1A\u8BDD\u4E0E\u8BF7\u6C42\u4E0D\u4E00\u81F4\uFF08${r}, ${pt(e)}\uFF09\u3002`)}}async function oc(e,t,n,r){for(;;){r.throwIfAborted();let i=Te(await e.get(`/api/task/${encodeURIComponent(t.taskId)}`,{signal:r})),s=G(i.status);if(s==="FINISHED")return ac(e,t,n,r);if(["FAILED","CANCELED","CANCELLED"].includes(s))throw be(`\u4EFB\u52A1\u6267\u884C\u5931\u8D25: ${cc(i)}`,t);if(!["CREATED","PROCESSING","QUEUEING"].includes(s))throw be(`\u9047\u5230\u672A\u77E5\u4EFB\u52A1\u72B6\u6001: status=${JSON.stringify(s)}`,t);await fi(n,r)}}async function ac(e,t,n,r){for(;;){r.throwIfAborted();let i=Te(await e.get(`/api/agent2-message/${encodeURIComponent(t.messageId)}`,{signal:r}));if(mi(i))return i;let s=G(i.status);if(s==="FAILED")throw be("\u6D88\u606F\u751F\u6210\u5931\u8D25",t);if(s==="SUCCESS")throw be("\u6D88\u606F\u5DF2\u5B8C\u6210\u4F46\u6CA1\u6709\u53EF\u7528\u56DE\u7B54",t);if(!["","PENDING","RUNNING"].includes(s))throw be(`\u9047\u5230\u672A\u77E5\u6D88\u606F\u72B6\u6001: status=${JSON.stringify(s)}`,t);await fi(n,r)}}function cc(e){let t=G(e.errorMessage);if(t)return t;let n=e.result;return typeof n=="string"&&n.trim()?n.trim():G(Te(n).error)||"\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE\u5931\u8D25\u539F\u56E0"}function mi(e){return G(Te(e.answer).content)}function be(e,t){return new Error(`${e}\uFF08${pt(t)}\uFF09\u3002`)}function uc(e,t,n){let r=e instanceof Error?e:new Error(String(e));return r.message.includes(pt(t))?r:be(`${n?"\u672C\u5730\u7B49\u5F85\u5DF2\u505C\u6B62\uFF0C\u670D\u52A1\u7AEF\u4EFB\u52A1\u53EF\u80FD\u4ECD\u5728\u6267\u884C":"\u7B49\u5F85\u4EEA\u8868\u677F\u667A\u80FD\u4F53\u7ED3\u679C\u5931\u8D25"}: ${r.message}`,t)}function pt(e){return`agentId=${e.agentId}, sessionId=${e.sessionId}, messageId=${e.messageId}, taskId=${e.taskId}`}function dc(e,t){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}async function fi(e,t){t.throwIfAborted(),await new Promise((n,r)=>{let i=setTimeout(s,e);t.addEventListener("abort",o,{once:!0});function s(){t.removeEventListener("abort",o),n()}function o(){clearTimeout(i),r(t.reason)}})}function Te(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function lc(e){return Array.isArray(e)?e:[]}function G(e){return typeof e=="string"?e.trim():""}function pc(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}import{z as P}from"zod";var we=P.string().trim().min(1).max(512),gi=P.object({selector_id:we.describe("\u9875\u9762\u7B5B\u9009\u5668\u5361\u7247 ID\u3002"),values:P.array(P.string().trim().min(1)).min(1).describe("\u8BE5\u7B5B\u9009\u5668\u7684\u53D6\u503C\uFF1B\u591A\u9009\u65F6\u5728\u540C\u4E00\u6570\u7EC4\u4E2D\u4F20\u5165\u591A\u4E2A\u503C\u3002")}),_i={page_id:we.describe("\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\uFF0C\u53EF\u7531 global_search \u83B7\u53D6\u3002")},hi={page_id:we.describe("\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\uFF0C\u53EF\u7531 global_search \u83B7\u53D6\u3002"),selectors:P.array(gi).optional().describe("\u9875\u9762\u7B5B\u9009\u5668\u53D6\u503C\uFF1B\u7B5B\u9009\u5668 ID \u53EF\u4ECE get_page_info \u83B7\u53D6\u3002"),analysis_id:we.optional().describe("\u5206\u6790\u601D\u8DEF ID\uFF1B\u5148\u7528 inspect_page_insight \u67E5\u770B\u53EF\u9009\u9879\u3002"),analysis_name:P.string().trim().min(1).max(512).optional().describe("\u5206\u6790\u601D\u8DEF\u540D\u79F0\uFF1B\u4E0E analysis_id \u4E92\u65A5\u3002"),locale:P.string().trim().min(1).max(64).optional().describe("\u8F93\u51FA\u8BED\u8A00\u533A\u57DF\uFF0C\u4F8B\u5982 zh-CN\u3002")},yi={card_id:we.describe("\u667A\u80FD\u6D1E\u5BDF\u5361\u7247 ID\uFF0C\u5FC5\u987B\u5C5E\u4E8E page_id \u6307\u5B9A\u7684\u9875\u9762\u3002"),page_id:we.describe("\u5361\u7247\u6240\u5C5E\u7684\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\u3002"),selectors:P.array(gi).optional().describe("\u9875\u9762\u7B5B\u9009\u5668\u53D6\u503C\uFF1B\u7B5B\u9009\u5668 ID \u53EF\u4ECE get_page_info \u83B7\u53D6\u3002"),locale:P.string().trim().min(1).max(64).optional().describe("\u8F93\u51FA\u8BED\u8A00\u533A\u57DF\uFF0C\u4F8B\u5982 zh-CN\u3002")},Ii={status:P.literal("success"),page_id:P.string(),page_type:P.string(),prompt_setting:P.unknown(),llm_config:P.unknown()},Yt={status:P.literal("success"),resource_type:P.enum(["page","card"]),page_id:P.string(),card_id:P.string().optional(),content:P.string().optional(),raw:P.unknown()};async function bi(e,t,n){let r=await Xt(e,t.page_id,n);Zt(r);let i=await Ei(e,r.pageId,n),s=await gc(e,r.pageId,n);return E({status:"success",page_id:r.pageId,page_type:r.pageType,prompt_setting:i,llm_config:s})}async function Ti(e,t,n){let r=t.analysis_id?.trim(),i=t.analysis_name?.trim();if(r&&i)throw new Error("analysis_id \u548C analysis_name \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\u3002");let s=await Xt(e,t.page_id,n);Zt(s);let o=Ci(t.selectors);Si(s,o);let c=await Ei(e,s.pageId,n);if(!c.enabled)throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(s.pageId)} \u672A\u5F00\u542F\u667A\u80FD\u6D1E\u5BDF\u3002`);fc(s.pageId,c.analysis,r,i);let a=en({stream:!1,selectorValues:o.length?o:void 0,analysisId:r,analysisName:i,locale:t.locale?.trim()}),u=`/api/page/${encodeURIComponent(s.pageId)}/intelligent-insight/generate`,d=await Ri(e,u,a,"\u4EEA\u8868\u677F",`pgId=${s.pageId}`,n);return Bi("page",s.pageId,void 0,d)}async function wi(e,t,n){let r=await Xt(e,t.page_id,n);Zt(r);let i=t.card_id.trim();mc(r,i);let s=Ci(t.selectors);Si(r,s);let o=en({stream:!1,pgId:r.pageId,selectorValues:s.length?s:void 0,locale:t.locale?.trim()}),c=`/api/card/${encodeURIComponent(i)}/intelligent-insight/generate`,a=await Ri(e,c,o,"\u5361\u7247",`cdId=${i}, pgId=${r.pageId}`,n);return Bi("card",r.pageId,i,a)}async function Xt(e,t,n){let r=t.trim(),i=await e.get(`/api/page/${encodeURIComponent(r)}`,{signal:n}),s=J(i),o=U(s.pgType);if(!o)throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(r)} \u54CD\u5E94\u4E2D\u7F3A\u5C11 pgType\u3002`);if(!Array.isArray(s.cards))throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(r)} \u54CD\u5E94\u4E2D\u7F3A\u5C11 cards\u3002`);let c=new Map;for(let a of s.cards){let u=J(a),d=U(u.cdId);d&&c.set(d,U(u.cdType))}return{pageId:r,pageType:o,cardTypes:c}}function Zt(e){if(e.pageType!=="PAGE")throw new Error(`\u9875\u9762 ${JSON.stringify(e.pageId)} \u4E0D\u652F\u6301\u667A\u80FD\u6D1E\u5BDF\uFF1A\u4EC5\u652F\u6301 pgType=PAGE\uFF0C\u5F53\u524D pgType=${e.pageType}\u3002`)}function mc(e,t){let n=e.cardTypes.get(t);if(n===void 0)throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(e.pageId)} \u4E2D\u4E0D\u5B58\u5728\u6216\u5F53\u524D\u7528\u6237\u4E0D\u53EF\u89C1\u5361\u7247 ${JSON.stringify(t)}\u3002`);if(n!=="INTELLIGENT_INSIGHT")throw new Error(`\u5361\u7247 ${JSON.stringify(t)} \u4E0D\u662F\u667A\u80FD\u6D1E\u5BDF\u5361\u7247\uFF1A\u4EC5\u652F\u6301 cdType=INTELLIGENT_INSIGHT\uFF0C\u5F53\u524D cdType=${n}\u3002`)}function Ci(e=[]){let t=new Map;for(let n of e){let r=n.selector_id.trim(),i=t.get(r)??[];i.push(...n.values.map(s=>s.trim())),t.set(r,i)}return[...t].map(([n,r])=>({selectorId:n,defaultValue:r}))}function Si(e,t){let n=new Set(["SELECTOR","TREE_SELECTOR","MERGE_SELECTOR","CUSTOM_SELECTOR"]);for(let r of t){let i=e.cardTypes.get(r.selectorId);if(i===void 0)throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(e.pageId)} \u4E2D\u4E0D\u5B58\u5728\u7B5B\u9009\u5668 ${JSON.stringify(r.selectorId)}\u3002`);if(!n.has(i))throw new Error(`\u5361\u7247 ${JSON.stringify(r.selectorId)} \u4E0D\u662F\u9875\u9762\u7B5B\u9009\u5668\uFF08cdType=${i}\uFF09\u3002`)}}async function Ei(e,t,n){let r=await e.get(`/api/prompt-setting/PAGE/${encodeURIComponent(t)}`,{signal:n}),i=J(r);if(!U(i.resourceId))return{enabled:!1,analysis:[]};let s=J(i.content),o=Array.isArray(s.analysis)?s.analysis.map(J).map(c=>({id:U(c.id),name:U(c.name)})):[];return{enabled:i.enabled===!0,analysis:o}}function fc(e,t,n,r){if(n&&!t.some(i=>i.id===n))throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(e)} \u4E2D\u4E0D\u5B58\u5728 analysisId=${JSON.stringify(n)}\u3002`);if(r&&!t.some(i=>i.name===r))throw new Error(`\u4EEA\u8868\u677F ${JSON.stringify(e)} \u4E2D\u4E0D\u5B58\u5728 analysisName=${JSON.stringify(r)}\u3002`)}async function gc(e,t,n){let r=J(await e.get(`/api/llm-config/resource/${encodeURIComponent(t)}`,{signal:n})),i=U(r.llmConfigId),s=U(r.name);if(i&&i!=="default")return Kt(i,s,!1);let o=await e.get("/api/llm-config/feature-default/list",{signal:n}),c=Wt(o).map(J).find(l=>U(l.featureCode).toLowerCase()==="intelligent_insight"),a=U(c?.llmConfigId);if(!a)return Kt("","\u672A\u8BBE\u7F6E",!0);let u=await e.get("/api/llm-config/list",{signal:n}),d=Wt(u).map(J).find(l=>U(l.llmConfigId)===a);return Kt(a,U(d?.name)||s,!0)}function Kt(e,t,n){let r=t||"\u672A\u8BBE\u7F6E";return{llm_config_id:e,name:r,follow_system_default:n,display_name:n?`\u8DDF\u968F\u7CFB\u7EDF\u9ED8\u8BA4\uFF08${r}\uFF09`:r}}async function Ri(e,t,n,r,i,s){try{return await e.post(t,n,{signal:s})}catch(o){if(o instanceof _e&&[404,405].includes(o.status)){let a="\u5F53\u524D BI \u4E0D\u652F\u6301\u8BE5\u63A5\u53E3\uFF0C\u8BF7\u5347\u7EA7 BI \u540E\u91CD\u8BD5\u3002";throw new Error(`\u751F\u6210${r}\u6D1E\u5BDF\u5931\u8D25\uFF08${i}\uFF09\uFF1A${a}`)}if(o instanceof _e&&o.status===403&&_c(o,1030))throw new Error(`\u751F\u6210${r}\u6D1E\u5BDF\u5931\u8D25\uFF08${i}\uFF09\uFF1A\u670D\u52A1\u7AEF\u8981\u6C42\u4F7F\u7528 Personal Access Token (PAT)\uFF0C\u8BF7\u6539\u7528 PAT \u540E\u91CD\u8BD5\u3002`,{cause:o});let c=o instanceof Error?o.message:String(o);throw new Error(`\u751F\u6210${r}\u6D1E\u5BDF\u5931\u8D25\uFF08${i}\uFF09\uFF1A${c}`,{cause:o})}}function _c(e,t){return new RegExp(`["']?status["']?\\s*:\\s*${t}(?:\\D|$)`).test(e.message)}function Bi(e,t,n,r){let i=hc(r);return E(en({status:"success",resource_type:e,page_id:t,card_id:n,content:i,raw:r}),{text:i??r})}function hc(e){let t=J(Wt(J(e).choices)[0]);return U(J(t.message).content)||void 0}function J(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Wt(e){return Array.isArray(e)?e:[]}function U(e){return typeof e=="string"?e.trim():""}function en(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var yc=5e3;function Ai(e,t,n){t("inspect_page_insight")&&e("inspect_page_insight",{title:"Inspect Page Insight",description:"\u68C0\u67E5\u666E\u901A\u4EEA\u8868\u677F\u662F\u5426\u5F00\u542F\u667A\u80FD\u6D1E\u5BDF\uFF0C\u5E76\u8FD4\u56DE\u53EF\u7528\u5206\u6790\u601D\u8DEF ID/\u540D\u79F0\u548C LLM \u914D\u7F6E\u6458\u8981\u3002\u4E0D\u4F1A\u8FD4\u56DE\u63D0\u793A\u8BCD\u6B63\u6587\uFF1B\u9875\u9762 ID \u53EF\u7531 global_search \u83B7\u53D6\u3002",inputSchema:_i,outputSchema:Ii},(r,i)=>n.run(({client:s,signal:o})=>bi(s,r,o),i,"inspect_page_insight")),t("generate_page_insight")&&e("generate_page_insight",{title:"Generate Page Insight",description:"\u4E3A\u5DF2\u5F00\u542F\u667A\u80FD\u6D1E\u5BDF\u7684\u666E\u901A\u4EEA\u8868\u677F\u751F\u6210\u5B8C\u6574\u975E\u6D41\u5F0F\u6D1E\u5BDF\u3002\u8C03\u7528\u524D\u901A\u5E38\u5148\u7528 inspect_page_insight \u9009\u62E9 analysis_id/analysis_name\uFF1B\u7B5B\u9009\u5668 ID \u53EF\u4ECE get_page_info \u83B7\u53D6\u3002",inputSchema:hi,outputSchema:Yt},(r,i)=>n.run(({client:s,signal:o})=>Ti(s,r,o),i,"generate_page_insight")),t("generate_card_insight")&&e("generate_card_insight",{title:"Generate Card Insight",description:"\u4E3A\u9875\u9762\u4E2D\u7684 INTELLIGENT_INSIGHT \u5361\u7247\u751F\u6210\u5B8C\u6574\u975E\u6D41\u5F0F\u6D1E\u5BDF\u3002\u5FC5\u987B\u540C\u65F6\u63D0\u4F9B\u5361\u7247\u6240\u5C5E page_id\uFF1B\u5361\u7247\u548C\u7B5B\u9009\u5668 ID \u53EF\u4ECE get_page_info \u83B7\u53D6\u3002",inputSchema:yi,outputSchema:Yt},(r,i)=>n.run(({client:s,signal:o})=>wi(s,r,o),i,"generate_card_insight")),t("list_dashboard_agents")&&e("list_dashboard_agents",{title:"List Dashboard Agents",description:"\u67E5\u8BE2\u5F53\u524D\u7528\u6237\u53EF\u8BBF\u95EE\u7684 Dashboard Agent \u5217\u8868\uFF0C\u8FD4\u56DE agent_id \u4F9B\u8BE6\u60C5\u6216\u63D0\u95EE\u5DE5\u5177\u4F7F\u7528\u3002",inputSchema:ni},(r,i)=>n.run(({client:s,signal:o})=>ci(s,r,o),i,"list_dashboard_agents")),t("get_dashboard_agent")&&e("get_dashboard_agent",{title:"Get Dashboard Agent",description:"\u6309 agent_id \u83B7\u53D6 Dashboard Agent \u8BE6\u60C5\u548C\u4E13\u5BB6\u5217\u8868\uFF1Bexpert_id \u53EF\u4EA4\u7ED9 ask_dashboard_agent\u3002",inputSchema:ri},(r,i)=>n.run(({client:s,signal:o})=>ui(s,r,o),i,"get_dashboard_agent")),t("ask_dashboard_agent")&&e("ask_dashboard_agent",{title:"Ask Dashboard Agent",description:"\u5411 Dashboard Agent \u63D0\u95EE\uFF0C\u5E76\u5728\u4E00\u6B21\u975E\u6D41\u5F0F\u8C03\u7528\u5185\u521B\u5EFA\u6D88\u606F\u3001\u8F6E\u8BE2\u4EFB\u52A1\u3001\u8BFB\u53D6\u6700\u7EC8\u56DE\u7B54\u3002\u4F20 session_id \u53EF\u7EE7\u7EED\u8FFD\u95EE\uFF0C\u4F20 expert_id \u53EF\u6307\u5B9A\u4E13\u5BB6\uFF1B\u6700\u957F\u7B49\u5F85\u540C\u65F6\u53D7 BI_REQUEST_TIMEOUT_MS \u9650\u5236\u3002",inputSchema:oi,outputSchema:ai},(r,i)=>n.run(({client:s,signal:o})=>pi(s,r,o),i,"ask_dashboard_agent",{abortRecoveryGraceMs:yc})),t("list_dashboard_agent_sessions")&&e("list_dashboard_agent_sessions",{title:"List Dashboard Agent Sessions",description:"\u6309 agent_id \u67E5\u8BE2 Dashboard Agent \u7684\u5386\u53F2\u4F1A\u8BDD\uFF0C\u8FD4\u56DE session_id \u4F9B\u67E5\u770B\u6D88\u606F\u6216\u7EE7\u7EED\u8FFD\u95EE\u3002",inputSchema:ii},(r,i)=>n.run(({client:s,signal:o})=>di(s,r,o),i,"list_dashboard_agent_sessions")),t("list_dashboard_agent_messages")&&e("list_dashboard_agent_messages",{title:"List Dashboard Agent Messages",description:"\u6309 session_id \u67E5\u8BE2 Dashboard Agent \u4F1A\u8BDD\u4E2D\u7684\u5386\u53F2\u95EE\u9898\u3001\u56DE\u7B54\u548C\u4E13\u5BB6\u4FE1\u606F\u3002",inputSchema:si},(r,i)=>n.run(({client:s,signal:o})=>li(s,r,o),i,"list_dashboard_agent_messages"))}import{z as m}from"zod";var an=m.enum(["asc","desc"]),Ic=m.enum(["EQ","NE","IN","NI","GT","GE","LT","LE","BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN","IS_NULL","NOT_NULL","CONTAINS","NOT_CONTAINS","STARTSWITH","NOT_STARTSWITH","ENDSWITH","NOT_ENDSWITH","STARTSWITH_USER_PROPERTIES","STARTSWITH_GLOBAL_PARAMS"]),Oi=new Set(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN"]),nn=new Set(["IS_NULL","NOT_NULL"]),Ui=m.object({field:m.string().min(1).describe("\u7B5B\u9009\u5B57\u6BB5\u540D\u79F0\u6216\u5B57\u6BB5 ID\u3002"),operator:Ic.describe("BI \u539F\u751F\u7B5B\u9009\u64CD\u4F5C\u7B26\uFF0C\u4F8B\u5982 GE/LE/NI/CONTAINS\u3002\u533A\u95F4\u64CD\u4F5C\u7B26\u9700\u8981\u4F20\u4E24\u4E2A\u503C\u3002"),values:m.array(m.union([m.string(),m.number(),m.boolean()])).optional().describe("\u7B5B\u9009\u503C\u3002IS_NULL/NOT_NULL \u4E0D\u9700\u8981\u4F20\u503C\u3002"),fd_id:m.string().min(1).optional().describe("\u5DF2\u77E5\u5B57\u6BB5 ID \u65F6\u53EF\u76F4\u63A5\u6307\u5B9A\u3002")}).superRefine((e,t)=>{let n=e.values?.length??0;nn.has(e.operator)&&n>0&&t.addIssue({code:m.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u4E0D\u63A5\u53D7\u7B5B\u9009\u503C\u3002`}),Oi.has(e.operator)&&n!==2&&t.addIssue({code:m.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u9700\u8981\u6070\u597D 2 \u4E2A\u503C\u3002`}),!Oi.has(e.operator)&&!nn.has(e.operator)&&n<1&&t.addIssue({code:m.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u81F3\u5C11\u9700\u8981 1 \u4E2A\u503C\u3002`})}),bc=m.object({field:m.string().min(1).describe("\u6392\u5E8F\u5B57\u6BB5\u540D\u79F0\u6216\u5B57\u6BB5 ID\u3002"),direction:an.describe("\u6392\u5E8F\u65B9\u5411\u3002")}),Tc=m.object({type:m.enum(["compare","xtd","last","recent","percentage","rank_top"]),compare:m.enum(["yoy","mom","qoq","wow","dod"]).optional(),compare_value:m.enum(["value","rate","rawdata"]).optional(),xtd:m.enum(["ytd","qtd","mtd","wtd","dtd"]).optional(),recent:m.string().regex(/^[1-9]\d*[dwmqy]$/).optional(),recent_base:m.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),percentage_dim:m.string().min(1).optional(),rank_top:m.number().int().positive().optional(),rank_order:an.optional(),rank_dim:m.string().min(1).optional()}),Ni={keyword:m.string().min(1).optional().describe("\u6307\u6807\u540D\u79F0\u5173\u952E\u8BCD\u3002"),project_id:m.string().min(1).optional().describe("\u6307\u6807\u4E3B\u9898 ID\uFF1B\u4E0D\u4F20\u5219\u8DE8\u53EF\u8BBF\u95EE\u4E3B\u9898\u641C\u7D22\u3002"),dir_id:m.string().min(1).optional().describe("\u76EE\u5F55 ID\u3002"),status:m.string().min(1).optional().describe("\u4E0A\u7EBF\u72B6\u6001\uFF0C\u4F20\u6307\u6807\u5E73\u53F0\u7684\u72B6\u6001\u4EE3\u7801\uFF1APUBLISHED\uFF08\u5DF2\u4E0A\u7EBF\uFF09\u3001UNPUBLISHED\uFF08\u672A\u4E0A\u7EBF\uFF09\u3002"),sub_types:m.array(m.string().min(1)).optional().describe("\u6307\u6807\u7C7B\u578B\u4EE3\u7801\u5217\u8868\uFF0C\u4F8B\u5982 ATOMIC\uFF08\u539F\u5B50\uFF09\u3001DERIVED\uFF08\u884D\u751F\uFF09\u3001COMPOSITE\uFF08\u590D\u5408\uFF09\u3002"),order_by:m.enum(["utimeDesc","utimeAsc"]).optional().describe("\u6392\u5E8F\u65B9\u5F0F\uFF1AutimeDesc \u6309\u66F4\u65B0\u65F6\u95F4\u5012\u5E8F\uFF0CutimeAsc \u6309\u66F4\u65B0\u65F6\u95F4\u6B63\u5E8F\u3002"),limit:m.number().int().positive().max(200).optional().default(20).describe("\u6700\u591A\u8FD4\u56DE\u6761\u6570\u3002")},Li={project_id:m.string().min(1).optional().describe("\u6307\u6807\u4E3B\u9898 ID\u3002"),keyword:m.string().min(1).optional().describe("\u540D\u79F0\u5173\u952E\u8BCD\uFF0C\u53EF\u5339\u914D\u4E3B\u9898\u3001\u76EE\u5F55\u6216\u6307\u6807\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},qi={metric_id:m.string().min(1).describe("\u6307\u6807 ID\u3002"),brief:m.boolean().optional().describe("\u662F\u5426\u53EA\u8FD4\u56DE\u8BE6\u60C5\uFF0C\u4E0D\u8865\u5145\u8840\u7F18\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u8BE6\u60C5\u3002")},Gi={metric_id:m.string().min(1).describe("\u6307\u6807 ID\u3002"),dimensions:m.array(m.string().min(1)).optional().describe("\u6309\u540D\u79F0\u6216\u5B57\u6BB5 ID \u6307\u5B9A\u67E5\u8BE2\u7EF4\u5EA6\u3002"),filters:m.array(Ui).optional().describe("\u7B5B\u9009\u6761\u4EF6\u3002"),combine_type:m.enum(["AND","OR"]).optional().default("AND").describe("\u591A\u4E2A\u7B5B\u9009\u6761\u4EF6\u7684\u7EC4\u5408\u65B9\u5F0F\u3002"),sort:m.array(bc).optional().describe("\u6392\u5E8F\u5B57\u6BB5\u3002"),columns:m.array(m.string().min(1)).optional().describe("\u7ED3\u679C\u5217\u88C1\u526A\u3002"),limit:m.number().int().positive().max(1e3).optional().default(100).describe("\u6700\u591A\u8FD4\u56DE\u884C\u6570\u3002"),advanced_calc:Tc.optional().describe("\u9AD8\u7EA7\u8BA1\u7B97\uFF0C\u53EA\u4F7F\u7528\u6307\u6807\u6570\u636E\u67E5\u8BE2\u63A5\u53E3\u8868\u8FBE\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},Ji={keyword:m.string().min(1).optional().describe("\u6307\u6807\u6811\u540D\u79F0\u5173\u952E\u8BCD\u3002"),project_id:m.string().min(1).optional().describe("\u6839\u6307\u6807\u6240\u5C5E\u4E3B\u9898 ID\u3002"),parent_dir_id:m.string().min(1).optional().describe("\u6307\u6807\u6811\u76EE\u5F55 ID\u3002"),order_by:m.enum(["utimeDesc","utimeAsc"]).optional().default("utimeDesc").describe("\u6392\u5E8F\u65B9\u5F0F\uFF1AutimeDesc \u6309\u66F4\u65B0\u65F6\u95F4\u5012\u5E8F\uFF08\u9ED8\u8BA4\uFF09\uFF0CutimeAsc \u6309\u66F4\u65B0\u65F6\u95F4\u6B63\u5E8F\u3002"),limit:m.number().int().positive().max(200).optional().default(20).describe("\u6700\u591A\u8FD4\u56DE\u6761\u6570\u3002")},Hi={metric_tree_id:m.string().min(1).describe("\u6307\u6807\u6811 ID\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u8BE6\u60C5\u3002")},$i={metric_tree_id:m.string().min(1).describe("\u6307\u6807\u6811 ID\u3002"),target:m.enum(["metric","dimension","scan"]).describe("\u5F52\u56E0\u7C7B\u578B\uFF1A\u6307\u6807\u62C6\u89E3\u3001\u5355\u7EF4\u62C6\u89E3\u6216\u5168\u7EF4\u626B\u63CF\u3002"),dimension:m.string().min(1).optional().describe("target=dimension \u65F6\u6309\u7EF4\u5EA6\u540D\u79F0\u6307\u5B9A\u3002"),dimension_fd_id:m.string().min(1).optional().describe("target=dimension \u65F6\u6309\u5B57\u6BB5 ID \u6307\u5B9A\u3002"),scan_dimensions:m.array(m.string().min(1)).optional().describe("target=scan \u65F6\u6307\u5B9A\u626B\u63CF\u7EF4\u5EA6\u540D\u79F0\u3002"),exclude_dimensions:m.array(m.string().min(1)).optional().describe("target=scan \u65F6\u6392\u9664\u7EF4\u5EA6\u540D\u79F0\u3002"),period:m.string().min(1).optional().describe("\u5F53\u524D\u671F\uFF0C\u914D\u5408 last_period \u8986\u76D6\u9ED8\u8BA4\u65F6\u95F4\u5BF9\u6BD4\u3002"),last_period:m.string().min(1).optional().describe("\u5BF9\u6BD4\u671F\uFF0C\u914D\u5408 period \u8986\u76D6\u9ED8\u8BA4\u65F6\u95F4\u5BF9\u6BD4\u3002"),time_comparison_json:m.record(m.string(),m.unknown()).optional().describe("\u5B8C\u6574\u65F6\u95F4\u5BF9\u6BD4\u914D\u7F6E\u8986\u76D6\u3002"),filters:m.array(Ui).optional().describe("\u5F52\u56E0\u7B5B\u9009\u6761\u4EF6\u3002"),limit:m.number().int().positive().max(200).optional().default(20).describe("metric/dimension \u8FD4\u56DE\u884C\u6570\u3002"),group_limit:m.number().int().positive().max(50).optional().default(5).describe("scan \u6BCF\u4E2A\u7EF4\u5EA6\u8FD4\u56DE\u884C\u6570\u3002"),sort:an.optional().default("desc").describe("\u6309\u8D21\u732E\u503C\u6392\u5E8F\u65B9\u5411\u3002"),raw:m.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},ne={summary:m.unknown().optional(),items:m.array(m.unknown()).optional(),tree:m.unknown().optional(),detail:m.unknown().optional(),columns:m.array(m.unknown()).optional(),rows:m.array(m.unknown()).optional(),raw:m.unknown().optional(),diagnostic:m.unknown().optional(),status:m.string().optional()};async function Fi(e,t,n){let r=new V(e,t);try{let i=n.project_id?[n.project_id]:await wc(r),s=[];for(let c of i){let a=await r.searchMetrics({projectId:c,dirId:n.dir_id,keyword:n.keyword,status:n.status,subTypes:n.sub_types,orderBy:n.order_by});if(s.push(...Cc(a)),s.length>=n.limit)break}let o=Qc(s.map(rn),"metric_id").slice(0,n.limit);return E({summary:{keyword:n.keyword,project_id:n.project_id,count:o.length,searched_project_count:i.length,truncated:o.length<s.length},items:o})}catch(i){return ae(i,"search_metrics")}}async function zi(e,t,n){let r=new V(e,t);try{try{let i=await r.listMetricFullTree({projectId:n.project_id,keyword:n.keyword});return E({summary:{source:"full-tree"},tree:Ec(i),raw:n.raw?i:void 0})}catch(i){let s=n.project_id?[{id:n.project_id}]:await Xi(r),o=[];for(let c of s){let a=p(c.id);if(!a)continue;let u=await r.listMetricDirectoryTree(a);o.push({id:a,name:p(c.name)||a,type:"project",project_id:a,children:Rc(u,a)})}return E({summary:{source:"directory-fallback",fallback_reason:i instanceof Error?i.message:String(i)},tree:o})}}catch(i){return ae(i,"list_metric_catalog")}}async function Vi(e,t,n){let r=new V(e,t);try{let i=await r.getMetricDetail(n.metric_id),s=Bc(i),o,c;if(!n.brief){let a=p(i.uniformResourceType)||"METRIC_PLATFORM_METRIC";try{o=Ac(await r.getMetricLineage(n.metric_id,a))}catch(u){c=u instanceof re?u.detail:String(u)}}return E({detail:{...s,lineage:o,lineage_error:c},raw:n.raw?i:void 0})}catch(i){return ae(i,"get_metric_detail")}}async function Qi(e,t,n){let r=new V(e,t);try{let i=await r.getMetricDetail(n.metric_id);if(!n.advanced_calc){let c=Pi(i,n);if("unsupported"in c)return H("query_metric_data",c.unsupported);let a=async l=>{let f=await r.getCardEditSession(c.cardId),y=p(f.sessionId);if(!y)throw new Error("\u6307\u6807\u5361\u7247\u9884\u89C8\u4F1A\u8BDD\u54CD\u5E94\u7F3A\u5C11 sessionId\u3002");return c.dimensions.length&&await Oc(r,c.cardId,y,c.dimensions),{raw:await r.queryCardEditData(c.cardId,y,l),sessionId:y}};if(n.combine_type==="OR"&&(n.filters?.length??0)>1){let l=[],f=[];for(let y of n.filters??[]){let h=Pi(i,{...n,combine_type:"AND",filters:[y]});if("unsupported"in h)return H("query_metric_data",h.unsupported);let{raw:T}=await a(h.body);f.push(T),l.push(...xi(T))}return mt(i,l,n,{mode:"metric_card_preview_data",card_id:c.cardId,card_kind:c.cardKind,combine_type:"OR",query_count:f.length},n.raw?f:void 0)}let{raw:u,sessionId:d}=await a(c.body);return mt(i,xi(u),n,{mode:"metric_card_preview_data",card_id:c.cardId,card_kind:c.cardKind,session_id:d,request_body:c.body},n.raw?u:void 0)}let s=ki(i,n);if("unsupported"in s)return H("query_metric_data",s.unsupported);if(n.combine_type==="OR"&&(n.filters?.length??0)>1){let c=[],a=[];for(let u of n.filters??[]){let d=ki(i,{...n,combine_type:"AND",filters:[u]});if("unsupported"in d)return H("query_metric_data",d.unsupported);let l=await r.queryMetricData(d.input);a.push(l),c.push(...Le(l))}return mt(i,c,n,{mode:"metric_data_v2",combine_type:"OR",query_count:a.length},n.raw?a:void 0)}let o=await r.queryMetricData(s.input);return mt(i,Le(o),n,{mode:"metric_data_v2",request_body:s.input},n.raw?o:void 0)}catch(i){return Vc(i)?H("query_metric_data",{capability:"metric_data_v2_unavailable",message:"\u5F53\u524D BI \u73AF\u5883\u672A\u63D0\u4F9B /api/metric-platform/metric-data/v2\uFF0C\u65E0\u6CD5\u6267\u884C\u9AD8\u7EA7\u8BA1\u7B97\u67E5\u8BE2\u3002",diagnostic:i.detail}):ae(i,"query_metric_data")}}async function Ki(e,t,n){let r=new V(e,t);try{let i=await r.searchMetricTrees({keyword:n.keyword,projectId:n.project_id,parentDirId:n.parent_dir_id,orderBy:n.order_by}),s=Sc(i).map(rs).slice(0,n.limit);return E({summary:{keyword:n.keyword,count:s.length},items:s})}catch(i){return ae(i,"search_metric_trees")}}async function Wi(e,t,n){let r=new V(e,t);try{let i=await r.getMetricTreeDetail(n.metric_tree_id);return E({detail:jc(i),raw:n.raw?i:void 0})}catch(i){return ae(i,"get_metric_tree_detail")}}async function Yi(e,t,n){let r=new V(e,t);try{if(n.target==="dimension"&&!n.dimension&&!n.dimension_fd_id)return H("query_metric_tree_attribution",{capability:"dimension_attribution_requires_dimension",message:"target=dimension \u65F6\u5FC5\u987B\u6307\u5B9A dimension \u6216 dimension_fd_id\u3002"});let i=await r.getMetricTreeDetail(n.metric_tree_id),s=p(i.metricId);if(!s)return H("query_metric_tree_attribution",{capability:"missing_root_metric",message:"\u6307\u6807\u6811\u8BE6\u60C5\u7F3A\u5C11\u6839\u6307\u6807 ID\uFF0C\u65E0\u6CD5\u6267\u884C\u5F52\u56E0\u3002"});let o=await r.getMetricDetail(s),c=qe(o),a=cn(n.filters??[],c);if("unsupported"in a)return H("query_metric_tree_attribution",a.unsupported);let u=a.filters,d=Uc(i,n);if("unsupported"in d)return H("query_metric_tree_attribution",d.unsupported);if(n.target==="metric"){let h=Nc(i,d.value,u),T=await r.queryMetricTreeDecompose(n.metric_tree_id,h);return tn(i,"metric",Lc(T),n,n.raw?T:void 0)}if(n.target==="dimension"){let h=Ce(c,n.dimension,n.dimension_fd_id);if(!h)return H("query_metric_tree_attribution",{capability:"unknown_dimension",message:`\u7EF4\u5EA6\u4E0D\u5B58\u5728\u6216\u4E0D\u9002\u7528\u4E8E\u6839\u6307\u6807\uFF1A${n.dimension??n.dimension_fd_id}`});let T=vi(i,h,d.value,u,n.limit,n.sort),x=await r.queryMetricTreeDrill(n.metric_tree_id,T);return tn(i,"dimension",Mi(x,p(h.name)),n,n.raw?x:void 0)}let l=qc(i,c,n.scan_dimensions,n.exclude_dimensions);if(!l.length)return H("query_metric_tree_attribution",{capability:"no_scan_dimensions",message:"\u6CA1\u6709\u53EF\u626B\u63CF\u7EF4\u5EA6\uFF0C\u8BF7\u6307\u5B9A scan_dimensions \u6216\u68C0\u67E5\u6307\u6807\u6811\u7EF4\u5EA6\u62C6\u89E3\u914D\u7F6E\u3002"});let f=[],y=[];for(let h of l){let T=vi(i,h,d.value,u,n.group_limit,n.sort),x=await r.queryMetricTreeDrill(n.metric_tree_id,T);y.push({dimension:p(h.name),raw:x}),f.push(...Mi(x,p(h.name)).slice(0,n.group_limit))}return tn(i,"scan",f,n,n.raw?y:void 0,{scanned_dimensions:l.map(h=>p(h.name))})}catch(i){return ae(i,"query_metric_tree_attribution")}}async function wc(e){return(await Xi(e)).map(t=>p(t.id)).filter(Boolean)}async function Xi(e){return O(await e.listProjects()).map(b).filter(Boolean)}function Cc(e){let t=b(e);return O(t.contents??t.items??t.data)}function Sc(e){let t=b(e);return O(t.data??t.contents??t.items)}function rn(e){return _({metric_id:p(e.id),name:p(e.name),project_id:p(e.projectId),dir_id:B(e.parentDirId,e.dirId),status:p(e.status),sub_type:p(e.subType),description:p(e.desc),dataset:os(e.dsInfo),statistics:e.statisticsData,creator:gt(e.creator),business_owner:gt(e.businessOwner),updated_at:p(e.utime),raw:e})}function Ec(e){return O(e).map(t=>Zi(t,void 0))}function Zi(e,t){let n=!!e.isMetric,r=p(e.id),i=!t&&!n?r:t;return _({id:r,name:p(e.name),type:n?"metric":t?"directory":"project",project_id:i,dir_id:!n&&t?r:void 0,metric_id:n?r:void 0,parent_id:p(e.parentId),children:O(e.children).map(s=>Zi(s,i))})}function Rc(e,t){let n=b(e);return p(n.id)?[sn(n,t)]:O(n.contents??n.children).map(r=>sn(r,t))}function sn(e,t){return _({id:p(e.id),name:p(e.name),type:"directory",project_id:t,dir_id:p(e.id),parent_id:B(e.parentDirId,e.parentId),can_use:M(e.canUse),can_manage:M(e.canManage),metric_count:ji(e.metricCnt),all_metric_count:ji(e.allMetricCnt),children:O(e.contents??e.children).map(n=>sn(n,t))})}function Bc(e){return _({metric_id:p(e.id),name:p(e.name),english_name:p(e.engName),status:p(e.status),sub_type:p(e.subType),description:p(e.desc),project_id:p(e.projectId),project_name:p(e.projectName),dir_id:B(e.parentDirId,e.dirId),dir_path:as(e.dirPath),dataset:os(e.dsInfo),source_fields:O(e.fdInfos).map(ft),aggregation:B(e.aggrType,e.aggregationType),formula:B(e.formula,e.expression),derive_setting:e.deriveSetting,format:e.format,applicable_dimensions:qe(e),time_dimension:b(e.timeDim)?ft(b(e.timeDim)):void 0,business_attributes:O(e.bizAttrs).map(zc),business_owner:gt(e.businessOwner),creator:gt(e.creator),referenced_metrics:O(e.referencedMetrics).map(rn),base_metric:b(e.baseMetric)?rn(b(e.baseMetric)):void 0,linked_metric_id:p(e.linkMetricId),statistics:e.statisticsData,permissions:_({can_use:M(e.canUse),can_manage:M(e.canManage)}),created_at:p(e.ctime),updated_at:p(e.utime),has_draft:M(e.hasDraft)})}function Ac(e){let t=b(e);return _({current:t.crtNode,upstream:t.backwardAtlas,downstream:t.forwardAtlas})}function ki(e,t){let n=p(e.name),r=p(e.projectId);if(!n||!r)return{unsupported:{capability:"metric_detail_incomplete",message:"\u6307\u6807\u8BE6\u60C5\u7F3A\u5C11 name \u6216 projectId\u3002"}};let i=qe(e),s=[...i,...is(e)],o=[];for(let d of t.dimensions??[]){let l=Ce(i,d);if(!l)return{unsupported:{capability:"unsupported_dimension",parameter:d,supported_dimensions:i}};o.push(Gc(l))}let c=Pc(e,i,t.advanced_calc);if("unsupported"in c)return{unsupported:c.unsupported};let a=cn(t.filters??[],s);if("unsupported"in a)return{unsupported:a.unsupported};let u=es(t.sort??[],s);return"unsupported"in u?{unsupported:u.unsupported}:{input:{projectId:r,metricId:t.metric_id,metricName:n,metricItems:[_({name:n,alias:xc(n,t.advanced_calc),advCalc:c.value})],dimensions:o,filters:a.filters,sorting:u.sorting,limit:t.limit}}}function Pi(e,t){let n=b(e.metricChartConfig),r=p(n.metricChartCdId),i=p(n.metricValueCdId),s=r||i;if(!s)return{unsupported:{capability:"missing_metric_card",message:"\u6307\u6807\u8BE6\u60C5\u7F3A\u5C11 metricChartConfig.metricChartCdId \u6216 metricValueCdId\uFF0C\u65E0\u6CD5\u8D70\u53EA\u8BFB\u5361\u7247\u53D6\u6570\u3002"}};let o=[...qe(e),...is(e)],c=[];for(let f of t.dimensions??[]){let y=Ce(o,f);if(!y||p(y.meta_type).toUpperCase()==="METRIC")return{unsupported:{capability:"unsupported_dimension",parameter:f,supported_dimensions:qe(e)}};c.push(Jc(y))}let a=cn(t.filters??[],o);if("unsupported"in a)return{unsupported:a.unsupported};let u=a.filters,d=es(t.sort??[],o);if("unsupported"in d)return{unsupported:d.unsupported};let l=d.sorting;return{cardId:s,cardKind:r?"chart":"value",dimensions:c,body:_({limit:t.limit,filters:u.length?u:void 0,combineType:t.filters?.length?t.combine_type:void 0,sorting:l.length?l:void 0})}}async function Oc(e,t,n,r){let i=cs(await e.getCardEditMeta(t))??{},s=kc(i);s.row=r,s.sorting=[],await e.modifyCardEditMeta(t,n,i)}function kc(e){let t=b(e.content),n=b(t.meta),r=b(n.chartMain),i=b(r.zoneData);if(!Object.keys(i).length)throw new Error("\u6307\u6807\u5361\u7247\u7F16\u8F91\u914D\u7F6E\u7F3A\u5C11 content.meta.chartMain.zoneData\u3002");return t.meta=n,n.chartMain=r,r.zoneData=i,e.content=t,i}function Pc(e,t,n){if(!n)return{value:void 0};let r=b(e.timeDim),i=p(r?.fdId);if(["compare","last"].includes(n.type)&&!i)return{unsupported:{capability:"advanced_calc_requires_time_dimension",parameter:n.type}};if(n.type==="compare"){let c=n.compare??"yoy",a={yoy:["YEAR","YEAR"],mom:["MONTH","MONTH"],qoq:["QUARTER","QUARTER"],wow:["WEEK","WEEK"],dod:["DAY","DAY"]},[u,d]=a[c];return{value:{advType:"COMPARATIVE",advValue:{advType:"COMPARATIVE",dateFdId:i,valueType:(n.compare_value??"value").toUpperCase(),offset:1,offsetType:u,granularity:d}}}}if(n.type==="xtd")return{value:{advType:"XTD",advValue:{advType:"XTD",granularity:{ytd:"YEAR",qtd:"QUARTER",mtd:"MONTH",wtd:"WEEK",dtd:"DAY"}[n.xtd??"ytd"],includeCurrentValue:!0}}};if(n.type==="last")return{value:{advType:"LAST",advValue:{advType:"LAST",dateFdId:i}}};if(n.type==="recent"){let c=Dc(n.recent??"7d");return c?{value:{advType:"RECENT_X",advValue:{advType:"RECENT_X",granularity:c.granularity,baselineOffset:[c.count-1,0],includeCurrentValue:!0,baseline:n.recent_base}}}:{unsupported:{capability:"invalid_recent_spec",parameter:n.recent}}}if(n.type==="percentage"){let c=n.percentage_dim?Ce(t,n.percentage_dim):void 0;return n.percentage_dim&&!c?{unsupported:{capability:"unknown_percentage_dimension",parameter:n.percentage_dim}}:{value:{advType:"LEVEL_PERCENTAGE",advValue:_({advType:"LEVEL_PERCENTAGE",auto:!c,tfdId:p(c?.fd_id)})}}}let o=n.rank_dim?Ce(t,n.rank_dim):void 0;return n.rank_dim&&!o?{unsupported:{capability:"unknown_rank_dimension",parameter:n.rank_dim}}:{value:{advType:"RANK",advValue:_({advType:"RANK",calDimension:"FIELD",rankType:"RANK",sorting:(n.rank_order??"desc").toUpperCase(),tfdId:p(o?.fd_id),topN:{topType:"CUSTOM_NUMBER",count:n.rank_top??10,calculationType:"COUNT"}})}}}function xc(e,t){return t?t.type==="compare"?`${e}_${t.compare??"yoy"}`:t.type==="xtd"?`${e}_${t.xtd??"ytd"}`:t.type==="recent"?`${e}_recent_${t.recent??"7d"}`:`${e}_${t.type}`:e}function Dc(e){let t=e.match(/^([1-9]\d*)([dwmqy])$/);if(!t)return;let n={d:"DAY",w:"WEEK",m:"MONTH",q:"QUARTER",y:"YEAR"};return{count:Number(t[1]),granularity:n[t[2]]}}function cn(e,t){let n=[];for(let r of e){let i=ts(t,r.field,r.fd_id,"filter");if("unsupported"in i)return{unsupported:i.unsupported};n.push(_({name:i.field.name,fdId:i.field.fdId,fdType:i.field.fdType,metaType:i.field.metaType,filterType:r.operator,filterValue:vc(r)}))}return{filters:n}}function vc(e){return nn.has(e.operator)?[]:e.values??[]}function es(e,t){let n=[];for(let r of e){let i=ts(t,r.field,void 0,"sort");if("unsupported"in i)return{unsupported:i.unsupported};n.push(_({name:i.field.name,ordering:r.direction,key:i.field.fdId,fdId:i.field.fdId,fdType:i.field.fdType,metaType:i.field.metaType}))}return{sorting:n}}function ts(e,t,n,r){let i=Ce(e,t,n),s=r==="filter"?"unsupported_filter_field":"unsupported_sort_field",o=r==="filter"?"\u7B5B\u9009":"\u6392\u5E8F";if(!i)return{unsupported:{capability:s,parameter:t,message:`${o}\u5B57\u6BB5\u65E0\u6CD5\u4ECE\u5F53\u524D\u67E5\u8BE2\u4E0A\u4E0B\u6587\u89E3\u6790\uFF1A${t}`,supported_fields:e.map(f=>_({name:p(f.name),fd_id:p(f.fd_id),meta_type:p(f.meta_type)}))}};let c=p(i.name),a=p(i.fd_id),u=p(i.fd_type),d=p(i.meta_type).toUpperCase(),l=[c?void 0:"name",a?void 0:"fdId",u?void 0:"fdType",d?void 0:"metaType"].filter(f=>!!f);return l.length?{unsupported:{capability:s,parameter:t,message:`${o}\u5B57\u6BB5\u7F3A\u5C11\u5FC5\u8981 BI \u5143\u4FE1\u606F\uFF1A${t}`,missing_metadata:l}}:{field:{name:c,fdId:a,fdType:u,metaType:d}}}function mt(e,t,n,r,i){let s=Hc(t.slice(0,n.limit),n.columns);return E({summary:{metric_id:n.metric_id,metric_name:p(e.name),row_count:s.length,truncated:t.length>s.length},columns:ss(s),rows:s,diagnostic:r,raw:i})}function Le(e){let t=b(e),n=b(t.data)??t,r=O(n.values??n.rows??t.values??t.rows);if(r.length)return r;let i=O(n.columns??t.columns).map(o=>p(b(o)?.name??o)).filter(Boolean),s=O(n.preview??n.contents);return i.length?s.map(o=>{let c=Array.isArray(o)?o:[];return Object.fromEntries(i.map((a,u)=>[a,c[u]]))}):s}function xi(e){let t=b(e),n=b(t.data)??t,r=b(n.chartMain??t.chartMain??b(b(t.content).data).chartMain);if(!Object.keys(r).length)return Le(e);let i=b(r.row),s=b(r.column),o=O(i.fields),c=oe(i.data),a=oe(r.data),u=Mc(s),d=o.map(on).filter(Boolean),l=$c([...d,...u]),f=Math.max(c.length,a.length),y=[];for(let h=0;h<f;h+=1){let T=[];T.push(...oe(c[h]).map(Di)),T.push(...oe(a[h]).map(Di)),T.length&&y.push(Object.fromEntries(T.map((x,N)=>[l[N]??`column_${N+1}`,x])))}return y}function Mc(e){let n=oe(e.data).map((r,i)=>{let s=oe(r).map(ns).filter(Boolean).join("/");return s||on(O(e.fields)[i])||`metric_${i+1}`}).filter(Boolean);return n.length?n:O(e.fields).map(on).filter(Boolean)}function on(e){return B(e.alias,e.title,e.originTitle,e.name,e.fdId,e.id)??""}function ns(e){let t=b(e);return Object.keys(t).length?B(t.title,t.name,t.originTitle,t.alias,t.v,t.value)??"":p(e)}function Di(e){let t=b(e);return Object.keys(t).length?"v"in t?t.v:"value"in t?t.value:ns(e):e}function rs(e){return _({metric_tree_id:p(e.metricTreeId),name:p(e.metricTreeName),root_metric_id:p(e.metricId),root_metric_name:p(e.metricName),project_id:p(e.projectId),project_name:p(e.projectName),parent_dir_id:p(e.parentDirId),dir_path:as(e.dirPath),creator_id:p(e.creatorId),creator_name:p(e.creatorName),can_use:M(e.canUse),can_manage:M(e.canManage),updated_at:p(e.utime)})}function jc(e){let t=b(e.config)??{};return _({...rs(e),dom_id:p(e.domId),created_at:p(e.ctime),time_comparison:t.timeComparisonSetting,comparison_enabled:M(t.comparisonEnabled),contribution_calc_enabled:M(t.contributionCalcEnabled),dimension_decomposition:t.dimensionDecompositionContent,metric_decomposition:t.metricDecompositionContent,permissions:_({can_use:M(e.canUse),can_manage:M(e.canManage)})})}function Uc(e,t){let n=b(e.config)??{},r=t.time_comparison_json??cs(b(n.timeComparisonSetting)),i=M(n.comparisonEnabled)??!!r,s=M(n.contributionCalcEnabled)??!1;if(t.period||t.last_period){if(!t.period||!t.last_period)return{unsupported:{capability:"period_requires_last_period",message:"period \u548C last_period \u9700\u8981\u540C\u65F6\u6307\u5B9A\u3002"}};r=r??{};let o=b(r.advValue)??{};r.advValue=o,o.window={period:[t.period],withMacro:!1};let c=Fc(t.period,t.last_period);if(!c)return{unsupported:{capability:"unsupported_period_granularity",message:"\u76EE\u524D\u4EC5\u652F\u6301 YYYY-MM-DD \u683C\u5F0F\u7684 period/last_period\u3002"}};Object.assign(o,c,{mode:"NORMAL"}),r.advType="COMPARATIVE",i=!0}return{value:{setting:r,comparisonEnabled:i,contributionEnabled:s}}}function Nc(e,t,n){let r=b(e.config)??{},i=b(r.metricDecompositionContent)??{};return _({timeComparisonSetting:t.setting,comparisonEnabled:t.comparisonEnabled,contributionCalcEnabled:!1,metricDecomposeInfo:{metricRelationTree:i.metricRelationTree,filters:n}})}function vi(e,t,n,r,i,s){return _({timeComparisonSetting:n.setting,comparisonEnabled:n.comparisonEnabled,contributionCalcEnabled:n.contributionEnabled,drillInfo:{dimensionFdId:p(t.fd_id),drillFilters:r,nodeNum:i,orderBy:s==="asc"?"contributionAsc":"contributionDesc"}})}function Lc(e){return Le(e).map(t=>_({child_metric:p(b(t.metricInfo)?.name),child_metric_id:p(b(t.metricInfo)?.metricId),current_value:t.currentValue,comparison_value:t.comparisonValue,change_value:t.changeValue,change_rate:t.changeRate,contribution_value:t.contributionValue,contribution_rate:t.contributionRate}))}function Mi(e,t){return Le(e).map((n,r)=>_({dimension:t,dimension_value:Array.isArray(n.dimensionValue)?n.dimensionValue.join("/"):n.dimensionValue,current_value:n.currentValue,comparison_value:n.comparisonValue,change_value:n.changeValue,change_rate:n.changeRate,contribution_value:n.contributionValue,contribution_rate:n.contributionRate,rank:r+1}))}function tn(e,t,n,r,i,s){let o=t==="scan"?n:n.slice(0,r.limit);return E({summary:{metric_tree_id:r.metric_tree_id,metric_tree_name:p(e.metricTreeName),root_metric_id:p(e.metricId),root_metric_name:p(e.metricName),target:t,row_count:o.length,...s},columns:ss(o),rows:o,raw:i})}function qc(e,t,n,r){let i=new Set((n??[]).map(u=>u.trim()).filter(Boolean)),s=new Set((r??[]).map(u=>u.trim()).filter(Boolean)),o=new Map(t.map(u=>[p(u.name),u])),c=new Map(t.map(u=>[p(u.fd_id),u])),a=i.size?[...i].map(u=>o.get(u)).filter(u=>!!u):[];if(!a.length){let u=b(e.config)??{},d=b(u.dimensionDecompositionContent)??{};a=oe(d.decomposableDimensionIds).map(l=>c.get(String(l))).filter(l=>!!l)}return a.length||(a=t),a.filter(u=>!s.has(p(u.name)))}function qe(e){let t=new Set,n=[],r=i=>{if(!i)return;let s=p(i.fdId),o=p(i.name),c=s||o;if(!(!c||t.has(c))){t.add(c),n.push(ft(i));for(let a of O(i.subs))r(a)}};for(let i of O(e.applicableDims))r(i);return r(b(e.timeDim)),n}function is(e){let t=O(e.fdInfos).map(ft);return p(e.name)&&!t.some(n=>p(n.name)===p(e.name))&&t.push(_({id:B(e.id,e.name),fd_id:p(e.id),name:p(e.name),fd_type:B(t[0]?.fd_type,"DOUBLE"),meta_type:"METRIC"})),t}function ft(e){return _({id:B(e.id,e.fdId),fd_id:p(e.fdId),name:p(e.name),fd_type:p(e.fdType),meta_type:p(e.metaType),ds_id:p(e.dsId),granularity:p(e.granularity)})}function Ce(e,t,n){let r=(n??t)?.trim();if(r)return e.find(i=>[i.fd_id,i.id,i.name].map(p).includes(r))}function Gc(e){return _({name:p(e.name),alias:p(e.name),fdType:B(e.fd_type),metaType:"DIM",key:B(e.fd_id,e.id,e.name),fdId:B(e.fd_id),dsId:B(e.ds_id),granularity:B(e.granularity)})}function Jc(e){return _({name:p(e.name),alias:B(e.name),fdType:B(e.fd_type),metaType:"DIM",key:B(e.fd_id,e.id,e.name),fdId:B(e.fd_id),dsId:B(e.ds_id),granularity:B(e.granularity)})}function Hc(e,t){return t?.length?e.map(n=>Object.fromEntries(t.map(r=>[r,n[r]]))):e}function ss(e){return[...new Set(e.flatMap(t=>Object.keys(t)))]}function $c(e){let t=new Map;return e.map((n,r)=>{let i=n||`column_${r+1}`,s=t.get(i)??0;return t.set(i,s+1),s?`${i}_${s+1}`:i})}function Fc(e,t){let n=Date.parse(e),r=Date.parse(t);if(!/^\d{4}-\d{2}-\d{2}$/.test(e)||!/^\d{4}-\d{2}-\d{2}$/.test(t)||Number.isNaN(n)||Number.isNaN(r))return;let i=Math.round((n-r)/864e5);if(!(i<=0))return{offset:i,offsetType:"DAY",granularity:"DAY"}}function os(e){let t=b(e);if(t)return _({dataset_id:p(t.dsId),name:p(t.name)})}function gt(e){let t=b(e);if(t)return _({user_id:B(t.uId,t.id),name:p(t.name),deleted:M(t.isDel)})}function zc(e){return _({id:p(e.id),name:p(e.name),type:p(e.valueType),values:O(e.values)})}function as(e){return O(e).map(t=>p(t.dirName??t.name)).filter(Boolean)}function H(e,t){return E({status:"unsupported",diagnostic:{tool:e,...t}})}function ae(e,t){return e instanceof re?te({operation:t,diagnostic:e.detail}):te({operation:t,message:e instanceof Error?e.message:String(e)})}function Vc(e){return e instanceof re&&e.detail.operation==="queryMetricData"&&e.detail.path==="/api/metric-platform/metric-data/v2"&&/No static resource metric-platform\/metric-data\/v2/i.test(e.detail.message)}function O(e){return Array.isArray(e)?e.map(b).filter(Boolean):[]}function oe(e){return Array.isArray(e)?e:[]}function b(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function p(e){return typeof e=="string"?e:e==null?"":String(e)}function B(...e){return e.map(p).find(t=>t.trim())?.trim()}function M(e){return typeof e=="boolean"?e:void 0}function ji(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Qc(e,t){let n=new Set;return e.filter(r=>{let i=p(r[t]);return!i||n.has(i)?!1:(n.add(i),!0)})}function cs(e){return e?JSON.parse(JSON.stringify(e)):void 0}function us(e,t,n,r,i={}){let s=i.usageTelemetry??new tt({config:n,appVersion:i.appVersion??"unknown"}),o=(a,u,d)=>{let l=e.registerTool,f=Kn(a,d,s),y=async(...h)=>{try{return await f(...h)}catch(T){return De(a,T)}};l.call(e,a,u,y)},c=a=>!r.service||r.service.toolList.includes(a);o("get_bi_capabilities",{title:"Get BI Capabilities",description:"\u83B7\u53D6\u5F53\u524D BI \u73AF\u5883\u7248\u672C\u548C MCP \u529F\u80FD\u542F\u7528\u72B6\u6001\u3002",inputSchema:Xn},(a,u)=>t.run(({client:d,config:l})=>Zn(d,l),u,"get_bi_capabilities")),["chatbi_list_themes","chatbi_query","chatbi_insight_start","chatbi_insight_poll"].some(c)&&(o("chatbi_list_themes",{title:"List ChatBI Themes",description:"\u5217\u51FA\u5F53\u524D\u767B\u5F55\u7528\u6237\u53EF\u8BBF\u95EE\u7684 ChatBI \u4E3B\u9898\uFF0C\u53EF\u7B5B\u9009\u6D1E\u5BDF\u4E3B\u9898\u3002",inputSchema:kr,outputSchema:Rr},(a,u)=>t.run(({config:d})=>vr(d,a),u,"chatbi_list_themes")),o("chatbi_query",{title:"ChatBI Query",description:"\u6267\u884C ChatBI L1 \u540C\u6B65\u95EE\u6570\uFF0C\u7528\u81EA\u7136\u8BED\u8A00\u76F4\u63A5\u63D0\u95EE\uFF0C\u6700\u7701\u4E8B\uFF0C\u9002\u5408\u4E1A\u52A1\u95EE\u9898\u8868\u8FF0\u660E\u786E\u3001\u65E0\u9700\u7CBE\u786E\u63A7\u5236\u7EF4\u5EA6\u6216 SQL \u7684\u573A\u666F\uFF1B\u9700\u8981\u7CBE\u786E\u6307\u5B9A\u7EF4\u5EA6/\u7B5B\u9009\u7528 query_metric_data\uFF0C\u9700\u8981\u81EA\u5B9A\u4E49 SQL \u7528 execute_sql_query\u3002\u652F\u6301\u4E3B\u9898 ID \u6216\u4E3B\u9898\u540D\u3002\u6210\u529F\u7ED3\u679C\u76F4\u63A5\u900F\u51FA answer\u3001sql\u3001query_result \u7B49\u7ED3\u6784\u5316\u5B57\u6BB5\uFF0C\u7531\u8C03\u7528\u65B9\u81EA\u884C\u7EC4\u7EC7\u6700\u7EC8\u56DE\u590D\u3002session_id \u53EA\u80FD\u7528\u4E8E\u95EE\u6570\u7EED\u95EE\uFF0C\u4E0D\u80FD\u4E0E ChatBI \u6D1E\u5BDF\u4F1A\u8BDD\u6DF7\u7528\u3002",inputSchema:Pr,outputSchema:Br},(a,u)=>t.run(({config:d})=>Mr(d,a),u,"chatbi_query")),o("chatbi_insight_start",{title:"Start ChatBI Insight",description:"\u53D1\u8D77 ChatBI L2 \u6D1E\u5BDF\u5206\u6790\u5E76\u5728\u8BF7\u6C42\u53D7\u7406\u540E\u7ACB\u5373\u8FD4\u56DE message_id\uFF0C\u4E0D\u7B49\u5F85\u6700\u7EC8\u62A5\u544A\uFF0C\u4E5F\u4E0D\u8FD4\u56DE final_result\u3002\u6D1E\u5BDF\u901A\u5E38\u8017\u65F6 2-3 \u5206\u949F\uFF0C5 \u5206\u949F\u89C6\u4E3A\u8D85\u65F6\uFF1B\u540C\u4E00\u95EE\u9898\u53EA\u8C03\u7528\u4E00\u6B21\uFF0C\u540E\u7EED\u4F7F\u7528 chatbi_insight_poll \u67E5\u8BE2\u7ED3\u679C\u3002",inputSchema:xr,outputSchema:Ar},(a,u)=>t.run(({config:d})=>jr(d,a),u,"chatbi_insight_start")),o("chatbi_insight_poll",{title:"Poll ChatBI Insight",description:"\u67E5\u8BE2 ChatBI L2 \u6D1E\u5BDF\u4EFB\u52A1\u72B6\u6001\u548C\u6700\u7EC8\u62A5\u544A\u3002status=success \u65F6\u6700\u7EC8\u5C55\u793A\u5185\u5BB9\u8BFB\u53D6 structuredContent.final_result.content\uFF1Banswer \u4E3A\u540E\u7AEF\u539F\u59CB\u7B54\u6848\u3002\u4F7F\u7528 chatbi_insight_start \u8FD4\u56DE\u7684 theme_id \u548C message_id\uFF1B\u4E0D\u8981\u9AD8\u9891\u8C03\u7528\uFF0C\u5EFA\u8BAE\u81F3\u5C11\u95F4\u9694 10 \u79D2\uFF0C\u6D1E\u5BDF\u901A\u5E38\u8017\u65F6 2-3 \u5206\u949F\uFF0C5 \u5206\u949F\u540E\u505C\u6B62\u7B49\u5F85\u3002",inputSchema:Dr,outputSchema:Or},(a,u)=>t.run(({config:d})=>Ur(d,a),u,"chatbi_insight_poll"))),r.ok&&(c("global_search")&&o("global_search",{title:"Global Search",description:"\u6309\u5173\u952E\u8BCD\u641C\u7D22 BI \u4E2D\u7684\u5361\u7247\u3001\u4EEA\u8868\u677F\u3001\u6570\u636E\u96C6\u548C ETL \u8D44\u6E90\uFF0C\u9002\u5408\u5B9A\u4F4D\u67D0\u4E2A\u5DF2\u6709\u8D44\u4EA7\u6216\u5176 ID\u3002\u8FD4\u56DE\u7684\u5361\u7247 ID \u53EF\u4EA4\u7ED9 get_card_info/query_card_data\uFF0C\u6570\u636E\u96C6 ID \u53EF\u4EA4\u7ED9 get_dataset_detail/execute_sql_query\u3002\u6307\u6807\u76F8\u5173\u68C0\u7D22\u8BF7\u7528 search_metrics\u3002",inputSchema:Xr},(a,u)=>t.run(({client:d})=>Zr(d,a),u,"global_search")),c("search_metrics")&&o("search_metrics",{title:"Search Metrics",description:"\u6309\u5173\u952E\u8BCD\u641C\u7D22\u6307\u6807\u5E73\u53F0\u6307\u6807\uFF0C\u8FD4\u56DE metric_id\u3001\u540D\u79F0\u3001\u4E3B\u9898\u3001\u76EE\u5F55\u3001\u7C7B\u578B\u3001\u72B6\u6001\u548C\u4E1A\u52A1\u53E3\u5F84\u6458\u8981\u3002\u5DF2\u6709\u5173\u952E\u8BCD\u65F6\u4F18\u5148\u7528\u672C\u5DE5\u5177\uFF1B\u4E0D\u6E05\u695A\u6709\u54EA\u4E9B\u6307\u6807\u65F6\u6539\u7528 list_metric_catalog \u6D4F\u89C8\u3002\u8FD4\u56DE\u7684 metric_id \u53EF\u7EE7\u7EED\u4EA4\u7ED9 get_metric_detail \u770B\u53E3\u5F84\u3001query_metric_data \u53D6\u6570\u3002",inputSchema:Ni,outputSchema:ne},(a,u)=>t.run(({client:d,config:l})=>Fi(d,l,a),u,"search_metrics")),c("list_metric_catalog")&&o("list_metric_catalog",{title:"List Metric Catalog",description:"\u6309\u4E3B\u9898/\u76EE\u5F55\u5C42\u7EA7\u6D4F\u89C8\u6307\u6807\u8282\u70B9\uFF0C\u9002\u5408\u4E0D\u77E5\u9053\u5173\u952E\u8BCD\u3001\u9700\u8981\u5148\u53D1\u73B0\u6709\u54EA\u4E9B\u53EF\u7528\u6307\u6807\u7684\u573A\u666F\u3002\u5DF2\u6709\u660E\u786E\u5173\u952E\u8BCD\u65F6\u6539\u7528 search_metrics\u3002\u8FD4\u56DE\u7684 metric_id \u53EF\u7EE7\u7EED\u4EA4\u7ED9 get_metric_detail\u3001query_metric_data\u3002",inputSchema:Li,outputSchema:ne},(a,u)=>t.run(({client:d,config:l})=>zi(d,l,a),u,"list_metric_catalog")),c("get_metric_detail")&&o("get_metric_detail",{title:"Get Metric Detail",description:"\u6309 metric_id \u83B7\u53D6\u6307\u6807\u7684\u4E1A\u52A1\u53E3\u5F84\u3001\u8BA1\u7B97\u53E3\u5F84\u3001\u9002\u7528\u7EF4\u5EA6\u3001\u65F6\u95F4\u7EF4\u3001\u8840\u7F18/\u5F15\u7528\u6458\u8981\u548C\u6743\u9650\u4FE1\u606F\u3002\u5EFA\u8BAE\u5728 query_metric_data \u53D6\u6570\u524D\u5148\u8C03\u7528\uFF0C\u786E\u8BA4\u53EF\u7528\u7EF4\u5EA6\u4E0E\u53E3\u5F84\u3002metric_id \u6765\u81EA search_metrics \u6216 list_metric_catalog\u3002",inputSchema:qi,outputSchema:ne},(a,u)=>t.run(({client:d,config:l})=>Vi(d,l,a),u,"get_metric_detail")),c("query_metric_data")&&o("query_metric_data",{title:"Query Metric Data",description:"\u6309\u5DF2\u77E5 metric_id \u7CBE\u786E\u67E5\u8BE2\u6307\u6807\u6570\u636E\uFF0C\u9002\u5408\u9700\u8981\u6307\u5B9A\u7EF4\u5EA6\u3001\u7B5B\u9009\u3001\u6392\u5E8F\u7684\u53D6\u6570\u573A\u666F\uFF1B\u7EF4\u5EA6\u5EFA\u8BAE\u5148\u7528 get_metric_detail \u786E\u8BA4\u3002\u53EA\u8BFB\u5B89\u5168\uFF1A\u8BFB\u53D6\u6307\u6807\u5361\u9884\u89C8\u6570\u636E\uFF0C\u7EF4\u5EA6\u67E5\u8BE2\u53EA\u6539\u4E34\u65F6 session\uFF0C\u4E0D\u89E6\u53D1 save\u3001update\u3001delete\u3001publish \u7B49\u6301\u4E45\u5316\u64CD\u4F5C\u3002\u9700\u8981\u81EA\u7136\u8BED\u8A00\u95EE\u6570\u7528 chatbi_query\uFF0C\u9700\u8981\u5199 SQL \u7528 execute_sql_query\u3002",inputSchema:Gi,outputSchema:ne},(a,u)=>t.run(({client:d,config:l})=>Qi(d,l,a),u,"query_metric_data")),c("search_metric_trees")&&o("search_metric_trees",{title:"Search Metric Trees",description:"\u6309\u5173\u952E\u8BCD\u641C\u7D22\u6307\u6807\u6811\u8D44\u6E90\uFF0C\u8FD4\u56DE metric_tree_id\u3002\u5F52\u56E0\u5206\u6790\u7684\u5165\u53E3\u5DE5\u5177\uFF1A\u62FF\u5230 metric_tree_id \u540E\u7528 get_metric_tree_detail \u770B\u7ED3\u6784\u3001query_metric_tree_attribution \u505A\u5F52\u56E0\u3002",inputSchema:Ji,outputSchema:ne},(a,u)=>t.run(({client:d,config:l})=>Ki(d,l,a),u,"search_metric_trees")),c("get_metric_tree_detail")&&o("get_metric_tree_detail",{title:"Get Metric Tree Detail",description:"\u6309 metric_tree_id \u83B7\u53D6\u6307\u6807\u6811\u8BE6\u60C5\u3001\u6839\u6307\u6807\u3001\u65F6\u95F4\u5BF9\u6BD4\u914D\u7F6E\u3001\u7EF4\u5EA6\u62C6\u89E3\u914D\u7F6E\u548C\u6307\u6807\u5173\u7CFB\u6811\u3002\u5EFA\u8BAE\u5728 query_metric_tree_attribution \u5F52\u56E0\u524D\u5148\u8C03\u7528\uFF0C\u786E\u8BA4\u53EF\u62C6\u89E3\u7EF4\u5EA6\u4E0E\u5BF9\u6BD4\u914D\u7F6E\u3002metric_tree_id \u6765\u81EA search_metric_trees\u3002",inputSchema:Hi,outputSchema:ne},(a,u)=>t.run(({client:d,config:l})=>Wi(d,l,a),u,"get_metric_tree_detail")),c("query_metric_tree_attribution")&&o("query_metric_tree_attribution",{title:"Query Metric Tree Attribution",description:"\u6309\u5DF2\u77E5 metric_tree_id \u6267\u884C\u6307\u6807\u62C6\u89E3\u3001\u5355\u7EF4\u62C6\u89E3\u6216\u5168\u7EF4\u626B\u63CF\u5F52\u56E0\uFF0C\u9002\u5408\u5206\u6790\u67D0\u6307\u6807\u53D8\u5316\u7531\u54EA\u4E9B\u56E0\u7D20/\u7EF4\u5EA6\u8D21\u732E\u3002\u5EFA\u8BAE\u5148\u7528 get_metric_tree_detail \u786E\u8BA4\u53EF\u62C6\u89E3\u7EF4\u5EA6\u3002",inputSchema:$i,outputSchema:ne},(a,u)=>t.run(({client:d,config:l})=>Yi(d,l,a),u,"query_metric_tree_attribution")),c("execute_sql_query")&&o("execute_sql_query",{title:"Execute SQL Query",description:`\u57FA\u4E8E\u4E00\u4E2A\u6216\u591A\u4E2A\u6570\u636E\u96C6\u6267\u884C\u67E5\u8BE2 SQL\u3002\u82E5\u672C\u8F6E\u5C1A\u672A\u8BFB\u53D6\u6570\u636E\u96C6\u8BE6\u60C5\uFF0C\u5148\u8C03\u7528 get_dataset_detail \u83B7\u53D6\u6570\u636E\u96C6\u540D\u79F0/name \u548C columns[].name\u3002inputs \u53EA\u4F20\u5BF9\u5E94\u6570\u636E\u96C6 ID\uFF0C\u4E0D\u5F97\u628A dsId\u3001fdId \u6216 input0 \u5F53\u8868\u540D\uFF1BSQL \u901A\u5E38\u5148\u7528\u6570\u636E\u96C6\u540D\u79F0\u4F5C\u4E3A FROM/JOIN \u8868\u5F15\u7528\u3002\u82E5 TABLE_OR_VIEW_NOT_FOUND \u7684 diagnostic.tableBindings[] \u63D0\u4F9B sqlReference\uFF0C\u5FC5\u987B\u6309\u8BE5\u503C\u4FEE\u6B63\uFF1B\u5355\u6570\u636E\u96C6 Spark \u67E5\u8BE2\u53EF\u80FD\u8FD4\u56DE\u7A33\u5B9A\u5F15\u7528 __THIS__\uFF0C\u4E0D\u8981\u539F\u6837\u91CD\u590D\u5931\u8D25 SQL\u3002\u4E2D\u6587\u6216\u7279\u6B8A\u5B57\u7B26\u540D\u79F0\u7528\u53CD\u5F15\u53F7\uFF0C\u4F8B\u5982 SELECT * FROM \`\u9500\u552E\u6570\u636E\u96C6\`\u3002\u65E0\u8868\u67E5\u8BE2\u4F20 inputs: []\u3002\u591A\u6570\u636E\u96C6\u67E5\u8BE2\u8981\u6C42\u6570\u636E\u96C6\u80FD\u5728\u540C\u4E00\u6267\u884C\u94FE\u8DEF\u4E2D\u67E5\u8BE2\u3002\u8FD4\u56DE\u884C\u6570\u7531 BI_MAX_ROWS \u63A7\u5236\uFF0C\u5F53\u524D\u4E3A ${n.BI_MAX_ROWS} \u884C\uFF0C\u65E0\u9700\u81EA\u884C\u6DFB\u52A0 LIMIT\u3002`,inputSchema:Kr},(a,u)=>t.run(({client:d,config:l})=>Wr(d,l,a),u,"execute_sql_query")),c("get_dataset_detail")&&o("get_dataset_detail",{title:"Get Dataset Detail",description:"\u6309\u6570\u636E\u96C6 ID \u83B7\u53D6\u57FA\u7840\u4FE1\u606F\u3001\u5B57\u6BB5\u7ED3\u6784\u548C\u76F8\u5173\u914D\u7F6E\u3002\u5EFA\u8BAE\u5728 execute_sql_query \u5199 SQL \u524D\u5148\u8C03\u7528\uFF0C\u786E\u8BA4\u6570\u636E\u96C6\u540D\u79F0\u4E0E\u53EF\u7528\u5B57\u6BB5\u3002\u6570\u636E\u96C6 ID \u6765\u81EA global_search\u3002",inputSchema:Hr},(a,u)=>t.run(({client:d})=>zr(d,a),u,"get_dataset_detail")),c("get_card_info")&&o("get_card_info",{title:"Get Card Info",description:"\u6309\u5361\u7247 ID \u83B7\u53D6\u57FA\u7840\u4FE1\u606F\u3001\u56FE\u8868\u7C7B\u578B\u3001\u6570\u636E\u6765\u6E90\u548C\u914D\u7F6E\u3002\u5EFA\u8BAE\u5728 query_card_data \u53D6\u6570\u524D\u5148\u8C03\u7528\uFF0C\u786E\u8BA4\u5B57\u6BB5\u4E0E\u6570\u636E\u6765\u6E90\u3002\u5361\u7247 ID \u6765\u81EA global_search \u6216 get_page_info\u3002",inputSchema:$r},(a,u)=>t.run(({client:d})=>Vr(d,a),u,"get_card_info")),c("query_card_data")&&o("query_card_data",{title:"Query Card Data",description:"\u6309\u5DF2\u77E5\u5361\u7247 ID \u5B89\u5168\u53EA\u8BFB\u67E5\u8BE2\u4E00\u9875 BI \u5361\u7247\u9884\u89C8\u6570\u636E\uFF0C\u652F\u6301\u7ED3\u6784\u5316\u7B5B\u9009\u3001\u52A8\u6001\u53C2\u6570\u548C\u5F53\u524D\u5361\u7247\u81EA\u8EAB\u7684\u52A8\u6001\u7EF4\u5EA6\u8986\u76D6\u3002\u5355\u6B21\u6700\u591A 1000 \u884C\uFF1Bpage.has_more=true \u65F6\u4F7F\u7528 next_offset \u7EED\u9875\u3002",inputSchema:lr,outputSchema:pr},(a,u)=>t.run(({client:d,signal:l})=>fr(d,a,l),u,"query_card_data")),c("get_page_info")&&o("get_page_info",{title:"Get Page Info",description:"\u6309\u9875\u9762/\u4EEA\u8868\u677F ID \u83B7\u53D6\u57FA\u7840\u4FE1\u606F\u3001\u5E03\u5C40\u3001\u5361\u7247\u5217\u8868\u548C\u76F8\u5173\u914D\u7F6E\uFF0C\u53EF\u4ECE\u4E2D\u62FF\u5230\u5361\u7247 ID \u518D\u4EA4\u7ED9 get_card_info/query_card_data\u3002\u9875\u9762 ID \u6765\u81EA global_search\u3002",inputSchema:Fr},(a,u)=>t.run(({client:d})=>Qr(d,a),u,"get_page_info")),Ai(o,c,t))}var nu=Kc(import.meta.url),gn=nu("../package.json"),dn=class{record(t){console.error(JSON.stringify({runtime:uu(t)}))}};function ls(e,t={}){let n=t.mode??e.MCP_TRANSPORT??"stdio",r={appVersion:t.appVersion,clientFactory:t.clientFactory,callerContextResolver:t.callerContextResolver,guanBIClientFactory:t.guanBIClientFactory,capabilityResolver:t.capabilityResolver,transportFactory:t.transportFactory};return n==="streamable-http"?new pn(e,r):new ln(e,r)}var ru=`\u89C2\u8FDC BI\uFF08Guandata\uFF09MCP Server\uFF0C\u7528\u4E8E\u5728\u89C2\u8FDC BI \u5E73\u53F0\u4E0A\u505A\u6570\u636E\u53D1\u73B0\u3001\u770B\u8D44\u4EA7\u8BE6\u60C5\u3001\u5B89\u5168\u53EA\u8BFB\u53D6\u6570\u548C\u6307\u6807\u5206\u6790\u3002\u6240\u6709\u5DE5\u5177\u5747\u4E3A\u53EA\u8BFB\uFF0C\u4E0D\u4F1A\u4FEE\u6539\u3001\u4FDD\u5B58\u6216\u5220\u9664 BI \u8D44\u4EA7\u3002
11
11
 
12
12
  \u5DE5\u5177\u6309\u6240\u5C5E\u6A21\u5757\u5206\u4E3A\u4E09\u7EC4\uFF0C\u5176\u4E2D\u300C\u6307\u6807\u300D\u548C\u300CChatBI\u300D\u662F BI \u7684\u72EC\u7ACB\u589E\u8D2D\u6A21\u5757\uFF0C\u53EF\u80FD\u672A\u5F00\u901A\uFF1B\u300CBI \u9ED8\u8BA4\u529F\u80FD\u300D\u968F BI \u6807\u914D\u63D0\u4F9B\uFF1A
13
13
 
@@ -26,5 +26,5 @@ ${u}`:c}catch{return}}var Vt=new Map([["k",1e3],["K",1e3],["M",1e6],["B",1e9],["
26
26
  - chatbi_query\uFF1AL1 \u540C\u6B65\u95EE\u6570\uFF0C\u81EA\u7136\u8BED\u8A00\u63D0\u95EE\u6700\u7701\u4E8B\uFF0C\u9002\u5408\u4E1A\u52A1\u95EE\u9898\u8868\u8FF0\u660E\u786E\u3001\u65E0\u9700\u7CBE\u786E\u63A7\u5236\u7EF4\u5EA6/SQL \u65F6\u3002
27
27
  - chatbi_insight_start + chatbi_insight_poll\uFF1AL2 \u6DF1\u5EA6\u6D1E\u5BDF\uFF0C\u8017\u65F6\u8F83\u957F\uFF0C\u5148\u53D1\u8D77\u518D\u8F6E\u8BE2\u3002
28
28
 
29
- \u901A\u7528\u5DE5\u4F5C\u6D41\uFF1A\u5148\u53D1\u73B0\u8D44\u4EA7 \u2192 \u518D\u770B\u8BE6\u60C5\u62FF\u53E3\u5F84\u4E0E\u5404\u7C7B id \u2192 \u6700\u540E\u6309\u573A\u666F\u53D6\u6570\u3002\u73AF\u5883\u80FD\u529B\uFF08\u542B\u5404\u589E\u8D2D\u6A21\u5757\u662F\u5426\u5F00\u901A\uFF09\u53EF\u5148\u7528 get_bi_capabilities \u67E5\u8BE2\uFF1B\u90E8\u5206\u5DE5\u5177\u4F1A\u968F BI \u7248\u672C\u4E0E\u6A21\u5757\u5F00\u901A\u72B6\u6001\u52A8\u6001\u542F\u7528\u3002`;async function ps(e,t={}){let n=t.appVersion??fn.version,r=t.callerContextResolver??jn(e),i=t.guanBIClientFactory??new Ze(e,{clientFactory:t.clientFactory,requestMetadata:{client:e.MCP_TRANSPORT==="streamable-http"?e.BI_PAT_CLIENT??"mcp":"mcp",clientVersion:n}}),s=i.create(await r.resolve()),o=await(t.capabilityResolver??Oe)(s.client,s.config),a=new Zc({name:"guanbi-mcp-server",version:n},{instructions:ru});return us(a,new tt(r,i,new He,Yn(e.BI_REQUEST_TIMEOUT_MS)),s.config,o,{appVersion:n}),a}var ln=class{constructor(t,n){this.config=t;this.options=n}config;options;mode="stdio";health(){return{status:"ok",mode:this.mode,version:this.options.appVersion??fn.version,boundBISite:{configured:!!this.config.BI_BASE_URL,baseUrl:this.config.BI_BASE_URL,publicPath:this.config.BI_PUBLIC_PATH}}}async start(){await(await ps(this.config,this.options)).connect(this.options.transportFactory?.()??new eu)}},pn=class{constructor(t,n){this.config=t;this.options=n}config;options;mode="streamable-http";httpServer;sessions=new Map;logger=new dn;health(){return{status:"ok",mode:this.mode,version:this.options.appVersion??fn.version,boundBISite:{configured:!!this.config.BI_BASE_URL,baseUrl:this.config.BI_BASE_URL,publicPath:this.config.BI_PUBLIC_PATH}}}async start(){this.httpServer=Xc((t,n)=>{this.handleRequest(t,n).catch(r=>{this.log("error","mcp_http_internal_error","Streamable HTTP request failed.",t,{statusCode:500,errorMessage:r instanceof Error?r.message:String(r)}),ce(n,500,{error:"internal_error",message:r instanceof Error?r.message:String(r)})})}),await new Promise((t,n)=>{this.httpServer?.once("error",r=>{this.log("error","mcp_http_start_failed","Streamable HTTP server failed to start.",void 0,{host:this.config.MCP_HTTP_HOST??"127.0.0.1",port:this.config.MCP_HTTP_PORT??9090,errorMessage:r.message}),n(r)}),this.httpServer?.listen(this.config.MCP_HTTP_PORT??9090,this.config.MCP_HTTP_HOST??"127.0.0.1",()=>{this.httpServer?.removeAllListeners("error");let r=this.httpServer?.address(),i=typeof r=="object"&&r?r.port:this.config.MCP_HTTP_PORT??9090,s=this.config.MCP_HTTP_HOST??"127.0.0.1";this.log("info","mcp_http_started","Streamable HTTP server started.",void 0,{host:s,port:i,url:this.url(),boundBISite:lu(this.config),entrypointTokenConfigured:!!this.config.MCP_ENTRYPOINT_TOKEN,trustedGateway:mn(this.config.MCP_TRUSTED_GATEWAY)}),t()})})}async stop(){await Promise.all([...this.sessions.values()].map(({server:t})=>t.close())),this.sessions.clear(),this.httpServer&&(await new Promise((t,n)=>{this.httpServer?.close(r=>r?n(r):t())}),this.httpServer=void 0,this.log("info","mcp_http_stopped","Streamable HTTP server stopped.",void 0,{sessionCount:this.sessions.size}))}url(){let t=this.httpServer?.address();if(!(!t||typeof t=="string"))return`http://${cu(t,this.config.MCP_HTTP_HOST??"127.0.0.1")}:${t.port}`}async handleRequest(t,n){let r=ds(t);if(!r){ce(n,400,{error:"bad_request"});return}if(du(r)&&t.method==="GET"){if(r==="/sysmon/health/readiness"){let a=this.readiness();ce(n,a.ready?200:503,a);return}ce(n,200,this.health());return}if(r!=="/mcp"){ce(n,404,{error:"not_found"});return}if(!iu(t.headers,this.config)){this.log("warn","mcp_entrypoint_unauthorized","Rejected MCP request with invalid entrypoint credential.",t,{statusCode:401,entrypointTokenConfigured:!!this.config.MCP_ENTRYPOINT_TOKEN,trustedGateway:mn(this.config.MCP_TRUSTED_GATEWAY)}),ce(n,401,{error:"mcp_entrypoint_unauthorized"});return}let i=gt(t.headers["mcp-session-id"]);if(i&&!this.sessions.has(i)){this.log("warn","mcp_session_not_found","Rejected MCP request for an unknown session.",t,{statusCode:404,...un(i),sessionCount:this.sessions.size}),ce(n,404,{error:"mcp_session_not_found"});return}let s=await this.resolveSession(t);au(n),await s.transport.handleRequest(t,n);let o=s.transport.sessionId;o&&t.method!=="DELETE"&&!this.sessions.has(o)&&(this.sessions.set(o,s),this.log("info","mcp_session_created","Created Streamable HTTP MCP session.",t,{...un(o),sessionCount:this.sessions.size}))}async resolveSession(t){let n=gt(t.headers["mcp-session-id"]);if(n){let o=this.sessions.get(n);if(o)return o}let r=new tu({sessionIdGenerator:Yc,onsessionclosed:async o=>{let a=this.sessions.get(o);this.sessions.delete(o),await a?.server.close(),this.log("info","mcp_session_closed","Closed Streamable HTTP MCP session.",void 0,{...un(o),sessionCount:this.sessions.size})}}),i=ou(this.config,t.headers),s=await ps(i,{...this.options,callerContextResolver:this.options.callerContextResolver??Un(i),capabilityResolver:this.options.capabilityResolver??(async()=>Bn(i))});return await s.connect(r),{server:s,transport:r}}readiness(){let t=su(this.config);return{...this.health(),status:t.length>0?"error":"ok",ready:t.length===0,errors:t.length>0?t:void 0}}log(t,n,r,i,s={}){let o=i?ds(i):void 0;this.logger.record({level:t,event:n,mode:this.mode,message:r,method:i?.method,path:o,...s})}};function iu(e,t){if(mn(t.MCP_TRUSTED_GATEWAY)||xe(e))return!0;let n=t.MCP_ENTRYPOINT_TOKEN;return n?gt(e.authorization)?.trim()===`Bearer ${n}`:!1}function gt(e){return Array.isArray(e)?e[0]:e}function mn(e){return["1","true","yes","on"].includes(e?.trim().toLowerCase()??"")}function su(e){let t=[];return e.BI_BASE_URL||t.push("BI_BASE_URL is required"),t}function ou(e,t){let n=xe(t),r=gt(t[_e.client.toLowerCase()])?.trim();return{...e,BI_PAT:n,...n&&r?{BI_PAT_CLIENT:r}:{}}}function ce(e,t,n){e.headersSent||(e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(n)))}function au(e){let t=e.writeHead.bind(e);e.writeHead=((n,r,i)=>(n===202&&e.setHeader("Content-Length","0"),typeof r=="string"?t(n,r,i):t(n,r)))}function cu(e,t){return e.address==="::"||e.address==="0.0.0.0"?t==="0.0.0.0"||t==="::"?"127.0.0.1":t:e.address}function uu(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function ds(e){try{return new URL(e.url??"/",`http://${e.headers.host??"localhost"}`).pathname}catch{return}}function du(e){return["/healthz","/sysmon/health/liveness","/sysmon/health/readiness"].includes(e)}function lu(e){let t={configured:!!e.BI_BASE_URL,publicPath:e.BI_PUBLIC_PATH};if(!e.BI_BASE_URL)return t;try{t.origin=new URL(e.BI_BASE_URL).origin}catch{t.configured=!0}return t}function un(e){return{hasSessionId:!0,sessionIdHash:Wc("sha256").update(e).digest("hex").slice(0,12)}}var mu=pu(import.meta.url),{version:fu}=mu("../package.json");async function gu(){if(process.argv.slice(2).some(t=>t==="--version"||t==="-v")){process.stdout.write(`${fu}
30
- `);return}let e=hn();await ls(e).start()}gu().catch(e=>{console.error(e instanceof Error?e.message:e),process.exit(1)});
29
+ \u901A\u7528\u5DE5\u4F5C\u6D41\uFF1A\u5148\u53D1\u73B0\u8D44\u4EA7 \u2192 \u518D\u770B\u8BE6\u60C5\u62FF\u53E3\u5F84\u4E0E\u5404\u7C7B id \u2192 \u6700\u540E\u6309\u573A\u666F\u53D6\u6570\u3002\u73AF\u5883\u80FD\u529B\uFF08\u542B\u5404\u589E\u8D2D\u6A21\u5757\u662F\u5426\u5F00\u901A\uFF09\u53EF\u5148\u7528 get_bi_capabilities \u67E5\u8BE2\uFF1B\u90E8\u5206\u5DE5\u5177\u4F1A\u968F BI \u7248\u672C\u4E0E\u6A21\u5757\u5F00\u901A\u72B6\u6001\u52A8\u6001\u542F\u7528\u3002`;async function ps(e,t={}){let n=t.appVersion??gn.version,r=t.callerContextResolver??Ln(e),i=t.guanBIClientFactory??new et(e,{clientFactory:t.clientFactory,requestMetadata:{client:"mcp",clientVersion:n}}),s=i.create(await r.resolve()),o=await(t.capabilityResolver??Ae)(s.client,s.config),c=new Zc({name:"guanbi-mcp-server",version:n},{instructions:ru});return us(c,new nt(r,i,new Je,Yn(e.BI_REQUEST_TIMEOUT_MS)),s.config,o,{appVersion:n}),c}var ln=class{constructor(t,n){this.config=t;this.options=n}config;options;mode="stdio";health(){return{status:"ok",mode:this.mode,version:this.options.appVersion??gn.version,boundBISite:{configured:!!this.config.BI_BASE_URL,baseUrl:this.config.BI_BASE_URL,publicPath:this.config.BI_PUBLIC_PATH}}}async start(){await(await ps(this.config,this.options)).connect(this.options.transportFactory?.()??new eu)}},pn=class{constructor(t,n){this.config=t;this.options=n}config;options;mode="streamable-http";httpServer;sessions=new Map;logger=new dn;health(){return{status:"ok",mode:this.mode,version:this.options.appVersion??gn.version,boundBISite:{configured:!!this.config.BI_BASE_URL,baseUrl:this.config.BI_BASE_URL,publicPath:this.config.BI_PUBLIC_PATH}}}async start(){this.httpServer=Xc((t,n)=>{this.handleRequest(t,n).catch(r=>{this.log("error","mcp_http_internal_error","Streamable HTTP request failed.",t,{statusCode:500,errorMessage:r instanceof Error?r.message:String(r)}),ce(n,500,{error:"internal_error",message:r instanceof Error?r.message:String(r)})})}),await new Promise((t,n)=>{this.httpServer?.once("error",r=>{this.log("error","mcp_http_start_failed","Streamable HTTP server failed to start.",void 0,{host:this.config.MCP_HTTP_HOST??"127.0.0.1",port:this.config.MCP_HTTP_PORT??9090,errorMessage:r.message}),n(r)}),this.httpServer?.listen(this.config.MCP_HTTP_PORT??9090,this.config.MCP_HTTP_HOST??"127.0.0.1",()=>{this.httpServer?.removeAllListeners("error");let r=this.httpServer?.address(),i=typeof r=="object"&&r?r.port:this.config.MCP_HTTP_PORT??9090,s=this.config.MCP_HTTP_HOST??"127.0.0.1";this.log("info","mcp_http_started","Streamable HTTP server started.",void 0,{host:s,port:i,url:this.url(),boundBISite:lu(this.config),entrypointTokenConfigured:!!this.config.MCP_ENTRYPOINT_TOKEN,trustedGateway:fn(this.config.MCP_TRUSTED_GATEWAY)}),t()})})}async stop(){await Promise.all([...this.sessions.values()].map(({server:t})=>t.close())),this.sessions.clear(),this.httpServer&&(await new Promise((t,n)=>{this.httpServer?.close(r=>r?n(r):t())}),this.httpServer=void 0,this.log("info","mcp_http_stopped","Streamable HTTP server stopped.",void 0,{sessionCount:this.sessions.size}))}url(){let t=this.httpServer?.address();if(!(!t||typeof t=="string"))return`http://${cu(t,this.config.MCP_HTTP_HOST??"127.0.0.1")}:${t.port}`}async handleRequest(t,n){let r=ds(t);if(!r){ce(n,400,{error:"bad_request"});return}if(du(r)&&t.method==="GET"){if(r==="/sysmon/health/readiness"){let c=this.readiness();ce(n,c.ready?200:503,c);return}ce(n,200,this.health());return}if(r!=="/mcp"){ce(n,404,{error:"not_found"});return}if(!iu(t.headers,this.config)){this.log("warn","mcp_entrypoint_unauthorized","Rejected MCP request with invalid entrypoint credential.",t,{statusCode:401,entrypointTokenConfigured:!!this.config.MCP_ENTRYPOINT_TOKEN,trustedGateway:fn(this.config.MCP_TRUSTED_GATEWAY)}),ce(n,401,{error:"mcp_entrypoint_unauthorized"});return}let i=mn(t.headers["mcp-session-id"]);if(i&&!this.sessions.has(i)){this.log("warn","mcp_session_not_found","Rejected MCP request for an unknown session.",t,{statusCode:404,...un(i),sessionCount:this.sessions.size}),ce(n,404,{error:"mcp_session_not_found"});return}let s=await this.resolveSession(t);au(n),await s.transport.handleRequest(t,n);let o=s.transport.sessionId;o&&t.method!=="DELETE"&&!this.sessions.has(o)&&(this.sessions.set(o,s),this.log("info","mcp_session_created","Created Streamable HTTP MCP session.",t,{...un(o),sessionCount:this.sessions.size}))}async resolveSession(t){let n=mn(t.headers["mcp-session-id"]);if(n){let o=this.sessions.get(n);if(o)return o}let r=new tu({sessionIdGenerator:Yc,onsessionclosed:async o=>{let c=this.sessions.get(o);this.sessions.delete(o),await c?.server.close(),this.log("info","mcp_session_closed","Closed Streamable HTTP MCP session.",void 0,{...un(o),sessionCount:this.sessions.size})}}),i=ou(this.config,t.headers),s=await ps(i,{...this.options,callerContextResolver:this.options.callerContextResolver??qn(i),capabilityResolver:this.options.capabilityResolver??(async()=>kn(i))});return await s.connect(r),{server:s,transport:r}}readiness(){let t=su(this.config);return{...this.health(),status:t.length>0?"error":"ok",ready:t.length===0,errors:t.length>0?t:void 0}}log(t,n,r,i,s={}){let o=i?ds(i):void 0;this.logger.record({level:t,event:n,mode:this.mode,message:r,method:i?.method,path:o,...s})}};function iu(e,t){if(fn(t.MCP_TRUSTED_GATEWAY)||Pe(e))return!0;let n=t.MCP_ENTRYPOINT_TOKEN;return n?mn(e.authorization)?.trim()===`Bearer ${n}`:!1}function mn(e){return Array.isArray(e)?e[0]:e}function fn(e){return["1","true","yes","on"].includes(e?.trim().toLowerCase()??"")}function su(e){let t=[];return e.BI_BASE_URL||t.push("BI_BASE_URL is required"),t}function ou(e,t){return{...e,BI_PAT:Pe(t)}}function ce(e,t,n){e.headersSent||(e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(n)))}function au(e){let t=e.writeHead.bind(e);e.writeHead=((n,r,i)=>(n===202&&e.setHeader("Content-Length","0"),typeof r=="string"?t(n,r,i):t(n,r)))}function cu(e,t){return e.address==="::"||e.address==="0.0.0.0"?t==="0.0.0.0"||t==="::"?"127.0.0.1":t:e.address}function uu(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function ds(e){try{return new URL(e.url??"/",`http://${e.headers.host??"localhost"}`).pathname}catch{return}}function du(e){return["/healthz","/sysmon/health/liveness","/sysmon/health/readiness"].includes(e)}function lu(e){let t={configured:!!e.BI_BASE_URL,publicPath:e.BI_PUBLIC_PATH};if(!e.BI_BASE_URL)return t;try{t.origin=new URL(e.BI_BASE_URL).origin}catch{t.configured=!0}return t}function un(e){return{hasSessionId:!0,sessionIdHash:Wc("sha256").update(e).digest("hex").slice(0,12)}}var mu=pu(import.meta.url),{version:fu}=mu("../package.json");async function gu(){if(process.argv.slice(2).some(t=>t==="--version"||t==="-v")){process.stdout.write(`${fu}
30
+ `);return}let e=yn();await ls(e).start()}gu().catch(e=>{console.error(e instanceof Error?e.message:e),process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guandata/guanbi-mcp-server",
3
- "version": "0.1.38",
3
+ "version": "0.1.39",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "MCP server for exposing GuanBI capabilities to AI agents.",