@tencent-ai/codebuddy-code 0.0.1-beta.23 → 0.0.1-beta.24

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,51 @@ 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.24] - 2025-08-25
9
+
10
+ ### Added
11
+ - **MCP 功能增强**:完善 MCP (Model Context Protocol) 支持,包含命令展示和工具调用展示逻辑
12
+ - 新增控制台补丁与 MCP 功能,优化路径与日志输出处理
13
+ - 增强编辑工具验证逻辑,提升代码编辑准确性和安全性
14
+ - 添加标准输出和错误输出的截断功能,防止超长输出影响终端性能
15
+ - 新增 `/mcp` 指令功能,支持 MCP 服务器配置管理
16
+ - 读写工具兼容相对/绝对路径,提升文件操作灵活性
17
+ - **新增设置提示上下文初始化器**:添加 `SettingsPromptContextInitializer`,支持设置数据注入到提示上下文
18
+ - 新增工具确认对话框优化,支持工具拒绝和继续流程
19
+ - 新增 `TOOL_REJECT_RESULT_CONTENT` 和 `TOOL_REJECT_CONTENT` 常量,统一工具拒绝文案管理
20
+
21
+ ### Changed
22
+ - **优化 MCP 服务模块**:支持多传输类型及服务器创建,完善验证中间件
23
+ - 改进指令对应 panel 显示逻辑,添加设置命令的展示功能
24
+ - 统一使用路由方法解决 ESC 退出问题,提升用户界面交互体验
25
+ - 修改 pending 状态的 key 生成,防止与历史消息重复冲突
26
+ - 优化文件排除逻辑并改进通配符转正则表达式处理
27
+ - **重构工具调用渲染系统**:优化 ToolCallProtocol 接口定义,规范化组件属性命名
28
+ - 改进工具确认对话框文本,使用常量管理工具拒绝相关文案
29
+ - 优化终端尺寸处理逻辑,增强响应式布局支持
30
+ - **工具管理器增强**:集成 PromptContextProvider,支持动态工具描述模板渲染
31
+ - 默认关闭 Co-Authored-By 功能,简化提交流程
32
+
33
+ ### Fixed
34
+ - 解决子命令参数和选项的冲突问题
35
+ - 改进 diff 替换错误问题,删除错误消息的刷新逻辑
36
+ - 修复错误的 lastitem 判断,添加缺失的 React key 属性
37
+ - 按规范修改代码,拆分不合理逻辑并添加缺失的指令
38
+ - **修复工具调用状态处理逻辑**:改进中断处理、工具拒绝流程和会话状态管理
39
+ - 修复接口类型定义错误,统一 ToolCallResultItem 和 ToolCallItem 命名
40
+ - 优化自动更新服务的错误处理和状态管理逻辑
41
+ - 修复工具调用结果渲染中的类型安全问题,改进错误处理逻辑
42
+ - 修复 `defualtShowArg` 拼写错误,统一为 `defaultShowArg`
43
+
44
+ ### Technical Details
45
+ - MCP 模块:实现服务器配置管理和 REST API 接口集成
46
+ - MCP 验证中间件:调整优先级并限制传输类型,增强安全性
47
+ - 路径兼容性:读写工具支持相对和绝对路径自动转换
48
+ - **工具系统重构**:规范化接口定义,改进渲染组件的类型安全性
49
+ - **设置系统集成**:默认关闭 Co-Authored-By 功能,优化提示模板渲染
50
+ - **会话状态优化**:改进工具拒绝处理逻辑,支持静默中止和强制消息发送
51
+ - **工具描述模板化**:支持动态渲染工具描述,集成设置上下文到工具提示
52
+
8
53
  ## [0.0.1-beta.23] - 2025-08-22
9
54
 
10
55
  ### Added
@@ -1 +1 @@
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(80932),a=n(14083),o=n(96540),c=n(66814),i=n(75101),s=n(82101),u=n(34209),m=n(53829),E=n(49034),d=n(47693),g=n(83175),b=n(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}`,t=e.length+8;return o.createElement(o.Fragment,null,o.createElement(a.az,{marginBottom:1,paddingLeft:1,borderStyle:"round",borderColor:g.Q.brand,width:t},o.createElement(a.EY,{color:g.Q.brand},"✻ ",e)),o.createElement(b.H,null))},NewVersionBox=()=>{const e="cyan",t=i.CW.getCurrentPackageJson(),n=t.version.includes("beta"),r=t.version.includes("alpha"),l=n?"@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",t.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:t}=(0,c.i7)(m.aO,(e=>({authSession:e.authSession,navigate:e.navigate}))),[n,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"===n)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"===n?(h.current.abort(),r("idle")):e&&t("/chat"))})),o.createElement(a.az,{paddingX:1,flexDirection:"column",gap:1,borderStyle:"round",borderColor:"grey"},"idle"===n?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"===n?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"===n?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,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(83175),i=e([a]);a=(i.then?(await i)():i)[0];const LogoText=()=>{const e=(0,o.useRef)((0,l.Ay)(c.Q.GradientColors)),t=(0,o.useCallback)((t=>e.current.multiline(t)),[e]);return o.createElement(a.dL,{transform:t},o.createElement(a.EY,null,"\n ██████╗ ██████╗ ██████╗ ███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗\n██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗██║ ██║██╔══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔═══██╗██╔══██╗██╔════╝\n██║ ██║ ██║██║ ██║█████╗ ██████╔╝██║ ██║██║ ██║██║ ██║ ╚████╔╝ ██║ ██║ ██║██║ ██║█████╗ \n██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗██║ ██║██║ ██║██║ ██║ ╚██╔╝ ██║ ██║ ██║██║ ██║██╔══╝ \n╚██████╗╚██████╔╝██████╔╝███████╗██████╔╝╚██████╔╝██████╔╝██████╔╝ ██║ ╚██████╗╚██████╔╝██████╔╝███████╗\n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝\n \n\n . * . * . *\n /\\_/\\ \n ( o.o ) * . * \n > ^ < . \n"))};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(80932),a=n(14083),o=n(96540),c=n(66814),i=n(14216),s=n(82101),u=n(34209),m=n(53829),E=n(49034),d=n(47693),g=n(83175),b=n(42790),y=e([a,i,s,m,E,d,b]);[a,i,s,m,E,d,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}`,t=e.length+8;return o.createElement(o.Fragment,null,o.createElement(a.az,{marginBottom:1,paddingLeft:1,borderStyle:"round",borderColor:g.Q.brand,width:t},o.createElement(a.EY,{color:g.Q.brand},"✻ ",e)),o.createElement(b.H,null))},NewVersionBox=()=>{const e="cyan",t=i.CW.getCurrentPackageJson(),n=t.version.includes("beta"),r=t.version.includes("alpha"),l=n?"@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",t.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:t}=(0,c.i7)(m.aO,(e=>({authSession:e.authSession,navigate:e.navigate}))),[n,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"===n)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"===n?(h.current.abort(),r("idle")):e&&t("/chat"))})),o.createElement(a.az,{paddingX:1,flexDirection:"column",gap:1,borderStyle:"round",borderColor:"grey"},"idle"===n?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"===n?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"===n?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,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(83175),i=e([a]);a=(i.then?(await i)():i)[0];const LogoText=()=>{const e=(0,o.useRef)((0,l.Ay)(c.Q.GradientColors)),t=(0,o.useCallback)((t=>e.current.multiline(t)),[e]);return o.createElement(a.dL,{transform:t},o.createElement(a.EY,null,"\n ██████╗ ██████╗ ██████╗ ███████╗██████╗ ██╗ ██╗██████╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗\n██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗██║ ██║██╔══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔═══██╗██╔══██╗██╔════╝\n██║ ██║ ██║██║ ██║█████╗ ██████╔╝██║ ██║██║ ██║██║ ██║ ╚████╔╝ ██║ ██║ ██║██║ ██║█████╗ \n██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗██║ ██║██║ ██║██║ ██║ ╚██╔╝ ██║ ██║ ██║██║ ██║██╔══╝ \n╚██████╗╚██████╔╝██████╔╝███████╗██████╔╝╚██████╔╝██████╔╝██████╔╝ ██║ ╚██████╗╚██████╔╝██████╔╝███████╗\n ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝\n \n\n . * . * . *\n /\\_/\\ \n ( o.o ) * . * \n > ^ < . \n"))};r()}catch(e){r(e)}}))}};
@@ -1 +1 @@
1
- "use strict";exports.id=632,exports.ids=[632],exports.modules={11632:(e,r,t)=>{t.a(e,(async(e,c)=>{try{t.r(r),t.d(r,{McpView:()=>McpView});var l=t(14083),a=t(96540),o=t(66814),n=t(32368),s=t(82101),i=t(34209),u=t(53829),m=t(49034),d=e([l,s,u,m]);[l,s,u,m]=d.then?(await d)():d;const McpView=()=>a.createElement(MultipleServersConfirm,{servers:[{value:"echo-server4",label:"echo-server4",checked:!0},{value:"echo-server5",label:"echo-server5",checked:!1},{value:"Github-MCP-Server6",label:"Github-MCP-Server6",checked:!0}]}),MultipleServersConfirm=({servers:e})=>{const r=(0,o.i7)(u.aO,(e=>e.navigate)),[t,c]=(0,a.useState)(e),d=(0,a.useRef)(void 0),h=(0,a.useCallback)((e=>{d.current=e}),[]);(0,l.Ge)(((e,t)=>{if(m.Om.ESCAPE(t)&&r("/chat")," "===e&&d.current){const e=d.current;c((r=>r.map((r=>r.value===e.value?{...r,checked:!r.checked}:r))))}}));const v=t.length;return a.createElement(a.Fragment,null,a.createElement(l.az,{padding:1,gap:1,flexDirection:"column",borderColor:"yellowBright",borderStyle:"round"},a.createElement(l.EY,{color:"yellowBright"},v," new MCP servers found in ",n.DZ),a.createElement(l.EY,null,"Select any you wish to enable."),a.createElement(l.EY,null,"MCP servers may execute code or access system resources. All tool calls require approval. Learn more in the MCP documentation ( ",i.Je," )."),a.createElement(s.pp,{items:t,limit:5,itemComponent:ServerItemComponent,onHighlight:h})),a.createElement(l.az,{paddingX:2},a.createElement(l.EY,{color:"grey"},"Space to select · Enter to confirm · Esc to reject all")))},ServerItemComponent=({value:e,checked:r})=>a.createElement(l.EY,{color:r?"green":void 0},e," ",r?"✓":"");c()}catch(e){c(e)}}))}};
1
+ "use strict";exports.id=632,exports.ids=[632],exports.modules={11632:(e,r,t)=>{t.a(e,(async(e,c)=>{try{t.r(r),t.d(r,{McpView:()=>McpView});var l=t(14083),a=t(96540),o=t(66814),n=t(81625),s=t(82101),i=t(34209),u=t(53829),m=t(49034),d=e([l,n,s,u,m]);[l,n,s,u,m]=d.then?(await d)():d;const McpView=()=>a.createElement(MultipleServersConfirm,{servers:[{value:"echo-server4",label:"echo-server4",checked:!0},{value:"echo-server5",label:"echo-server5",checked:!1},{value:"Github-MCP-Server6",label:"Github-MCP-Server6",checked:!0}]}),MultipleServersConfirm=({servers:e})=>{const r=(0,o.i7)(u.aO,(e=>e.navigate)),[t,c]=(0,a.useState)(e),d=(0,a.useRef)(void 0),h=(0,a.useCallback)((e=>{d.current=e}),[]);(0,l.Ge)(((e,t)=>{if(m.Om.ESCAPE(t)&&r("/chat")," "===e&&d.current){const e=d.current;c((r=>r.map((r=>r.value===e.value?{...r,checked:!r.checked}:r))))}}));const v=t.length;return a.createElement(a.Fragment,null,a.createElement(l.az,{padding:1,gap:1,flexDirection:"column",borderColor:"yellowBright",borderStyle:"round"},a.createElement(l.EY,{color:"yellowBright"},v," new MCP servers found in ",n.DZ),a.createElement(l.EY,null,"Select any you wish to enable."),a.createElement(l.EY,null,"MCP servers may execute code or access system resources. All tool calls require approval. Learn more in the MCP documentation ( ",i.Je," )."),a.createElement(s.pp,{items:t,limit:5,itemComponent:ServerItemComponent,onHighlight:h})),a.createElement(l.az,{paddingX:2},a.createElement(l.EY,{color:"grey"},"Space to select · Enter to confirm · Esc to reject all")))},ServerItemComponent=({value:e,checked:r})=>a.createElement(l.EY,{color:r?"green":void 0},e," ",r?"✓":"");c()}catch(e){c(e)}}))}};