@guandata/guanbi-mcp-server 0.1.36 → 0.1.37

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
@@ -148,6 +148,10 @@ BI_USER_PROPERTY_KEY=email
148
148
  `ask_dashboard_agent` 默认最多等待 300000 毫秒,
149
149
  同时受 `BI_REQUEST_TIMEOUT_MS` 和 MCP cancellation 限制。
150
150
 
151
+ 图表卡可通过 `dynamic_params` 覆盖本次查询的动态参数,`parameter` 支持参数名或 `dpId`。
152
+ 参数定义来自卡片及所属页面详情,无需查询全局参数管理接口;覆盖值不修改已保存的全局参数。
153
+ 页面详情提供配置默认值和候选项,不代表浏览器里未保存的选择状态。
154
+
151
155
  动态维度覆盖示例:
152
156
 
153
157
  ```json
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
- import"dotenv/config";import{createRequire as nu}from"module";import{z as R}from"zod";var rs="http://guandata-web:8088",is=R.object({BI_BASE_URL:R.string().url().optional().default(rs),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 pn(e=process.env){let t=is.parse(e),n=t.MCP_TRANSPORT==="streamable-http";return{...t,BI_BASE_URL:t.BI_BASE_URL?.replace(/\/+$/,""),BI_PUBLIC_PATH:ss(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":ln(t.BI_LOGIN_ID_HEADER),BI_USER_PROPERTY_HEADER:ln(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 ss(e){let t=e?.trim().replace(/^\/+|\/+$/g,"")??"";return t?`/${t}`:""}function ln(e){return e?.trim().toLowerCase()||void 0}import{createRequire as Lc}from"module";import{createHash as qc,randomUUID as Gc}from"crypto";import{createServer as Jc}from"http";import{McpServer as Hc}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as $c}from"@modelcontextprotocol/sdk/server/stdio.js";import{StreamableHTTPServerTransport as Fc}from"@modelcontextprotocol/sdk/server/streamableHttp.js";var Ue=class{record(t){console.error(JSON.stringify({audit:as({...t})}))}},Le=class{record(){}};function lt(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"?os(i):void 0}}function os(e){return e instanceof Error?e.name||"Error":typeof e}function as(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function qe(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(cs(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} ${gs(n)}`);let r=us(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 cs(e,t){return`${e.BI_BASE_URL}${e.BI_PUBLIC_PATH}${t}`}function us(e,t){let n=ds(e.headers);if(n)return n;let r=ls(t);return r||ps(e.headers)}function ds(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 ls(e){try{let t=JSON.parse(e);return mn(t)??mn(fs(t.response))}catch{return}}function ps(e){return[...e.getSetCookie?.()??[],...ms(e.get("set-cookie"))].map(n=>n.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1]).find(Boolean)}function ms(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function mn(e){if(e)for(let t of["uIdToken","authToken","token"]){let n=e[t];if(typeof n=="string"&&n)return n}}function fs(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function gs(e,t=500){return e.length>t?`${e.slice(0,t)}...`:e}var _s="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?hs(`${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=fn(t,"probe");return{available:!1,lastError:n,failureType:xs(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:Os})).themes}async query(t){let n=await this.resolveThemeId(t.themeId,t.themeName,!1),r={attachments:[],theme_id:n,message:t.message,config:gn({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{vs(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:_n(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,_n(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 Ns(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=gn({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(Rs(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 Ds(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=fn(o,n.operation),!ws(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(!Cs(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:Is(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=ys(c,a,s);if(!a.ok||bs(u))throw Ts(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 qe(this.config);return this.token=t.token,t.token}refreshTokenFromResponse(t,n){let r=ks(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 hs(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 Ge(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 Is(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"]=_s),n}function ys(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:yn(e)},{retryableForBaseUrl:!0})}}function bs(e){let t=hn(e);return typeof t=="number"&&![0,200].includes(t)||e.result==="fail"||e.success===!1}function Ts(e,t,n,r){let i=hn(e),s=Bs(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:yn(t)},c=As(o),u=!c&&Ss(n.status,i);return new v(o,a,{authExpired:u,retryableForBaseUrl:c||Es(n.status,i)})}function ws(e,t){return!!(t&&e instanceof v&&e.retryableForBaseUrl)}function Cs(e){return e instanceof v&&e.authExpired}function Ss(e,t){return e===401||e===403||t===401||t===403||t===5001}function Es(e,t){return[401,403,404,405].includes(e)||typeof t=="number"&&[401,403,404,405].includes(t)}function Rs(e){return e instanceof v&&e.detail.http_status===200&&e.detail.chatbi_code===404&&e.detail.chatbi_message==="Message not found."}function hn(e){if(typeof e.code=="number")return e.code;let t=Je(e.error);return typeof t?.status=="number"?t.status:void 0}function Bs(e){if(typeof e.message=="string"&&e.message.trim())return e.message;let t=Je(e.error);return typeof t?.message=="string"&&t.message.trim()?t.message:void 0}function As(e){return/No static resource/i.test(e)}function Je(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Os(e,t){let n=Je(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 ks(e,t){let r=[...e.headers.getSetCookie?.()??[],...Ps(e.headers.get("set-cookie"))].map(s=>pt(s.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1])).find(Boolean);if(r)return r;let i=pt(e.headers.get("x-auth-token"));return i||In(t)}function Ps(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function pt(e){if(typeof e!="string")return;let t=e.trim();return t&&!/\s/.test(t)?t:void 0}function In(e){let t=Je(e);if(t){for(let n of["uIdToken","authToken"]){let r=pt(t[n]);if(r)return r}for(let n of["data","response"]){let r=In(t[n]);if(r)return r}}}function fn(e,t){return e instanceof v?e.detail:{operation:t,detail:e instanceof Error?e.message:String(e)}}function yn(e,t=1e3){return e.length>t?`${e.slice(0,t)}...`:e}function xs(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 Ds(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 gn(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>typeof t<"u"))}function vs(e){if([e.final_status,e.answer_status,e.query_status].some(js))throw new Error(`ChatBI query failed: ${Ms(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 Ms(...e){return e.find(t=>typeof t=="string"&&t.trim())?.trim()}function js(e){return typeof e=="string"&&e.trim().toLowerCase()==="failure"}function _n(e){let t=e-Date.now();if(t<=0)throw new Error("Insight request timed out");return t}async function Ns(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 Re="8.2.0",ft=["search_metrics","list_metric_catalog","get_metric_detail","query_metric_data","search_metric_trees","get_metric_tree_detail","query_metric_tree_attribution"],Us=["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"],Ls=["get_bi_capabilities","global_search",...ft,"execute_sql_query","get_dataset_detail","get_card_info","query_card_data","get_page_info",...Us],qs=6e4,Gs="PAT \u6A21\u5F0F\u4EC5\u652F\u6301\u666E\u901A BI \u63A5\u53E3\uFF0C\u4E0D\u652F\u6301 ChatBI public-api\u3002",mt=new WeakMap;async function Be(e,t){let n=mt.get(e);return(!n||n.expiresAt<=Date.now())&&mt.set(e,{expiresAt:Date.now()+qs,promise:Hs(e,t).catch(r=>Js(r,t))}),mt.get(e).promise}function wn(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:_t(e,t?["get_bi_capabilities"]:gt(e)),caller:{ok:!1,error:r,features:{executeSqlQuery:{enabled:!1,minVersion:Re,reason:r}},chatbi:ue(e,r)},features:{executeSqlQuery:{enabled:!t,minVersion:Re,reason:t?"\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u7F3A\u5C11 BI_BASE_URL\u3002":n}},metricPlatform:{registeredTools:t?[]:ft,readOnly:!0,lastError:t?"\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF1A\u7F3A\u5C11 BI_BASE_URL\u3002":void 0},chatbi:ue(e,"HTTP \u6A21\u5F0F\u542F\u52A8\u671F\u4E0D\u4F7F\u7528\u67D0\u4E2A\u7528\u6237 token \u63A2\u6D4B ChatBI \u80FD\u529B\u3002")}}async function Cn(e,t,n){let i=(await Be(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 Js(e,t){let n=e instanceof Error?e.message:String(e);return{ok:!1,error:n,versionSource:"api",features:{executeSqlQuery:{enabled:!1,minVersion:Re,reason:`\u65E0\u6CD5\u786E\u8BA4 BI \u80FD\u529B\uFF1A${n}`}},metricPlatform:{registeredTools:[],readOnly:!0,lastError:n},chatbi:ue(t,n),service:_t(t,gt(t)),caller:{ok:!1,error:n,features:{executeSqlQuery:{enabled:!1,minVersion:Re,reason:`\u65E0\u6CD5\u786E\u8BA4 BI \u80FD\u529B\uFF1A${n}`}},chatbi:ue(t,n)}}}async function Hs(e,t){let n=Fs(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 zs(e),s=Vs(i.capabilityVersion,Re),o=await $s(t);return{ok:!0,appVersion:i.appVersion,dataVersion:i.dataVersion,versionSource:r,service:_t(t,gt(t)),caller:{ok:!0,features:{executeSqlQuery:s},chatbi:o},features:{executeSqlQuery:s},metricPlatform:{registeredTools:ft,readOnly:!0},chatbi:o}}function gt(e){let t=new Set(Ls);if(!e.BI_PAT&&(Ge(e)||e.MCP_TRANSPORT==="streamable-http"))for(let n of new L(e).getRegisteredTools())t.add(n);return[...t]}function _t(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 $s(e){if(e.BI_PAT)return ue(e,Gs);let t=new L(e);return Ge(e)?t.probe():ue(e,"\u7F3A\u5C11 BI_BASE_URL \u6216\u9274\u6743\u914D\u7F6E\u3002")}function ue(e,t){return{available:!1,registeredTools:e.BI_PAT||!Ge(e)?[]:new L(e).getRegisteredTools(),failureType:"unknown",triedBaseUrls:[],lastError:{operation:"probe",chatbi_message:t,detail:t}}}function Fs(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 zs(e){let t=await e.get("/api/server-version"),n=Tn(t.version),r=Tn(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 Vs(e,t){let n=bn(e),r=bn(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=Qs(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 bn(e){let t=e.match(/(\d+)\.(\d+)\.(\d+)/);if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}function Qs(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 Tn(e){return typeof e=="string"&&e.trim()?e.trim():void 0}var He=class{constructor(t){this.config=t}config;cache=new Map;async exchange(t){let n=Sn(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=Ks(t);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=this.config.BI_USER_PROPERTY_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=En(a);if(!o.ok||Rn(c))throw this.debugError(`BI user property lookup failed: HTTP ${o.status} ${ht(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 Sn(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=En(s),a=o?.response?.token?.trim();if(!i.ok||Rn(o)||!a)throw this.debugError(`BI loginId token exchange failed: HTTP ${i.status} ${ht(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=Ws(t);return r?Math.min(n,r):n}debugError(t,n,r=[]){if(!Xs(this.config))return new Error(t);let i=It(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 Sn(e){let t=e.trim();if(!t)throw new Error("GuanBI loginId is required for loginId identity exchange.");return t}function Ks(e){let t=e.trim();if(!t)throw new Error("BI user property value is required for user property identity exchange.");return t}function En(e){if(e.trim())try{return JSON.parse(e)}catch{return}}function Rn(e){return!e||e.result&&!["ok","success"].includes(e.result.toLowerCase())?!0:e.success===!1}function Ws(e){if(!e)return;let t=e.replace(" ","T"),n=Date.parse(t);return Number.isFinite(n)?n:void 0}function ht(e,t){let n=t.filter(r=>!!r).reduce((r,i)=>r.split(i).join("[redacted]"),e);return Zs(n)}function It(e,t){let n=t.filter(r=>!!r);return typeof e=="string"?ht(e,n):Array.isArray(e)?e.map(r=>It(r,n)):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).map(([r,i])=>[r,Ys(r)?"[redacted]":It(i,n)]))}function Ys(e){return["token","authorization","cookie","uidtoken","uIdToken".toLowerCase()].includes(e.toLowerCase())}function Xs(e){return["1","true","yes","on"].includes(e.BI_IDENTITY_DEBUG?.trim().toLowerCase()??"")}function Zs(e,t=1e3){return e.length>t?`${e.slice(0,t)}\u2026`:e}var pe="x-personal-token";function eo(e){return{transport:"stdio",...e.BI_PAT?{biPatToken:e.BI_PAT}:{},biUidToken:e.BI_UID_TOKEN,audit:{}}}function An(e){return{resolve:()=>eo(e)}}function $e(e){let t=Ae(e);if(t)return{transport:"streamable-http",biPatToken:t,audit:de(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:de(e)}}function On(e,t={}){let n=e?new He(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=Ae(o);if(a)return{transport:"streamable-http",biPatToken:a,audit:de(o)};if(e?.BI_PAT)return{transport:"streamable-http",biPatToken:e.BI_PAT,audit:de(o)};if(Y(o,"x-guanbi-uid-token")?.trim()||!e)return $e(o);let u=e.BI_LOGIN_ID_HEADER,d=u?le(Y(o,u)):void 0;if(d){let h=await r?.(d);return h?{transport:"streamable-http",biUidToken:h.token,biUidTokenRefresh:h.refresh,loginId:d,audit:de(o)}:$e(o)}let l=e.BI_USER_PROPERTY_HEADER,g=l?le(Y(o,l)):void 0;if(g){let h=await i?.(g);return h?{transport:"streamable-http",biUidToken:h.token,biUidTokenRefresh:h.refresh,audit:de(o)}:$e(o)}throw to(o,e)}}}function Ae(e){return le(Y(e,pe))}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 le(e){return e?.trim()||void 0}function de(e){return{tenantId:le(Y(e,"x-tenant-id")),endUserId:le(Y(e,"x-end-user-id")),traceId:le(Y(e,"x-trace-id"))}}function to(e,t){let n="\u7F3A\u5C11 GuanBI \u7528\u6237\u4EE4\u724C\uFF1A\u8BF7\u901A\u8FC7 X-GuanBI-Uid-Token \u4F20\u5165\u5F53\u524D\u7528\u6237 uIdToken\u3002";if(!oo(t))return new Error(n);let r={operation:"resolveHttpCallerContext",expectedIdentityHeaders:no(e,t),receivedHeaderNames:ro(e),receivedIdentityLikeHeaders:Bn(Object.fromEntries(yt(e).filter(([i])=>so(i.toLowerCase()))),[pe,"x-guanbi-uid-token",t.BI_LOGIN_ID_HEADER,t.BI_USER_PROPERTY_HEADER]),receivedHeaders:Bn(e,[pe,"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 no(e,t){return[{source:"pat",name:pe,present:Fe(e,pe)},{source:"uidToken",name:"x-guanbi-uid-token",present:Fe(e,"x-guanbi-uid-token")},...t.BI_LOGIN_ID_HEADER?[{source:"loginId",name:t.BI_LOGIN_ID_HEADER,present:Fe(e,t.BI_LOGIN_ID_HEADER)}]:[],...t.BI_USER_PROPERTY_HEADER?[{source:"userProperty",name:t.BI_USER_PROPERTY_HEADER,present:Fe(e,t.BI_USER_PROPERTY_HEADER),userPropertyKey:t.BI_USER_PROPERTY_KEY}]:[]]}function Fe(e,t){return Y(e,t)!==void 0}function ro(e){return[...new Set(yt(e).map(([t])=>t.toLowerCase()))].sort()}function Bn(e,t){let n=new Set(t.filter(r=>!!r).map(r=>r.toLowerCase()));return Object.fromEntries(yt(e).map(([r,i])=>{let s=r.toLowerCase();return io(s)?[s,"<redacted>"]:[s,n.has(s)?i:"<present>"]}))}function yt(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","cookie","set-cookie","x-guanbi-uid-token",pe].includes(e)}function so(e){return e.startsWith("x-")||e.includes("auth")||e.includes("login")||e.includes("token")||e.includes("uid")||e.includes("user")}function oo(e){return["1","true","yes","on"].includes(e.BI_IDENTITY_DEBUG?.trim().toLowerCase()??"")}import{AsyncLocalStorage as ao}from"async_hooks";var me={client:"X-Guandata-Client",clientVersion:"X-Guandata-Client-Version",command:"X-Guandata-Command"},co=new Set(Object.values(me).map(e=>e.toLowerCase())),kn=new ao;function Pn(e,t){return kn.run(e,t)}function uo(e,t="mcp"){e=kn.getStore()??e;let n={};n[me.client]=e?.client.trim()||t.trim()||"mcp";let r=e?.clientVersion?.trim();r&&(n[me.clientVersion]=r);let i=e?.command?.trim();return i&&(n[me.command]=i),n}function xn(e,t,n="mcp"){let r=uo(t,n);return{...bt(e),...r}}function bt(e){return Object.fromEntries(Object.entries(e).filter(([t])=>!co.has(t.toLowerCase())))}var Dn=64*1024,Tt=16*1024*1024,lo=8*1024,fe=class extends Error{constructor(n,r){super(r);this.status=n;this.name="BIHttpResponseError"}status},Ve=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:Oe(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)});return s.ok||await ze(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:Oe(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)});if(this.shouldRefreshToken(i)){await wt(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:Oe(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)})}return i.ok||await ze(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 ze(c,t,n);let u=await vn(c,t,n);return Nn(u)}let s=await this.ensureToken(),o=await this.fetchWithToken(t,n,s,r,i);if(this.shouldRefreshToken(o)){await wt(o,"retrying after BI authentication expired");let c=await this.refreshToken();o=await this.fetchWithToken(t,n,c,r,i)}o.ok||await ze(o,t,n);let a=await vn(o,t,n);return this.refreshTokenFromResponse(o),Nn(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:Oe(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:Oe(this.config.BI_REQUEST_TIMEOUT_MS,s?.signal)})}async ensureToken(){if(this.token)return this.token;let t=await qe(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=go(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{...bt(n),Cookie:`uIdToken=${t}`}}patHeaders(t,n){return xn({...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 Oe(e,t){if(t?.aborted)return t;let n=AbortSignal.timeout(e);return t?AbortSignal.any([t,n]):n}async function ze(e,t,n){let r=await Un(e,Dn),i=r.truncated?` [truncated after ${Dn} bytes]`:"";throw new fe(e.status,`BI \u8BF7\u6C42\u5931\u8D25\uFF1A${t} ${n} HTTP ${e.status} ${yo(r.text)}${i}`)}async function vn(e,t,n){let r=mo(e);r!==void 0&&r>Tt&&(await wt(e,"BI JSON response exceeded byte limit"),Mn(t,n));let i=await Un(e,Tt);return i.truncated&&Mn(t,n),i.text}function Mn(e,t){throw new Error(`BI JSON \u54CD\u5E94\u8FC7\u5927\uFF1A${e} ${t} \u8D85\u8FC7 ${Tt} \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 Un(e,t){if(!e.body)return{text:"",truncated:!1};let n=e.body.getReader(),r=new Uint8Array(Math.min(lo,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=jn(r,t,i+a),r.set(o.subarray(0,a),i),i+=a),await po(n,"response body exceeded byte limit"),{text:new TextDecoder().decode(r.subarray(0,i)),truncated:!0};r=jn(r,t,i+o.byteLength),r.set(o,i),i+=o.byteLength}}finally{n.releaseLock()}}function jn(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 po(e,t){try{await e.cancel(new Error(t))}catch{}}async function wt(e,t){if(e.body)try{await e.body.cancel(new Error(t))}catch{}}function mo(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 Nn(e){if(!e)return;let t=JSON.parse(e);if(!fo(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 fo(e){return!e||typeof e!="object"||Array.isArray(e)?!1:"response"in e||"result"in e||"success"in e}function go(e){return _o(e.headers)??Io(e.headers)}function _o(e){return[...e.getSetCookie?.()??[],...ho(e.get("set-cookie"))].map(n=>Ln(n.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1])).find(Boolean)}function ho(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function Io(e){return Ln(e.get("x-auth-token"))}function Ln(e){if(typeof e!="string")return;let t=e.trim();return t&&!/\s/.test(t)?t:void 0}function yo(e,t=1e3){return e.length>t?`${e.slice(0,t)}...`:e}var Qe=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 Ve(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},Ke=class{serviceDomain;appVersion;enabled;sender;now;constructor({config:t,appVersion:n,sender:r=wo(),now:i=Date.now}){this.serviceDomain=So(t.BI_BASE_URL),this.appVersion=n,this.enabled=Co(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:Eo(this.now()-t.startedAtMs),error_type:n.success?"none":Bo(n.error)};try{Promise.resolve(this.sender(r)).catch(()=>{})}catch{}}};function bo(e=qn){return t=>To(t,e)}async function To(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 Ro(i,t.maxResponseBytes)}catch{}}function wo(){return Ao(process.env)?()=>{}:bo()}function Co(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 Gn(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 So(e){if(e)try{return new URL(e).hostname}catch{return}}function Eo(e){return e<1e3?"<1s":e<5e3?"1-5s":e<3e4?"5-30s":e<12e4?"30-120s":">120s"}async function Ro(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 Bo(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 Ao(e){return e.NODE_ENV==="test"||e.VITEST==="true"}var Oo=5e3;function Hn(e){return e+Oo}var We=class{constructor(t,n,r=new Le,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=ko(n?.signal,this.requestTimeoutMs);o.throwIfAborted();let a=await Jn(this.callerContextResolver.resolve(n),o),c=this.clientFactory.create(a,r),u={...c,signal:o};try{let d=await Jn(Pn(c.config.BI_REQUEST_METADATA,()=>t(u)),o,i?.abortRecoveryGraceMs);if(r){let l=Po(d)?"error":"success";this.auditLogger.record(lt(r,a,s,l,d))}return d}catch(d){throw r&&this.auditLogger.record(lt(r,a,s,"error",d)),d}}};function ko(e,t){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}function Jn(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 Po(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=St(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 Z(e){let t=St(e);return{content:[{type:"text",text:JSON.stringify(t,null,2)}],isError:!0}}function ke(e,t,n={}){return Z({status:"error",diagnostic:Ct(e,t,n)})}function Ct(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 St({operation:e,path:i?.groups?.path,status:i?.groups?.status?Number(i.groups.status):void 0,message:r,...n})}function St(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var $n={};async function Fn(e,t){return D(await Be(e,t))}import{z as y}from"zod";var te=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",Rt("/api/metric-platform/metrics/full-tree",{projectId:t.projectId,nameLike:t.keyword}))}listMetricDirectoryTree(t){return this.get("listMetricDirectoryTree",Rt("/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",Rt("/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 Et(t,n,s)}}async get(t,n,r){try{return await this.client.get(n,r?{headers:r}:void 0)}catch(i){throw Et(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 Et(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"]=ge(this.config.BI_LOGIN_DOMAIN)),this.config.BI_LOGIN_ID&&(t["user-id"]=ge(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=zn(n.domId,n.domainId,n.domain,n.dom_id),i=zn(n.email,n.loginId,n.userId,n.uId,n.uid);!t["x-dom-id"]&&r&&(t["x-dom-id"]=ge(r)),!t["user-id"]&&i&&(t["user-id"]=ge(i))}catch{}return t["x-dom-id"]||(t["x-dom-id"]=ge(this.config.BI_LOGIN_DOMAIN||"guanbi")),t["user-id"]||(t["user-id"]=ge(this.config.BI_LOGIN_ID||"unknown")),t}};function Et(e,t,n){let r=n instanceof Error?n.message:String(n),i=r.match(/\bHTTP\s+(\d{3})\b/);return new te({operation:e,path:t,status:i?Number(i[1]):void 0,message:r},n)}function Rt(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 ge(e){return Buffer.from(e,"utf8").toString("base64")}function zn(...e){for(let t of e)if(typeof t=="string"&&t.trim())return t.trim()}import{z as Ye}from"zod";var Kn=Ye.object({dimension:Ye.string().trim().min(1).max(512).describe("\u52A8\u6001\u7EF4\u5EA6\u540D\u79F0\u6216 dzId\u3002"),fields:Ye.array(Ye.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")}),Xe=100,Bt=512;function Wn(e,t,n){if(!n.length)return{dynamicFieldFilters:[]};let r=xo(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=Do(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=vo(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 xo(e){let t=ne(ne(ne(e.content).meta).chartMain),n=Vn(ne(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=Mo(s.multiSelect)===!0;for(let c of Qn(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(...Qn(s.sourceDzIds).map(ne).map(c=>({cdId:Q(c.cdId),dzId:Q(c.dzId)}))),r.set(o,a)}let i=new Set;for(let s of Object.values(ne(t.zoneData)))for(let o of Vn(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 Do(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,Xe),supported_dimension_count:s.length,supported_dimensions_truncated:s.length>Xe,supported_dimension_values_truncated:o}}}function vo(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,Xe),supported_field_count:i.length,supported_fields_truncated:i.length>Xe,supported_field_values_truncated:s}}}function Vn(e){return Array.isArray(e)?e.map(ne).filter(t=>Object.keys(t).length):[]}function Qn(e){return Array.isArray(e)?e:[]}function ne(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Q(e){return typeof e=="string"?e:""}function Mo(e){return typeof e=="boolean"?e:void 0}function A(e){return e.length<=Bt?e:`${e.slice(0,Bt-1)}\u2026`}function X(...e){return e.some(t=>t.length>Bt)}var jo=y.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"]),Yn=new Set(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN"]),Ot=new Set(["IS_NULL","NOT_NULL"]),No=y.object({field:y.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:jo.describe("BI \u539F\u751F\u7B5B\u9009\u64CD\u4F5C\u7B26\uFF0C\u4F8B\u5982 EQ/NI/GE/BT/CONTAINS\u3002"),values:y.array(y.union([y.string(),y.number(),y.boolean()])).optional().describe("\u7B5B\u9009\u503C\u3002IS_NULL/NOT_NULL \u4E0D\u9700\u8981\u4F20\u503C\u3002"),fd_id:y.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;Ot.has(e.operator)&&n>0&&t.addIssue({code:y.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u4E0D\u63A5\u53D7\u7B5B\u9009\u503C\u3002`}),Yn.has(e.operator)&&n!==2&&t.addIssue({code:y.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u9700\u8981\u6070\u597D 2 \u4E2A\u503C\u3002`}),!Yn.has(e.operator)&&!Ot.has(e.operator)&&n<1&&t.addIssue({code:y.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u81F3\u5C11\u9700\u8981 1 \u4E2A\u503C\u3002`})}),Uo=y.object({parameter:y.string().min(1).describe("\u52A8\u6001\u53C2\u6570\u540D\u79F0\u6216 dpId\u3002"),value:y.union([y.string(),y.number(),y.boolean()]).describe("\u52A8\u6001\u53C2\u6570\u8986\u76D6\u503C\uFF0C\u4F1A\u6309 BI dynamicParams.defaultValue \u4EE5\u5B57\u7B26\u4E32\u53D1\u9001\u3002")}),Lo=y.object({returned_count:y.number().int().nonnegative(),offset:y.number().int().nonnegative(),limit:y.number().int().positive(),has_more:y.boolean(),next_offset:y.number().int().nonnegative().optional(),total_count:y.number().int().nonnegative().optional()}),tr={cd_id:y.string().min(1).max(512).describe("\u5361\u7247 ID\u3002"),filters:y.array(No).optional().describe("\u7ED3\u6784\u5316\u7B5B\u9009\u6761\u4EF6\u3002\u4E0D\u652F\u6301 CLI \u98CE\u683C\u7B5B\u9009\u5B57\u7B26\u4E32\u3002"),dynamic_params:y.array(Uo).optional().describe("\u56FE\u8868\u5361\u52A8\u6001\u53C2\u6570\u8986\u76D6\uFF0Cparameter \u53EF\u4F20\u53C2\u6570\u540D\u6216 dpId\uFF1B\u4EC5\u652F\u6301 CHART \u5361\u7247\u3002"),dynamic_fields:y.array(Kn).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:y.array(y.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:y.number().int().nonnegative().optional().default(0).describe("\u5F53\u524D\u9875\u8D77\u59CB\u504F\u79FB\u91CF\uFF0C\u9ED8\u8BA4 0\u3002"),limit:y.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:y.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},nr={summary:y.unknown().optional(),columns:y.array(y.unknown()).optional(),rows:y.array(y.unknown()).optional(),page:Lo.optional(),diagnostic:y.unknown().optional(),raw:y.unknown().optional(),status:y.string().optional(),next_action:y.string().optional()},qo=1e3,Pe=4*1024*1024,Ze=1024*1024,rr=64*1024,Xn=512;async function ir(e,t,n){try{let r=t.limit??100,i=Math.min(r,qo),s=t.offset??0,o=await Go(e,t.cd_id,t.filters??[],t.dynamic_params??[],t.dynamic_fields??[],n);if("unsupported"in o)return $o("query_card_data",o.unsupported);let{card:a,cardType:c,filters:u,dynamicParams:d,dynamicFieldFilters:l}=o;if(c==="TEXT")return Ho(t.cd_id,a,t.columns,t.raw,s,i);let g=await Wo(e,Ko(t.cd_id,c,i,u,d,l,s),n),{endpoint:h}=g.requests[0],I=g.data,w=c==="CHART"?Zo(T(I.chartMain)):void 0,x=w?.rows??ta(I),U=pr(x.slice(0,i),t.columns),k=Pe-rr-(t.raw?Ze:0),S=cr(U,k),$=ga(c,I,s,i,U.length);if(c==="TREE_SELECTOR"&&S.truncated)return Jo(t.cd_id,s,i,$.page.total_count);if(S.oversizedFirstRow)return sr(t.cd_id,c,s,i,$.page.total_count);let F=S.rows,Ce=S.truncated||$.page.has_more===!0,Se=$.backendLimitReached&&!S.truncated,Ee=Ce&&F.length>0&&!Se?s+(c==="TREE_SELECTOR"?i:F.length):void 0,ae=_({...$.page,returned_count:F.length,has_more:Ce,next_offset:Ee}),ce=t.raw===!0&&ur(g.raw,Ze)&&!S.truncated;return et({summary:_({cd_id:t.cd_id,card_type:c,chart_type:c==="CHART"?C(T(a.content).chartType):void 0,row_count:F.length,truncated:ae.has_more}),columns:S.columns,rows:F,page:ae,diagnostic:_({mode:Yo(c),card_type:c,endpoint:h,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":Se?"backend_limit":r>i&&Ce?"page_limit":void 0,response_byte_limit:S.truncated?Pe:void 0,alignment_issue_count:w?.alignmentIssueCount||void 0,alignment_issues:w?.alignmentIssues.length?w.alignmentIssues:void 0,raw_returned:ce,raw_omitted_reason:t.raw===!0&&!ce?"response_bytes":void 0}),raw:ce?g.raw:void 0,next_action:Se?"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&&Ee!==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=${Ee} \u83B7\u53D6\u4E0B\u4E00\u9875\u3002`:void 0})}catch(r){return Z({status:"error",diagnostic:Ct("query_card_data",r)})}}async function Go(e,t,n=[],r=[],i=[],s){s?.throwIfAborted();let o=await vt(e,`/api/card/${encodeURIComponent(t)}`,s);s?.throwIfAborted();let a=Qo(o);if(r.length&&a!=="CHART")return{unsupported:Fo(a)};let c=C(o.cdType).toUpperCase()||"UNKNOWN";if(i.length&&!["CHART","METRIC_CHART"].includes(c))return{unsupported:zo(c)};let u=a==="SELECTOR"?Vo(o):void 0;if(u)return{unsupported:u};if(a==="TEXT")return{card:o,cardType:a,filters:[],dynamicParams:[],dynamicFieldFilters:[]};let d=Wn(o,t,i);if("unsupported"in d)return d;let l=await da(e,o,n,s);s?.throwIfAborted();let g=ra(n,l,a);if("unsupported"in g)return g;let h=await ia(e,r,s);return s?.throwIfAborted(),"unsupported"in h?h:{card:o,cardType:a,filters:g.filters,dynamicParams:h.dynamicParams,dynamicFieldFilters:d.dynamicFieldFilters}}function sr(e,t,n,r,i){return et({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:Pe}})}function Jo(e,t,n,r){return et({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:Pe}})}function et(e){let t=T(e.page),n=T(e.diagnostic),r=lr(t.next_offset),i=xe(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 Ho(e,t,n,r,i,s){let o=T(t.content),a=na(o),c=a?[{content:a}]:[],u=pr(c.slice(i,i+s),n),d=r===!0&&ur(t,Ze),l=Pe-rr-(d?Ze:0),g=cr(u,l);if(g.oversizedFirstRow)return sr(e,"TEXT",i,s,c.length);let h=g.rows,I=g.truncated||i+h.length<c.length,w=d&&!g.truncated;return et({summary:{cd_id:e,card_type:"TEXT",row_count:h.length,truncated:I},columns:g.columns,rows:h,page:_({returned_count:h.length,offset:i,limit:s,has_more:I,next_offset:I?i+h.length:void 0,total_count:c.length}),diagnostic:{mode:"text_card_content",card_type:"TEXT",endpoint:`/api/card/${encodeURIComponent(e)}`,raw_returned:w,raw_omitted_reason:r===!0&&!w?"response_bytes":void 0},raw:w?t:void 0})}function $o(e,t){return E({status:"unsupported",diagnostic:{tool:e,...t}})}function Fo(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 zo(e){let t=Ia(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 Vo(e){let t=T(e.content);if(C(t.selectorType).toUpperCase()!=="PARAMETER")return;let n=T(t.parameter);if(!(["STRING","TEXT"].includes(C(n.valueType).toUpperCase())&&xe(n.customize)!==!0&&C(T(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 Qo(e){let t=C(e.cdType).toUpperCase();if(t==="SELECTOR"){let n=C(T(e.content).selectorType).toUpperCase();return n==="TREE"||n==="TREE_SELECTOR"?"TREE_SELECTOR":"SELECTOR"}return t==="TREE_SELECTOR"?"TREE_SELECTOR":t==="TEXT"?"TEXT":"CHART"}function Ko(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 Wo(e,t,n){let r=await ha(e,t.endpoint,t.requestBody,n);return{raw:r,data:Xo(r),requests:[t]}}function Yo(e){return e==="SELECTOR"?"selector_card_data":e==="TREE_SELECTOR"?"tree_selector_card_data":"chart_card_data"}function Xo(e){let t=T(e),n=T(t.data),r=T(T(t.content).data);return Object.keys(n).length?n:Object.keys(r).length?r:t}function Zo(e){if(!Object.keys(e).length)return{rows:[],alignmentIssueCount:0,alignmentIssues:[]};let t=T(e.row),n=T(e.column),r=K(t.data??t.values),i=K(e.data),o=he(t.fields??t.meta).map((k,S)=>({header:Pt(k)||`row_${S+1}`,shrinked:xe(k.isShrinkedInGroupTable)===!0})),a=ea(n),c=o.filter(k=>!k.shrinked).length,u=r.reduce((k,S)=>Math.max(k,K(S).length),c),d=Array.from({length:u-c},(k,S)=>`row_extra_${S+1}`),l=i.reduce((k,S)=>Math.max(k,K(S).length),a.length),g=Array.from({length:l},(k,S)=>a[S]||`metric_${S+1}`),h=ya([...o.map(k=>k.header),...d,...g]),I=Math.max(r.length,i.length),w=[],x=[],U=0;for(let k=0;k<I;k+=1){let S=K(r[k]),$=K(i[k]),F=0,Ce=o.map(Ne=>{if(Ne.shrinked)return null;let z=F<S.length?At(S[F]):null;return F+=1,z}),Se=d.map((Ne,z)=>{let dn=F+z;return dn<S.length?At(S[dn]):null}),Ee=g.map((Ne,z)=>z<$.length?At($[z]):null),ae=[...Ce,...Se,...Ee];if(!ae.length)continue;let dt=S.length!==c,ce=$.length!==a.length;(dt||ce)&&(U+=1,x.length<20&&x.push(_({row_number:k+1,row_value_count:dt?{expected:c,actual:S.length}:void 0,metric_value_count:ce?{expected:a.length,actual:$.length}:void 0})));let ns=Math.max(h.length,ae.length);w.push(Object.fromEntries(Array.from({length:ns},(Ne,z)=>[h[z]??`column_${z+1}`,ae[z]??null])))}return{rows:w,alignmentIssueCount:U,alignmentIssues:x}}function ea(e){let n=K(e.data??e.values).map((r,i)=>{let s=K(r).map(dr).filter(Boolean).join("/");return s||Pt(he(e.fields??e.meta)[i])||`metric_${i+1}`}).filter(Boolean);return n.length?n:he(e.fields??e.meta).map(Pt).filter(Boolean)}function ta(e){return he(e.result)}function na(e){let n=K(T(e.body).blocks).map(r=>C(T(r).text)).filter(r=>r!=="");return n.length?n.join(`
5
- `):C(e.text)}function ra(e,t,n){let r=[];for(let i of e){let s=pa(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"?la(s.field.metaType):void 0,filterType:i.operator,filterValue:ua(i)}))}return{filters:r}}async function ia(e,t,n){if(!t.length)return{dynamicParams:[]};let r=new Map,i=[];for(let u of t){let d=u.parameter.trim();if(r.has(d))return{unsupported:{capability:"unsupported_dynamic_params",parameter:d,message:`\u52A8\u6001\u53C2\u6570\u88AB\u91CD\u590D\u6307\u5B9A\uFF1A${d}`}};i.push(d),r.set(d,C(u.value))}n?.throwIfAborted();let s=await vt(e,"/api/dynamic-parameter/query",n);n?.throwIfAborted();let o=[...sa(s),...oa()],a=[],c=new Map;for(let u of i){let d=aa(o,u);if("unsupported"in d)return{unsupported:d.unsupported};let l=_a(d.param),g=_e(l,"dpId","dp_id"),h=c.get(g);if(h)return{unsupported:{capability:"unsupported_dynamic_params",parameter:u,message:`\u52A8\u6001\u53C2\u6570 ${h} \u548C ${u} \u6307\u5411\u540C\u4E00\u4E2A dpId\uFF1A${g}`}};c.set(g,u),l.defaultValue=r.get(u)??"";let I=ca(l,u);if("unsupported"in I)return{unsupported:I.unsupported};a.push(l)}return{dynamicParams:a}}function sa(e){if(Array.isArray(e))return e.map(T).filter(n=>Object.keys(n).length);let t=T(e);for(let n of["response","data"]){let r=K(t[n]).map(T).filter(i=>Object.keys(i).length);if(r.length)return r}return[]}function oa(){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 aa(e,t){let n=e.find(i=>_e(i,"dpId","dp_id")===t);if(n)return{param:n};let r=e.filter(i=>_e(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:`\u672A\u627E\u5230\u52A8\u6001\u53C2\u6570\uFF1A${t}`}}}function ca(e,t){let n=[_e(e,"dpId","dp_id")?void 0:"dpId",_e(e,"name")?void 0:"name",_e(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 _e(e,...t){for(let n of t){let r=C(e[n]);if(r)return r}return""}function ua(e){return Ot.has(e.operator)?[]:(e.values??[]).map(C)}async function da(e,t,n,r){let i=ma(t);if(!n.some(a=>{let c=or(i,a.field,a.fd_id);return!c||!C(c.fd_id)}))return i;let s=T(T(t.content).dsInfo),o=q(s.dsId,s.ds_id);if(!o)return i;try{r?.throwIfAborted();let a=await vt(e,`/api/data-source/${encodeURIComponent(o)}`,r);return r?.throwIfAborted(),[...i,...ar(a)]}catch{return r?.throwIfAborted(),i}}function la(e){return e.toUpperCase()==="METRIC"?"AGGREGATION":"DETAIL"}function pa(e,t,n){let r=or(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 or(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))??Zn(e.filter(i=>C(i.name)===r))??Zn(e.filter(i=>C(i.alias)===r))}function Zn(e){return e.find(t=>C(t.fd_id))??e[0]}function ma(e){let t=T(e.content),n=ar(T(t.dsInfo)),r=T(T(t.source).field);Object.keys(r).length&&n.push(kt(r));let i=T(T(t.meta).chartMain),s=T(i.zoneData);for(let[o,a]of Object.entries(s))n.push(...he(a).map(c=>kt(c,o)));return fa(n)}function ar(e){return he(e.columns).map(t=>({...kt(t),meta_type:q(t.metaType,t.meta_type)??"DIM"}))}function kt(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 fa(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 ga(e,t,n,r,i){let s=e==="CHART"?T(t.chartMain):t,o=lr(s.count),a=e==="TREE_SELECTOR"?r:i,c=o===void 0?void 0:n+a<o,u=e!=="CHART"&&xe(s.exceedLimit)===!0,d=u&&(o===void 0||n+a>=o),l=d||(e==="CHART"?xe(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 cr(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=xt(a,u),l=Object.keys(a).filter(I=>!i.has(I)),g=0,h=!0;for(let I=0;I<l.length;I+=1){let w=r.length+I>0?1:0,x=t-s-o-c-d-g-w,U=Dt(l[I],x);if(U>x){h=!1;break}g+=w+U}if(d>u||!h)return{rows:n,columns:r,truncated:!0,oversizedFirstRow:n.length===0};n.push(a),s+=c+d,o+=g;for(let I of l)r.push(I),i.add(I)}return{rows:n,columns:r,truncated:!1,oversizedFirstRow:!1}}function ur(e,t){return xt(e,t)<=t}function xt(e,t){if(t<0)return t+1;if(e==null)return 4;if(typeof e=="string")return Dt(e,t);if(typeof e=="number"||typeof e=="boolean")return Buffer.byteLength(JSON.stringify(e));if(Array.isArray(e))return er(e.map(n=>[void 0,n]),t);if(typeof e=="object"){let n=Object.entries(e).filter(([,r])=>r!==void 0);return er(n,t)}return 4}function er(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=Dt(i,t-n);n+=a+1}let o=xt(s,t-n);if(n+=o,n>t)return t+1}return n}function Dt(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 Pt(e){return q(e.title,e.alias,e.originTitle,e.name,e.fdId,e.id)??""}function dr(e){let t=T(e);return Object.keys(t).length?q(t.title,t.name,t.originTitle,t.alias,t.v,t.value)??"":C(e)}function At(e){let t=T(e);return Object.keys(t).length?"v"in t?t.v:"value"in t?t.value:dr(e):e}function he(e){return Array.isArray(e)?e.map(T).filter(t=>Object.keys(t).length):[]}function K(e){return Array.isArray(e)?e:[]}function _a(e){return JSON.parse(JSON.stringify(e))}function T(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function vt(e,t,n){return n?e.get(t,{signal:n}):e.get(t)}function ha(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 xe(e){return typeof e=="boolean"?e:void 0}function Ia(e){return e.length<=Xn?e:`${e.slice(0,Xn-1)}\u2026`}function lr(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function pr(e,t){return t?.length?e.map(n=>Object.fromEntries(t.map(r=>[r,n[r]??null]))):e}function ya(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 ba}from"crypto";import{z as f}from"zod";var Ta=6e4,re=1e4,mr=10*6e4,tt=new Map,nt=new Map,Mt=new Map,jt=new Map,fr=f.object({format:f.literal("markdown").describe("\u6700\u7EC8\u7ED3\u679C\u683C\u5F0F\u3002"),content:f.string().describe("\u6700\u7EC8\u5C55\u793A\u7ED9\u8C03\u7528\u8005\u6216\u7528\u6237\u7684 markdown \u5185\u5BB9\u3002")}),gr={themes:f.array(f.object({theme_id:f.string().optional(),theme_name:f.string().optional(),is_insight_enabled:f.boolean().optional()}).passthrough()),resolved_base_url:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},_r={session_id:f.string().optional(),message_id:f.string().optional(),answer:f.unknown().optional().describe("ChatBI \u540E\u7AEF\u8FD4\u56DE\u7684\u95EE\u6570\u89E3\u91CA\u6216\u539F\u59CB\u7B54\u6848\u7ED3\u6784\u3002"),sql:f.unknown().optional().describe("ChatBI \u540E\u7AEF\u751F\u6210\u7684 SQL \u4FE1\u606F\u3002"),answer_status:f.string().optional(),final_status:f.string().optional(),query_result:f.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:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},Fu={message_id:f.string().optional(),session_id:f.string().optional(),status:f.string(),detail:f.string().nullable().optional(),question:f.string().nullable().optional(),answer:f.unknown().optional(),final_result:fr.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:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},hr={theme_id:f.string().optional(),message_id:f.string().optional(),session_id:f.string().optional(),status:f.literal("started"),deduped:f.boolean(),retry_after_ms:f.number().int().nonnegative(),next_action:f.string().optional(),resolved_base_url:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},Ir={message_id:f.string().optional(),session_id:f.string().optional(),status:f.string(),detail:f.string().nullable().optional(),question:f.string().nullable().optional(),answer:f.unknown().optional(),throttled:f.boolean(),retry_after_ms:f.number().int().nonnegative(),final_result:fr.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:f.string().optional(),resolved_base_url:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},yr={is_insight:f.boolean().optional().describe("\u662F\u5426\u53EA\u5217\u51FA\u6D1E\u5BDF\u4E3B\u9898\u3002")},br={theme_id:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:f.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u95EE\u6570\u95EE\u9898\u3002"),session_id:f.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:f.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002")},zu={theme_id:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:f.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u6D1E\u5BDF\u95EE\u9898\u3002"),session_id:f.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:f.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002"),timeout_ms:f.number().int().positive().optional().describe("\u7B49\u5F85\u6D1E\u5BDF\u5B8C\u6210\u7684\u8D85\u65F6\u65F6\u95F4\uFF0C\u9ED8\u8BA4 300000ms\u3002"),poll_interval_ms:f.number().int().positive().optional().describe("\u8F6E\u8BE2\u95F4\u9694\uFF0C\u9ED8\u8BA4 2000ms\u3002")},Tr={theme_id:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:f.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:f.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:f.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002")},wr={theme_id:f.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:f.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:f.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 Cr(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 it(n,r,"listThemes")}}async function Sr(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 it(n,r,"query")}}async function Er(e,t){let n=new L(e);try{let r=Br({caller_scope:Ar(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=wa(r);if(i)return E({...i,deduped:!0,retry_after_ms:re,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=Mt.get(r);if(s){let c=await s;return E({...c,deduped:!0,retry_after_ms:re,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 Ca(r,u),u}).finally(()=>{Mt.delete(r)});Mt.set(r,o);let a=await o;return E({...a,deduped:!1,retry_after_ms:re,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 it(n,r,"insight.start")}}async function Rr(e,t){let n=new L(e);try{let r=Br({caller_scope:Ar(e),message_id:t.message_id}),i=Sa(r);if(i){let l=Nt(i.result),g=Lt(i.result,!0);return E({message_id:i.result.message_id,session_id:i.result.session_id,status:i.result.status,detail:Ut(i.result),question:i.result.question,answer:i.result.answer,throttled:!0,retry_after_ms:i.retryAfterMs,...l,next_action:g})}let s=jt.get(r);if(s){let l=await s,g=Gt(l.status),h=Nt(l),I=Lt(l,!0);return E({message_id:l.message_id,session_id:l.session_id,status:l.status,detail:Ut(l),question:l.question,answer:l.answer,throttled:!0,retry_after_ms:g?0:re,...h,next_action:I})}let o=n.pollInsight({themeId:t.theme_id,themeName:t.theme_name,messageId:t.message_id}).then(l=>(Ea(r,l),l)).finally(()=>{jt.delete(r)});jt.set(r,o);let a=await o,c=Gt(a.status),u=Nt(a),d=Lt(a,!1);return E({message_id:a.message_id,session_id:a.session_id,status:a.status,detail:Ut(a),question:a.question,answer:a.answer,throttled:!1,retry_after_ms:c?0:re,...u,next_action:d,resolved_base_url:n.getResolvedBaseUrl(),tried_base_urls:n.getTriedBaseUrls()})}catch(r){return it(n,r,"insight.poll")}}function Nt(e){return e.status!=="success"?{}:{final_result:{format:"markdown",content:Or(e)}}}function Ut(e){return e.detail!=null?e.detail:e.status==="failure"||e.status==="stopped"?Ra(e):e.detail}function Lt(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 wa(e){rt();let t=tt.get(e);if(!(!t||Date.now()-t.createdAt>=Ta))return t.result}function Ca(e,t){rt(),tt.set(e,{createdAt:Date.now(),result:t})}function Sa(e){rt();let t=nt.get(e);if(!t)return;let n=Date.now()-t.checkedAt,r=Gt(t.result.status);if(!(!r&&n>=re))return{result:t.result,retryAfterMs:r?0:Math.max(0,re-n)}}function Gt(e){return e==="success"||e==="failure"||e==="stopped"}function Ea(e,t){rt(),nt.set(e,{checkedAt:Date.now(),result:t})}function rt(){let e=Date.now();for(let[t,n]of tt)e-n.createdAt>=mr&&tt.delete(t);for(let[t,n]of nt)e-n.checkedAt>=mr&&nt.delete(t)}function Br(e){return JSON.stringify(Object.keys(e).sort().reduce((t,n)=>{let r=e[n];return typeof r<"u"&&(t[n]=r),t},{}))}function Ar(e){return e.BI_PAT?`pat:${qt(e.BI_PAT)}`:e.BI_UID_TOKEN?`uid:${qt(e.BI_UID_TOKEN)}`:`login:${qt(`${e.BI_LOGIN_DOMAIN??""}\0${e.BI_LOGIN_ID??""}`)}`}function qt(e){return ba("sha256").update(e).digest("hex").slice(0,16)}function Or(e){let t=e.answer?.trim();if(t)return Pa(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 Ra(e){switch(e.status){case"success":return Or(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 Ba(e,t){let n=[`| ${e.join(" | ")} |`,`|${e.map(()=>" --- ").join("|")}|`];for(let r of t)n.push(`| ${e.map((i,s)=>Oa(Aa(r[s]))).join(" | ")} |`);return n.join(`
6
- `)}function Aa(e){return e===null||typeof e>"u"||e===""?"-":String(e)}function Oa(e){return e.replaceAll(`\r
2
+ import"dotenv/config";import{createRequire as au}from"module";import{z as R}from"zod";var us="http://guandata-web:8088",ds=R.object({BI_BASE_URL:R.string().url().optional().default(us),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 gn(e=process.env){let t=ds.parse(e),n=t.MCP_TRANSPORT==="streamable-http";return{...t,BI_BASE_URL:t.BI_BASE_URL?.replace(/\/+$/,""),BI_PUBLIC_PATH:ls(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":fn(t.BI_LOGIN_ID_HEADER),BI_USER_PROPERTY_HEADER:fn(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 ls(e){let t=e?.trim().replace(/^\/+|\/+$/g,"")??"";return t?`/${t}`:""}function fn(e){return e?.trim().toLowerCase()||void 0}import{createRequire as $c}from"module";import{createHash as Fc,randomUUID as zc}from"crypto";import{createServer as Vc}from"http";import{McpServer as Qc}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as Kc}from"@modelcontextprotocol/sdk/server/stdio.js";import{StreamableHTTPServerTransport as Wc}from"@modelcontextprotocol/sdk/server/streamableHttp.js";var qe=class{record(t){console.error(JSON.stringify({audit:ms({...t})}))}},Ge=class{record(){}};function ft(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"?ps(i):void 0}}function ps(e){return e instanceof Error?e.name||"Error":typeof e}function ms(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function Je(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(fs(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} ${Ts(n)}`);let r=gs(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 fs(e,t){return`${e.BI_BASE_URL}${e.BI_PUBLIC_PATH}${t}`}function gs(e,t){let n=_s(e.headers);if(n)return n;let r=hs(t);return r||Is(e.headers)}function _s(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 hs(e){try{let t=JSON.parse(e);return _n(t)??_n(bs(t.response))}catch{return}}function Is(e){return[...e.getSetCookie?.()??[],...ys(e.get("set-cookie"))].map(n=>n.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1]).find(Boolean)}function ys(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function _n(e){if(e)for(let t of["uIdToken","authToken","token"]){let n=e[t];if(typeof n=="string"&&n)return n}}function bs(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Ts(e,t=500){return e.length>t?`${e.slice(0,t)}...`:e}var ws="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?Cs(`${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=hn(t,"probe");return{available:!1,lastError:n,failureType:Us(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:Ms})).themes}async query(t){let n=await this.resolveThemeId(t.themeId,t.themeName,!1),r={attachments:[],theme_id:n,message:t.message,config:In({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:yn(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,yn(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 Hs(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=In({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(xs(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 Ls(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=hn(o,n.operation),!As(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(!Os(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:Ss(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=Es(c,a,s);if(!a.ok||Rs(u))throw Bs(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 Je(this.config);return this.token=t.token,t.token}refreshTokenFromResponse(t,n){let r=js(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 Cs(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 He(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 Ss(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"]=ws),n}function Es(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:wn(e)},{retryableForBaseUrl:!0})}}function Rs(e){let t=bn(e);return typeof t=="number"&&![0,200].includes(t)||e.result==="fail"||e.success===!1}function Bs(e,t,n,r){let i=bn(e),s=Ds(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:wn(t)},c=vs(o),u=!c&&ks(n.status,i);return new v(o,a,{authExpired:u,retryableForBaseUrl:c||Ps(n.status,i)})}function As(e,t){return!!(t&&e instanceof v&&e.retryableForBaseUrl)}function Os(e){return e instanceof v&&e.authExpired}function ks(e,t){return e===401||e===403||t===401||t===403||t===5001}function Ps(e,t){return[401,403,404,405].includes(e)||typeof t=="number"&&[401,403,404,405].includes(t)}function xs(e){return e instanceof v&&e.detail.http_status===200&&e.detail.chatbi_code===404&&e.detail.chatbi_message==="Message not found."}function bn(e){if(typeof e.code=="number")return e.code;let t=$e(e.error);return typeof t?.status=="number"?t.status:void 0}function Ds(e){if(typeof e.message=="string"&&e.message.trim())return e.message;let t=$e(e.error);return typeof t?.message=="string"&&t.message.trim()?t.message:void 0}function vs(e){return/No static resource/i.test(e)}function $e(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Ms(e,t){let n=$e(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 js(e,t){let r=[...e.headers.getSetCookie?.()??[],...Ns(e.headers.get("set-cookie"))].map(s=>gt(s.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1])).find(Boolean);if(r)return r;let i=gt(e.headers.get("x-auth-token"));return i||Tn(t)}function Ns(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function gt(e){if(typeof e!="string")return;let t=e.trim();return t&&!/\s/.test(t)?t:void 0}function Tn(e){let t=$e(e);if(t){for(let n of["uIdToken","authToken"]){let r=gt(t[n]);if(r)return r}for(let n of["data","response"]){let r=Tn(t[n]);if(r)return r}}}function hn(e,t){return e instanceof v?e.detail:{operation:t,detail:e instanceof Error?e.message:String(e)}}function wn(e,t=1e3){return e.length>t?`${e.slice(0,t)}...`:e}function Us(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 Ls(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 In(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(Js))throw new Error(`ChatBI query failed: ${Gs(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 Gs(...e){return e.find(t=>typeof t=="string"&&t.trim())?.trim()}function Js(e){return typeof e=="string"&&e.trim().toLowerCase()==="failure"}function yn(e){let t=e-Date.now();if(t<=0)throw new Error("Insight request timed out");return t}async function Hs(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",ht=["search_metrics","list_metric_catalog","get_metric_detail","query_metric_data","search_metric_trees","get_metric_tree_detail","query_metric_tree_attribution"],$s=["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"],Fs=["get_bi_capabilities","global_search",...ht,"execute_sql_query","get_dataset_detail","get_card_info","query_card_data","get_page_info",...$s],zs=6e4,Vs="PAT \u6A21\u5F0F\u4EC5\u652F\u6301\u666E\u901A BI \u63A5\u53E3\uFF0C\u4E0D\u652F\u6301 ChatBI public-api\u3002",_t=new WeakMap;async function Ae(e,t){let n=_t.get(e);return(!n||n.expiresAt<=Date.now())&&_t.set(e,{expiresAt:Date.now()+zs,promise:Ks(e,t).catch(r=>Qs(r,t))}),_t.get(e).promise}function En(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:yt(e,t?["get_bi_capabilities"]:It(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?[]:ht,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 Rn(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 Qs(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:yt(t,It(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 Ks(e,t){let n=Ys(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 Xs(e),s=Zs(i.capabilityVersion,Be),o=await Ws(t);return{ok:!0,appVersion:i.appVersion,dataVersion:i.dataVersion,versionSource:r,service:yt(t,It(t)),caller:{ok:!0,features:{executeSqlQuery:s},chatbi:o},features:{executeSqlQuery:s},metricPlatform:{registeredTools:ht,readOnly:!0},chatbi:o}}function It(e){let t=new Set(Fs);if(!e.BI_PAT&&(He(e)||e.MCP_TRANSPORT==="streamable-http"))for(let n of new L(e).getRegisteredTools())t.add(n);return[...t]}function yt(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 Ws(e){if(e.BI_PAT)return le(e,Vs);let t=new L(e);return He(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||!He(e)?[]:new L(e).getRegisteredTools(),failureType:"unknown",triedBaseUrls:[],lastError:{operation:"probe",chatbi_message:t,detail:t}}}function Ys(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 Xs(e){let t=await e.get("/api/server-version"),n=Sn(t.version),r=Sn(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 Zs(e,t){let n=Cn(e),r=Cn(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=eo(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 Cn(e){let t=e.match(/(\d+)\.(\d+)\.(\d+)/);if(t)return[Number(t[1]),Number(t[2]),Number(t[3])]}function eo(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 Sn(e){return typeof e=="string"&&e.trim()?e.trim():void 0}var Fe=class{constructor(t){this.config=t}config;cache=new Map;async exchange(t){let n=Bn(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=to(t);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=this.config.BI_USER_PROPERTY_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=An(a);if(!o.ok||On(c))throw this.debugError(`BI user property lookup failed: HTTP ${o.status} ${bt(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 Bn(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=An(s),a=o?.response?.token?.trim();if(!i.ok||On(o)||!a)throw this.debugError(`BI loginId token exchange failed: HTTP ${i.status} ${bt(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=no(t);return r?Math.min(n,r):n}debugError(t,n,r=[]){if(!io(this.config))return new Error(t);let i=Tt(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 Bn(e){let t=e.trim();if(!t)throw new Error("GuanBI loginId is required for loginId identity exchange.");return t}function to(e){let t=e.trim();if(!t)throw new Error("BI user property value is required for user property identity exchange.");return t}function An(e){if(e.trim())try{return JSON.parse(e)}catch{return}}function On(e){return!e||e.result&&!["ok","success"].includes(e.result.toLowerCase())?!0:e.success===!1}function no(e){if(!e)return;let t=e.replace(" ","T"),n=Date.parse(t);return Number.isFinite(n)?n:void 0}function bt(e,t){let n=t.filter(r=>!!r).reduce((r,i)=>r.split(i).join("[redacted]"),e);return so(n)}function Tt(e,t){let n=t.filter(r=>!!r);return typeof e=="string"?bt(e,n):Array.isArray(e)?e.map(r=>Tt(r,n)):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).map(([r,i])=>[r,ro(r)?"[redacted]":Tt(i,n)]))}function ro(e){return["token","authorization","cookie","uidtoken","uIdToken".toLowerCase()].includes(e.toLowerCase())}function io(e){return["1","true","yes","on"].includes(e.BI_IDENTITY_DEBUG?.trim().toLowerCase()??"")}function so(e,t=1e3){return e.length>t?`${e.slice(0,t)}\u2026`:e}var fe="x-personal-token";function oo(e){return{transport:"stdio",...e.BI_PAT?{biPatToken:e.BI_PAT}:{},biUidToken:e.BI_UID_TOKEN,audit:{}}}function Pn(e){return{resolve:()=>oo(e)}}function ze(e){let t=Oe(e);if(t)return{transport:"streamable-http",biPatToken:t,audit:pe(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:pe(e)}}function xn(e,t={}){let n=e?new Fe(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=Oe(o);if(a)return{transport:"streamable-http",biPatToken:a,audit:pe(o)};if(e?.BI_PAT)return{transport:"streamable-http",biPatToken:e.BI_PAT,audit:pe(o)};if(Y(o,"x-guanbi-uid-token")?.trim()||!e)return ze(o);let u=e.BI_LOGIN_ID_HEADER,d=u?me(Y(o,u)):void 0;if(d){let _=await r?.(d);return _?{transport:"streamable-http",biUidToken:_.token,biUidTokenRefresh:_.refresh,loginId:d,audit:pe(o)}:ze(o)}let l=e.BI_USER_PROPERTY_HEADER,g=l?me(Y(o,l)):void 0;if(g){let _=await i?.(g);return _?{transport:"streamable-http",biUidToken:_.token,biUidTokenRefresh:_.refresh,audit:pe(o)}:ze(o)}throw ao(o,e)}}}function Oe(e){return me(Y(e,fe))}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 me(e){return e?.trim()||void 0}function pe(e){return{tenantId:me(Y(e,"x-tenant-id")),endUserId:me(Y(e,"x-end-user-id")),traceId:me(Y(e,"x-trace-id"))}}function ao(e,t){let n="\u7F3A\u5C11 GuanBI \u7528\u6237\u4EE4\u724C\uFF1A\u8BF7\u901A\u8FC7 X-GuanBI-Uid-Token \u4F20\u5165\u5F53\u524D\u7528\u6237 uIdToken\u3002";if(!mo(t))return new Error(n);let r={operation:"resolveHttpCallerContext",expectedIdentityHeaders:co(e,t),receivedHeaderNames:uo(e),receivedIdentityLikeHeaders:kn(Object.fromEntries(wt(e).filter(([i])=>po(i.toLowerCase()))),[fe,"x-guanbi-uid-token",t.BI_LOGIN_ID_HEADER,t.BI_USER_PROPERTY_HEADER]),receivedHeaders:kn(e,[fe,"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 co(e,t){return[{source:"pat",name:fe,present:Ve(e,fe)},{source:"uidToken",name:"x-guanbi-uid-token",present:Ve(e,"x-guanbi-uid-token")},...t.BI_LOGIN_ID_HEADER?[{source:"loginId",name:t.BI_LOGIN_ID_HEADER,present:Ve(e,t.BI_LOGIN_ID_HEADER)}]:[],...t.BI_USER_PROPERTY_HEADER?[{source:"userProperty",name:t.BI_USER_PROPERTY_HEADER,present:Ve(e,t.BI_USER_PROPERTY_HEADER),userPropertyKey:t.BI_USER_PROPERTY_KEY}]:[]]}function Ve(e,t){return Y(e,t)!==void 0}function uo(e){return[...new Set(wt(e).map(([t])=>t.toLowerCase()))].sort()}function kn(e,t){let n=new Set(t.filter(r=>!!r).map(r=>r.toLowerCase()));return Object.fromEntries(wt(e).map(([r,i])=>{let s=r.toLowerCase();return lo(s)?[s,"<redacted>"]:[s,n.has(s)?i:"<present>"]}))}function wt(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 lo(e){return["authorization","cookie","set-cookie","x-guanbi-uid-token",fe].includes(e)}function po(e){return e.startsWith("x-")||e.includes("auth")||e.includes("login")||e.includes("token")||e.includes("uid")||e.includes("user")}function mo(e){return["1","true","yes","on"].includes(e.BI_IDENTITY_DEBUG?.trim().toLowerCase()??"")}import{AsyncLocalStorage as fo}from"async_hooks";var ge={client:"X-Guandata-Client",clientVersion:"X-Guandata-Client-Version",command:"X-Guandata-Command"},go=new Set(Object.values(ge).map(e=>e.toLowerCase())),Dn=new fo;function vn(e,t){return Dn.run(e,t)}function _o(e,t="mcp"){e=Dn.getStore()??e;let n={};n[ge.client]=e?.client.trim()||t.trim()||"mcp";let r=e?.clientVersion?.trim();r&&(n[ge.clientVersion]=r);let i=e?.command?.trim();return i&&(n[ge.command]=i),n}function Mn(e,t,n="mcp"){let r=_o(t,n);return{...Ct(e),...r}}function Ct(e){return Object.fromEntries(Object.entries(e).filter(([t])=>!go.has(t.toLowerCase())))}var jn=64*1024,St=16*1024*1024,ho=8*1024,_e=class extends Error{constructor(n,r){super(r);this.status=n;this.name="BIHttpResponseError"}status},Ke=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:ke(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)});return s.ok||await Qe(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:ke(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)});if(this.shouldRefreshToken(i)){await Et(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:ke(this.config.BI_REQUEST_TIMEOUT_MS,n?.signal)})}return i.ok||await Qe(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 Qe(c,t,n);let u=await Nn(c,t,n);return qn(u)}let s=await this.ensureToken(),o=await this.fetchWithToken(t,n,s,r,i);if(this.shouldRefreshToken(o)){await Et(o,"retrying after BI authentication expired");let c=await this.refreshToken();o=await this.fetchWithToken(t,n,c,r,i)}o.ok||await Qe(o,t,n);let a=await Nn(o,t,n);return this.refreshTokenFromResponse(o),qn(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:ke(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:ke(this.config.BI_REQUEST_TIMEOUT_MS,s?.signal)})}async ensureToken(){if(this.token)return this.token;let t=await Je(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=To(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{...Ct(n),Cookie:`uIdToken=${t}`}}patHeaders(t,n){return Mn({...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 ke(e,t){if(t?.aborted)return t;let n=AbortSignal.timeout(e);return t?AbortSignal.any([t,n]):n}async function Qe(e,t,n){let r=await Gn(e,jn),i=r.truncated?` [truncated after ${jn} bytes]`:"";throw new _e(e.status,`BI \u8BF7\u6C42\u5931\u8D25\uFF1A${t} ${n} HTTP ${e.status} ${Eo(r.text)}${i}`)}async function Nn(e,t,n){let r=yo(e);r!==void 0&&r>St&&(await Et(e,"BI JSON response exceeded byte limit"),Un(t,n));let i=await Gn(e,St);return i.truncated&&Un(t,n),i.text}function Un(e,t){throw new Error(`BI JSON \u54CD\u5E94\u8FC7\u5927\uFF1A${e} ${t} \u8D85\u8FC7 ${St} \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 Gn(e,t){if(!e.body)return{text:"",truncated:!1};let n=e.body.getReader(),r=new Uint8Array(Math.min(ho,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=Ln(r,t,i+a),r.set(o.subarray(0,a),i),i+=a),await Io(n,"response body exceeded byte limit"),{text:new TextDecoder().decode(r.subarray(0,i)),truncated:!0};r=Ln(r,t,i+o.byteLength),r.set(o,i),i+=o.byteLength}}finally{n.releaseLock()}}function Ln(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 Io(e,t){try{await e.cancel(new Error(t))}catch{}}async function Et(e,t){if(e.body)try{await e.body.cancel(new Error(t))}catch{}}function yo(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 qn(e){if(!e)return;let t=JSON.parse(e);if(!bo(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 bo(e){return!e||typeof e!="object"||Array.isArray(e)?!1:"response"in e||"result"in e||"success"in e}function To(e){return wo(e.headers)??So(e.headers)}function wo(e){return[...e.getSetCookie?.()??[],...Co(e.get("set-cookie"))].map(n=>Jn(n.trim().match(/(?:^|;\s*)uIdToken=([^;]+)/)?.[1])).find(Boolean)}function Co(e){return e?e.split(/,(?=\s*[^;,]+=)/):[]}function So(e){return Jn(e.get("x-auth-token"))}function Jn(e){if(typeof e!="string")return;let t=e.trim();return t&&!/\s/.test(t)?t:void 0}function Eo(e,t=1e3){return e.length>t?`${e.slice(0,t)}...`:e}var We=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 Ke(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 Hn={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},Ye=class{serviceDomain;appVersion;enabled;sender;now;constructor({config:t,appVersion:n,sender:r=Ao(),now:i=Date.now}){this.serviceDomain=ko(t.BI_BASE_URL),this.appVersion=n,this.enabled=Oo(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:Po(this.now()-t.startedAtMs),error_type:n.success?"none":Do(n.error)};try{Promise.resolve(this.sender(r)).catch(()=>{})}catch{}}};function Ro(e=Hn){return t=>Bo(t,e)}async function Bo(e,t=Hn){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 xo(i,t.maxResponseBytes)}catch{}}function Ao(){return vo(process.env)?()=>{}:Ro()}function Oo(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 $n(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 ko(e){if(e)try{return new URL(e).hostname}catch{return}}function Po(e){return e<1e3?"<1s":e<5e3?"1-5s":e<3e4?"5-30s":e<12e4?"30-120s":">120s"}async function xo(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 Do(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 vo(e){return e.NODE_ENV==="test"||e.VITEST==="true"}var Mo=5e3;function zn(e){return e+Mo}var Xe=class{constructor(t,n,r=new Ge,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=jo(n?.signal,this.requestTimeoutMs);o.throwIfAborted();let a=await Fn(this.callerContextResolver.resolve(n),o),c=this.clientFactory.create(a,r),u={...c,signal:o};try{let d=await Fn(vn(c.config.BI_REQUEST_METADATA,()=>t(u)),o,i?.abortRecoveryGraceMs);if(r){let l=No(d)?"error":"success";this.auditLogger.record(ft(r,a,s,l,d))}return d}catch(d){throw r&&this.auditLogger.record(ft(r,a,s,"error",d)),d}}};function jo(e,t){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}function Fn(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 No(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=Bt(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=Bt(e);return{content:[{type:"text",text:JSON.stringify(t,null,2)}],isError:!0}}function Pe(e,t,n={}){return te({status:"error",diagnostic:Rt(e,t,n)})}function Rt(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 Bt({operation:e,path:i?.groups?.path,status:i?.groups?.status?Number(i.groups.status):void 0,message:r,...n})}function Bt(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var Vn={};async function Qn(e,t){return D(await Ae(e,t))}import{z as y}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=h({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",Ot("/api/metric-platform/metrics/full-tree",{projectId:t.projectId,nameLike:t.keyword}))}listMetricDirectoryTree(t){return this.get("listMetricDirectoryTree",Ot("/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",h(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",Ot("/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 At(t,n,s)}}async get(t,n,r){try{return await this.client.get(n,r?{headers:r}:void 0)}catch(i){throw At(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 At(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.get("getUserProfile","/api/user/profile"),r=Kn(n.domId,n.domainId,n.domain,n.dom_id),i=Kn(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 At(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 Ot(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 h(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function he(e){return Buffer.from(e,"utf8").toString("base64")}function Kn(...e){for(let t of e)if(typeof t=="string"&&t.trim())return t.trim()}import{z as Ze}from"zod";var Xn=Ze.object({dimension:Ze.string().trim().min(1).max(512).describe("\u52A8\u6001\u7EF4\u5EA6\u540D\u79F0\u6216 dzId\u3002"),fields:Ze.array(Ze.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")}),et=100,kt=512;function Zn(e,t,n){if(!n.length)return{dynamicFieldFilters:[]};let r=Uo(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=Lo(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=qo(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 Uo(e){let t=ie(ie(ie(e.content).meta).chartMain),n=Wn(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=Go(s.multiSelect)===!0;for(let c of Yn(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(...Yn(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 Wn(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 Lo(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=>h({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,et),supported_dimension_count:s.length,supported_dimensions_truncated:s.length>et,supported_dimension_values_truncated:o}}}function qo(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=>h({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,et),supported_field_count:i.length,supported_fields_truncated:i.length>et,supported_field_values_truncated:s}}}function Wn(e){return Array.isArray(e)?e.map(ie).filter(t=>Object.keys(t).length):[]}function Yn(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 Go(e){return typeof e=="boolean"?e:void 0}function A(e){return e.length<=kt?e:`${e.slice(0,kt-1)}\u2026`}function X(...e){return e.some(t=>t.length>kt)}async function er(e,t,n,r){if(!n.length)return{dynamicParams:[]};let i=new Map,s=[];for(let l of n){let g=l.parameter.trim();if(i.has(g))return{unsupported:{capability:"unsupported_dynamic_params",parameter:g,message:`\u52A8\u6001\u53C2\u6570\u88AB\u91CD\u590D\u6307\u5B9A\uFF1A${g}`}};s.push(g),i.set(g,xe(l.value))}let o=tt(tr(t),Ho()),a=s.some(l=>!o.some(g=>Z(g,"dpId","dp_id")===l||Z(g,"name")===l)),c=xe(t.pgId).trim();if(a&&c){r?.throwIfAborted();let l=`/api/page/${encodeURIComponent(c)}`,g=r?await e.get(l,{signal:r}):await e.get(l);r?.throwIfAborted(),o=tt(o,Jo(g,xe(t.cdId)))}let u=[],d=new Map;for(let l of s){let g=$o(o,l);if("unsupported"in g)return{unsupported:g.unsupported};let _=zo(g.param),I=Z(_,"dpId","dp_id"),T=d.get(I);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${I}`}};d.set(I,l),_.defaultValue=i.get(l)??"";let x=Fo(_,l);if("unsupported"in x)return{unsupported:x.unsupported};u.push(_)}return{dynamicParams:u}}function tr(e){let t=K(e.content),n=K(K(K(t.meta).chartMain).props),r=K(K(t.dsInfo).config);return tt(Pt(n.dynamicParameters),Pt(r.dynamicParameters))}function Jo(e,t){let n=Pt(e.cards),r=n.find(s=>xe(s.cdId)===t),i=n.filter(s=>s.cdType==="SELECTOR"&&K(s.content).selectorType==="PARAMETER").map(s=>K(K(s.content).parameter));return tt(r?tr(r):[],i)}function tt(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 Ho(){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 $o(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 Fo(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=xe(e[n]);if(r)return r}return""}function Pt(e){return Array.isArray(e)?e.map(K).filter(t=>Object.keys(t).length):[]}function zo(e){return JSON.parse(JSON.stringify(e))}function K(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function xe(e){return typeof e=="string"?e:e==null?"":String(e)}var Vo=y.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"]),nr=new Set(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN"]),Dt=new Set(["IS_NULL","NOT_NULL"]),Qo=y.object({field:y.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:Vo.describe("BI \u539F\u751F\u7B5B\u9009\u64CD\u4F5C\u7B26\uFF0C\u4F8B\u5982 EQ/NI/GE/BT/CONTAINS\u3002"),values:y.array(y.union([y.string(),y.number(),y.boolean()])).optional().describe("\u7B5B\u9009\u503C\u3002IS_NULL/NOT_NULL \u4E0D\u9700\u8981\u4F20\u503C\u3002"),fd_id:y.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;Dt.has(e.operator)&&n>0&&t.addIssue({code:y.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u4E0D\u63A5\u53D7\u7B5B\u9009\u503C\u3002`}),nr.has(e.operator)&&n!==2&&t.addIssue({code:y.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u9700\u8981\u6070\u597D 2 \u4E2A\u503C\u3002`}),!nr.has(e.operator)&&!Dt.has(e.operator)&&n<1&&t.addIssue({code:y.ZodIssueCode.custom,path:["values"],message:`${e.operator} \u64CD\u4F5C\u7B26\u81F3\u5C11\u9700\u8981 1 \u4E2A\u503C\u3002`})}),Ko=y.object({parameter:y.string().min(1).describe("\u52A8\u6001\u53C2\u6570\u540D\u79F0\u6216 dpId\u3002"),value:y.union([y.string(),y.number(),y.boolean()]).describe("\u52A8\u6001\u53C2\u6570\u8986\u76D6\u503C\uFF0C\u4F1A\u6309 BI dynamicParams.defaultValue \u4EE5\u5B57\u7B26\u4E32\u53D1\u9001\u3002")}),Wo=y.object({returned_count:y.number().int().nonnegative(),offset:y.number().int().nonnegative(),limit:y.number().int().positive(),has_more:y.boolean(),next_offset:y.number().int().nonnegative().optional(),total_count:y.number().int().nonnegative().optional()}),or={cd_id:y.string().min(1).max(512).describe("\u5361\u7247 ID\u3002"),filters:y.array(Qo).optional().describe("\u7ED3\u6784\u5316\u7B5B\u9009\u6761\u4EF6\u3002\u4E0D\u652F\u6301 CLI \u98CE\u683C\u7B5B\u9009\u5B57\u7B26\u4E32\u3002"),dynamic_params:y.array(Ko).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:y.array(Xn).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:y.array(y.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:y.number().int().nonnegative().optional().default(0).describe("\u5F53\u524D\u9875\u8D77\u59CB\u504F\u79FB\u91CF\uFF0C\u9ED8\u8BA4 0\u3002"),limit:y.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:y.boolean().optional().describe("\u662F\u5426\u8FD4\u56DE\u539F\u59CB\u54CD\u5E94\u3002")},ar={summary:y.unknown().optional(),columns:y.array(y.unknown()).optional(),rows:y.array(y.unknown()).optional(),page:Wo.optional(),diagnostic:y.unknown().optional(),raw:y.unknown().optional(),status:y.string().optional(),next_action:y.string().optional()},Yo=1e3,De=4*1024*1024,nt=1024*1024,cr=64*1024,rr=512;async function ur(e,t,n){try{let r=t.limit??100,i=Math.min(r,Yo),s=t.offset??0,o=await Xo(e,t.cd_id,t.filters??[],t.dynamic_params??[],t.dynamic_fields??[],n);if("unsupported"in o)return ta("query_card_data",o.unsupported);let{card:a,cardType:c,filters:u,dynamicParams:d,dynamicFieldFilters:l}=o;if(c==="TEXT")return ea(t.cd_id,a,t.columns,t.raw,s,i);let g=await aa(e,oa(t.cd_id,c,i,u,d,l,s),n),{endpoint:_}=g.requests[0],I=g.data,T=c==="CHART"?da(w(I.chartMain)):void 0,x=T?.rows??pa(I),U=Ir(x.slice(0,i),t.columns),k=De-cr-(t.raw?nt:0),S=mr(U,k),$=Ta(c,I,s,i,U.length);if(c==="TREE_SELECTOR"&&S.truncated)return Zo(t.cd_id,s,i,$.page.total_count);if(S.oversizedFirstRow)return dr(t.cd_id,c,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+(c==="TREE_SELECTOR"?i:F.length):void 0,ue=h({...$.page,returned_count:F.length,has_more:Se,next_offset:Re}),de=t.raw===!0&&fr(g.raw,nt)&&!S.truncated;return rt({summary:h({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:h({mode:ca(c),card_type:c,endpoint:_,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?De: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?g.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:Rt("query_card_data",r)})}}async function Xo(e,t,n=[],r=[],i=[],s){s?.throwIfAborted();let o=await _r(e,`/api/card/${encodeURIComponent(t)}`,s);s?.throwIfAborted();let a=sa(o);if(r.length&&a!=="CHART")return{unsupported:na(a)};let c=C(o.cdType).toUpperCase()||"UNKNOWN";if(i.length&&!["CHART","METRIC_CHART"].includes(c))return{unsupported:ra(c)};let u=a==="SELECTOR"?ia(o):void 0;if(u)return{unsupported:u};if(a==="TEXT")return{card:o,cardType:a,filters:[],dynamicParams:[],dynamicFieldFilters:[]};let d=Zn(o,t,i);if("unsupported"in d)return d;let l=await _a(e,o,n,s);s?.throwIfAborted();let g=fa(n,l,a);if("unsupported"in g)return g;let _=await er(e,o,r,s);return s?.throwIfAborted(),"unsupported"in _?_:{card:o,cardType:a,filters:g.filters,dynamicParams:_.dynamicParams,dynamicFieldFilters:d.dynamicFieldFilters}}function dr(e,t,n,r,i){return rt({status:"response_too_large",summary:{cd_id:e,card_type:t,row_count:0,truncated:!0},columns:[],rows:[],page:h({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:De}})}function Zo(e,t,n,r){return rt({status:"response_too_large",summary:{cd_id:e,card_type:"TREE_SELECTOR",row_count:0,truncated:!0},columns:[],rows:[],page:h({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:De}})}function rt(e){let t=w(e.page),n=w(e.diagnostic),r=hr(t.next_offset),i=ve(t.has_more)===!0,s=C(e.status)||(i?"partial":"success");return E({...e,status:s},{text:h({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:h({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 ea(e,t,n,r,i,s){let o=w(t.content),a=ma(o),c=a?[{content:a}]:[],u=Ir(c.slice(i,i+s),n),d=r===!0&&fr(t,nt),l=De-cr-(d?nt:0),g=mr(u,l);if(g.oversizedFirstRow)return dr(e,"TEXT",i,s,c.length);let _=g.rows,I=g.truncated||i+_.length<c.length,T=d&&!g.truncated;return rt({summary:{cd_id:e,card_type:"TEXT",row_count:_.length,truncated:I},columns:g.columns,rows:_,page:h({returned_count:_.length,offset:i,limit:s,has_more:I,next_offset:I?i+_.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 ta(e,t){return E({status:"unsupported",diagnostic:{tool:e,...t}})}function na(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 ra(e){let t=Ca(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 ia(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())&&ve(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 sa(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 oa(e,t,n,r,i,s,o=0){let a=encodeURIComponent(e);return t==="SELECTOR"?{endpoint:`/api/selector/${a}/data`,requestBody:h({fieldQuery:{offset:o,limit:n},filters:r.length?r:void 0})}:t==="TREE_SELECTOR"?{endpoint:`/api/treeSelector/${a}/data`,requestBody:h({offset:o,limit:n,filters:r.length?r:void 0})}:{endpoint:`/api/card/${a}/data`,requestBody:h({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 aa(e,t,n){let r=await wa(e,t.endpoint,t.requestBody,n);return{raw:r,data:ua(r),requests:[t]}}function ca(e){return e==="SELECTOR"?"selector_card_data":e==="TREE_SELECTOR"?"tree_selector_card_data":"chart_card_data"}function ua(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 da(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:Mt(k)||`row_${S+1}`,shrinked:ve(k.isShrinkedInGroupTable)===!0})),a=la(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),g=Array.from({length:l},(k,S)=>a[S]||`metric_${S+1}`),_=Sa([...o.map(k=>k.header),...d,...g]),I=Math.max(r.length,i.length),T=[],x=[],U=0;for(let k=0;k<I;k+=1){let S=ee(r[k]),$=ee(i[k]),F=0,Se=o.map(Le=>{if(Le.shrinked)return null;let z=F<S.length?xt(S[F]):null;return F+=1,z}),Ee=d.map((Le,z)=>{let mn=F+z;return mn<S.length?xt(S[mn]):null}),Re=g.map((Le,z)=>z<$.length?xt($[z]):null),ue=[...Se,...Ee,...Re];if(!ue.length)continue;let mt=S.length!==c,de=$.length!==a.length;(mt||de)&&(U+=1,x.length<20&&x.push(h({row_number:k+1,row_value_count:mt?{expected:c,actual:S.length}:void 0,metric_value_count:de?{expected:a.length,actual:$.length}:void 0})));let cs=Math.max(_.length,ue.length);T.push(Object.fromEntries(Array.from({length:cs},(Le,z)=>[_[z]??`column_${z+1}`,ue[z]??null])))}return{rows:T,alignmentIssueCount:U,alignmentIssues:x}}function la(e){let n=ee(e.data??e.values).map((r,i)=>{let s=ee(r).map(gr).filter(Boolean).join("/");return s||Mt(Ie(e.fields??e.meta)[i])||`metric_${i+1}`}).filter(Boolean);return n.length?n:Ie(e.fields??e.meta).map(Mt).filter(Boolean)}function pa(e){return Ie(e.result)}function ma(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 fa(e,t,n){let r=[];for(let i of e){let s=Ia(t,i.field,i.fd_id);if("unsupported"in s)return{unsupported:s.unsupported};r.push(h({name:s.field.name,fdId:s.field.fdId,fdType:s.field.fdType,filterLevel:n==="CHART"?ha(s.field.metaType):void 0,filterType:i.operator,filterValue:ga(i)}))}return{filters:r}}function ga(e){return Dt.has(e.operator)?[]:(e.values??[]).map(C)}async function _a(e,t,n,r){let i=ya(t);if(!n.some(a=>{let c=lr(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 _r(e,`/api/data-source/${encodeURIComponent(o)}`,r);return r?.throwIfAborted(),[...i,...pr(a)]}catch{return r?.throwIfAborted(),i}}function ha(e){return e.toUpperCase()==="METRIC"?"AGGREGATION":"DETAIL"}function Ia(e,t,n){let r=lr(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=>h({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 lr(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))??ir(e.filter(i=>C(i.name)===r))??ir(e.filter(i=>C(i.alias)===r))}function ir(e){return e.find(t=>C(t.fd_id))??e[0]}function ya(e){let t=w(e.content),n=pr(w(t.dsInfo)),r=w(w(t.source).field);Object.keys(r).length&&n.push(vt(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=>vt(c,o)));return ba(n)}function pr(e){return Ie(e.columns).map(t=>({...vt(t),meta_type:q(t.metaType,t.meta_type)??"DIM"}))}function vt(e,t){return h({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 ba(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 Ta(e,t,n,r,i){let s=e==="CHART"?w(t.chartMain):t,o=hr(s.count),a=e==="TREE_SELECTOR"?r:i,c=o===void 0?void 0:n+a<o,u=e!=="CHART"&&ve(s.exceedLimit)===!0,d=u&&(o===void 0||n+a>=o),l=d||(e==="CHART"?ve(s.hasMoreData)??c??i===r:c??i===r);return{backendLimitReached:d,page:h({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 mr(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=jt(a,u),l=Object.keys(a).filter(I=>!i.has(I)),g=0,_=!0;for(let I=0;I<l.length;I+=1){let T=r.length+I>0?1:0,x=t-s-o-c-d-g-T,U=Nt(l[I],x);if(U>x){_=!1;break}g+=T+U}if(d>u||!_)return{rows:n,columns:r,truncated:!0,oversizedFirstRow:n.length===0};n.push(a),s+=c+d,o+=g;for(let I of l)r.push(I),i.add(I)}return{rows:n,columns:r,truncated:!1,oversizedFirstRow:!1}}function fr(e,t){return jt(e,t)<=t}function jt(e,t){if(t<0)return t+1;if(e==null)return 4;if(typeof e=="string")return Nt(e,t);if(typeof e=="number"||typeof e=="boolean")return Buffer.byteLength(JSON.stringify(e));if(Array.isArray(e))return sr(e.map(n=>[void 0,n]),t);if(typeof e=="object"){let n=Object.entries(e).filter(([,r])=>r!==void 0);return sr(n,t)}return 4}function sr(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=Nt(i,t-n);n+=a+1}let o=jt(s,t-n);if(n+=o,n>t)return t+1}return n}function Nt(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 Mt(e){return q(e.title,e.alias,e.originTitle,e.name,e.fdId,e.id)??""}function gr(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 xt(e){let t=w(e);return Object.keys(t).length?"v"in t?t.v:"value"in t?t.value:gr(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 _r(e,t,n){return n?e.get(t,{signal:n}):e.get(t)}function wa(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 ve(e){return typeof e=="boolean"?e:void 0}function Ca(e){return e.length<=rr?e:`${e.slice(0,rr-1)}\u2026`}function hr(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Ir(e,t){return t?.length?e.map(n=>Object.fromEntries(t.map(r=>[r,n[r]??null]))):e}function Sa(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 Ea}from"crypto";import{z as f}from"zod";var Ra=6e4,se=1e4,yr=10*6e4,it=new Map,st=new Map,Ut=new Map,Lt=new Map,br=f.object({format:f.literal("markdown").describe("\u6700\u7EC8\u7ED3\u679C\u683C\u5F0F\u3002"),content:f.string().describe("\u6700\u7EC8\u5C55\u793A\u7ED9\u8C03\u7528\u8005\u6216\u7528\u6237\u7684 markdown \u5185\u5BB9\u3002")}),Tr={themes:f.array(f.object({theme_id:f.string().optional(),theme_name:f.string().optional(),is_insight_enabled:f.boolean().optional()}).passthrough()),resolved_base_url:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},wr={session_id:f.string().optional(),message_id:f.string().optional(),answer:f.unknown().optional().describe("ChatBI \u540E\u7AEF\u8FD4\u56DE\u7684\u95EE\u6570\u89E3\u91CA\u6216\u539F\u59CB\u7B54\u6848\u7ED3\u6784\u3002"),sql:f.unknown().optional().describe("ChatBI \u540E\u7AEF\u751F\u6210\u7684 SQL \u4FE1\u606F\u3002"),answer_status:f.string().optional(),final_status:f.string().optional(),query_result:f.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:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},Xu={message_id:f.string().optional(),session_id:f.string().optional(),status:f.string(),detail:f.string().nullable().optional(),question:f.string().nullable().optional(),answer:f.unknown().optional(),final_result:br.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:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},Cr={theme_id:f.string().optional(),message_id:f.string().optional(),session_id:f.string().optional(),status:f.literal("started"),deduped:f.boolean(),retry_after_ms:f.number().int().nonnegative(),next_action:f.string().optional(),resolved_base_url:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},Sr={message_id:f.string().optional(),session_id:f.string().optional(),status:f.string(),detail:f.string().nullable().optional(),question:f.string().nullable().optional(),answer:f.unknown().optional(),throttled:f.boolean(),retry_after_ms:f.number().int().nonnegative(),final_result:br.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:f.string().optional(),resolved_base_url:f.string().optional(),tried_base_urls:f.array(f.string()).optional()},Er={is_insight:f.boolean().optional().describe("\u662F\u5426\u53EA\u5217\u51FA\u6D1E\u5BDF\u4E3B\u9898\u3002")},Rr={theme_id:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:f.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u95EE\u6570\u95EE\u9898\u3002"),session_id:f.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:f.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002")},Zu={theme_id:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:f.string().min(1).describe("\u81EA\u7136\u8BED\u8A00\u6D1E\u5BDF\u95EE\u9898\u3002"),session_id:f.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:f.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002"),timeout_ms:f.number().int().positive().optional().describe("\u7B49\u5F85\u6D1E\u5BDF\u5B8C\u6210\u7684\u8D85\u65F6\u65F6\u95F4\uFF0C\u9ED8\u8BA4 300000ms\u3002"),poll_interval_ms:f.number().int().positive().optional().describe("\u8F6E\u8BE2\u95F4\u9694\uFF0C\u9ED8\u8BA4 2000ms\u3002")},Br={theme_id:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898 ID\u3002"),theme_name:f.string().min(1).optional().describe("ChatBI \u4E3B\u9898\u540D\u79F0\u3002"),message:f.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:f.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:f.string().min(1).optional().describe("\u53EF\u9009\u5916\u90E8\u4E0A\u4E0B\u6587\u3002")},Ar={theme_id:f.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:f.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:f.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 Or(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 at(n,r,"listThemes")}}async function kr(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 at(n,r,"query")}}async function Pr(e,t){let n=new L(e);try{let r=Dr({caller_scope:vr(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=Ba(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=Ut.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 Aa(r,u),u}).finally(()=>{Ut.delete(r)});Ut.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 at(n,r,"insight.start")}}async function xr(e,t){let n=new L(e);try{let r=Dr({caller_scope:vr(e),message_id:t.message_id}),i=Oa(r);if(i){let l=qt(i.result),g=Jt(i.result,!0);return E({message_id:i.result.message_id,session_id:i.result.session_id,status:i.result.status,detail:Gt(i.result),question:i.result.question,answer:i.result.answer,throttled:!0,retry_after_ms:i.retryAfterMs,...l,next_action:g})}let s=Lt.get(r);if(s){let l=await s,g=$t(l.status),_=qt(l),I=Jt(l,!0);return E({message_id:l.message_id,session_id:l.session_id,status:l.status,detail:Gt(l),question:l.question,answer:l.answer,throttled:!0,retry_after_ms:g?0:se,..._,next_action:I})}let o=n.pollInsight({themeId:t.theme_id,themeName:t.theme_name,messageId:t.message_id}).then(l=>(ka(r,l),l)).finally(()=>{Lt.delete(r)});Lt.set(r,o);let a=await o,c=$t(a.status),u=qt(a),d=Jt(a,!1);return E({message_id:a.message_id,session_id:a.session_id,status:a.status,detail:Gt(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 at(n,r,"insight.poll")}}function qt(e){return e.status!=="success"?{}:{final_result:{format:"markdown",content:Mr(e)}}}function Gt(e){return e.detail!=null?e.detail:e.status==="failure"||e.status==="stopped"?Pa(e):e.detail}function Jt(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 Ba(e){ot();let t=it.get(e);if(!(!t||Date.now()-t.createdAt>=Ra))return t.result}function Aa(e,t){ot(),it.set(e,{createdAt:Date.now(),result:t})}function Oa(e){ot();let t=st.get(e);if(!t)return;let n=Date.now()-t.checkedAt,r=$t(t.result.status);if(!(!r&&n>=se))return{result:t.result,retryAfterMs:r?0:Math.max(0,se-n)}}function $t(e){return e==="success"||e==="failure"||e==="stopped"}function ka(e,t){ot(),st.set(e,{checkedAt:Date.now(),result:t})}function ot(){let e=Date.now();for(let[t,n]of it)e-n.createdAt>=yr&&it.delete(t);for(let[t,n]of st)e-n.checkedAt>=yr&&st.delete(t)}function Dr(e){return JSON.stringify(Object.keys(e).sort().reduce((t,n)=>{let r=e[n];return typeof r<"u"&&(t[n]=r),t},{}))}function vr(e){return e.BI_PAT?`pat:${Ht(e.BI_PAT)}`:e.BI_UID_TOKEN?`uid:${Ht(e.BI_UID_TOKEN)}`:`login:${Ht(`${e.BI_LOGIN_DOMAIN??""}\0${e.BI_LOGIN_ID??""}`)}`}function Ht(e){return Ea("sha256").update(e).digest("hex").slice(0,16)}function Mr(e){let t=e.answer?.trim();if(t)return ja(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 Pa(e){switch(e.status){case"success":return Mr(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 xa(e,t){let n=[`| ${e.join(" | ")} |`,`|${e.map(()=>" --- ").join("|")}|`];for(let r of t)n.push(`| ${e.map((i,s)=>va(Da(r[s]))).join(" | ")} |`);return n.join(`
6
+ `)}function Da(e){return e===null||typeof e>"u"||e===""?"-":String(e)}function va(e){return e.replaceAll(`\r
7
7
  `,"<br>").replaceAll(`
8
- `,"<br>").replaceAll("\r","<br>").replaceAll("|","\\|")}function ka(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 Pa(e){let t=/```GuanViz\.json\n([\s\S]*?)\n```/g;return e.replace(t,(n,r)=>xa(r)??n)}function xa(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=va(t.viz_config),o=Ma(i,r,s),a=r.map(d=>i.map((l,g)=>ja(d[g],s.get(l),o.get(l)))),c=Ba(i,a),u=ka(!!t.data_info?.truncated,t.data_info?.row_limit);return u?`${c}
8
+ `,"<br>").replaceAll("\r","<br>").replaceAll("|","\\|")}function Ma(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 ja(e){let t=/```GuanViz\.json\n([\s\S]*?)\n```/g;return e.replace(t,(n,r)=>Na(r)??n)}function Na(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=La(t.viz_config),o=qa(i,r,s),a=r.map(d=>i.map((l,g)=>Ga(d[g],s.get(l),o.get(l)))),c=xa(i,a),u=Ma(!!t.data_info?.truncated,t.data_info?.row_limit);return u?`${c}
9
9
 
10
- ${u}`:c}catch{return}}var Jt=new Map([["k",1e3],["K",1e3],["M",1e6],["B",1e9],["\u4E07",1e4],["\u4EBF",1e8]]),Da=[[1e8,"\u4EBF"],[1e4,"\u4E07"]];function va(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 Ma(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=kr(u[i]);typeof d=="number"&&(a=Math.max(a,Math.abs(d/Pr(o))))}let c=qa(a);c&&r.set(s,c)}return r}function ja(e,t,n){if(!t)return e;let r=kr(e);return typeof r!="number"?e:Na(r,t,n)}function kr(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 Na(e,t,n){let r=Pr(t),{unit:i,shouldScale:s}=Ua(t,n),o=s&&i?Jt.get(i)??1:1,a=e/r/o,c=La(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 Pr(e){if(e.showPrefixUnit!==!1&&typeof e.prefixUnit=="string"&&e.prefixUnit!=="auto"&&Jt.has(e.prefixUnit))return 1;let t=Number(e.divideDataBy??1);return Number.isFinite(t)&&t!==0?t:1}function Ua(e,t){return e.showPrefixUnit===!1?{unit:"",shouldScale:!1}:e.prefixUnit==="auto"?{unit:t??"",shouldScale:!0}:typeof e.prefixUnit=="string"&&Jt.has(e.prefixUnit)?{unit:e.prefixUnit,shouldScale:!0}:{unit:"",shouldScale:!1}}function La(e){return typeof e!="number"||!Number.isFinite(e)?2:Math.max(0,Math.min(100,Math.trunc(e)))}function qa(e){return Da.find(([t])=>e>=t)?.[1]??""}function it(e,t,n){let r=Ga(e,t,n);return Z({error:"chatbi_request_failed",requested_operation:n,...r,tried_base_urls:r.tried_base_urls??e.getTriedBaseUrls()})}function Ga(e,t,n){return t instanceof v?t.detail:e.getLastError()??{operation:n,detail:t instanceof Error?t.message:String(t)}}import{z as Ht}from"zod";var xr={dsId:Ht.string().min(1).describe("\u6570\u636E\u96C6 ID\u3002")},Dr={cdId:Ht.string().min(1).describe("\u5361\u7247 ID\u3002")},vr={pageId:Ht.string().min(1).describe("\u9875\u9762/\u4EEA\u8868\u677F ID\u3002")};async function Mr(e,t){let n=await e.get(`/api/data-source/${encodeURIComponent(t.dsId)}`);return D(n)}async function jr(e,t){let n=await e.get(`/api/card/${encodeURIComponent(t.cdId)}`);return D(n)}async function Nr(e,t){let n=await e.get(`/api/page/${encodeURIComponent(t.pageId)}`);return D(n)}import{z as De}from"zod";var ve=De.string().trim().min(1),Ja=De.object({name:ve.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:ve.describe("\u8BE5 CTE \u7684\u67E5\u8BE2\u4F53\uFF0C\u4E0D\u5305\u542B CTE \u540D\u79F0\u548C AS \u5916\u5C42\u3002")}).strict(),Ur={query:ve.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:De.array(ve).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:De.object({ctes:De.array(Ja).min(1),mainQuery:ve.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 Lr(e,t,n){try{await Cn(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(Ha(r))return ke("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($a(r)){let i=await za(e,n.inputs),s=qr(r)&&i.length===1,o=i.map(a=>s?{...a,sqlReference:"__THIS__"}:a);return ke("execute_sql_query",r,{hint:Fa(r,s),tableBindings:o.length>0?o:void 0})}throw r}}function Ha(e){return e instanceof Error&&e.message.includes("POST /api/data-source/execute-sql-query HTTP 404")}function $a(e){return e instanceof Error&&e.message.includes("TABLE_OR_VIEW_NOT_FOUND")}function qr(e){return e instanceof Error&&e.message.includes("SparkViewDataset")}function Fa(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":qr(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 za(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 Gr={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 Jr(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),Hr=2e3,$r=3e5,Fr={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")},zr={agent_id:Ie.describe("Dashboard Agent ID\uFF0C\u53EF\u7531 list_dashboard_agents \u83B7\u53D6\u3002")},Vr={agent_id:Ie.describe("Dashboard Agent ID\u3002")},Qr={session_id:Ie.describe("Dashboard Agent \u4F1A\u8BDD ID\u3002")},Kr={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(Hr).describe("\u5185\u90E8\u8F6E\u8BE2\u95F4\u9694\uFF0C\u9ED8\u8BA4 2000 \u6BEB\u79D2\u3002"),timeout_ms:j.number().int().positive().optional().default($r).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")},Wr={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 Yr(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 Xr(e,t,n){return D(await e.get(`/api/agent2/${encodeURIComponent(t.agent_id.trim())}`,{signal:n}))}async function Zr(e,t,n){let r=encodeURIComponent(t.agent_id.trim());return D(await e.get(`/api/agent2-session/${r}/sessions`,{signal:n}))}async function ei(e,t,n){let r=encodeURIComponent(t.session_id.trim());return D(await e.get(`/api/agent2-message/${r}/messages`,{signal:n}))}async function ti(e,t,n){let r=ec(n,t.timeout_ms??$r),i=t.poll_interval_ms??Hr,s=t.agent_id.trim(),o=t.session_id?.trim(),a=t.expert_id?.trim(),c=t.question.trim();o&&await Va(e,s,o,r);let u=await e.post("/api/agent2-message/create",nc({sessionId:o,agentId:s,question:c,title:[...c].slice(0,50).join(""),expertId:a}),{signal:r}),d=Qa(u);Ka(d,s,o);try{let l=await Wa(e,d,i,r),g=ni(l);return E({status:"success",agent_id:d.agentId,session_id:d.sessionId,message_id:d.messageId,task_id:d.taskId,answer:g,message:l},{text:g})}catch(l){throw Za(l,d,r.aborted)}}async function Va(e,t,n,r){let i=await e.get(`/api/agent2-session/${encodeURIComponent(t)}/sessions`,{signal:r});if(!tc(i).some(o=>{let a=be(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 Qa(e){let t=be(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 Ka(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${st(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}, ${st(e)}\uFF09\u3002`)}}async function Wa(e,t,n,r){for(;;){r.throwIfAborted();let i=be(await e.get(`/api/task/${encodeURIComponent(t.taskId)}`,{signal:r})),s=G(i.status);if(s==="FINISHED")return Ya(e,t,n,r);if(["FAILED","CANCELED","CANCELLED"].includes(s))throw ye(`\u4EFB\u52A1\u6267\u884C\u5931\u8D25: ${Xa(i)}`,t);if(!["CREATED","PROCESSING","QUEUEING"].includes(s))throw ye(`\u9047\u5230\u672A\u77E5\u4EFB\u52A1\u72B6\u6001: status=${JSON.stringify(s)}`,t);await ri(n,r)}}async function Ya(e,t,n,r){for(;;){r.throwIfAborted();let i=be(await e.get(`/api/agent2-message/${encodeURIComponent(t.messageId)}`,{signal:r}));if(ni(i))return i;let s=G(i.status);if(s==="FAILED")throw ye("\u6D88\u606F\u751F\u6210\u5931\u8D25",t);if(s==="SUCCESS")throw ye("\u6D88\u606F\u5DF2\u5B8C\u6210\u4F46\u6CA1\u6709\u53EF\u7528\u56DE\u7B54",t);if(!["","PENDING","RUNNING"].includes(s))throw ye(`\u9047\u5230\u672A\u77E5\u6D88\u606F\u72B6\u6001: status=${JSON.stringify(s)}`,t);await ri(n,r)}}function Xa(e){let t=G(e.errorMessage);if(t)return t;let n=e.result;return typeof n=="string"&&n.trim()?n.trim():G(be(n).error)||"\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE\u5931\u8D25\u539F\u56E0"}function ni(e){return G(be(e.answer).content)}function ye(e,t){return new Error(`${e}\uFF08${st(t)}\uFF09\u3002`)}function Za(e,t,n){let r=e instanceof Error?e:new Error(String(e));return r.message.includes(st(t))?r:ye(`${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 st(e){return`agentId=${e.agentId}, sessionId=${e.sessionId}, messageId=${e.messageId}, taskId=${e.taskId}`}function ec(e,t){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}async function ri(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 be(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function tc(e){return Array.isArray(e)?e:[]}function G(e){return typeof e=="string"?e.trim():""}function nc(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}import{z as P}from"zod";var Te=P.string().trim().min(1).max(512),ii=P.object({selector_id:Te.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")}),si={page_id:Te.describe("\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\uFF0C\u53EF\u7531 global_search \u83B7\u53D6\u3002")},oi={page_id:Te.describe("\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\uFF0C\u53EF\u7531 global_search \u83B7\u53D6\u3002"),selectors:P.array(ii).optional().describe("\u9875\u9762\u7B5B\u9009\u5668\u53D6\u503C\uFF1B\u7B5B\u9009\u5668 ID \u53EF\u4ECE get_page_info \u83B7\u53D6\u3002"),analysis_id:Te.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")},ai={card_id:Te.describe("\u667A\u80FD\u6D1E\u5BDF\u5361\u7247 ID\uFF0C\u5FC5\u987B\u5C5E\u4E8E page_id \u6307\u5B9A\u7684\u9875\u9762\u3002"),page_id:Te.describe("\u5361\u7247\u6240\u5C5E\u7684\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\u3002"),selectors:P.array(ii).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")},ci={status:P.literal("success"),page_id:P.string(),page_type:P.string(),prompt_setting:P.unknown(),llm_config:P.unknown()},zt={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 ui(e,t,n){let r=await Vt(e,t.page_id,n);Qt(r);let i=await fi(e,r.pageId,n),s=await sc(e,r.pageId,n);return E({status:"success",page_id:r.pageId,page_type:r.pageType,prompt_setting:i,llm_config:s})}async function di(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 Vt(e,t.page_id,n);Qt(s);let o=pi(t.selectors);mi(s,o);let a=await fi(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`);ic(s.pageId,a.analysis,r,i);let c=Kt({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 gi(e,u,c,"\u4EEA\u8868\u677F",`pgId=${s.pageId}`,n);return _i("page",s.pageId,void 0,d)}async function li(e,t,n){let r=await Vt(e,t.page_id,n);Qt(r);let i=t.card_id.trim();rc(r,i);let s=pi(t.selectors);mi(r,s);let o=Kt({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 gi(e,a,o,"\u5361\u7247",`cdId=${i}, pgId=${r.pageId}`,n);return _i("card",r.pageId,i,c)}async function Vt(e,t,n){let r=t.trim(),i=await e.get(`/api/page/${encodeURIComponent(r)}`,{signal:n}),s=J(i),o=N(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=N(u.cdId);d&&a.set(d,N(u.cdType))}return{pageId:r,pageType:o,cardTypes:a}}function Qt(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 rc(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 pi(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 mi(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 fi(e,t,n){let r=await e.get(`/api/prompt-setting/PAGE/${encodeURIComponent(t)}`,{signal:n}),i=J(r);if(!N(i.resourceId))return{enabled:!1,analysis:[]};let s=J(i.content),o=Array.isArray(s.analysis)?s.analysis.map(J).map(a=>({id:N(a.id),name:N(a.name)})):[];return{enabled:i.enabled===!0,analysis:o}}function ic(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 sc(e,t,n){let r=J(await e.get(`/api/llm-config/resource/${encodeURIComponent(t)}`,{signal:n})),i=N(r.llmConfigId),s=N(r.name);if(i&&i!=="default")return $t(i,s,!1);let o=await e.get("/api/llm-config/feature-default/list",{signal:n}),a=Ft(o).map(J).find(l=>N(l.featureCode).toLowerCase()==="intelligent_insight"),c=N(a?.llmConfigId);if(!c)return $t("","\u672A\u8BBE\u7F6E",!0);let u=await e.get("/api/llm-config/list",{signal:n}),d=Ft(u).map(J).find(l=>N(l.llmConfigId)===c);return $t(c,N(d?.name)||s,!0)}function $t(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 gi(e,t,n,r,i,s){try{return await e.post(t,n,{signal:s})}catch(o){if(o instanceof fe&&[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 fe&&o.status===403&&oc(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 oc(e,t){return new RegExp(`["']?status["']?\\s*:\\s*${t}(?:\\D|$)`).test(e.message)}function _i(e,t,n,r){let i=ac(r);return E(Kt({status:"success",resource_type:e,page_id:t,card_id:n,content:i,raw:r}),{text:i??r})}function ac(e){let t=J(Ft(J(e).choices)[0]);return N(J(t.message).content)||void 0}function J(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Ft(e){return Array.isArray(e)?e:[]}function N(e){return typeof e=="string"?e.trim():""}function Kt(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var cc=5e3;function hi(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:si,outputSchema:ci},(r,i)=>n.run(({client:s,signal:o})=>ui(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:oi,outputSchema:zt},(r,i)=>n.run(({client:s,signal:o})=>di(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:ai,outputSchema:zt},(r,i)=>n.run(({client:s,signal:o})=>li(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:Fr},(r,i)=>n.run(({client:s,signal:o})=>Yr(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:zr},(r,i)=>n.run(({client:s,signal:o})=>Xr(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:Kr,outputSchema:Wr},(r,i)=>n.run(({client:s,signal:o})=>ti(s,r,o),i,"ask_dashboard_agent",{abortRecoveryGraceMs:cc})),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:Vr},(r,i)=>n.run(({client:s,signal:o})=>Zr(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:Qr},(r,i)=>n.run(({client:s,signal:o})=>ei(s,r,o),i,"list_dashboard_agent_messages"))}import{z as m}from"zod";var tn=m.enum(["asc","desc"]),uc=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"]),Ii=new Set(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN"]),Yt=new Set(["IS_NULL","NOT_NULL"]),Ri=m.object({field:m.string().min(1).describe("\u7B5B\u9009\u5B57\u6BB5\u540D\u79F0\u6216\u5B57\u6BB5 ID\u3002"),operator:uc.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;Yt.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`}),Ii.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`}),!Ii.has(e.operator)&&!Yt.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`})}),dc=m.object({field:m.string().min(1).describe("\u6392\u5E8F\u5B57\u6BB5\u540D\u79F0\u6216\u5B57\u6BB5 ID\u3002"),direction:tn.describe("\u6392\u5E8F\u65B9\u5411\u3002")}),lc=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:tn.optional(),rank_dim:m.string().min(1).optional()}),Bi={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")},Ai={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")},Oi={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")},ki={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(Ri).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(dc).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:lc.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")},Pi={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")},xi={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")},Di={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(Ri).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:tn.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")},ee={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 vi(e,t,n){let r=new V(e,t);try{let i=n.project_id?[n.project_id]:await pc(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(...mc(c)),s.length>=n.limit)break}let o=Uc(s.map(Xt),"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 se(i,"search_metrics")}}async function Mi(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:gc(i),raw:n.raw?i:void 0})}catch(i){let s=n.project_id?[{id:n.project_id}]:await Gi(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:_c(u,c)})}return E({summary:{source:"directory-fallback",fallback_reason:i instanceof Error?i.message:String(i)},tree:o})}}catch(i){return se(i,"list_metric_catalog")}}async function ji(e,t,n){let r=new V(e,t);try{let i=await r.getMetricDetail(n.metric_id),s=hc(i),o,a;if(!n.brief){let c=p(i.uniformResourceType)||"METRIC_PLATFORM_METRIC";try{o=Ic(await r.getMetricLineage(n.metric_id,c))}catch(u){a=u instanceof te?u.detail:String(u)}}return E({detail:{...s,lineage:o,lineage_error:a},raw:n.raw?i:void 0})}catch(i){return se(i,"get_metric_detail")}}async function Ni(e,t,n){let r=new V(e,t);try{let i=await r.getMetricDetail(n.metric_id);if(!n.advanced_calc){let a=bi(i,n);if("unsupported"in a)return H("query_metric_data",a.unsupported);let c=async l=>{let g=await r.getCardEditSession(a.cardId),h=p(g.sessionId);if(!h)throw new Error("\u6307\u6807\u5361\u7247\u9884\u89C8\u4F1A\u8BDD\u54CD\u5E94\u7F3A\u5C11 sessionId\u3002");return a.dimensions.length&&await yc(r,a.cardId,h,a.dimensions),{raw:await r.queryCardEditData(a.cardId,h,l),sessionId:h}};if(n.combine_type==="OR"&&(n.filters?.length??0)>1){let l=[],g=[];for(let h of n.filters??[]){let I=bi(i,{...n,combine_type:"AND",filters:[h]});if("unsupported"in I)return H("query_metric_data",I.unsupported);let{raw:w}=await c(I.body);g.push(w),l.push(...Ti(w))}return ot(i,l,n,{mode:"metric_card_preview_data",card_id:a.cardId,card_kind:a.cardKind,combine_type:"OR",query_count:g.length},n.raw?g:void 0)}let{raw:u,sessionId:d}=await c(a.body);return ot(i,Ti(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=yi(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=yi(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(...Me(l))}return ot(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 ot(i,Me(o),n,{mode:"metric_data_v2",request_body:s.input},n.raw?o:void 0)}catch(i){return Nc(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}):se(i,"query_metric_data")}}async function Ui(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=fc(i).map(zi).slice(0,n.limit);return E({summary:{keyword:n.keyword,count:s.length},items:s})}catch(i){return se(i,"search_metric_trees")}}async function Li(e,t,n){let r=new V(e,t);try{let i=await r.getMetricTreeDetail(n.metric_tree_id);return E({detail:Rc(i),raw:n.raw?i:void 0})}catch(i){return se(i,"get_metric_tree_detail")}}async function qi(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=je(o),c=nn(n.filters??[],a);if("unsupported"in c)return H("query_metric_tree_attribution",c.unsupported);let u=c.filters,d=Bc(i,n);if("unsupported"in d)return H("query_metric_tree_attribution",d.unsupported);if(n.target==="metric"){let I=Ac(i,d.value,u),w=await r.queryMetricTreeDecompose(n.metric_tree_id,I);return Wt(i,"metric",Oc(w),n,n.raw?w:void 0)}if(n.target==="dimension"){let I=we(a,n.dimension,n.dimension_fd_id);if(!I)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 w=Ci(i,I,d.value,u,n.limit,n.sort),x=await r.queryMetricTreeDrill(n.metric_tree_id,w);return Wt(i,"dimension",Si(x,p(I.name)),n,n.raw?x:void 0)}let l=kc(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 g=[],h=[];for(let I of l){let w=Ci(i,I,d.value,u,n.group_limit,n.sort),x=await r.queryMetricTreeDrill(n.metric_tree_id,w);h.push({dimension:p(I.name),raw:x}),g.push(...Si(x,p(I.name)).slice(0,n.group_limit))}return Wt(i,"scan",g,n,n.raw?h:void 0,{scanned_dimensions:l.map(I=>p(I.name))})}catch(i){return se(i,"query_metric_tree_attribution")}}async function pc(e){return(await Gi(e)).map(t=>p(t.id)).filter(Boolean)}async function Gi(e){return O(await e.listProjects()).map(b).filter(Boolean)}function mc(e){let t=b(e);return O(t.contents??t.items??t.data)}function fc(e){let t=b(e);return O(t.data??t.contents??t.items)}function Xt(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:Ki(e.dsInfo),statistics:e.statisticsData,creator:ct(e.creator),business_owner:ct(e.businessOwner),updated_at:p(e.utime),raw:e})}function gc(e){return O(e).map(t=>Ji(t,void 0))}function Ji(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=>Ji(s,i))})}function _c(e,t){let n=b(e);return p(n.id)?[Zt(n,t)]:O(n.contents??n.children).map(r=>Zt(r,t))}function Zt(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:Ei(e.metricCnt),all_metric_count:Ei(e.allMetricCnt),children:O(e.contents??e.children).map(n=>Zt(n,t))})}function hc(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:Wi(e.dirPath),dataset:Ki(e.dsInfo),source_fields:O(e.fdInfos).map(at),aggregation:B(e.aggrType,e.aggregationType),formula:B(e.formula,e.expression),derive_setting:e.deriveSetting,format:e.format,applicable_dimensions:je(e),time_dimension:b(e.timeDim)?at(b(e.timeDim)):void 0,business_attributes:O(e.bizAttrs).map(jc),business_owner:ct(e.businessOwner),creator:ct(e.creator),referenced_metrics:O(e.referencedMetrics).map(Xt),base_metric:b(e.baseMetric)?Xt(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 Ic(e){let t=b(e);return _({current:t.crtNode,upstream:t.backwardAtlas,downstream:t.forwardAtlas})}function yi(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=je(e),s=[...i,...Vi(e)],o=[];for(let d of t.dimensions??[]){let l=we(i,d);if(!l)return{unsupported:{capability:"unsupported_dimension",parameter:d,supported_dimensions:i}};o.push(Pc(l))}let a=Tc(e,i,t.advanced_calc);if("unsupported"in a)return{unsupported:a.unsupported};let c=nn(t.filters??[],s);if("unsupported"in c)return{unsupported:c.unsupported};let u=Hi(t.sort??[],s);return"unsupported"in u?{unsupported:u.unsupported}:{input:{projectId:r,metricId:t.metric_id,metricName:n,metricItems:[_({name:n,alias:wc(n,t.advanced_calc),advCalc:a.value})],dimensions:o,filters:c.filters,sorting:u.sorting,limit:t.limit}}}function bi(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=[...je(e),...Vi(e)],a=[];for(let g of t.dimensions??[]){let h=we(o,g);if(!h||p(h.meta_type).toUpperCase()==="METRIC")return{unsupported:{capability:"unsupported_dimension",parameter:g,supported_dimensions:je(e)}};a.push(xc(h))}let c=nn(t.filters??[],o);if("unsupported"in c)return{unsupported:c.unsupported};let u=c.filters,d=Hi(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 yc(e,t,n,r){let i=Yi(await e.getCardEditMeta(t))??{},s=bc(i);s.row=r,s.sorting=[],await e.modifyCardEditMeta(t,n,i)}function bc(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 Tc(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=Cc(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?we(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?we(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 wc(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 Cc(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 nn(e,t){let n=[];for(let r of e){let i=$i(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:Sc(r)}))}return{filters:n}}function Sc(e){return Yt.has(e.operator)?[]:e.values??[]}function Hi(e,t){let n=[];for(let r of e){let i=$i(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 $i(e,t,n,r){let i=we(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(g=>_({name:p(g.name),fd_id:p(g.fd_id),meta_type:p(g.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(g=>!!g);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 ot(e,t,n,r,i){let s=Dc(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:Qi(s),rows:s,diagnostic:r,raw:i})}function Me(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 Ti(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 Me(e);let i=b(r.row),s=b(r.column),o=O(i.fields),a=ie(i.data),c=ie(r.data),u=Ec(s),d=o.map(en).filter(Boolean),l=vc([...d,...u]),g=Math.max(a.length,c.length),h=[];for(let I=0;I<g;I+=1){let w=[];w.push(...ie(a[I]).map(wi)),w.push(...ie(c[I]).map(wi)),w.length&&h.push(Object.fromEntries(w.map((x,U)=>[l[U]??`column_${U+1}`,x])))}return h}function Ec(e){let n=ie(e.data).map((r,i)=>{let s=ie(r).map(Fi).filter(Boolean).join("/");return s||en(O(e.fields)[i])||`metric_${i+1}`}).filter(Boolean);return n.length?n:O(e.fields).map(en).filter(Boolean)}function en(e){return B(e.alias,e.title,e.originTitle,e.name,e.fdId,e.id)??""}function Fi(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 wi(e){let t=b(e);return Object.keys(t).length?"v"in t?t.v:"value"in t?t.value:Fi(e):e}function zi(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:Wi(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 Rc(e){let t=b(e.config)??{};return _({...zi(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 Bc(e,t){let n=b(e.config)??{},r=t.time_comparison_json??Yi(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=Mc(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 Ac(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 Ci(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 Oc(e){return Me(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 Si(e,t){return Me(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 Wt(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:Qi(o),rows:o,raw:i})}function kc(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=ie(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 je(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(at(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 Vi(e){let t=O(e.fdInfos).map(at);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 at(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 we(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 Pc(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 xc(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 Dc(e,t){return t?.length?e.map(n=>Object.fromEntries(t.map(r=>[r,n[r]]))):e}function Qi(e){return[...new Set(e.flatMap(t=>Object.keys(t)))]}function vc(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 Mc(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 Ki(e){let t=b(e);if(t)return _({dataset_id:p(t.dsId),name:p(t.name)})}function ct(e){let t=b(e);if(t)return _({user_id:B(t.uId,t.id),name:p(t.name),deleted:M(t.isDel)})}function jc(e){return _({id:p(e.id),name:p(e.name),type:p(e.valueType),values:O(e.values)})}function Wi(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 se(e,t){return e instanceof te?Z({operation:t,diagnostic:e.detail}):Z({operation:t,message:e instanceof Error?e.message:String(e)})}function Nc(e){return e instanceof te&&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 ie(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 Ei(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Uc(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 Yi(e){return e?JSON.parse(JSON.stringify(e)):void 0}function Xi(e,t,n,r,i={}){let s=i.usageTelemetry??new Ke({config:n,appVersion:i.appVersion??"unknown"}),o=(c,u,d)=>{let l=e.registerTool,g=Gn(c,d,s),h=async(...I)=>{try{return await g(...I)}catch(w){return ke(c,w)}};l.call(e,c,u,h)},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:$n},(c,u)=>t.run(({client:d,config:l})=>Fn(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:yr,outputSchema:gr},(c,u)=>t.run(({config:d})=>Cr(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:br,outputSchema:_r},(c,u)=>t.run(({config:d})=>Sr(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:Tr,outputSchema:hr},(c,u)=>t.run(({config:d})=>Er(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:wr,outputSchema:Ir},(c,u)=>t.run(({config:d})=>Rr(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:Gr},(c,u)=>t.run(({client:d})=>Jr(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:Bi,outputSchema:ee},(c,u)=>t.run(({client:d,config:l})=>vi(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:Ai,outputSchema:ee},(c,u)=>t.run(({client:d,config:l})=>Mi(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:Oi,outputSchema:ee},(c,u)=>t.run(({client:d,config:l})=>ji(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:ki,outputSchema:ee},(c,u)=>t.run(({client:d,config:l})=>Ni(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:Pi,outputSchema:ee},(c,u)=>t.run(({client:d,config:l})=>Ui(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:xi,outputSchema:ee},(c,u)=>t.run(({client:d,config:l})=>Li(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:Di,outputSchema:ee},(c,u)=>t.run(({client:d,config:l})=>qi(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:Ur},(c,u)=>t.run(({client:d,config:l})=>Lr(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:xr},(c,u)=>t.run(({client:d})=>Mr(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:Dr},(c,u)=>t.run(({client:d})=>jr(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:tr,outputSchema:nr},(c,u)=>t.run(({client:d,signal:l})=>ir(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:vr},(c,u)=>t.run(({client:d})=>Nr(d,c),u,"get_page_info")),hi(o,a,t))}var zc=Lc(import.meta.url),un=zc("../package.json"),sn=class{record(t){console.error(JSON.stringify({runtime:Zc(t)}))}};function es(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 an(e,r):new on(e,r)}var Vc=`\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}`:c}catch{return}}var Ft=new Map([["k",1e3],["K",1e3],["M",1e6],["B",1e9],["\u4E07",1e4],["\u4EBF",1e8]]),Ua=[[1e8,"\u4EBF"],[1e4,"\u4E07"]];function La(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 qa(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=jr(u[i]);typeof d=="number"&&(a=Math.max(a,Math.abs(d/Nr(o))))}let c=Fa(a);c&&r.set(s,c)}return r}function Ga(e,t,n){if(!t)return e;let r=jr(e);return typeof r!="number"?e:Ja(r,t,n)}function jr(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 Ja(e,t,n){let r=Nr(t),{unit:i,shouldScale:s}=Ha(t,n),o=s&&i?Ft.get(i)??1:1,a=e/r/o,c=$a(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 Nr(e){if(e.showPrefixUnit!==!1&&typeof e.prefixUnit=="string"&&e.prefixUnit!=="auto"&&Ft.has(e.prefixUnit))return 1;let t=Number(e.divideDataBy??1);return Number.isFinite(t)&&t!==0?t:1}function Ha(e,t){return e.showPrefixUnit===!1?{unit:"",shouldScale:!1}:e.prefixUnit==="auto"?{unit:t??"",shouldScale:!0}:typeof e.prefixUnit=="string"&&Ft.has(e.prefixUnit)?{unit:e.prefixUnit,shouldScale:!0}:{unit:"",shouldScale:!1}}function $a(e){return typeof e!="number"||!Number.isFinite(e)?2:Math.max(0,Math.min(100,Math.trunc(e)))}function Fa(e){return Ua.find(([t])=>e>=t)?.[1]??""}function at(e,t,n){let r=za(e,t,n);return te({error:"chatbi_request_failed",requested_operation:n,...r,tried_base_urls:r.tried_base_urls??e.getTriedBaseUrls()})}function za(e,t,n){return t instanceof v?t.detail:e.getLastError()??{operation:n,detail:t instanceof Error?t.message:String(t)}}import{z as zt}from"zod";var Ur={dsId:zt.string().min(1).describe("\u6570\u636E\u96C6 ID\u3002")},Lr={cdId:zt.string().min(1).describe("\u5361\u7247 ID\u3002")},qr={pageId:zt.string().min(1).describe("\u9875\u9762/\u4EEA\u8868\u677F ID\u3002")};async function Gr(e,t){let n=await e.get(`/api/data-source/${encodeURIComponent(t.dsId)}`);return D(n)}async function Jr(e,t){let n=await e.get(`/api/card/${encodeURIComponent(t.cdId)}`);return D(n)}async function Hr(e,t){let n=await e.get(`/api/page/${encodeURIComponent(t.pageId)}`);return D(n)}import{z as Me}from"zod";var je=Me.string().trim().min(1),Va=Me.object({name:je.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:je.describe("\u8BE5 CTE \u7684\u67E5\u8BE2\u4F53\uFF0C\u4E0D\u5305\u542B CTE \u540D\u79F0\u548C AS \u5916\u5C42\u3002")}).strict(),$r={query:je.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:Me.array(je).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:Me.object({ctes:Me.array(Va).min(1),mainQuery:je.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 Fr(e,t,n){try{await Rn(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(Qa(r))return Pe("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(Ka(r)){let i=await Ya(e,n.inputs),s=zr(r)&&i.length===1,o=i.map(a=>s?{...a,sqlReference:"__THIS__"}:a);return Pe("execute_sql_query",r,{hint:Wa(r,s),tableBindings:o.length>0?o:void 0})}throw r}}function Qa(e){return e instanceof Error&&e.message.includes("POST /api/data-source/execute-sql-query HTTP 404")}function Ka(e){return e instanceof Error&&e.message.includes("TABLE_OR_VIEW_NOT_FOUND")}function zr(e){return e instanceof Error&&e.message.includes("SparkViewDataset")}function Wa(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":zr(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 Ya(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 Vr={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 Qr(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 ye=j.string().trim().min(1).max(64),Kr=2e3,Wr=3e5,Yr={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")},Xr={agent_id:ye.describe("Dashboard Agent ID\uFF0C\u53EF\u7531 list_dashboard_agents \u83B7\u53D6\u3002")},Zr={agent_id:ye.describe("Dashboard Agent ID\u3002")},ei={session_id:ye.describe("Dashboard Agent \u4F1A\u8BDD ID\u3002")},ti={agent_id:ye.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:ye.optional().describe("\u5DF2\u6709\u4F1A\u8BDD ID\uFF1B\u4F20\u5165\u65F6\u5728\u8BE5\u4F1A\u8BDD\u4E2D\u7EE7\u7EED\u8FFD\u95EE\u3002"),expert_id:ye.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(Kr).describe("\u5185\u90E8\u8F6E\u8BE2\u95F4\u9694\uFF0C\u9ED8\u8BA4 2000 \u6BEB\u79D2\u3002"),timeout_ms:j.number().int().positive().optional().default(Wr).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")},ni={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 ri(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 ii(e,t,n){return D(await e.get(`/api/agent2/${encodeURIComponent(t.agent_id.trim())}`,{signal:n}))}async function si(e,t,n){let r=encodeURIComponent(t.agent_id.trim());return D(await e.get(`/api/agent2-session/${r}/sessions`,{signal:n}))}async function oi(e,t,n){let r=encodeURIComponent(t.session_id.trim());return D(await e.get(`/api/agent2-message/${r}/messages`,{signal:n}))}async function ai(e,t,n){let r=sc(n,t.timeout_ms??Wr),i=t.poll_interval_ms??Kr,s=t.agent_id.trim(),o=t.session_id?.trim(),a=t.expert_id?.trim(),c=t.question.trim();o&&await Xa(e,s,o,r);let u=await e.post("/api/agent2-message/create",ac({sessionId:o,agentId:s,question:c,title:[...c].slice(0,50).join(""),expertId:a}),{signal:r}),d=Za(u);ec(d,s,o);try{let l=await tc(e,d,i,r),g=ci(l);return E({status:"success",agent_id:d.agentId,session_id:d.sessionId,message_id:d.messageId,task_id:d.taskId,answer:g,message:l},{text:g})}catch(l){throw ic(l,d,r.aborted)}}async function Xa(e,t,n,r){let i=await e.get(`/api/agent2-session/${encodeURIComponent(t)}/sessions`,{signal:r});if(!oc(i).some(o=>{let a=Te(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 Za(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 ec(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${ct(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}, ${ct(e)}\uFF09\u3002`)}}async function tc(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 nc(e,t,n,r);if(["FAILED","CANCELED","CANCELLED"].includes(s))throw be(`\u4EFB\u52A1\u6267\u884C\u5931\u8D25: ${rc(i)}`,t);if(!["CREATED","PROCESSING","QUEUEING"].includes(s))throw be(`\u9047\u5230\u672A\u77E5\u4EFB\u52A1\u72B6\u6001: status=${JSON.stringify(s)}`,t);await ui(n,r)}}async function nc(e,t,n,r){for(;;){r.throwIfAborted();let i=Te(await e.get(`/api/agent2-message/${encodeURIComponent(t.messageId)}`,{signal:r}));if(ci(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 ui(n,r)}}function rc(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 ci(e){return G(Te(e.answer).content)}function be(e,t){return new Error(`${e}\uFF08${ct(t)}\uFF09\u3002`)}function ic(e,t,n){let r=e instanceof Error?e:new Error(String(e));return r.message.includes(ct(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 ct(e){return`agentId=${e.agentId}, sessionId=${e.sessionId}, messageId=${e.messageId}, taskId=${e.taskId}`}function sc(e,t){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}async function ui(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 oc(e){return Array.isArray(e)?e:[]}function G(e){return typeof e=="string"?e.trim():""}function ac(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),di=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")}),li={page_id:we.describe("\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\uFF0C\u53EF\u7531 global_search \u83B7\u53D6\u3002")},pi={page_id:we.describe("\u666E\u901A\u4EEA\u8868\u677F\u9875\u9762 ID\uFF0C\u53EF\u7531 global_search \u83B7\u53D6\u3002"),selectors:P.array(di).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")},mi={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(di).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")},fi={status:P.literal("success"),page_id:P.string(),page_type:P.string(),prompt_setting:P.unknown(),llm_config:P.unknown()},Kt={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 gi(e,t,n){let r=await Wt(e,t.page_id,n);Yt(r);let i=await bi(e,r.pageId,n),s=await dc(e,r.pageId,n);return E({status:"success",page_id:r.pageId,page_type:r.pageType,prompt_setting:i,llm_config:s})}async function _i(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 Wt(e,t.page_id,n);Yt(s);let o=Ii(t.selectors);yi(s,o);let a=await bi(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`);uc(s.pageId,a.analysis,r,i);let c=Xt({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 Ti(e,u,c,"\u4EEA\u8868\u677F",`pgId=${s.pageId}`,n);return wi("page",s.pageId,void 0,d)}async function hi(e,t,n){let r=await Wt(e,t.page_id,n);Yt(r);let i=t.card_id.trim();cc(r,i);let s=Ii(t.selectors);yi(r,s);let o=Xt({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 Ti(e,a,o,"\u5361\u7247",`cdId=${i}, pgId=${r.pageId}`,n);return wi("card",r.pageId,i,c)}async function Wt(e,t,n){let r=t.trim(),i=await e.get(`/api/page/${encodeURIComponent(r)}`,{signal:n}),s=J(i),o=N(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=N(u.cdId);d&&a.set(d,N(u.cdType))}return{pageId:r,pageType:o,cardTypes:a}}function Yt(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 cc(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 Ii(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 yi(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 bi(e,t,n){let r=await e.get(`/api/prompt-setting/PAGE/${encodeURIComponent(t)}`,{signal:n}),i=J(r);if(!N(i.resourceId))return{enabled:!1,analysis:[]};let s=J(i.content),o=Array.isArray(s.analysis)?s.analysis.map(J).map(a=>({id:N(a.id),name:N(a.name)})):[];return{enabled:i.enabled===!0,analysis:o}}function uc(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 dc(e,t,n){let r=J(await e.get(`/api/llm-config/resource/${encodeURIComponent(t)}`,{signal:n})),i=N(r.llmConfigId),s=N(r.name);if(i&&i!=="default")return Vt(i,s,!1);let o=await e.get("/api/llm-config/feature-default/list",{signal:n}),a=Qt(o).map(J).find(l=>N(l.featureCode).toLowerCase()==="intelligent_insight"),c=N(a?.llmConfigId);if(!c)return Vt("","\u672A\u8BBE\u7F6E",!0);let u=await e.get("/api/llm-config/list",{signal:n}),d=Qt(u).map(J).find(l=>N(l.llmConfigId)===c);return Vt(c,N(d?.name)||s,!0)}function Vt(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 Ti(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 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 _e&&o.status===403&&lc(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 lc(e,t){return new RegExp(`["']?status["']?\\s*:\\s*${t}(?:\\D|$)`).test(e.message)}function wi(e,t,n,r){let i=pc(r);return E(Xt({status:"success",resource_type:e,page_id:t,card_id:n,content:i,raw:r}),{text:i??r})}function pc(e){let t=J(Qt(J(e).choices)[0]);return N(J(t.message).content)||void 0}function J(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Qt(e){return Array.isArray(e)?e:[]}function N(e){return typeof e=="string"?e.trim():""}function Xt(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var mc=5e3;function Ci(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:li,outputSchema:fi},(r,i)=>n.run(({client:s,signal:o})=>gi(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:pi,outputSchema:Kt},(r,i)=>n.run(({client:s,signal:o})=>_i(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:mi,outputSchema:Kt},(r,i)=>n.run(({client:s,signal:o})=>hi(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:Yr},(r,i)=>n.run(({client:s,signal:o})=>ri(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:Xr},(r,i)=>n.run(({client:s,signal:o})=>ii(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:ti,outputSchema:ni},(r,i)=>n.run(({client:s,signal:o})=>ai(s,r,o),i,"ask_dashboard_agent",{abortRecoveryGraceMs:mc})),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:Zr},(r,i)=>n.run(({client:s,signal:o})=>si(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:ei},(r,i)=>n.run(({client:s,signal:o})=>oi(s,r,o),i,"list_dashboard_agent_messages"))}import{z as m}from"zod";var sn=m.enum(["asc","desc"]),fc=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"]),Si=new Set(["BT","CLOSE_BT_OPEN","OPEN_BT_CLOSE","OPEN_BT_OPEN"]),en=new Set(["IS_NULL","NOT_NULL"]),xi=m.object({field:m.string().min(1).describe("\u7B5B\u9009\u5B57\u6BB5\u540D\u79F0\u6216\u5B57\u6BB5 ID\u3002"),operator:fc.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;en.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`}),Si.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`}),!Si.has(e.operator)&&!en.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`})}),gc=m.object({field:m.string().min(1).describe("\u6392\u5E8F\u5B57\u6BB5\u540D\u79F0\u6216\u5B57\u6BB5 ID\u3002"),direction:sn.describe("\u6392\u5E8F\u65B9\u5411\u3002")}),_c=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:sn.optional(),rank_dim:m.string().min(1).optional()}),Di={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")},vi={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")},Mi={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")},ji={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(xi).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(gc).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:_c.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")},Ni={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")},Ui={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")},Li={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(xi).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:sn.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 qi(e,t,n){let r=new V(e,t);try{let i=n.project_id?[n.project_id]:await hc(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(...Ic(c)),s.length>=n.limit)break}let o=Hc(s.map(tn),"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 Gi(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:bc(i),raw:n.raw?i:void 0})}catch(i){let s=n.project_id?[{id:n.project_id}]:await Vi(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:Tc(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 Ji(e,t,n){let r=new V(e,t);try{let i=await r.getMetricDetail(n.metric_id),s=wc(i),o,a;if(!n.brief){let c=p(i.uniformResourceType)||"METRIC_PLATFORM_METRIC";try{o=Cc(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 Hi(e,t,n){let r=new V(e,t);try{let i=await r.getMetricDetail(n.metric_id);if(!n.advanced_calc){let a=Ri(i,n);if("unsupported"in a)return H("query_metric_data",a.unsupported);let c=async l=>{let g=await r.getCardEditSession(a.cardId),_=p(g.sessionId);if(!_)throw new Error("\u6307\u6807\u5361\u7247\u9884\u89C8\u4F1A\u8BDD\u54CD\u5E94\u7F3A\u5C11 sessionId\u3002");return a.dimensions.length&&await Sc(r,a.cardId,_,a.dimensions),{raw:await r.queryCardEditData(a.cardId,_,l),sessionId:_}};if(n.combine_type==="OR"&&(n.filters?.length??0)>1){let l=[],g=[];for(let _ of n.filters??[]){let I=Ri(i,{...n,combine_type:"AND",filters:[_]});if("unsupported"in I)return H("query_metric_data",I.unsupported);let{raw:T}=await c(I.body);g.push(T),l.push(...Bi(T))}return ut(i,l,n,{mode:"metric_card_preview_data",card_id:a.cardId,card_kind:a.cardKind,combine_type:"OR",query_count:g.length},n.raw?g:void 0)}let{raw:u,sessionId:d}=await c(a.body);return ut(i,Bi(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=Ei(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=Ei(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(...Ne(l))}return ut(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 ut(i,Ne(o),n,{mode:"metric_data_v2",request_body:s.input},n.raw?o:void 0)}catch(i){return Jc(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 $i(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=yc(i).map(Xi).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 Fi(e,t,n){let r=new V(e,t);try{let i=await r.getMetricTreeDetail(n.metric_tree_id);return E({detail:Pc(i),raw:n.raw?i:void 0})}catch(i){return ae(i,"get_metric_tree_detail")}}async function zi(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=Ue(o),c=on(n.filters??[],a);if("unsupported"in c)return H("query_metric_tree_attribution",c.unsupported);let u=c.filters,d=xc(i,n);if("unsupported"in d)return H("query_metric_tree_attribution",d.unsupported);if(n.target==="metric"){let I=Dc(i,d.value,u),T=await r.queryMetricTreeDecompose(n.metric_tree_id,I);return Zt(i,"metric",vc(T),n,n.raw?T:void 0)}if(n.target==="dimension"){let I=Ce(a,n.dimension,n.dimension_fd_id);if(!I)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=Oi(i,I,d.value,u,n.limit,n.sort),x=await r.queryMetricTreeDrill(n.metric_tree_id,T);return Zt(i,"dimension",ki(x,p(I.name)),n,n.raw?x:void 0)}let l=Mc(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 g=[],_=[];for(let I of l){let T=Oi(i,I,d.value,u,n.group_limit,n.sort),x=await r.queryMetricTreeDrill(n.metric_tree_id,T);_.push({dimension:p(I.name),raw:x}),g.push(...ki(x,p(I.name)).slice(0,n.group_limit))}return Zt(i,"scan",g,n,n.raw?_:void 0,{scanned_dimensions:l.map(I=>p(I.name))})}catch(i){return ae(i,"query_metric_tree_attribution")}}async function hc(e){return(await Vi(e)).map(t=>p(t.id)).filter(Boolean)}async function Vi(e){return O(await e.listProjects()).map(b).filter(Boolean)}function Ic(e){let t=b(e);return O(t.contents??t.items??t.data)}function yc(e){let t=b(e);return O(t.data??t.contents??t.items)}function tn(e){return h({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:ts(e.dsInfo),statistics:e.statisticsData,creator:lt(e.creator),business_owner:lt(e.businessOwner),updated_at:p(e.utime),raw:e})}function bc(e){return O(e).map(t=>Qi(t,void 0))}function Qi(e,t){let n=!!e.isMetric,r=p(e.id),i=!t&&!n?r:t;return h({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=>Qi(s,i))})}function Tc(e,t){let n=b(e);return p(n.id)?[nn(n,t)]:O(n.contents??n.children).map(r=>nn(r,t))}function nn(e,t){return h({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:Pi(e.metricCnt),all_metric_count:Pi(e.allMetricCnt),children:O(e.contents??e.children).map(n=>nn(n,t))})}function wc(e){return h({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:ns(e.dirPath),dataset:ts(e.dsInfo),source_fields:O(e.fdInfos).map(dt),aggregation:B(e.aggrType,e.aggregationType),formula:B(e.formula,e.expression),derive_setting:e.deriveSetting,format:e.format,applicable_dimensions:Ue(e),time_dimension:b(e.timeDim)?dt(b(e.timeDim)):void 0,business_attributes:O(e.bizAttrs).map(Gc),business_owner:lt(e.businessOwner),creator:lt(e.creator),referenced_metrics:O(e.referencedMetrics).map(tn),base_metric:b(e.baseMetric)?tn(b(e.baseMetric)):void 0,linked_metric_id:p(e.linkMetricId),statistics:e.statisticsData,permissions:h({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 Cc(e){let t=b(e);return h({current:t.crtNode,upstream:t.backwardAtlas,downstream:t.forwardAtlas})}function Ei(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=Ue(e),s=[...i,...Zi(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(jc(l))}let a=Rc(e,i,t.advanced_calc);if("unsupported"in a)return{unsupported:a.unsupported};let c=on(t.filters??[],s);if("unsupported"in c)return{unsupported:c.unsupported};let u=Ki(t.sort??[],s);return"unsupported"in u?{unsupported:u.unsupported}:{input:{projectId:r,metricId:t.metric_id,metricName:n,metricItems:[h({name:n,alias:Bc(n,t.advanced_calc),advCalc:a.value})],dimensions:o,filters:c.filters,sorting:u.sorting,limit:t.limit}}}function Ri(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=[...Ue(e),...Zi(e)],a=[];for(let g of t.dimensions??[]){let _=Ce(o,g);if(!_||p(_.meta_type).toUpperCase()==="METRIC")return{unsupported:{capability:"unsupported_dimension",parameter:g,supported_dimensions:Ue(e)}};a.push(Nc(_))}let c=on(t.filters??[],o);if("unsupported"in c)return{unsupported:c.unsupported};let u=c.filters,d=Ki(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:h({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 Sc(e,t,n,r){let i=rs(await e.getCardEditMeta(t))??{},s=Ec(i);s.row=r,s.sorting=[],await e.modifyCardEditMeta(t,n,i)}function Ec(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 Rc(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=Ac(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?Ce(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:h({advType:"LEVEL_PERCENTAGE",auto:!a,tfdId:p(a?.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:h({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 Bc(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 Ac(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 on(e,t){let n=[];for(let r of e){let i=Wi(t,r.field,r.fd_id,"filter");if("unsupported"in i)return{unsupported:i.unsupported};n.push(h({name:i.field.name,fdId:i.field.fdId,fdType:i.field.fdType,metaType:i.field.metaType,filterType:r.operator,filterValue:Oc(r)}))}return{filters:n}}function Oc(e){return en.has(e.operator)?[]:e.values??[]}function Ki(e,t){let n=[];for(let r of e){let i=Wi(t,r.field,void 0,"sort");if("unsupported"in i)return{unsupported:i.unsupported};n.push(h({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 Wi(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(g=>h({name:p(g.name),fd_id:p(g.fd_id),meta_type:p(g.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(g=>!!g);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 ut(e,t,n,r,i){let s=Uc(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:es(s),rows:s,diagnostic:r,raw:i})}function Ne(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 Bi(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 Ne(e);let i=b(r.row),s=b(r.column),o=O(i.fields),a=oe(i.data),c=oe(r.data),u=kc(s),d=o.map(rn).filter(Boolean),l=Lc([...d,...u]),g=Math.max(a.length,c.length),_=[];for(let I=0;I<g;I+=1){let T=[];T.push(...oe(a[I]).map(Ai)),T.push(...oe(c[I]).map(Ai)),T.length&&_.push(Object.fromEntries(T.map((x,U)=>[l[U]??`column_${U+1}`,x])))}return _}function kc(e){let n=oe(e.data).map((r,i)=>{let s=oe(r).map(Yi).filter(Boolean).join("/");return s||rn(O(e.fields)[i])||`metric_${i+1}`}).filter(Boolean);return n.length?n:O(e.fields).map(rn).filter(Boolean)}function rn(e){return B(e.alias,e.title,e.originTitle,e.name,e.fdId,e.id)??""}function Yi(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 Ai(e){let t=b(e);return Object.keys(t).length?"v"in t?t.v:"value"in t?t.value:Yi(e):e}function Xi(e){return h({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:ns(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 Pc(e){let t=b(e.config)??{};return h({...Xi(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:h({can_use:M(e.canUse),can_manage:M(e.canManage)})})}function xc(e,t){let n=b(e.config)??{},r=t.time_comparison_json??rs(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=qc(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 Dc(e,t,n){let r=b(e.config)??{},i=b(r.metricDecompositionContent)??{};return h({timeComparisonSetting:t.setting,comparisonEnabled:t.comparisonEnabled,contributionCalcEnabled:!1,metricDecomposeInfo:{metricRelationTree:i.metricRelationTree,filters:n}})}function Oi(e,t,n,r,i,s){return h({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 vc(e){return Ne(e).map(t=>h({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 ki(e,t){return Ne(e).map((n,r)=>h({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 Zt(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:es(o),rows:o,raw:i})}function Mc(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 Ue(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(dt(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 Zi(e){let t=O(e.fdInfos).map(dt);return p(e.name)&&!t.some(n=>p(n.name)===p(e.name))&&t.push(h({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 dt(e){return h({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 jc(e){return h({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 Nc(e){return h({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 Uc(e,t){return t?.length?e.map(n=>Object.fromEntries(t.map(r=>[r,n[r]]))):e}function es(e){return[...new Set(e.flatMap(t=>Object.keys(t)))]}function Lc(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 qc(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 ts(e){let t=b(e);if(t)return h({dataset_id:p(t.dsId),name:p(t.name)})}function lt(e){let t=b(e);if(t)return h({user_id:B(t.uId,t.id),name:p(t.name),deleted:M(t.isDel)})}function Gc(e){return h({id:p(e.id),name:p(e.name),type:p(e.valueType),values:O(e.values)})}function ns(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 Jc(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 Pi(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Hc(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 rs(e){return e?JSON.parse(JSON.stringify(e)):void 0}function is(e,t,n,r,i={}){let s=i.usageTelemetry??new Ye({config:n,appVersion:i.appVersion??"unknown"}),o=(c,u,d)=>{let l=e.registerTool,g=$n(c,d,s),_=async(...I)=>{try{return await g(...I)}catch(T){return Pe(c,T)}};l.call(e,c,u,_)},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:Vn},(c,u)=>t.run(({client:d,config:l})=>Qn(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:Er,outputSchema:Tr},(c,u)=>t.run(({config:d})=>Or(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:Rr,outputSchema:wr},(c,u)=>t.run(({config:d})=>kr(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:Br,outputSchema:Cr},(c,u)=>t.run(({config:d})=>Pr(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:Ar,outputSchema:Sr},(c,u)=>t.run(({config:d})=>xr(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:Vr},(c,u)=>t.run(({client:d})=>Qr(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:Di,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>qi(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:vi,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Gi(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:Mi,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Ji(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:ji,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Hi(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:Ni,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>$i(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:Ui,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>Fi(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:Li,outputSchema:ne},(c,u)=>t.run(({client:d,config:l})=>zi(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:$r},(c,u)=>t.run(({client:d,config:l})=>Fr(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:Ur},(c,u)=>t.run(({client:d})=>Gr(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:Lr},(c,u)=>t.run(({client:d})=>Jr(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:or,outputSchema:ar},(c,u)=>t.run(({client:d,signal:l})=>ur(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:qr},(c,u)=>t.run(({client:d})=>Hr(d,c),u,"get_page_info")),Ci(o,a,t))}var Yc=$c(import.meta.url),pn=Yc("../package.json"),cn=class{record(t){console.error(JSON.stringify({runtime:iu(t)}))}};function os(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 dn(e,r):new un(e,r)}var Xc=`\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 Jt=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 ts(e,t={}){let n=t.appVersion??un.version,r=t.callerContextResolver??An(e),i=t.guanBIClientFactory??new Qe(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??Be)(s.client,s.config),a=new Hc({name:"guanbi-mcp-server",version:n},{instructions:Vc});return Xi(a,new We(r,i,new Ue,Hn(e.BI_REQUEST_TIMEOUT_MS)),s.config,o,{appVersion:n}),a}var on=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??un.version,boundBISite:{configured:!!this.config.BI_BASE_URL,baseUrl:this.config.BI_BASE_URL,publicPath:this.config.BI_PUBLIC_PATH}}}async start(){await(await ts(this.config,this.options)).connect(this.options.transportFactory?.()??new $c)}},an=class{constructor(t,n){this.config=t;this.options=n}config;options;mode="streamable-http";httpServer;sessions=new Map;logger=new sn;health(){return{status:"ok",mode:this.mode,version:this.options.appVersion??un.version,boundBISite:{configured:!!this.config.BI_BASE_URL,baseUrl:this.config.BI_BASE_URL,publicPath:this.config.BI_PUBLIC_PATH}}}async start(){this.httpServer=Jc((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)}),oe(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:tu(this.config),entrypointTokenConfigured:!!this.config.MCP_ENTRYPOINT_TOKEN,trustedGateway:cn(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://${Xc(t,this.config.MCP_HTTP_HOST??"127.0.0.1")}:${t.port}`}async handleRequest(t,n){let r=Zi(t);if(!r){oe(n,400,{error:"bad_request"});return}if(eu(r)&&t.method==="GET"){if(r==="/sysmon/health/readiness"){let a=this.readiness();oe(n,a.ready?200:503,a);return}oe(n,200,this.health());return}if(r!=="/mcp"){oe(n,404,{error:"not_found"});return}if(!Qc(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:cn(this.config.MCP_TRUSTED_GATEWAY)}),oe(n,401,{error:"mcp_entrypoint_unauthorized"});return}let i=ut(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,...rn(i),sessionCount:this.sessions.size}),oe(n,404,{error:"mcp_session_not_found"});return}let s=await this.resolveSession(t);Yc(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,{...rn(o),sessionCount:this.sessions.size}))}async resolveSession(t){let n=ut(t.headers["mcp-session-id"]);if(n){let o=this.sessions.get(n);if(o)return o}let r=new Fc({sessionIdGenerator:Gc,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,{...rn(o),sessionCount:this.sessions.size})}}),i=Wc(this.config,t.headers),s=await ts(i,{...this.options,callerContextResolver:this.options.callerContextResolver??On(i),capabilityResolver:this.options.capabilityResolver??(async()=>wn(i))});return await s.connect(r),{server:s,transport:r}}readiness(){let t=Kc(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?Zi(i):void 0;this.logger.record({level:t,event:n,mode:this.mode,message:r,method:i?.method,path:o,...s})}};function Qc(e,t){if(cn(t.MCP_TRUSTED_GATEWAY)||Ae(e))return!0;let n=t.MCP_ENTRYPOINT_TOKEN;return n?ut(e.authorization)?.trim()===`Bearer ${n}`:!1}function ut(e){return Array.isArray(e)?e[0]:e}function cn(e){return["1","true","yes","on"].includes(e?.trim().toLowerCase()??"")}function Kc(e){let t=[];return e.BI_BASE_URL||t.push("BI_BASE_URL is required"),t}function Wc(e,t){let n=Ae(t),r=ut(t[me.client.toLowerCase()])?.trim();return{...e,BI_PAT:n,...n&&r?{BI_PAT_CLIENT:r}:{}}}function oe(e,t,n){e.headersSent||(e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(n)))}function Yc(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 Xc(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 Zc(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Zi(e){try{return new URL(e.url??"/",`http://${e.headers.host??"localhost"}`).pathname}catch{return}}function eu(e){return["/healthz","/sysmon/health/liveness","/sysmon/health/readiness"].includes(e)}function tu(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 rn(e){return{hasSessionId:!0,sessionIdHash:qc("sha256").update(e).digest("hex").slice(0,12)}}var ru=nu(import.meta.url),{version:iu}=ru("../package.json");async function su(){if(process.argv.slice(2).some(t=>t==="--version"||t==="-v")){process.stdout.write(`${iu}
30
- `);return}let e=pn();await es(e).start()}su().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 as(e,t={}){let n=t.appVersion??pn.version,r=t.callerContextResolver??Pn(e),i=t.guanBIClientFactory??new We(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??Ae)(s.client,s.config),a=new Qc({name:"guanbi-mcp-server",version:n},{instructions:Xc});return is(a,new Xe(r,i,new qe,zn(e.BI_REQUEST_TIMEOUT_MS)),s.config,o,{appVersion:n}),a}var un=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??pn.version,boundBISite:{configured:!!this.config.BI_BASE_URL,baseUrl:this.config.BI_BASE_URL,publicPath:this.config.BI_PUBLIC_PATH}}}async start(){await(await as(this.config,this.options)).connect(this.options.transportFactory?.()??new Kc)}},dn=class{constructor(t,n){this.config=t;this.options=n}config;options;mode="streamable-http";httpServer;sessions=new Map;logger=new cn;health(){return{status:"ok",mode:this.mode,version:this.options.appVersion??pn.version,boundBISite:{configured:!!this.config.BI_BASE_URL,baseUrl:this.config.BI_BASE_URL,publicPath:this.config.BI_PUBLIC_PATH}}}async start(){this.httpServer=Vc((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:ou(this.config),entrypointTokenConfigured:!!this.config.MCP_ENTRYPOINT_TOKEN,trustedGateway:ln(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://${ru(t,this.config.MCP_HTTP_HOST??"127.0.0.1")}:${t.port}`}async handleRequest(t,n){let r=ss(t);if(!r){ce(n,400,{error:"bad_request"});return}if(su(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(!Zc(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:ln(this.config.MCP_TRUSTED_GATEWAY)}),ce(n,401,{error:"mcp_entrypoint_unauthorized"});return}let i=pt(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,...an(i),sessionCount:this.sessions.size}),ce(n,404,{error:"mcp_session_not_found"});return}let s=await this.resolveSession(t);nu(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,{...an(o),sessionCount:this.sessions.size}))}async resolveSession(t){let n=pt(t.headers["mcp-session-id"]);if(n){let o=this.sessions.get(n);if(o)return o}let r=new Wc({sessionIdGenerator:zc,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,{...an(o),sessionCount:this.sessions.size})}}),i=tu(this.config,t.headers),s=await as(i,{...this.options,callerContextResolver:this.options.callerContextResolver??xn(i),capabilityResolver:this.options.capabilityResolver??(async()=>En(i))});return await s.connect(r),{server:s,transport:r}}readiness(){let t=eu(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?ss(i):void 0;this.logger.record({level:t,event:n,mode:this.mode,message:r,method:i?.method,path:o,...s})}};function Zc(e,t){if(ln(t.MCP_TRUSTED_GATEWAY)||Oe(e))return!0;let n=t.MCP_ENTRYPOINT_TOKEN;return n?pt(e.authorization)?.trim()===`Bearer ${n}`:!1}function pt(e){return Array.isArray(e)?e[0]:e}function ln(e){return["1","true","yes","on"].includes(e?.trim().toLowerCase()??"")}function eu(e){let t=[];return e.BI_BASE_URL||t.push("BI_BASE_URL is required"),t}function tu(e,t){let n=Oe(t),r=pt(t[ge.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 nu(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 ru(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 iu(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function ss(e){try{return new URL(e.url??"/",`http://${e.headers.host??"localhost"}`).pathname}catch{return}}function su(e){return["/healthz","/sysmon/health/liveness","/sysmon/health/readiness"].includes(e)}function ou(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 an(e){return{hasSessionId:!0,sessionIdHash:Fc("sha256").update(e).digest("hex").slice(0,12)}}var cu=au(import.meta.url),{version:uu}=cu("../package.json");async function du(){if(process.argv.slice(2).some(t=>t==="--version"||t==="-v")){process.stdout.write(`${uu}
30
+ `);return}let e=gn();await os(e).start()}du().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.36",
3
+ "version": "0.1.37",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "MCP server for exposing GuanBI capabilities to AI agents.",