blade-code 0.10.85 → 0.10.87

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.
Files changed (114) hide show
  1. package/README.md +6 -0
  2. package/dist/blade.js +2 -2
  3. package/dist/chunk-029q49wd.js +1691 -0
  4. package/dist/{chunk-y8fswz6h.js → chunk-07hn8br0.js} +38 -38
  5. package/dist/{chunk-rg3bvddy.js → chunk-0mrh85yz.js} +1 -1
  6. package/dist/chunk-12e2yj9p.js +2 -0
  7. package/dist/chunk-17s7gvqm.js +1 -0
  8. package/dist/{chunk-ff5y1ba2.js → chunk-1ajybpd8.js} +1 -1
  9. package/dist/{chunk-sb84vdcf.js → chunk-1g5s5vf3.js} +1 -1
  10. package/dist/{chunk-shr5cg46.js → chunk-1mb2y0e0.js} +2 -2
  11. package/dist/{chunk-hjr9r44k.js → chunk-33g68zy1.js} +1 -1
  12. package/dist/{chunk-jw8zwqyg.js → chunk-37x3xyqk.js} +2 -2
  13. package/dist/{chunk-g9xjcfrf.js → chunk-3aejg2jy.js} +1 -1
  14. package/dist/{chunk-21rjwgc2.js → chunk-3dsggcwt.js} +2 -2
  15. package/dist/{chunk-sk8h4m9m.js → chunk-45a1tsk1.js} +1 -1
  16. package/dist/chunk-4amesx3y.js +8 -0
  17. package/dist/{chunk-hm782j80.js → chunk-51rayzy2.js} +3 -3
  18. package/dist/chunk-6gnerzt5.js +1 -0
  19. package/dist/{chunk-99h419nm.js → chunk-78cjfm2t.js} +2 -2
  20. package/dist/{chunk-1gv7095w.js → chunk-78x3z8cf.js} +1 -1
  21. package/dist/{chunk-m5f934fh.js → chunk-7a8j14gg.js} +1 -1
  22. package/dist/{chunk-r8wbvxn7.js → chunk-7avnhnjn.js} +1 -1
  23. package/dist/chunk-85s1nyaz.js +1 -0
  24. package/dist/{chunk-83caxxbt.js → chunk-8mee32xq.js} +1 -1
  25. package/dist/{chunk-1q3z3ryy.js → chunk-8wp4px6b.js} +1 -1
  26. package/dist/chunk-943vkrwc.js +2 -0
  27. package/dist/{chunk-mhq9p8mm.js → chunk-9ap72kq4.js} +2 -2
  28. package/dist/chunk-9fxvqbve.js +1 -0
  29. package/dist/{chunk-0nsrw84g.js → chunk-9zaxwfa5.js} +1 -1
  30. package/dist/chunk-am6pzb5h.js +1 -0
  31. package/dist/{chunk-jf4bxxyf.js → chunk-anpph83s.js} +1 -1
  32. package/dist/chunk-azpkmttg.js +118 -0
  33. package/dist/{chunk-1jyr0t4q.js → chunk-b7k56qfy.js} +1 -1
  34. package/dist/{chunk-rwvaapta.js → chunk-bvp5wpz8.js} +2 -2
  35. package/dist/{chunk-272swnyr.js → chunk-ckqz2btx.js} +1 -1
  36. package/dist/chunk-d1m21wr4.js +1 -0
  37. package/dist/{chunk-sr4zv59p.js → chunk-d83meq4k.js} +1 -1
  38. package/dist/{chunk-skg520wq.js → chunk-dm1knbf8.js} +2 -2
  39. package/dist/{chunk-d7v34g3f.js → chunk-dp72xx4j.js} +2 -2
  40. package/dist/{chunk-ax95qw8w.js → chunk-dtq9t14j.js} +2 -2
  41. package/dist/{chunk-tpxs85cg.js → chunk-f7p7tzx2.js} +2 -2
  42. package/dist/chunk-hgzs14b2.js +1 -0
  43. package/dist/chunk-hj41cbd6.js +1 -0
  44. package/dist/{chunk-ffa6hhee.js → chunk-hkh2nsam.js} +2 -2
  45. package/dist/{chunk-knwa4gmn.js → chunk-k1t91vp3.js} +2 -2
  46. package/dist/chunk-kbgsbq7k.js +1 -0
  47. package/dist/{chunk-bvzzq0jb.js → chunk-kpmaxt15.js} +1 -1
  48. package/dist/{chunk-c7sx7pa4.js → chunk-kvw91990.js} +2 -2
  49. package/dist/{chunk-h1gapq0a.js → chunk-kz40nxhm.js} +2 -2
  50. package/dist/{chunk-7md9r31q.js → chunk-m3xycm44.js} +1 -1
  51. package/dist/{chunk-6jsmac0q.js → chunk-m5hnyxf3.js} +1 -1
  52. package/dist/{chunk-jndq361v.js → chunk-mh92e9gy.js} +1 -1
  53. package/dist/{chunk-7m5q8vxf.js → chunk-ne5w9ds8.js} +1 -1
  54. package/dist/{chunk-htt5c847.js → chunk-pknksqe8.js} +2 -2
  55. package/dist/{chunk-ww51801m.js → chunk-q15sm6vj.js} +1 -1
  56. package/dist/chunk-q2t49c64.js +1 -0
  57. package/dist/{chunk-44dzrn0p.js → chunk-q8jfwyr4.js} +1 -1
  58. package/dist/{chunk-7wjqw574.js → chunk-qrsxw68t.js} +1 -1
  59. package/dist/chunk-qsxt9ejm.js +1 -0
  60. package/dist/{chunk-r77pcb0f.js → chunk-r2nzt9jm.js} +2 -2
  61. package/dist/{chunk-01zar8q6.js → chunk-rj49h1x1.js} +2 -2
  62. package/dist/chunk-rjbxqscc.js +1 -0
  63. package/dist/{chunk-e1ry8aj5.js → chunk-rm8w0qg7.js} +1 -1
  64. package/dist/{chunk-t1633e8m.js → chunk-rxjyc6ff.js} +2 -2
  65. package/dist/chunk-t9xtxg1a.js +1 -0
  66. package/dist/{chunk-7rfhmbqw.js → chunk-tc1001nx.js} +1 -1
  67. package/dist/{chunk-0q5bz3nm.js → chunk-vyk5nxsz.js} +2 -2
  68. package/dist/{chunk-72th07qj.js → chunk-w2tcjj0w.js} +1 -1
  69. package/dist/chunk-wattrxqd.js +1 -0
  70. package/dist/{chunk-9ye1s8tj.js → chunk-wyk6yc02.js} +2 -2
  71. package/dist/{chunk-fv8b98tz.js → chunk-x079eg84.js} +2 -2
  72. package/dist/{chunk-d2pwwdab.js → chunk-xhhgpbzs.js} +1 -1
  73. package/dist/chunk-xn8kfrry.js +10 -0
  74. package/dist/chunk-xxk5d2v6.js +2 -0
  75. package/dist/{chunk-b2p9qm6j.js → chunk-y7dtdwqx.js} +2 -2
  76. package/dist/chunk-yv1p4bcd.js +1 -0
  77. package/dist/web/assets/ChatView-juDcmnHV.js +18 -0
  78. package/dist/web/assets/{CodeBlockHighlighter-DeJNC14V.js → CodeBlockHighlighter-BR4c98oZ.js} +1 -1
  79. package/dist/web/assets/FilePreview-DKgh-Chb.js +8 -0
  80. package/dist/web/assets/{KanbanBoard-DvHAwhcw.js → KanbanBoard-CQU0UQP8.js} +1 -1
  81. package/dist/web/assets/{MarkdownRenderer-BY51R1Fj.js → MarkdownRenderer-BVPIxk31.js} +3 -3
  82. package/dist/web/assets/{SettingsModal-CZGKcV1S.js → SettingsModal-CuUrUdWR.js} +1 -1
  83. package/dist/web/assets/{TaskSwitcher-DgeqVRAB.js → TaskSwitcher-DB7by2ch.js} +1 -1
  84. package/dist/web/assets/{TerminalPanel-KOLgH_tg.js → TerminalPanel-BN9ftZUH.js} +1 -1
  85. package/dist/web/assets/index-BdnOTMNi.css +1 -0
  86. package/dist/web/assets/index-ebnhtfFC.js +11 -0
  87. package/dist/web/assets/{teamService-Bxs4R7Al.js → teamService-CFKFv0qS.js} +1 -1
  88. package/dist/web/assets/{vendor-icons-DovdPN7M.js → vendor-icons-CX5BfgqQ.js} +1 -1
  89. package/dist/web/index.html +3 -3
  90. package/package.json +2 -2
  91. package/dist/chunk-1khv7fp2.js +0 -1
  92. package/dist/chunk-7jp7e0zj.js +0 -1
  93. package/dist/chunk-7ne59gra.js +0 -10
  94. package/dist/chunk-7qa8rfmy.js +0 -1
  95. package/dist/chunk-a0nb3aad.js +0 -1
  96. package/dist/chunk-cxe0ghk2.js +0 -1
  97. package/dist/chunk-fevtj34k.js +0 -1
  98. package/dist/chunk-gd2sw9zm.js +0 -2
  99. package/dist/chunk-hg8d4vhj.js +0 -2
  100. package/dist/chunk-kvk1bbqj.js +0 -1
  101. package/dist/chunk-kzzzzymt.js +0 -1
  102. package/dist/chunk-ppyqrdqc.js +0 -1673
  103. package/dist/chunk-q4c1nv7m.js +0 -8
  104. package/dist/chunk-syg4pnbr.js +0 -1
  105. package/dist/chunk-tbbc90bs.js +0 -1
  106. package/dist/chunk-w2sb1hy9.js +0 -1
  107. package/dist/chunk-x2rraka3.js +0 -1
  108. package/dist/chunk-xj65p2sn.js +0 -1
  109. package/dist/chunk-xkb0zrjj.js +0 -118
  110. package/dist/chunk-znv9g3mt.js +0 -1
  111. package/dist/web/assets/ChatView-DMPNX1fC.js +0 -18
  112. package/dist/web/assets/FilePreview-qWMpc2P_.js +0 -8
  113. package/dist/web/assets/index-BNeDPN7E.css +0 -1
  114. package/dist/web/assets/index-DHX-G3RT.js +0 -11
package/README.md CHANGED
@@ -29,6 +29,7 @@
29
29
  - 🆓 **开箱即用** - 内置免费 GLM-4.7 模型,可选自定义模型
30
30
  - 🌐 **双模式界面** - CLI 终端 + Web UI,随心切换
31
31
  - 🛠️ **丰富工具** - 20+ 内置工具:文件/搜索/Shell/Git/Web 等
32
+ - 🌍 **原生浏览器自动化** - Session 隔离 Chromium、ARIA 快照与安全 ref 交互
32
33
  - 🔗 **扩展能力** - MCP、插件与 Skills 系统
33
34
  - 📋 **结构化工作流** - Spec / Plan / Subagents / Agent Teams
34
35
  - 🔒 **安全可控** - default/autoEdit/plan/yolo 权限模式与工具白/黑名单
@@ -47,6 +48,10 @@ npm install -g blade-code
47
48
  # 或
48
49
  pnpm add -g blade-code
49
50
 
51
+ # 可选:安装 Agent Browser 所需的固定版本 Chromium
52
+ blade browser install
53
+ blade browser status
54
+
50
55
  # CLI 模式
51
56
  blade
52
57
  blade "帮我分析这个项目"
@@ -99,6 +104,7 @@ API key 以渠道 ID 为键存放在权限为 `0600` 的 `~/.blade/auth.json`,
99
104
  - `blade` 启动交互式 CLI 界面
100
105
  - `blade web` 启动 Web UI(0.2.0 新增)
101
106
  - `blade serve` 启动无头服务器(0.2.0 新增)
107
+ - `blade browser install/status` 安装或检查原生 Browser Tool 的 Chromium
102
108
  - `blade mcp` 管理 MCP 服务器;`blade mcp login/logout` 显式管理远程 OAuth
103
109
  - `blade doctor` 环境自检
104
110
  - `blade update` 检查更新
package/dist/blade.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{Cd as W}from"./chunk-knwa4gmn.js";import{Fd as F,Gd as M}from"./chunk-skg520wq.js";import"./chunk-9ye1s8tj.js";import"./chunk-v508x7cg.js";import"./chunk-g9xjcfrf.js";import"./chunk-hm782j80.js";import"./chunk-272swnyr.js";import"./chunk-21rjwgc2.js";import"./chunk-7m5q8vxf.js";import"./chunk-sk8h4m9m.js";import"./chunk-hg8d4vhj.js";import{Sg as N,Tg as B}from"./chunk-sb84vdcf.js";import"./chunk-hjr9r44k.js";import{sh as T}from"./chunk-ffa6hhee.js";import"./chunk-t1633e8m.js";import"./chunk-m5f934fh.js";import"./chunk-c7sx7pa4.js";import"./chunk-rwvaapta.js";import"./chunk-83caxxbt.js";import"./chunk-shr5cg46.js";import{$h as J}from"./chunk-6jsmac0q.js";import v from"node:path";var E=process.argv.slice(2),I=u(E),p=I!==null;if(I!==null)T.setGlobalDebug(I);function u(Q){for(let Y=0;Y<Q.length;Y+=1){let U=Q[Y];if(U==="--debug"||U==="-d"){let X=Q[Y+1];return X&&!X.startsWith("-")?X:!0}if(U.startsWith("--debug="))return U.slice(8)||!0}return null}function c(Q){return Q.length===1&&(Q[0]==="--version"||Q[0]==="-V")}function q(Q,...Y){return Q.some((U)=>Y.some((X)=>U===X||U.startsWith(`${X}=`)))}function m(Q,...Y){let U=[];for(let X=0;X<Q.length;X+=1){let G=Q[X],z=Y.find(($)=>G.startsWith(`${$}=`));if(z){let $=G.slice(z.length+1);if($)U.push($);continue}if(Y.includes(G)){let $=Q[X+1];if($&&!$.startsWith("-"))U.push($),X+=1}}return U}async function t(){if(c(E)){let{getVersion:K}=await import("./chunk-tbbc90bs.js");console.log(K());return}let Q=process.cwd(),Y=F(Q);M(Y),N(B());let U=m(E,"--plugin-dir","--pluginDir");if(U.length>0){let{configureInvocationPluginDirs:K}=await import("./chunk-a0nb3aad.js");K(U.map((Z)=>v.resolve(Q,Z)))}if(q(E,"--trust-workspace","--trustWorkspace")){let{WorkspaceTrustService:K}=await import("./chunk-7jp7e0zj.js");await K.getInstance().trust(B())}if(process.getuid&&process.getuid()===0){let K=!!process.env.SUDO_USER,Z=!!process.env.BLADE_ALLOW_ROOT;if(K&&!Z)console.error(""),console.error("Error: 请不要使用 sudo 运行 blade"),console.error(""),console.error("原因:"),console.error(" 使用 sudo 会创建属于 root 的配置文件,"),console.error(" 导致普通用户无法访问。"),console.error(""),console.error("正确用法:"),console.error(" blade # 直接运行,不要加 sudo"),console.error(""),console.error("如果遇到权限错误,请运行:"),console.error(" sudo chown -R $USER:$USER ~/.blade/"),console.error(""),console.error("如果你确实需要以 root 运行(容器/CI),设置环境变量:"),console.error(" BLADE_ALLOW_ROOT=1 blade"),console.error(""),process.exit(1)}if(q(E,"--headless")){let{handleHeadlessMode:K}=await import("./chunk-ff5y1ba2.js");if(await K())return}if(W(),q(E,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-1q3z3ryy.js");if(await K())return}if(E.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-0nsrw84g.js");await K();return}let[{default:X},{hideBin:G},{cliConfig:z,globalOptions:$},{loadConfiguration:_,validateOutput:D,validatePermissions:R},{doctorCommands:S},{installCommands:k},{mcpCommands:O},{projectsCommands:y},{scheduleCommands:b},{serveCommand:V},{updateCommands:P},{webCommand:x}]=await Promise.all([import("yargs"),import("yargs/helpers"),import("./chunk-znv9g3mt.js"),import("./chunk-fevtj34k.js"),import("./chunk-d7v34g3f.js"),import("./chunk-jf4bxxyf.js"),import("./chunk-rg3bvddy.js"),import("./chunk-jndq361v.js"),import("./chunk-e1ry8aj5.js"),import("./chunk-1khv7fp2.js"),import("./chunk-1jyr0t4q.js"),import("./chunk-7ne59gra.js")]),A=X(G(process.argv)).scriptName(z.scriptName).usage(z.usage).version(z.version).locale(z.locale).showHelpOnFail(z.showHelpOnFail).demandCommand(0,"").recommendCommands().strict(z.strict).parserConfiguration({"populate--":!0}).options($).middleware([_,R,D]).command(O).command(y).command(b).command(S).command(P).command(k).command(x).command(V).completion("completion",!1).help("help","Show help").alias("help","h").alias("version","V").fail((K,Z,L)=>{if(Z){if(console.error("An error occurred:"),console.error(Z.message),p&&Z.stack)console.error(`
2
+ import{pe as W}from"./chunk-k1t91vp3.js";import{se as F,te as M}from"./chunk-dm1knbf8.js";import"./chunk-wyk6yc02.js";import"./chunk-v508x7cg.js";import"./chunk-3aejg2jy.js";import"./chunk-51rayzy2.js";import"./chunk-ckqz2btx.js";import"./chunk-3dsggcwt.js";import"./chunk-ne5w9ds8.js";import"./chunk-45a1tsk1.js";import"./chunk-12e2yj9p.js";import{Fh as N,Gh as B}from"./chunk-1g5s5vf3.js";import"./chunk-33g68zy1.js";import{fi as T}from"./chunk-hkh2nsam.js";import"./chunk-rxjyc6ff.js";import"./chunk-7a8j14gg.js";import"./chunk-kvw91990.js";import"./chunk-bvp5wpz8.js";import"./chunk-8mee32xq.js";import"./chunk-1mb2y0e0.js";import{Oi as J}from"./chunk-m5hnyxf3.js";import p from"node:path";var E=process.argv.slice(2),I=c(E),u=I!==null;if(I!==null)T.setGlobalDebug(I);function c(Q){for(let Y=0;Y<Q.length;Y+=1){let U=Q[Y];if(U==="--debug"||U==="-d"){let X=Q[Y+1];return X&&!X.startsWith("-")?X:!0}if(U.startsWith("--debug="))return U.slice(8)||!0}return null}function m(Q){return Q.length===1&&(Q[0]==="--version"||Q[0]==="-V")}function q(Q,...Y){return Q.some((U)=>Y.some((X)=>U===X||U.startsWith(`${X}=`)))}function t(Q,...Y){let U=[];for(let X=0;X<Q.length;X+=1){let G=Q[X],z=Y.find(($)=>G.startsWith(`${$}=`));if(z){let $=G.slice(z.length+1);if($)U.push($);continue}if(Y.includes(G)){let $=Q[X+1];if($&&!$.startsWith("-"))U.push($),X+=1}}return U}async function l(){if(m(E)){let{getVersion:K}=await import("./chunk-q2t49c64.js");console.log(K());return}let Q=process.cwd(),Y=F(Q);M(Y),N(B());let U=t(E,"--plugin-dir","--pluginDir");if(U.length>0){let{configureInvocationPluginDirs:K}=await import("./chunk-d1m21wr4.js");K(U.map((Z)=>p.resolve(Q,Z)))}if(q(E,"--trust-workspace","--trustWorkspace")){let{WorkspaceTrustService:K}=await import("./chunk-qsxt9ejm.js");await K.getInstance().trust(B())}if(process.getuid&&process.getuid()===0){let K=!!process.env.SUDO_USER,Z=!!process.env.BLADE_ALLOW_ROOT;if(K&&!Z)console.error(""),console.error("Error: 请不要使用 sudo 运行 blade"),console.error(""),console.error("原因:"),console.error(" 使用 sudo 会创建属于 root 的配置文件,"),console.error(" 导致普通用户无法访问。"),console.error(""),console.error("正确用法:"),console.error(" blade # 直接运行,不要加 sudo"),console.error(""),console.error("如果遇到权限错误,请运行:"),console.error(" sudo chown -R $USER:$USER ~/.blade/"),console.error(""),console.error("如果你确实需要以 root 运行(容器/CI),设置环境变量:"),console.error(" BLADE_ALLOW_ROOT=1 blade"),console.error(""),process.exit(1)}if(q(E,"--headless")){let{handleHeadlessMode:K}=await import("./chunk-1ajybpd8.js");if(await K())return}if(W(),q(E,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-8wp4px6b.js");if(await K())return}if(E.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-9zaxwfa5.js");await K();return}let[{default:X},{hideBin:G},{cliConfig:z,globalOptions:$},{loadConfiguration:_,validateOutput:D,validatePermissions:R},{browserCommands:S},{doctorCommands:k},{installCommands:O},{mcpCommands:y},{projectsCommands:V},{scheduleCommands:b},{serveCommand:P},{updateCommands:x},{webCommand:A}]=await Promise.all([import("yargs"),import("yargs/helpers"),import("./chunk-17s7gvqm.js"),import("./chunk-am6pzb5h.js"),import("./chunk-wattrxqd.js"),import("./chunk-dp72xx4j.js"),import("./chunk-anpph83s.js"),import("./chunk-0mrh85yz.js"),import("./chunk-mh92e9gy.js"),import("./chunk-rm8w0qg7.js"),import("./chunk-rjbxqscc.js"),import("./chunk-b7k56qfy.js"),import("./chunk-xn8kfrry.js")]),h=X(G(process.argv)).scriptName(z.scriptName).usage(z.usage).version(z.version).locale(z.locale).showHelpOnFail(z.showHelpOnFail).demandCommand(0,"").recommendCommands().strict(z.strict).parserConfiguration({"populate--":!0}).options($).middleware([_,R,D]).command(S).command(y).command(V).command(b).command(k).command(x).command(O).command(A).command(P).completion("completion",!1).help("help","Show help").alias("help","h").alias("version","V").fail((K,Z,L)=>{if(Z){if(console.error("An error occurred:"),console.error(Z.message),u&&Z.stack)console.error(`
3
3
  Stack trace:`),console.error(Z.stack);else console.error(`
4
4
  Run with --debug to show the stack trace.`);process.exit(1)}if(K)console.error("Error: Invalid arguments:"),console.error(K),console.error(`
5
- Hint: Did you mean:`),L.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let Z=K._.slice(1),L=Z.length>0?Z.join(" "):void 0,h=import("./chunk-kvk1bbqj.js").then(({checkVersionOnStartup:C})=>C()),[{render:w},{createElement:f},{AppWrapper:j}]=await Promise.all([import("ink"),import("react"),import("./chunk-bvzzq0jb.js")]),H={...K,initialMessage:L,debug:K.debug,print:Boolean(K.print),versionCheckPromise:h};delete H._,delete H.$0,delete H.message,w(f(j,H),{patchConsole:!0,exitOnCtrlC:!1,alternateBuffer:!1})});try{await A.parse()}catch(K){console.error("Error: Parse error:",K),process.exit(1)}}if(J.main==J.module)t().catch(console.error);export{t as main};
5
+ Hint: Did you mean:`),L.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let Z=K._.slice(1),L=Z.length>0?Z.join(" "):void 0,f=import("./chunk-6gnerzt5.js").then(({checkVersionOnStartup:v})=>v()),[{render:w},{createElement:j},{AppWrapper:C}]=await Promise.all([import("ink"),import("react"),import("./chunk-kpmaxt15.js")]),H={...K,initialMessage:L,debug:K.debug,print:Boolean(K.print),versionCheckPromise:f};delete H._,delete H.$0,delete H.message,w(j(C,H),{patchConsole:!0,exitOnCtrlC:!1,alternateBuffer:!1})});try{await h.parse()}catch(K){console.error("Error: Parse error:",K),process.exit(1)}}if(J.main==J.module)l().catch(console.error);export{l as main};