@tencent-ai/codebuddy-code 0.0.1-beta.29 → 0.0.1-beta.30

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/CHANGELOG.md CHANGED
@@ -5,6 +5,37 @@ All notable changes to the agent-cli module will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.0.1-beta.30] - 2025-09-02
9
+
10
+ ### Fixed
11
+ - **修复上报messageId不正确的问题**:解决消息追踪和统计中messageId上报错误的问题,确保消息追踪的准确性
12
+ - **修复pending区高度兼容多工具并行调用情况**:优化pending区域的高度计算,适配多个工具并行调用时的界面显示需求
13
+ - **修复工具调用前参数为空字符串导致的解析问题**:改进参数解析逻辑,正确处理空字符串参数,避免工具调用失败
14
+ - **修复多余的跳转路由逻辑**:清理冗余的路由跳转代码,优化导航逻辑,提升界面交互流畅性
15
+ - **修复输入框中缓存逻辑解决多行文本粘贴丢失问题**:改进输入框缓存机制,确保多行文本粘贴时内容完整性
16
+
17
+ ### Added
18
+ - **新增NotebookWrite工具**:增加Jupyter笔记本写入功能,支持创建和编辑笔记本文件,扩展开发工具集
19
+ - **新增支持国内/国外不同账号登录**:实现多区域账号管理,支持用户在不同地区使用不同账号进行登录认证
20
+ - **新增MCP指令列表添加链接状态功能**:为MCP服务器管理界面添加连接状态显示,实时反映服务器连接情况
21
+ - **新增MCP服务器按名称异步重连方法**:支持按服务器名称进行异步重连操作,提升MCP服务器管理效率
22
+ - **新增MCP管理器初始化完成事件及加载状态检查**:提供MCP管理器初始化状态监控,优化启动流程和状态反馈
23
+
24
+ ### Changed
25
+ - **命令渲染区分类型优化**:改进命令执行结果的渲染逻辑,根据命令类型显示不同的界面样式
26
+ - **修改export导致的状态不更新问题**:解决导出功能触发后界面状态未及时更新的问题,提升用户体验
27
+ - **调整对话消息的requestId/messageId生成逻辑**:重构消息标识符生成机制,优化消息追踪和使用量统计逻辑
28
+ - **统一将_scope属性名改为scope**:规范化属性命名,去掉下划线前缀,提升代码一致性
29
+
30
+ ### Technical Details
31
+ - NotebookWrite工具:新增Jupyter笔记本写入功能,支持单元格操作和文件管理
32
+ - 账号登录系统:实现多区域账号管理,支持国内外不同认证服务
33
+ - MCP管理器:增强服务器状态监控和异步重连功能,提升服务稳定性
34
+ - 消息系统:优化requestId/messageId生成逻辑,改进消息追踪准确性
35
+ - UI组件:修复pending区域高度计算和多工具并行显示问题
36
+ - 输入系统:改进缓存机制和参数解析逻辑,解决文本处理异常
37
+ - 路由系统:清理冗余跳转逻辑,优化导航流程
38
+
8
39
  ## [0.0.29] - 2025-09-01
9
40
 
10
41
  ### Changed
@@ -1 +1 @@
1
- "use strict";exports.id=422,exports.ids=[422],exports.modules={7422:(e,n,t)=>{t.a(e,(async(e,r)=>{try{t.r(n),t.d(n,{LoginView:()=>LoginView});var l=t(80932),a=t(14083),o=t(96540),c=t(66814),i=t(78681),s=t(82101),u=t(34209),m=t(53829),E=t(49034),d=t(47693),g=t(83175),b=t(42790),y=e([a,s,m,E,b]);[a,s,m,E,b]=y.then?(await y)():y;const LoginView=()=>{const e=(0,c.i7)(m.Gb,(e=>e.staticKey));return o.createElement(o.Fragment,null,o.createElement(a.jC,{key:`login-view-${e}`,items:[o.createElement(LogoBox,{key:"logo-box"}),o.createElement(NewVersionBox,{key:"new-version-box"})]},(e=>e)),o.createElement(LoginBox,null))},LogoBox=()=>{const e=`Welcome to ${u.KR}`,n=e.length+8;return o.createElement(o.Fragment,null,o.createElement(a.az,{marginBottom:1,paddingLeft:1,borderStyle:"round",borderColor:g.Q.brand,width:n},o.createElement(a.EY,{color:g.Q.brand},"✻ ",e)),o.createElement(b.H,null))},NewVersionBox=()=>{const e="cyan",n=i.CW.getCurrentPackageJson(),t=n.version.includes("beta"),r=n.version.includes("alpha"),l=t?"@beta":r?"@alpha":"";return o.createElement(a.az,{paddingX:1,flexDirection:"column",borderStyle:"round",borderColor:e},o.createElement(a.EY,{color:e},"New Version Updated v",n.version," Release! Please visit ",u.KR," website to read changelog."),o.createElement(a.EY,{color:e},"Run npm install -g ",u.JP,l))},LoginBox=()=>{const{authSession:e,navigate:n}=(0,c.i7)(m.aO,(e=>({authSession:e.authSession,navigate:e.navigate}))),[t,r]=(0,o.useState)("idle"),[i,u]=(0,o.useState)(""),[b,y]=(0,o.useState)(""),h=(0,o.useRef)(new AbortController);return(0,o.useEffect)((()=>{const e=(0,d.bi)().urlSubject.subscribe(u);return()=>e.unsubscribe()}),[]),(0,a.Ge)(((l,a)=>{if(E.Om.RETURN(a)&&"idle"===t)try{r("loading"),y(""),(0,d.Yf)().login(h.current)}catch(e){r("error"),y(e instanceof Error?e.message:"Unknown error occurred")}else E.Om.ESCAPE(a)&&("loading"===t?(h.current.abort(),r("idle")):e&&n("/chat"))})),o.createElement(a.az,{paddingX:1,flexDirection:"column",gap:1,borderStyle:"round",borderColor:"grey"},"idle"===t?o.createElement(o.Fragment,null,o.createElement(a.az,null,o.createElement(a.EY,null,"Select login method:")),o.createElement(a.az,null,o.createElement(a.EY,{color:"green"},l.Ay.bullet," Login with Tencent Cloud CodeBuddy")),o.createElement(a.az,{justifyContent:"space-between"},o.createElement(a.EY,{color:"grey"},"(Press Enter to login)"))):"loading"===t?o.createElement(a.az,{paddingY:1,gap:1,flexDirection:"column"},o.createElement(a.az,null,o.createElement(a.EY,{color:"grey"},"Browser didn't open? User the url below to sign in:")),i&&o.createElement(a.az,null,o.createElement(a.EY,{color:"grey"},i)),o.createElement(a.az,{marginTop:1,gap:1},o.createElement(a.EY,{color:g.Q.brand},o.createElement(s.y$,{type:"star"})),o.createElement(a.EY,null,"Waiting for auth... (Press ESC to cancel)"))):"error"===t?o.createElement(o.Fragment,null,o.createElement(a.EY,{color:"red"},"Failed to login."),b&&o.createElement(a.EY,{color:"red"},"Message: ",b)):void 0)};r()}catch(e){r(e)}}))},42790:(e,n,t)=>{t.a(e,(async(e,r)=>{try{t.d(n,{H:()=>LogoText});var l=t(1597),a=t(14083),o=t(96540),c=t(66814),i=t(53829),s=t(83175),u=e([a,i]);[a,i]=u.then?(await u)():u;const LogoText=()=>{const e=(0,c.i7)(i.Gb,(e=>e.terminalWidth)),n=(0,o.useRef)((0,l.Ay)(s.Q.GradientColors)),t=(0,o.useCallback)((e=>n.current.multiline(e)),[n]),r=(0,o.useCallback)((()=>e>115?"\n ██████╗ ██████╗ ██████╗ ███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗\n██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗██║ ██║██╔══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔═══██╗██╔══██╗██╔════╝\n██║ ██║ ██║██║ ██║█████╗ ██████╔╝██║ ██║██║ ██║██║ ██║ ╚████╔╝ ██║ ██║ ██║██║ ██║█████╗ \n██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗██║ ██║██║ ██║██║ ██║ ╚██╔╝ ██║ ██║ ██║██║ ██║██╔══╝ \n╚██████╗╚██████╔╝██████╔╝███████╗██████╔╝╚██████╔╝██████╔╝██████╔╝ ██║ ╚██████╗╚██████╔╝██████╔╝███████╗\n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝\n \n\n . * . * . *\n /\\_/\\ \n ( o.o ) * . * \n > ^ < . \n":" \n ██████╗ ██████╗ ██████╗ ███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ██╗ ██╗\n██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗██║ ██║██╔══██╗██╔══██╗╚██╗ ██╔╝\n██║ ██║ ██║██║ ██║█████╗ ██████╔╝██║ ██║██║ ██║██║ ██║ ╚████╔╝ \n██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗██║ ██║██║ ██║██║ ██║ ╚██╔╝ \n╚██████╗╚██████╔╝██████╔╝███████╗██████╔╝╚██████╔╝██████╔╝██████╔╝ ██║ \n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ \n \n ██████╗ ██████╗ ██████╗ ███████╗ \n██╔════╝██╔═══██╗██╔══██╗██╔════╝ \n██║ ██║ ██║██║ ██║█████╗ \n██║ ██║ ██║██║ ██║██╔══╝ \n╚██████╗╚██████╔╝██████╔╝███████╗ \n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝ \n "),[e]);return o.createElement(a.dL,{transform:t},o.createElement(a.EY,null,r()))};r()}catch(e){r(e)}}))}};
1
+ "use strict";exports.id=422,exports.ids=[422],exports.modules={7422:(e,t,n)=>{n.a(e,(async(e,r)=>{try{n.r(t),n.d(t,{LoginView:()=>LoginView});var l=n(80699),a=n(80932),o=n(14083),c=n(96540),i=n(66814),s=n(14822),u=n(78681),E=n(82101),m=n(34209),d=n(53829),g=n(49034),b=n(47693),h=n(83175),y=n(42790),p=e([o,E,d,g,y]);[o,E,d,g,y]=p.then?(await p)():p;const LoginView=()=>{const e=(0,i.i7)(d.Gb,(e=>e.staticKey));return c.createElement(c.Fragment,null,c.createElement(o.jC,{key:`login-view-${e}`,items:[c.createElement(LogoBox,{key:"logo-box"}),c.createElement(NewVersionBox,{key:"new-version-box"})]},(e=>e)),c.createElement(LoginBox,null))},LogoBox=()=>{const e=`Welcome to ${m.KR}`,t=e.length+8;return c.createElement(c.Fragment,null,c.createElement(o.az,{marginBottom:1,paddingLeft:1,borderStyle:"round",borderColor:h.Q.brand,width:t},c.createElement(o.EY,{color:h.Q.brand},"✻ ",e)),c.createElement(y.H,null))},NewVersionBox=()=>{const e="cyan",t=u.CW.getCurrentPackageJson(),n=t.version.includes("beta"),r=t.version.includes("alpha"),l=n?"@beta":r?"@alpha":"";return c.createElement(o.az,{paddingX:1,flexDirection:"column",borderStyle:"round",borderColor:e},c.createElement(o.EY,{color:e},"New Version Updated v",t.version," Release! Please visit ",m.KR," website to read changelog."),c.createElement(o.EY,{color:e},"Run npm install -g ",m.JP,l))},C={iOA:"internal",WeChat:"internal",Google:"external",Github:"external"},LoginBox=()=>{const{authSession:e,navigate:t}=(0,i.i7)(d.aO,(e=>({authSession:e.authSession,navigate:e.navigate}))),[n,r]=(0,c.useState)("idle"),[m,y]=(0,c.useState)(""),[p,f]=(0,c.useState)(""),[w,G]=(0,c.useState)("iOA"),[S,Y]=(0,c.useState)(!1),v=(0,c.useRef)(new AbortController);(0,c.useEffect)((()=>{const e=(0,b.bi)().urlSubject.subscribe(y);return()=>e.unsubscribe()}),[]),(0,c.useEffect)((()=>{m&&u.E.copyToClipboard(m)}),[m]),(0,c.useEffect)((()=>{(async()=>{try{const e=l.ContainerUtil.get(s.Oc),t=await e.isIntranet();Y(t),t||"iOA"!==w||G("Google")}catch(e){Y(!1),"iOA"===w&&G("Google")}})()}),[w]),(0,o.Ge)(((l,a)=>{if("idle"===n){if(g.Om.RETURN(a))try{r("loading"),f(""),(0,b.Yf)().login({type:C[w],abortController:v.current})}catch(e){r("error"),f(e instanceof Error?e.message:"Unknown error occurred")}else if(a.upArrow||a.downArrow){const e=S?["iOA","Google","Github","WeChat"]:["Google","Github","WeChat"],t=e.indexOf(w);let n;n=a.upArrow?t<=0?e.length-1:t-1:t>=e.length-1?0:t+1,G(e[n])}}else g.Om.ESCAPE(a)&&("loading"===n?(v.current.abort(),r("idle")):e&&t("/chat"))}));const A=S?["iOA","Google","Github","WeChat"]:["Google","Github","WeChat"];return c.createElement(o.az,{paddingX:1,flexDirection:"column",gap:1,borderStyle:"round",borderColor:"grey"},"idle"===n?c.createElement(c.Fragment,null,c.createElement(o.az,null,c.createElement(o.EY,null,"Select login method:")),A.map((e=>c.createElement(o.az,{key:e},c.createElement(o.EY,{color:w===e?"green":"grey"},w===e?a.Ay.bullet:" "," Login with ",e)))),c.createElement(o.az,{justifyContent:"space-between"},c.createElement(o.EY,{color:"grey"},"(Use ↑↓ to select, Enter to login)"))):"loading"===n?c.createElement(o.az,{paddingY:1,gap:1,flexDirection:"column"},c.createElement(o.az,null,c.createElement(o.EY,{color:"grey"},"Browser didn't open? Use the url below to sign in: (Copied link to clipboard)")),m&&c.createElement(o.az,null,c.createElement(o.EY,{color:"grey"},m)),c.createElement(o.az,{marginTop:1,gap:1},c.createElement(o.EY,{color:h.Q.brand},c.createElement(E.y$,{type:"star"})),c.createElement(o.EY,null,"Waiting for auth... (Press ESC to cancel)"))):"error"===n?c.createElement(c.Fragment,null,c.createElement(o.EY,{color:"red"},"Failed to login."),p&&c.createElement(o.EY,{color:"red"},"Message: ",p)):void 0)};r()}catch(e){r(e)}}))},42790:(e,t,n)=>{n.a(e,(async(e,r)=>{try{n.d(t,{H:()=>LogoText});var l=n(1597),a=n(14083),o=n(96540),c=n(66814),i=n(53829),s=n(83175),u=e([a,i]);[a,i]=u.then?(await u)():u;const LogoText=()=>{const e=(0,c.i7)(i.Gb,(e=>e.terminalWidth)),t=(0,o.useRef)((0,l.Ay)(s.Q.GradientColors)),n=(0,o.useCallback)((e=>t.current.multiline(e)),[t]),r=(0,o.useCallback)((()=>e>115?"\n ██████╗ ██████╗ ██████╗ ███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗\n██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗██║ ██║██╔══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔═══██╗██╔══██╗██╔════╝\n██║ ██║ ██║██║ ██║█████╗ ██████╔╝██║ ██║██║ ██║██║ ██║ ╚████╔╝ ██║ ██║ ██║██║ ██║█████╗ \n██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗██║ ██║██║ ██║██║ ██║ ╚██╔╝ ██║ ██║ ██║██║ ██║██╔══╝ \n╚██████╗╚██████╔╝██████╔╝███████╗██████╔╝╚██████╔╝██████╔╝██████╔╝ ██║ ╚██████╗╚██████╔╝██████╔╝███████╗\n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝\n \n\n . * . * . *\n /\\_/\\ \n ( o.o ) * . * \n > ^ < . \n":" \n ██████╗ ██████╗ ██████╗ ███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ██╗ ██╗\n██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗██║ ██║██╔══██╗██╔══██╗╚██╗ ██╔╝\n██║ ██║ ██║██║ ██║█████╗ ██████╔╝██║ ██║██║ ██║██║ ██║ ╚████╔╝ \n██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗██║ ██║██║ ██║██║ ██║ ╚██╔╝ \n╚██████╗╚██████╔╝██████╔╝███████╗██████╔╝╚██████╔╝██████╔╝██████╔╝ ██║ \n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ \n \n ██████╗ ██████╗ ██████╗ ███████╗ \n██╔════╝██╔═══██╗██╔══██╗██╔════╝ \n██║ ██║ ██║██║ ██║█████╗ \n██║ ██║ ██║██║ ██║██╔══╝ \n╚██████╗╚██████╔╝██████╔╝███████╗ \n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝ \n "),[e]);return o.createElement(a.dL,{transform:n},o.createElement(a.EY,null,r()))};r()}catch(e){r(e)}}))}};
@@ -1 +1 @@
1
- "use strict";exports.id=566,exports.ids=[566],exports.modules={19250:(e,t,a)=>{a.a(e,(async(e,n)=>{try{a.d(t,{NH:()=>i.NH,pF:()=>m.pF});var l=a(77146),s=a(89536),c=a(70790),m=a(62875),i=a(82388),r=e([l,s,c,m,i]);[l,s,c,m,i]=r.then?(await r)():r,n()}catch(e){n(e)}}))},90566:(e,t,a)=>{a.a(e,(async(e,n)=>{try{a.r(t),a.d(t,{ChatView:()=>ChatView});var l=a(14083),s=a(96540),c=a(66814),m=a(26730),i=a(53829),r=a(59505),u=a(19250),o=a(66530),p=a(92709),g=e([l,m,i,r,u,o,p]);[l,m,i,r,u,o,p]=g.then?(await g)():g;const d=2,h=2,E=s.memo((({availableHeight:e})=>{const t=(0,c.i7)(i.Gb,(e=>e.staticKey)),a=(0,c.i7)(i.rZ,(e=>e.messageGroups)),n=(0,p.A)(a),[m,r]=(0,s.useState)([]),[u,g]=(0,s.useState)([]);(0,s.useEffect)((()=>{const e=[],t=[];for(const n of a){if("function_call_group"===n.type){if(!n.messages.find((e=>"function_call"===e.type&&e.status&&["completed","incomplete"].includes(e.status)))){t.push(...n.messages);continue}}e.push(...n.messages)}r(e),g(t)}),[a]);const h=s.useMemo((()=>[s.createElement(o.f,{key:"chat-header-box"}),...m.map((e=>s.createElement(p.h,{key:`message-item-${e.type}-${e.id}`,msg:e,expanded:n(e.id)})))]),[m,n]);return s.createElement(s.Fragment,null,s.createElement(l.jC,{key:t,items:h},(e=>e)),u.length?s.createElement(l.az,{flexDirection:"column",height:d},...u.map((e=>s.createElement(p.h,{key:`message-item-${e.id}-pending`,msg:e,expanded:n(e.id)})))):s.createElement(s.Fragment,null))})),ChatContainer=()=>{const e=(0,c.i7)(i.Gb,(e=>e.terminalHeight)),[t,a]=(0,s.useState)(0);return(0,s.useEffect)((()=>{a(e-h)}),[e]),(0,m.o)(),(0,r.f)(),s.createElement(s.Fragment,null,s.createElement(E,{availableHeight:t}),s.createElement(l.az,{flexDirection:"column"},s.createElement(u.NH,null,s.createElement(u.pF,{availableHeight:t}))))},ChatView=()=>s.createElement(i.N7,null,s.createElement(i.Y5,null,s.createElement(ChatContainer,null)));n()}catch(e){n(e)}}))}};
1
+ "use strict";exports.id=566,exports.ids=[566],exports.modules={19250:(e,t,a)=>{a.a(e,(async(e,n)=>{try{a.d(t,{NH:()=>i.NH,pF:()=>m.pF});var l=a(77146),s=a(89536),c=a(70790),m=a(62875),i=a(82388),r=e([l,s,c,m,i]);[l,s,c,m,i]=r.then?(await r)():r,n()}catch(e){n(e)}}))},90566:(e,t,a)=>{a.a(e,(async(e,n)=>{try{a.r(t),a.d(t,{ChatView:()=>ChatView});var l=a(14083),s=a(96540),c=a(66814),m=a(26730),i=a(53829),r=a(59505),o=a(19250),u=a(66530),h=a(92709),d=e([l,m,i,r,o,u,h]);[l,m,i,r,o,u,h]=d.then?(await d)():d;const g=2,p=2,E=s.memo((({availableHeight:e})=>{const t=(0,c.i7)(i.Gb,(e=>e.staticKey)),a=(0,c.i7)(i.rZ,(e=>e.messageGroups)),n=(0,h.A)(a),[m,r]=(0,s.useState)([]),[o,d]=(0,s.useState)([]),p=(0,s.useMemo)((()=>Math.min(g*o.length,e)),[o]);(0,s.useEffect)((()=>{const e=[],t=[];for(const n of a){if("function_call_group"===n.type){if(!n.messages.find((e=>"function_call"===e.type&&e.status&&["completed","incomplete"].includes(e.status)))){t.push(...n.messages);continue}}e.push(...n.messages)}r(e),d(t)}),[a]);const E=s.useMemo((()=>[s.createElement(u.f,{key:"chat-header-box"}),...m.map((e=>s.createElement(h.h,{key:`message-item-${e.type}-${e.id}`,msg:e,expanded:n(e.id)})))]),[m,n]);return s.createElement(s.Fragment,null,s.createElement(l.jC,{key:t,items:E},(e=>e)),o.length?s.createElement(l.az,{flexDirection:"column",height:p,overflow:"hidden"},...o.map((e=>s.createElement(h.h,{key:`message-item-${e.id}-pending`,msg:e,expanded:n(e.id)})))):s.createElement(s.Fragment,null))})),ChatContainer=()=>{const e=(0,c.i7)(i.Gb,(e=>e.terminalHeight)),[t,a]=(0,s.useState)(0);return(0,s.useEffect)((()=>{a(e-p)}),[e]),(0,m.o)(),(0,r.f)(),s.createElement(s.Fragment,null,s.createElement(E,{availableHeight:t}),s.createElement(l.az,{flexDirection:"column"},s.createElement(o.NH,null,s.createElement(o.pF,{availableHeight:t}))))},ChatView=()=>s.createElement(i.N7,null,s.createElement(i.Y5,null,s.createElement(ChatContainer,null)));n()}catch(e){n(e)}}))}};