blade-code 0.10.86 → 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 (97) 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-6n63ev2e.js → chunk-07hn8br0.js} +38 -38
  5. package/dist/{chunk-cdx9tebt.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-mp90dsxs.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-yq5vm0hf.js → chunk-37x3xyqk.js} +2 -2
  13. package/dist/{chunk-g9xjcfrf.js → chunk-3aejg2jy.js} +1 -1
  14. package/dist/{chunk-zpryec89.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-z21es9vg.js → chunk-51rayzy2.js} +3 -3
  18. package/dist/chunk-6gnerzt5.js +1 -0
  19. package/dist/{chunk-bwt1djsp.js → chunk-78cjfm2t.js} +2 -2
  20. package/dist/{chunk-9vmxd900.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-hazs43pe.js → chunk-8wp4px6b.js} +1 -1
  26. package/dist/chunk-943vkrwc.js +2 -0
  27. package/dist/{chunk-b8p2mwq9.js → chunk-9ap72kq4.js} +2 -2
  28. package/dist/chunk-9fxvqbve.js +1 -0
  29. package/dist/{chunk-b1mh28yd.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-0nb8999e.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-wktx761x.js → chunk-dp72xx4j.js} +2 -2
  40. package/dist/{chunk-deeh2eq1.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-x89n28mq.js → chunk-k1t91vp3.js} +2 -2
  46. package/dist/chunk-kbgsbq7k.js +1 -0
  47. package/dist/{chunk-90b512gm.js → chunk-kpmaxt15.js} +1 -1
  48. package/dist/{chunk-p3jvzk1f.js → chunk-kvw91990.js} +2 -2
  49. package/dist/{chunk-t5d4p0gc.js → chunk-kz40nxhm.js} +2 -2
  50. package/dist/{chunk-gzjt969t.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-zg8g2jcr.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-00xsfm2j.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-2dq84j8s.js → chunk-w2tcjj0w.js} +1 -1
  69. package/dist/chunk-wattrxqd.js +1 -0
  70. package/dist/{chunk-bthb5c55.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/package.json +2 -2
  78. package/dist/chunk-2ps02f7j.js +0 -1
  79. package/dist/chunk-4y34e9ty.js +0 -1
  80. package/dist/chunk-7jp7e0zj.js +0 -1
  81. package/dist/chunk-9erhm3gg.js +0 -8
  82. package/dist/chunk-9zm7v41x.js +0 -1
  83. package/dist/chunk-gd2sw9zm.js +0 -2
  84. package/dist/chunk-gk79etn6.js +0 -118
  85. package/dist/chunk-hg8d4vhj.js +0 -2
  86. package/dist/chunk-hm92k82b.js +0 -1
  87. package/dist/chunk-hxgzj76t.js +0 -1
  88. package/dist/chunk-j2s2g9ep.js +0 -1
  89. package/dist/chunk-k6m9wmsq.js +0 -1
  90. package/dist/chunk-tap68662.js +0 -1
  91. package/dist/chunk-vt654hsf.js +0 -10
  92. package/dist/chunk-w2sb1hy9.js +0 -1
  93. package/dist/chunk-x2rraka3.js +0 -1
  94. package/dist/chunk-x564avfw.js +0 -1
  95. package/dist/chunk-xj65p2sn.js +0 -1
  96. package/dist/chunk-xwtx2vng.js +0 -1
  97. package/dist/chunk-zpbbcdme.js +0 -1673
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-x89n28mq.js";import{Fd as F,Gd as M}from"./chunk-skg520wq.js";import"./chunk-bthb5c55.js";import"./chunk-v508x7cg.js";import"./chunk-g9xjcfrf.js";import"./chunk-z21es9vg.js";import"./chunk-272swnyr.js";import"./chunk-zpryec89.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-p3jvzk1f.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-k6m9wmsq.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-4y34e9ty.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-mp90dsxs.js");if(await K())return}if(W(),q(E,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-hazs43pe.js");if(await K())return}if(E.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-b1mh28yd.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-x564avfw.js"),import("./chunk-j2s2g9ep.js"),import("./chunk-wktx761x.js"),import("./chunk-jf4bxxyf.js"),import("./chunk-cdx9tebt.js"),import("./chunk-jndq361v.js"),import("./chunk-e1ry8aj5.js"),import("./chunk-9zm7v41x.js"),import("./chunk-0nb8999e.js"),import("./chunk-vt654hsf.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-hm92k82b.js").then(({checkVersionOnStartup:C})=>C()),[{render:w},{createElement:f},{AppWrapper:j}]=await Promise.all([import("ink"),import("react"),import("./chunk-90b512gm.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};