blade-code 0.10.63 → 0.10.65

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 (106) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-kxrss9sv.js → chunk-015t2dey.js} +1 -1
  3. package/dist/chunk-0h74p1h8.js +1 -0
  4. package/dist/chunk-18nkg8hr.js +1 -0
  5. package/dist/chunk-197qz36b.js +1 -0
  6. package/dist/{chunk-khkhsaan.js → chunk-1jm8njkw.js} +1 -1
  7. package/dist/{chunk-y8r2knxm.js → chunk-1vt7e9e7.js} +2 -2
  8. package/dist/chunk-2vdq0fav.js +1 -0
  9. package/dist/{chunk-87jz5600.js → chunk-2yxdneb9.js} +1 -1
  10. package/dist/chunk-4a75gwa1.js +1 -0
  11. package/dist/{chunk-rwy763tf.js → chunk-4t89y8nj.js} +1 -1
  12. package/dist/{chunk-jk8bqc5b.js → chunk-53tb8vvv.js} +2 -2
  13. package/dist/{chunk-6x1g554w.js → chunk-57gp2px5.js} +1 -1
  14. package/dist/{chunk-3tednchw.js → chunk-5gjqdbxb.js} +2 -2
  15. package/dist/{chunk-69rc9hw6.js → chunk-5ha0vf37.js} +1 -1
  16. package/dist/{chunk-w4sp56dn.js → chunk-5ntrhs8k.js} +1 -1
  17. package/dist/{chunk-6rg6mngq.js → chunk-5qaacj3x.js} +1 -1
  18. package/dist/{chunk-cz68x56m.js → chunk-6tacv9rs.js} +2 -2
  19. package/dist/chunk-76ks3ygm.js +10 -0
  20. package/dist/{chunk-ej6h16ae.js → chunk-793067rd.js} +2 -2
  21. package/dist/{chunk-7b467h8k.js → chunk-7mdbwjxj.js} +1 -1
  22. package/dist/chunk-8wvk5rgg.js +1 -0
  23. package/dist/{chunk-xsx1av03.js → chunk-98qmtexa.js} +34 -34
  24. package/dist/{chunk-cr154zrx.js → chunk-98vestg4.js} +1 -1
  25. package/dist/{chunk-cq77ah56.js → chunk-9ebwtazz.js} +1 -1
  26. package/dist/{chunk-94d8hhqc.js → chunk-9yvw5xy3.js} +2 -2
  27. package/dist/{chunk-6g3qzz9h.js → chunk-a1m7wr7r.js} +1 -1
  28. package/dist/chunk-a49dy92d.js +140 -0
  29. package/dist/{chunk-cm9mph7j.js → chunk-aphcj8rz.js} +1 -1
  30. package/dist/{chunk-av10vmxk.js → chunk-arzhhj0e.js} +1 -1
  31. package/dist/chunk-b7p7ywe6.js +1 -0
  32. package/dist/{chunk-2xbmkyb2.js → chunk-bnp9asmd.js} +1 -1
  33. package/dist/{chunk-b19f55s7.js → chunk-ca5mm1gk.js} +1 -1
  34. package/dist/chunk-cxc2q3yy.js +1 -0
  35. package/dist/{chunk-wy4pn9sk.js → chunk-czb954vz.js} +1 -1
  36. package/dist/{chunk-kjvntyr5.js → chunk-d39xaa7w.js} +1 -1
  37. package/dist/{chunk-atqnan6x.js → chunk-e11kmyt3.js} +1 -1
  38. package/dist/{chunk-9r0yebs1.js → chunk-edd8n5r0.js} +1 -1
  39. package/dist/{chunk-2z3xe3rw.js → chunk-eg5mh9m9.js} +1 -1
  40. package/dist/{chunk-1jc7d3nt.js → chunk-eharmsjt.js} +2 -2
  41. package/dist/{chunk-9rjaem5f.js → chunk-ejsggxs4.js} +2 -2
  42. package/dist/chunk-fv3aggr5.js +1 -0
  43. package/dist/chunk-fz60jh3y.js +2 -0
  44. package/dist/{chunk-fp1h8wdh.js → chunk-gafk33py.js} +1 -1
  45. package/dist/{chunk-0jxh2zq5.js → chunk-h127mgg2.js} +2 -2
  46. package/dist/{chunk-detkh4dd.js → chunk-hbbpe5f0.js} +1 -1
  47. package/dist/{chunk-0ft3egjr.js → chunk-j6w1vf2q.js} +2 -2
  48. package/dist/{chunk-d1t91jgz.js → chunk-k4t45b64.js} +1 -1
  49. package/dist/{chunk-95hvy6dn.js → chunk-ka2kn5bs.js} +2 -2
  50. package/dist/chunk-ky32s7az.js +2 -0
  51. package/dist/chunk-m19xed90.js +1 -0
  52. package/dist/chunk-m6a1c1tg.js +8 -0
  53. package/dist/chunk-mr5c4yzr.js +1 -0
  54. package/dist/{chunk-8ekk8pa7.js → chunk-ngmajm4h.js} +1 -1
  55. package/dist/{chunk-8b1ehxzh.js → chunk-pfmmvpfh.js} +3 -3
  56. package/dist/chunk-pr8a6xfm.js +1 -0
  57. package/dist/chunk-pwehsv52.js +159 -0
  58. package/dist/{chunk-eeac8teg.js → chunk-r94jtbd2.js} +1 -1
  59. package/dist/{chunk-ng0tkmrn.js → chunk-rabt8yyf.js} +2 -2
  60. package/dist/{chunk-j8akkmc8.js → chunk-rd7jwwse.js} +1 -1
  61. package/dist/{chunk-1hb0rt7n.js → chunk-s16x4qkb.js} +1 -1
  62. package/dist/{chunk-83wm4akj.js → chunk-s1xp6g8m.js} +1 -1
  63. package/dist/{chunk-hpehkz2x.js → chunk-sbpb7pcc.js} +2 -2
  64. package/dist/{chunk-2xsrqsk9.js → chunk-svczh6hn.js} +2 -2
  65. package/dist/chunk-tb4jmrkp.js +2 -0
  66. package/dist/chunk-w4eskwzj.js +1 -0
  67. package/dist/{chunk-fp2fh7cn.js → chunk-wzkr0p09.js} +2 -2
  68. package/dist/{chunk-j9snkjpe.js → chunk-y51v2jvh.js} +2 -2
  69. package/dist/chunk-y8zk4r3y.js +1 -0
  70. package/dist/{chunk-k4ermznt.js → chunk-yrtmkb4a.js} +1 -1
  71. package/dist/{chunk-pdrqnywp.js → chunk-z228cmc5.js} +1 -1
  72. package/dist/{chunk-6fdvffcc.js → chunk-zpwasxzh.js} +2 -2
  73. package/dist/chunk-zxwdtn6q.js +112 -0
  74. package/dist/web/assets/{ChatView-B6IO9U-D.js → ChatView-Jfq-sqKG.js} +2 -2
  75. package/dist/web/assets/{CodeBlockHighlighter-DVGtFQgX.js → CodeBlockHighlighter-C9DvlG-V.js} +1 -1
  76. package/dist/web/assets/{FilePreview-C-8_o7yw.js → FilePreview-YPtQcXr3.js} +1 -1
  77. package/dist/web/assets/{MarkdownRenderer-D04IKQhF.js → MarkdownRenderer-CpUKw2Gk.js} +3 -3
  78. package/dist/web/assets/{SettingsModal-BMoZLVEe.js → SettingsModal-BfDHa4xn.js} +1 -1
  79. package/dist/web/assets/{TaskSwitcher-CIuCEbvU.js → TaskSwitcher-DacXxQcV.js} +1 -1
  80. package/dist/web/assets/{TerminalPanel-fTk9D5hU.js → TerminalPanel-CDq3_gCr.js} +1 -1
  81. package/dist/web/assets/index-t4mGaG1Z.js +11 -0
  82. package/dist/web/index.html +1 -1
  83. package/package.json +1 -1
  84. package/dist/chunk-0d1197b9.js +0 -1
  85. package/dist/chunk-2yws8pqt.js +0 -1
  86. package/dist/chunk-5sk6v1et.js +0 -10
  87. package/dist/chunk-86gc2mqb.js +0 -1
  88. package/dist/chunk-8an49nbn.js +0 -204
  89. package/dist/chunk-9c31jemm.js +0 -1
  90. package/dist/chunk-9kmtcgm6.js +0 -2
  91. package/dist/chunk-adz2756v.js +0 -111
  92. package/dist/chunk-cx05we7e.js +0 -1
  93. package/dist/chunk-dpzx4mgb.js +0 -1
  94. package/dist/chunk-dq9ya06q.js +0 -1
  95. package/dist/chunk-g0n88mhg.js +0 -1
  96. package/dist/chunk-m0t7g2vg.js +0 -1
  97. package/dist/chunk-nnbfk60b.js +0 -1
  98. package/dist/chunk-nnc1abkf.js +0 -1
  99. package/dist/chunk-q7pznpyh.js +0 -1
  100. package/dist/chunk-qs4erqd0.js +0 -2
  101. package/dist/chunk-tf4p1778.js +0 -1
  102. package/dist/chunk-ttkwrqtp.js +0 -2
  103. package/dist/chunk-vhckw5e7.js +0 -1
  104. package/dist/chunk-wwsg165p.js +0 -116
  105. package/dist/chunk-yagna3ws.js +0 -8
  106. package/dist/web/assets/index-CO5sUiJn.js +0 -11
package/dist/blade.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{fd as W}from"./chunk-9rjaem5f.js";import{id as F,jd as M}from"./chunk-3tednchw.js";import"./chunk-fp2fh7cn.js";import"./chunk-v508x7cg.js";import"./chunk-wy4pn9sk.js";import"./chunk-8b1ehxzh.js";import"./chunk-87jz5600.js";import"./chunk-2xsrqsk9.js";import"./chunk-khkhsaan.js";import"./chunk-7b467h8k.js";import"./chunk-9kmtcgm6.js";import{jg as N,kg as B}from"./chunk-kjvntyr5.js";import"./chunk-8ekk8pa7.js";import{Kg as T}from"./chunk-y8r2knxm.js";import"./chunk-1jc7d3nt.js";import"./chunk-fp1h8wdh.js";import"./chunk-6fdvffcc.js";import"./chunk-ej6h16ae.js";import"./chunk-cm9mph7j.js";import"./chunk-cz68x56m.js";import{ph as J}from"./chunk-av10vmxk.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-nnbfk60b.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-q7pznpyh.js");K(U.map((Z)=>v.resolve(Q,Z)))}if(q(E,"--trust-workspace","--trustWorkspace")){let{WorkspaceTrustService:K}=await import("./chunk-0d1197b9.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-cq77ah56.js");if(await K())return}if(W(),q(E,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-j8akkmc8.js");if(await K())return}if(E.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-cr154zrx.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-m0t7g2vg.js"),import("./chunk-cx05we7e.js"),import("./chunk-94d8hhqc.js"),import("./chunk-6g3qzz9h.js"),import("./chunk-pdrqnywp.js"),import("./chunk-6rg6mngq.js"),import("./chunk-b19f55s7.js"),import("./chunk-dq9ya06q.js"),import("./chunk-w4sp56dn.js"),import("./chunk-5sk6v1et.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{pd as W}from"./chunk-ejsggxs4.js";import{sd as F,td as M}from"./chunk-5gjqdbxb.js";import"./chunk-wzkr0p09.js";import"./chunk-v508x7cg.js";import"./chunk-czb954vz.js";import"./chunk-pfmmvpfh.js";import"./chunk-2yxdneb9.js";import"./chunk-svczh6hn.js";import"./chunk-1jm8njkw.js";import"./chunk-7mdbwjxj.js";import"./chunk-fz60jh3y.js";import{tg as N,ug as B}from"./chunk-d39xaa7w.js";import"./chunk-ngmajm4h.js";import{Ug as T}from"./chunk-1vt7e9e7.js";import"./chunk-eharmsjt.js";import"./chunk-gafk33py.js";import"./chunk-zpwasxzh.js";import"./chunk-793067rd.js";import"./chunk-aphcj8rz.js";import"./chunk-6tacv9rs.js";import{zh as J}from"./chunk-arzhhj0e.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-fv3aggr5.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-18nkg8hr.js");K(U.map((Z)=>v.resolve(Q,Z)))}if(q(E,"--trust-workspace","--trustWorkspace")){let{WorkspaceTrustService:K}=await import("./chunk-4a75gwa1.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-9ebwtazz.js");if(await K())return}if(W(),q(E,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-rd7jwwse.js");if(await K())return}if(E.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-98vestg4.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-cxc2q3yy.js"),import("./chunk-mr5c4yzr.js"),import("./chunk-9yvw5xy3.js"),import("./chunk-a1m7wr7r.js"),import("./chunk-z228cmc5.js"),import("./chunk-5qaacj3x.js"),import("./chunk-ca5mm1gk.js"),import("./chunk-8wvk5rgg.js"),import("./chunk-5ntrhs8k.js"),import("./chunk-76ks3ygm.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(`
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-vhckw5e7.js").then(({checkVersionOnStartup:C})=>C()),[{render:w},{createElement:f},{AppWrapper:j}]=await Promise.all([import("ink"),import("react"),import("./chunk-rwy763tf.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,h=import("./chunk-pr8a6xfm.js").then(({checkVersionOnStartup:C})=>C()),[{render:w},{createElement:f},{AppWrapper:j}]=await Promise.all([import("ink"),import("react"),import("./chunk-4t89y8nj.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};
@@ -1,4 +1,4 @@
1
- import{ja as F,la as L}from"./chunk-xsx1av03.js";import{Cc as Q,sc as $,uc as B}from"./chunk-adz2756v.js";import{xe as y}from"./chunk-0ft3egjr.js";import{kg as V}from"./chunk-kjvntyr5.js";async function j(){await y(V())}async function I(b){let q=b.message||b._?.[0];if(typeof q==="string"&&q.trim())return q;let z=b.stdin??process.stdin;if(!z.isTTY){let G=[];for await(let K of z)G.push(K);return Buffer.concat(G).toString("utf-8").trim()}if(b.defaultMessage!==void 0)return b.defaultMessage;throw Error("No input provided")}async function M(b){let q=b.message||b._?.[0];if(typeof q==="string"&&q.trim())return q;let z=b.stdin??process.stdin;if(z.isTTY)return;let G=[];for await(let Z of z)G.push(Buffer.isBuffer(Z)?Z:Buffer.from(Z));return Buffer.concat(G).toString("utf-8").trim()||void 0}async function R(b){if(!F(b))return{mode:"agent",content:b};let q=await L(b,{cwd:V(),surface:"headless",workspaceRoot:V()});if(!q.success)return{mode:"output",content:`Error: ${q.error||"未知错误"}`,exitCode:1};let z=q.data;if(z?.action==="invoke_skill"){let{skillName:G,skillArgs:K}=z;return{mode:"agent",content:K?`Please use the "${G}" skill to help me with: ${K}`:`Please use the "${G}" skill.`}}if(z?.action==="invoke_custom_command"||z?.action==="invoke_plugin_command"){let G=z.processedContent;return{mode:"agent",content:`# Custom Command: /${z.commandName}
1
+ import{ja as F,la as L}from"./chunk-98qmtexa.js";import{Bc as $,Dc as B,Lc as Q}from"./chunk-zxwdtn6q.js";import{He as y}from"./chunk-j6w1vf2q.js";import{ug as V}from"./chunk-d39xaa7w.js";async function j(){await y(V())}async function I(b){let q=b.message||b._?.[0];if(typeof q==="string"&&q.trim())return q;let z=b.stdin??process.stdin;if(!z.isTTY){let G=[];for await(let K of z)G.push(K);return Buffer.concat(G).toString("utf-8").trim()}if(b.defaultMessage!==void 0)return b.defaultMessage;throw Error("No input provided")}async function M(b){let q=b.message||b._?.[0];if(typeof q==="string"&&q.trim())return q;let z=b.stdin??process.stdin;if(z.isTTY)return;let G=[];for await(let Z of z)G.push(Buffer.isBuffer(Z)?Z:Buffer.from(Z));return Buffer.concat(G).toString("utf-8").trim()||void 0}async function R(b){if(!F(b))return{mode:"agent",content:b};let q=await L(b,{cwd:V(),surface:"headless",workspaceRoot:V()});if(!q.success)return{mode:"output",content:`Error: ${q.error||"未知错误"}`,exitCode:1};let z=q.data;if(z?.action==="invoke_skill"){let{skillName:G,skillArgs:K}=z;return{mode:"agent",content:K?`Please use the "${G}" skill to help me with: ${K}`:`Please use the "${G}" skill.`}}if(z?.action==="invoke_custom_command"||z?.action==="invoke_plugin_command"){let G=z.processedContent;return{mode:"agent",content:`# Custom Command: /${z.commandName}
2
2
 
3
3
  ${G}`}}return{mode:"output",content:q.content||q.message||"",exitCode:0}}import{readFile as D,stat as H}from"node:fs/promises";import J from"node:path";function x(b,q){let z;try{z=JSON.parse(b)}catch(G){throw Error(`Invalid JSON output schema from ${q}`,{cause:G})}return B(z).schema}async function _(b){if(b.jsonSchema!==void 0&&b.outputSchema!==void 0)throw Error("--json-schema cannot be combined with --output-schema");if(b.jsonSchema!==void 0)return x(b.jsonSchema,"--json-schema");if(b.outputSchema===void 0)return;let q=J.resolve(b.outputSchema),z=await H(q);if(!z.isFile())throw Error(`Output schema path is not a regular file: ${q}`);if(z.size>$)throw Error(`Output schema exceeds ${$} bytes: ${q}`);return x(await D(q,"utf8"),q)}function N(b){if(!(b instanceof Error))return!1;return b.message.includes("未找到会话")||b.message.includes("ENOENT")||b.message.includes("no such file")}async function W(b){try{return await Q.loadSessionModelContext(b,V())}catch(q){if(N(q))return null;throw q}}async function C(b){if(b.resume===!0||b.resume==="true")throw Error("--resume without a session ID is only supported in interactive UI mode");if(typeof b.resume==="string"&&b.resume.length>0){if(b.forkSession){let G=V(),K=await Q.forkSession(b.resume,{newSessionId:b.sessionId,sourceProjectPath:G,targetProjectPath:G});return{...K,messages:await Q.loadSessionModelContext(K.sessionId,G)}}let[q,z]=await Promise.all([Q.loadSessionModelContext(b.resume),Q.findSessionMetadata(b.resume)]);return{sessionId:b.resume,messages:q,metadata:z}}if(b.continue){let q=b.forkSession?await Q.listSessions({cwd:V()}):await Q.listSessions();if(q.length>0){let z=q[0].sessionId;if(b.forkSession){let G=V(),K=await Q.forkSession(z,{newSessionId:b.sessionId,sourceProjectPath:G,targetProjectPath:G});return{...K,messages:await Q.loadSessionModelContext(K.sessionId,G)}}return{sessionId:z,messages:await Q.loadSessionModelContext(z),metadata:q[0]}}if(b.forkSession)throw Error("Cannot fork: no sessions are available to continue")}if(b.sessionId){let q=await W(b.sessionId);return{sessionId:b.sessionId,messages:q??[],...q?{metadata:await Q.findSessionMetadata(b.sessionId,V())}:{}}}return{sessionId:`${b.fallbackSessionPrefix}-${Date.now()}`,messages:[]}}
4
4
  export{j as m,I as n,M as o,R as p,_ as q,C as r};
@@ -0,0 +1 @@
1
+ import{de as a,ee as b,fe as c}from"./chunk-y51v2jvh.js";import"./chunk-5ha0vf37.js";import"./chunk-eharmsjt.js";import"./chunk-gafk33py.js";import"./chunk-6tacv9rs.js";import"./chunk-arzhhj0e.js";export{b as resolveModelConfig,c as getModelDisplayName,a as getModelApiKeyEnvironmentVariable};
@@ -0,0 +1 @@
1
+ import{Ce as a,De as b,Ee as c,Fe as d,Ge as e,He as f,Ie as g,Je as h,Ke as i,Le as j}from"./chunk-j6w1vf2q.js";import"./chunk-k4t45b64.js";import"./chunk-hbbpe5f0.js";import"./chunk-bnp9asmd.js";import"./chunk-pfmmvpfh.js";import"./chunk-2yxdneb9.js";import"./chunk-svczh6hn.js";import"./chunk-1jm8njkw.js";import"./chunk-7mdbwjxj.js";import"./chunk-fz60jh3y.js";import"./chunk-d39xaa7w.js";import"./chunk-ngmajm4h.js";import"./chunk-1vt7e9e7.js";import"./chunk-eharmsjt.js";import"./chunk-gafk33py.js";import"./chunk-zpwasxzh.js";import"./chunk-793067rd.js";import"./chunk-aphcj8rz.js";import"./chunk-6tacv9rs.js";import"./chunk-arzhhj0e.js";export{g as withWorkspaceAgentResources,i as snapshotWorkspaceAgentResources,f as resolveWorkspaceAgentResources,j as resetWorkspaceAgentResources,d as refreshWorkspaceCommunicationStyles,h as getWorkspaceAgentResourceCacheStats,e as configureInvocationPluginDirs,c as WorkspaceAgentResourceCapacityError,a as MAX_RESIDENT_WORKSPACE_AGENT_RESOURCES,b as MAX_ACTIVE_WORKSPACE_AGENT_RESOURCES};
@@ -0,0 +1 @@
1
+ import{Fc as a,Gc as b,Hc as c,Ic as d,Jc as e,Kc as f,Lc as g}from"./chunk-zxwdtn6q.js";import"./chunk-eg5mh9m9.js";import"./chunk-a49dy92d.js";import"./chunk-5ha0vf37.js";import"./chunk-hbbpe5f0.js";import"./chunk-2yxdneb9.js";import"./chunk-fz60jh3y.js";import"./chunk-d39xaa7w.js";import"./chunk-1vt7e9e7.js";import"./chunk-gafk33py.js";import"./chunk-zpwasxzh.js";import"./chunk-6tacv9rs.js";import"./chunk-arzhhj0e.js";export{b as __setSessionSnapshotIOForTesting,c as __resetSessionSnapshotIOForTesting,g as SessionService,d as SessionMissingCreationError,e as SessionArchivedError,f as SessionArchiveConflictError,a as STALE_EMPTY_SESSION_AGE_MS};
@@ -1,2 +1,2 @@
1
1
  var F;((D)=>{D.DEFAULT="default";D.AUTO_EDIT="autoEdit";D.YOLO="yolo";D.PLAN="plan"})(F||={});import{Mutex as G}from"async-mutex";class H{entries=new Map;async runExclusive(C,E){let B=this.entries.get(C);if(!B)B={mutex:new G,operations:0},this.entries.set(C,B);B.operations++;try{return await B.mutex.runExclusive(E)}finally{if(B.operations--,B.operations===0&&this.entries.get(C)===B)this.entries.delete(C)}}getStats(){let C=0;for(let E of this.entries.values())C+=E.operations;return{keys:this.entries.size,operations:C}}}
2
- export{F as Yf,H as Zf};
2
+ export{F as gg,H as hg};
@@ -1,3 +1,3 @@
1
- import{nh as j}from"./chunk-cz68x56m.js";import{appendFileSync as E,existsSync as O,mkdirSync as R,readdirSync as U,statSync as B,unlinkSync as k}from"node:fs";import W from"node:path";var X;((H)=>{H[H.DEBUG=0]="DEBUG";H[H.INFO=1]="INFO";H[H.WARN=2]="WARN";H[H.ERROR=3]="ERROR"})(X||={});var T=null,_=null,$=!1;function m(q){if(T!==q)T=q}async function I(){}function w(){if($)return _;$=!0;try{let q=W.join(j(),"logs");if(!O(q))R(q,{recursive:!0,mode:493});if(B(q).uid===0&&process.getuid&&process.getuid()!==0)return console.error(""),console.error("[FAIL] 权限错误:~/.blade/logs 目录属于 root 用户"),console.error(""),console.error("这通常是因为您曾经使用 sudo 运行过 blade。"),console.error(""),console.error("解决方法:"),console.error(" sudo chown -R $USER:$USER ~/.blade/"),console.error(""),console.error("然后重新运行 blade(不要使用 sudo)"),console.error(""),null;return z(q,30),_=q,q}catch(q){return console.error("[Logger] 无法创建日志目录:",q),null}}function z(q,G){try{let J=U(q),K=Date.now(),H=G*24*60*60*1000;for(let Q of J){if(!Q.startsWith("blade-")||!Q.endsWith(".log")&&!Q.endsWith(".jsonl"))continue;let Y=W.join(q,Q);try{let Z=B(Y);if(K-Z.mtimeMs>H)k(Y)}catch(Z){}}}catch(J){}}function F(){let q=w();if(!q)return null;let G=T||"default";return W.join(q,`blade-${G}.jsonl`)}function A(q,G,J){let K=F();if(!K)return;try{let H={timestamp:new Date().toISOString(),level:X[G],category:q,message:J};E(K,JSON.stringify(H)+`
1
+ import{xh as j}from"./chunk-6tacv9rs.js";import{appendFileSync as E,existsSync as O,mkdirSync as R,readdirSync as U,statSync as B,unlinkSync as k}from"node:fs";import W from"node:path";var X;((H)=>{H[H.DEBUG=0]="DEBUG";H[H.INFO=1]="INFO";H[H.WARN=2]="WARN";H[H.ERROR=3]="ERROR"})(X||={});var T=null,_=null,$=!1;function m(q){if(T!==q)T=q}async function I(){}function w(){if($)return _;$=!0;try{let q=W.join(j(),"logs");if(!O(q))R(q,{recursive:!0,mode:493});if(B(q).uid===0&&process.getuid&&process.getuid()!==0)return console.error(""),console.error("[FAIL] 权限错误:~/.blade/logs 目录属于 root 用户"),console.error(""),console.error("这通常是因为您曾经使用 sudo 运行过 blade。"),console.error(""),console.error("解决方法:"),console.error(" sudo chown -R $USER:$USER ~/.blade/"),console.error(""),console.error("然后重新运行 blade(不要使用 sudo)"),console.error(""),null;return z(q,30),_=q,q}catch(q){return console.error("[Logger] 无法创建日志目录:",q),null}}function z(q,G){try{let J=U(q),K=Date.now(),H=G*24*60*60*1000;for(let Q of J){if(!Q.startsWith("blade-")||!Q.endsWith(".log")&&!Q.endsWith(".jsonl"))continue;let Y=W.join(q,Q);try{let Z=B(Y);if(K-Z.mtimeMs>H)k(Y)}catch(Z){}}}catch(J){}}function F(){let q=w();if(!q)return null;let G=T||"default";return W.join(q,`blade-${G}.jsonl`)}function A(q,G,J){let K=F();if(!K)return;try{let H={timestamp:new Date().toISOString(),level:X[G],category:q,message:J};E(K,JSON.stringify(H)+`
2
2
  `)}catch(H){}}class M{static globalDebugConfig=null;enabled;minLevel;category;constructor(q={}){if(q.enabled!==void 0)this.enabled=q.enabled;else if(M.globalDebugConfig!==null)this.enabled=Boolean(M.globalDebugConfig);else this.enabled=!1;this.minLevel=q.minLevel??0,this.category=q.category??"General"}static setGlobalDebug(q){M.globalDebugConfig=q}static clearGlobalDebug(){M.globalDebugConfig=null}setEnabled(q){this.enabled=q}parseDebugFilter(q){if(!q)return{enabled:!1};if(q===!0||q==="true"||q==="1")return{enabled:!0};let G=String(q).trim();if(!G)return{enabled:!0};if(G.startsWith("!"))return{enabled:!0,filter:{mode:"exclude",categories:G.split(",").map((H)=>H.trim().replace(/^!/,"")).filter(Boolean)}};return{enabled:!0,filter:{mode:"include",categories:G.split(",").map((K)=>K.trim()).filter(Boolean)}}}shouldLogCategory(q){if(!q)return!0;let G=this.category.toLowerCase();if(q.mode==="include")return q.categories.some((J)=>G.includes(J.toLowerCase()));return!q.categories.some((J)=>G.includes(J.toLowerCase()))}shouldLogToConsole(q){if(M.globalDebugConfig!==null){let{enabled:G,filter:J}=this.parseDebugFilter(M.globalDebugConfig);if(!G)return!1;if(q<this.minLevel)return!1;return this.shouldLogCategory(J)}return this.enabled&&q>=this.minLevel}log(q,...G){let J=G.map((K)=>typeof K==="object"?JSON.stringify(K):String(K)).join(" ");if(A(this.category,q,J),this.shouldLogToConsole(q)){let K=X[q],H=`[${this.category}] [${K}]`;console.error(H,...G)}}debug(...q){this.log(0,...q)}info(...q){this.log(1,...q)}warn(...q){this.log(2,...q)}error(...q){this.log(3,...q)}}function V(q,G){return new M({...G,category:q})}var h=new M({category:"General"});
3
- export{m as Ig,I as Jg,M as Kg,V as Lg,h as Mg};
3
+ export{m as Sg,I as Tg,M as Ug,V as Vg,h as Wg};
@@ -0,0 +1 @@
1
+ import{$c as a,ad as b,bd as c,cd as d,dd as e,ed as f,fd as g,gd as h}from"./chunk-a49dy92d.js";import"./chunk-1vt7e9e7.js";import"./chunk-6tacv9rs.js";import"./chunk-arzhhj0e.js";export{d as syncSession,e as syncAll,h as searchProjectionText,c as resetProjectionDbCache,f as removeSessionFromProjection,g as rebuildProjectionIndex,b as getProjectionDb,a as getIndexDbPath};
@@ -1,2 +1,2 @@
1
1
  import{spawn as I}from"node:child_process";var X=500;function x(j){return new Promise((q)=>setTimeout(q,j))}function Z(j){return j&&typeof j==="object"&&"code"in j?String(j.code):void 0}function L(j){return j()||j()}function G(j,q=process.platform,y=process.kill.bind(process)){if(q==="win32"||!Number.isInteger(j)||j<=1||j===process.pid)return!1;try{return y(-j,0),!0}catch(z){let B=Z(z);if(B==="ESRCH")return!1;if(B==="EPERM")return!0;throw z}}function N(j,q){return new Promise((y)=>{let z=["/PID",String(j),"/T"];if(q)z.push("/F");let B=I("taskkill",z,{stdio:"ignore",windowsHide:!0}),K=!1,J=(H)=>{if(K)return;K=!0,y(H)};B.once("error",()=>J(!1)),B.once("close",(H)=>J(H===0))})}async function F(j,q={}){if(!Number.isInteger(j)||j<=1||j===process.pid)return{success:!1,alreadyExited:!1,forced:!1};let y=q.platform??process.platform,z=q.gracePeriodMs??X,B=q.killProcess??process.kill.bind(process),K=q.taskkill??N,J=q.wait??x,H=q.validatePidOwnership??(()=>!0);if(!L(H))return{success:!1,alreadyExited:!1,forced:!1};if(y==="win32"){let V=await K(j,!1);if(await J(z),!H())return{success:V,alreadyExited:!1,forced:!1};let Y=await K(j,!0);return{success:V||Y,alreadyExited:!V&&!Y,forced:Y}}let Q=(V,Y)=>{try{return B(V,Y)}catch(D){return Z(D)==="ESRCH"}},W=Q(-j,"SIGTERM")||Q(j,"SIGTERM");if(await J(z),!H())return{success:W,alreadyExited:!1,forced:!1};let $=Q(-j,"SIGKILL")||Q(j,"SIGKILL");return{success:W||$,alreadyExited:!1,forced:$}}async function R(j,q={}){if(!Number.isInteger(j)||j<=1||j===process.pid)return{success:!1,alreadyExited:!1,forced:!1};if((q.platform??process.platform)==="win32")return{success:!1,alreadyExited:!1,forced:!1};let z=q.gracePeriodMs??X,B=q.killProcess??process.kill.bind(process),K=q.wait??x,J=q.validatePidOwnership??(()=>!0);if(!J())return{success:!1,alreadyExited:!1,forced:!1};let H=($)=>{try{return B(-j,$),"sent"}catch(V){return Z(V)==="ESRCH"?"missing":"failed"}},Q=H("SIGTERM");if(Q==="missing")return{success:!0,alreadyExited:!0,forced:!1};if(Q==="failed")return{success:!1,alreadyExited:!1,forced:!1};if(await K(z),!J())return{success:!1,alreadyExited:!1,forced:!1};let W=H("SIGKILL");return{success:W!=="failed",alreadyExited:W==="missing",forced:W==="sent"}}class b{child;state="owned";terminationPromise;terminationResult;platform;gracePeriodMs;killProcess;taskkill;wait;constructor(j,q={}){this.child=j;if(this.platform=q.platform??process.platform,this.gracePeriodMs=q.gracePeriodMs??X,this.killProcess=q.killProcess??process.kill.bind(process),this.taskkill=q.taskkill??N,this.wait=q.wait??x,q.releaseOnExit!==!1){let y=()=>{if(this.state==="owned")this.state="released"};j.once("close",y),j.once("error",y)}}release(){if(this.state==="owned")this.state="released"}terminate(){if(this.terminationPromise)return this.terminationPromise;if(this.terminationResult)return Promise.resolve(this.terminationResult);if(this.state==="released")return this.terminationResult={success:!0,alreadyExited:!0,forced:!1},Promise.resolve(this.terminationResult);return this.state="terminating",this.terminationPromise=this.terminateOwnedTree().then((j)=>{return this.state="released",this.terminationResult=j,j}),this.terminationPromise}async terminateOwnedTree(){let j=this.child.pid;if(!j)return{success:!1,alreadyExited:!0,forced:!1};if(this.platform==="win32"){let z=await this.taskkill(j,!1);await this.wait(this.gracePeriodMs);let B=await this.taskkill(j,!0);if(!z&&!B)return{success:this.signalDirectChild("SIGKILL"),alreadyExited:!1,forced:!0};return{success:!0,alreadyExited:!1,forced:!0}}let q=this.signalPosixTree(j,"SIGTERM");await this.wait(this.gracePeriodMs);let y=this.signalPosixTree(j,"SIGKILL");return{success:q||y,alreadyExited:!1,forced:y}}signalPosixTree(j,q){if(j<=1||j===process.pid)return this.signalDirectChild(q);try{return this.killProcess(-j,q)}catch(y){if(Z(y)==="ESRCH")return!0;return this.signalDirectChild(q)}}signalDirectChild(j){try{return this.child.kill(j)}catch(q){return Z(q)==="ESRCH"}}}function v(j,q,y={},z={}){let B=I(j,q,{...y,detached:process.platform==="win32"?y.detached:!0,windowsHide:y.windowsHide??!0});return{child:B,processTree:new b(B,z)}}
2
- export{G as Qe,F as Re,R as Se,v as Te};
2
+ export{G as _e,F as $e,R as af,v as bf};
@@ -0,0 +1 @@
1
+ import{mh as a,nh as b}from"./chunk-793067rd.js";import"./chunk-aphcj8rz.js";import"./chunk-6tacv9rs.js";import"./chunk-arzhhj0e.js";export{b as WorkspaceTrustService,a as MAX_RESIDENT_WORKSPACE_TRUST_STATUSES};
@@ -1,4 +1,4 @@
1
- import{b as $Y,c as QY,d as JY}from"./chunk-k4ermznt.js";import{j as zJ,k as _J}from"./chunk-83wm4akj.js";import{u as c8}from"./chunk-1hb0rt7n.js";import{$ as SJ,B as B6,D as FY,F as s2,G as a2,H as U6,N as h1,P as V4,Q as j4,V as Y8,W as TJ,X as fJ,_ as kJ,da as $4,ea as v6,ga as f6,ha as k6,ia as HY,ja as d4,la as r4,na as w6}from"./chunk-xsx1av03.js";import{ra as c9,sa as x9,ta as u9,wa as NY}from"./chunk-atqnan6x.js";import"./chunk-qs4erqd0.js";import{Za as s4,_a as e4,nb as $6,wb as u2}from"./chunk-8an49nbn.js";import{Fb as K8}from"./chunk-9r0yebs1.js";import{Cc as P0,Yb as a4,bc as v4,gc as D4,nc as g4,oc as x2,pc as m4,rc as V8,zc as J8}from"./chunk-adz2756v.js";import"./chunk-2z3xe3rw.js";import"./chunk-wwsg165p.js";import{cd as sJ}from"./chunk-jk8bqc5b.js";import{dd as G8,ed as x8,gd as f1}from"./chunk-9rjaem5f.js";import"./chunk-3tednchw.js";import{Ad as Z8,Dd as u4,Kd as m0,kd as C$,ld as r0,md as Q$,nd as yQ,od as v$,pd as j8,qd as O9,rd as uQ,sd as YJ,td as z9,ud as f$,vd as $1,wd as zY,xd as a0,yd as tJ,zd as P2}from"./chunk-fp2fh7cn.js";import"./chunk-v508x7cg.js";import"./chunk-wy4pn9sk.js";import"./chunk-0jxh2zq5.js";import{Xd as lQ}from"./chunk-j9snkjpe.js";import"./chunk-69rc9hw6.js";import"./chunk-hpehkz2x.js";import{ge as C6,je as xJ,oe as IJ,xe as _Y}from"./chunk-0ft3egjr.js";import"./chunk-d1t91jgz.js";import"./chunk-detkh4dd.js";import"./chunk-2xbmkyb2.js";import{Ne as CQ,Pe as z1}from"./chunk-8b1ehxzh.js";import"./chunk-87jz5600.js";import{Rf as UY,Wf as CJ,Xf as OY}from"./chunk-2xsrqsk9.js";import"./chunk-khkhsaan.js";import"./chunk-7b467h8k.js";import{eg as D$,fg as h8,gg as IQ}from"./chunk-9kmtcgm6.js";import{kg as l0}from"./chunk-kjvntyr5.js";import"./chunk-8ekk8pa7.js";import{Ig as qY,Lg as e1}from"./chunk-y8r2knxm.js";import{Ng as qJ,Og as UJ,Rg as E1}from"./chunk-1jc7d3nt.js";import"./chunk-fp1h8wdh.js";import{bh as s9}from"./chunk-6fdvffcc.js";import{dh as eQ}from"./chunk-ej6h16ae.js";import"./chunk-cm9mph7j.js";import"./chunk-cz68x56m.js";import{ph as MQ}from"./chunk-av10vmxk.js";import{useMemoizedFn as v2}from"ahooks";import{useEffect as Q7,useState as D2}from"react";import{useMemoizedFn as t0}from"ahooks";import{Box as z$}from"ink";import{useEffect as _$,useMemo as iX,useRef as f2}from"react";import{useShallow as LY}from"zustand/react/shallow";import{useStore as WY}from"zustand";function t($){return WY(f$,$)}var BY=[],k$=()=>t(($)=>$.session.sessionId),T1=()=>t(($)=>$.session.workspaceRoot),Q4=()=>t(($)=>$.session.messages),J4=()=>t(($)=>$.session.clearCount),Y4=()=>t(($)=>$.session.isCompacting),Z4=()=>t(($)=>$.session.tokenUsage.estimatedCostUsd),X4=()=>t(($)=>{let{totalInputTokens:Q,cacheReadTokens:Y,cacheWriteTokens:J}=$.session.tokenUsage;return $4({totalInputTokens:Q,cacheReadTokens:Y,cacheWriteTokens:J}).hitRate}),K4=()=>t(($)=>$.session.providerCircuit),G4=()=>t(($)=>$.session.providerAdmission),q4=()=>t(($)=>$.session.providerRetry),U4=()=>t(($)=>$.session.providerStall),O4=()=>t(($)=>$.session.actionStationarity),n1=()=>t(($)=>$.session.actions),z4=()=>t(($)=>{let{inputTokens:Q,maxContextTokens:Y}=$.session.tokenUsage;if(Y<=0)return 100;let J=Math.max(0,100-Q/Y*100);return Math.round(J)}),_4=()=>t(($)=>$.app.initializationStatus),N4=()=>t(($)=>$.app.initializationError),y8=()=>t(($)=>$.app.activeModal),F4=()=>t(($)=>$.app.tasks),H4=()=>t(($)=>$.app.modelEditorTarget),W4=()=>t(($)=>$.app.sessionSelectorData),L4=()=>t(($)=>$.app.awaitingSecondCtrlC),t1=()=>t(($)=>$.app.actions),R8=()=>t(($)=>$.app.initializationStatus==="ready"),B4=()=>t(($)=>$.app.tasks.length>0),S$=()=>t(($)=>$.config.config?.permissionMode||"default"),w4=()=>t(($)=>$.config.config?.models??BY),M8=()=>t(($)=>{let Q=$.config.config;if(!Q)return;let Y=Q.currentModelId;return Q.models.find((Z)=>Z.id===Y)??Q.models[0]}),C8=()=>t(($)=>$.config.config?.currentModelId),A0=()=>t(($)=>{return r0.getTheme()}),b4=()=>t(($)=>$.config.config?.codeTheme??"default"),e0=()=>t(($)=>$.focus.currentFocus),A4=()=>t(($)=>$.focus.actions),s1=()=>t(($)=>$.command.isProcessing),P4=()=>t(($)=>$.command.actions),I8=()=>t(($)=>$.command.pendingCommands),y4=()=>t(($)=>$.command.recoveredSteeringCount),T8=()=>t(($)=>$.app.thinkingModeEnabled),f8=()=>t(($)=>$.app.reasoningEffort),k8=()=>t(($)=>$.app.serviceTier),S8=()=>t(($)=>$.app.responseVerbosity),v8=()=>t(($)=>$.app.communicationStyle),R4=()=>t(($)=>$.session.currentThinkingContent),M4=()=>t(($)=>$.session.thinkingExpanded),C4=()=>t(($)=>$.session.currentStreamingMessageId),I4=()=>t(LY(($)=>({lines:$.session.currentStreamingLines,tail:$.session.currentStreamingTail,lineCount:$.session.currentStreamingLineCount,version:$.session.currentStreamingVersion}))),T4=()=>t(($)=>$.session.finalizingStreamingMessageId),f4=()=>t(($)=>$.session.historyExpanded),k4=()=>t(($)=>$.session.expandedMessageCount);import{useMemoizedFn as j$}from"ahooks";import{useEffect as l8,useRef as t4}from"react";function wY($){if(!($ instanceof Error))return"未知错误";let J=$.lastError??$;if(J.responseBody)try{let K=JSON.parse(J.responseBody)?.error?.message;if(K){let q=J.statusCode?` (HTTP ${J.statusCode})`:"";return`${K}${q}`}}catch{}let Z=$.message.match(/Last error:\s*(.+)$/);if(Z)return Z[1];return $.message}function bY($){if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.includes("aborted")}function AY($){if(!($ instanceof Error))return!1;let Q=$.message;return Q.includes("can only concatenate str")||Q.includes("image_url")||Q.includes("multimodal")||Q.includes("vision")||Q.includes("does not support images")}function D8($){let Q=bY($),Y=AY($),J;if(Y)J="当前模型不支持图片理解功能。请切换到支持视觉能力的模型(如 Claude 4.5、GPT-5.2、Gemini 3 Pro、Qwen3-VL-Plus 等)后重试。";else J=wY($);return{displayMessage:J,isAbort:Q,isVisionNotSupported:Y}}import{appendFileSync as PY,mkdirSync as yY,writeFileSync as RY}from"node:fs";import MY from"node:os";import h2 from"node:path";var S4=null;function CY(){let $=process.env.BLADE_STORAGE_ROOT||h2.join(MY.homedir(),".blade");return h2.join($,"logs","stream-debug.log")}function IY($){if(S4===$)return;let Q=h2.dirname($);yY(Q,{recursive:!0,mode:493}),RY($,`=== Stream Debug Log Started: ${new Date().toISOString()} ===
1
+ import{b as $Y,c as QY,d as JY}from"./chunk-yrtmkb4a.js";import{j as zJ,k as _J}from"./chunk-s1xp6g8m.js";import{u as c8}from"./chunk-s16x4qkb.js";import{$ as SJ,B as B6,D as FY,F as s2,G as a2,H as U6,N as h1,P as V4,Q as j4,V as Y8,W as TJ,X as fJ,_ as kJ,da as $4,ea as v6,ga as f6,ha as k6,ia as HY,ja as d4,la as r4,na as w6}from"./chunk-98qmtexa.js";import{ra as c9,sa as x9,ta as u9,wa as NY}from"./chunk-e11kmyt3.js";import"./chunk-ky32s7az.js";import{$a as e4,_a as s4,ob as $6,xb as u2}from"./chunk-pwehsv52.js";import{Gb as K8}from"./chunk-edd8n5r0.js";import{Ac as V8,Ic as J8,Lc as P0,Zb as a4,kc as v4,pc as D4,wc as g4,xc as x2,yc as m4}from"./chunk-zxwdtn6q.js";import"./chunk-eg5mh9m9.js";import"./chunk-a49dy92d.js";import{md as sJ}from"./chunk-53tb8vvv.js";import{nd as G8,od as x8,qd as f1}from"./chunk-ejsggxs4.js";import"./chunk-5gjqdbxb.js";import{Ad as O9,Bd as uQ,Cd as YJ,Dd as z9,Ed as f$,Fd as $1,Gd as zY,Hd as a0,Id as tJ,Jd as P2,Kd as Z8,Nd as u4,Ud as m0,ud as C$,vd as r0,wd as Q$,xd as yQ,yd as v$,zd as j8}from"./chunk-wzkr0p09.js";import"./chunk-v508x7cg.js";import"./chunk-czb954vz.js";import"./chunk-h127mgg2.js";import{fe as lQ}from"./chunk-y51v2jvh.js";import"./chunk-5ha0vf37.js";import"./chunk-sbpb7pcc.js";import{He as _Y,qe as C6,te as xJ,ye as IJ}from"./chunk-j6w1vf2q.js";import"./chunk-k4t45b64.js";import"./chunk-hbbpe5f0.js";import"./chunk-bnp9asmd.js";import{Xe as CQ,Ze as z1}from"./chunk-pfmmvpfh.js";import"./chunk-2yxdneb9.js";import{$f as UY,eg as CJ,fg as OY}from"./chunk-svczh6hn.js";import"./chunk-1jm8njkw.js";import"./chunk-7mdbwjxj.js";import{og as D$,pg as h8,qg as IQ}from"./chunk-fz60jh3y.js";import{ug as l0}from"./chunk-d39xaa7w.js";import"./chunk-ngmajm4h.js";import{Sg as qY,Vg as e1}from"./chunk-1vt7e9e7.js";import{$g as E1,Xg as qJ,Yg as UJ}from"./chunk-eharmsjt.js";import"./chunk-gafk33py.js";import{lh as s9}from"./chunk-zpwasxzh.js";import{nh as eQ}from"./chunk-793067rd.js";import"./chunk-aphcj8rz.js";import"./chunk-6tacv9rs.js";import{zh as MQ}from"./chunk-arzhhj0e.js";import{useMemoizedFn as v2}from"ahooks";import{useEffect as Q7,useState as D2}from"react";import{useMemoizedFn as t0}from"ahooks";import{Box as z$}from"ink";import{useEffect as _$,useMemo as iX,useRef as f2}from"react";import{useShallow as LY}from"zustand/react/shallow";import{useStore as WY}from"zustand";function t($){return WY(f$,$)}var BY=[],k$=()=>t(($)=>$.session.sessionId),T1=()=>t(($)=>$.session.workspaceRoot),Q4=()=>t(($)=>$.session.messages),J4=()=>t(($)=>$.session.clearCount),Y4=()=>t(($)=>$.session.isCompacting),Z4=()=>t(($)=>$.session.tokenUsage.estimatedCostUsd),X4=()=>t(($)=>{let{totalInputTokens:Q,cacheReadTokens:Y,cacheWriteTokens:J}=$.session.tokenUsage;return $4({totalInputTokens:Q,cacheReadTokens:Y,cacheWriteTokens:J}).hitRate}),K4=()=>t(($)=>$.session.providerCircuit),G4=()=>t(($)=>$.session.providerAdmission),q4=()=>t(($)=>$.session.providerRetry),U4=()=>t(($)=>$.session.providerStall),O4=()=>t(($)=>$.session.actionStationarity),n1=()=>t(($)=>$.session.actions),z4=()=>t(($)=>{let{inputTokens:Q,maxContextTokens:Y}=$.session.tokenUsage;if(Y<=0)return 100;let J=Math.max(0,100-Q/Y*100);return Math.round(J)}),_4=()=>t(($)=>$.app.initializationStatus),N4=()=>t(($)=>$.app.initializationError),y8=()=>t(($)=>$.app.activeModal),F4=()=>t(($)=>$.app.tasks),H4=()=>t(($)=>$.app.modelEditorTarget),W4=()=>t(($)=>$.app.sessionSelectorData),L4=()=>t(($)=>$.app.awaitingSecondCtrlC),t1=()=>t(($)=>$.app.actions),R8=()=>t(($)=>$.app.initializationStatus==="ready"),B4=()=>t(($)=>$.app.tasks.length>0),S$=()=>t(($)=>$.config.config?.permissionMode||"default"),w4=()=>t(($)=>$.config.config?.models??BY),M8=()=>t(($)=>{let Q=$.config.config;if(!Q)return;let Y=Q.currentModelId;return Q.models.find((Z)=>Z.id===Y)??Q.models[0]}),C8=()=>t(($)=>$.config.config?.currentModelId),A0=()=>t(($)=>{return r0.getTheme()}),b4=()=>t(($)=>$.config.config?.codeTheme??"default"),e0=()=>t(($)=>$.focus.currentFocus),A4=()=>t(($)=>$.focus.actions),s1=()=>t(($)=>$.command.isProcessing),P4=()=>t(($)=>$.command.actions),I8=()=>t(($)=>$.command.pendingCommands),y4=()=>t(($)=>$.command.recoveredSteeringCount),T8=()=>t(($)=>$.app.thinkingModeEnabled),f8=()=>t(($)=>$.app.reasoningEffort),k8=()=>t(($)=>$.app.serviceTier),S8=()=>t(($)=>$.app.responseVerbosity),v8=()=>t(($)=>$.app.communicationStyle),R4=()=>t(($)=>$.session.currentThinkingContent),M4=()=>t(($)=>$.session.thinkingExpanded),C4=()=>t(($)=>$.session.currentStreamingMessageId),I4=()=>t(LY(($)=>({lines:$.session.currentStreamingLines,tail:$.session.currentStreamingTail,lineCount:$.session.currentStreamingLineCount,version:$.session.currentStreamingVersion}))),T4=()=>t(($)=>$.session.finalizingStreamingMessageId),f4=()=>t(($)=>$.session.historyExpanded),k4=()=>t(($)=>$.session.expandedMessageCount);import{useMemoizedFn as j$}from"ahooks";import{useEffect as l8,useRef as t4}from"react";function wY($){if(!($ instanceof Error))return"未知错误";let J=$.lastError??$;if(J.responseBody)try{let K=JSON.parse(J.responseBody)?.error?.message;if(K){let q=J.statusCode?` (HTTP ${J.statusCode})`:"";return`${K}${q}`}}catch{}let Z=$.message.match(/Last error:\s*(.+)$/);if(Z)return Z[1];return $.message}function bY($){if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.includes("aborted")}function AY($){if(!($ instanceof Error))return!1;let Q=$.message;return Q.includes("can only concatenate str")||Q.includes("image_url")||Q.includes("multimodal")||Q.includes("vision")||Q.includes("does not support images")}function D8($){let Q=bY($),Y=AY($),J;if(Y)J="当前模型不支持图片理解功能。请切换到支持视觉能力的模型(如 Claude 4.5、GPT-5.2、Gemini 3 Pro、Qwen3-VL-Plus 等)后重试。";else J=wY($);return{displayMessage:J,isAbort:Q,isVisionNotSupported:Y}}import{appendFileSync as PY,mkdirSync as yY,writeFileSync as RY}from"node:fs";import MY from"node:os";import h2 from"node:path";var S4=null;function CY(){let $=process.env.BLADE_STORAGE_ROOT||h2.join(MY.homedir(),".blade");return h2.join($,"logs","stream-debug.log")}function IY($){if(S4===$)return;let Q=h2.dirname($);yY(Q,{recursive:!0,mode:493}),RY($,`=== Stream Debug Log Started: ${new Date().toISOString()} ===
2
2
  `),S4=$}function E2($,Q,Y){try{let J=CY();IY(J);let Z=new Date().toISOString(),X=Y?` | ${JSON.stringify(Y)}`:"",K=`[${Z}] [${$}] ${Q}${X}
3
3
  `;PY(J,K)}catch{}}var Q8=e1("UI");function h4($,Q){let Y=!1;return(J)=>{switch(J.kind){case"content_delta":if(Y||$.signal.aborted)break;Q.contentDeltaCount++,Q.contentDeltaTotalLen+=J.delta.length,E2("loopEventHandler","onContentDelta",{callCount:Q.contentDeltaCount,deltaLen:J.delta.length,totalLen:Q.contentDeltaTotalLen}),$.streamingBuffer.batchAppendContent(J.delta);break;case"thinking_delta":if(Y||$.signal.aborted)break;if($.thinkingModeEnabled)$.streamingBuffer.batchAppendThinking(J.delta);break;case"stream_end":{if($.sessionActions.setProviderCircuit(null),$.sessionActions.setProviderRetry(null),$.sessionActions.setProviderStall(null),Q8.debug("[loopEventHandler] stream_end",{contentDeltaCount:Q.contentDeltaCount,contentDeltaTotalLen:Q.contentDeltaTotalLen,streamFinalized:Y,signalAborted:$.signal.aborted}),E2("loopEventHandler","onStreamEnd",{contentDeltaCallCount:Q.contentDeltaCount,contentDeltaTotalLen:Q.contentDeltaTotalLen,streamFinalized:Y,signalAborted:$.signal.aborted}),Y||$.signal.aborted){Y=!0;break}let{extraContent:Z,extraThinking:X}=$.streamingBuffer.drainPendingBuffers(),K=$.getStreamingMessageId();if(K){if(Z)v$(K,Z);j8(K)}$.sessionActions.finalizeStreamingMessage(Z,X),Y=!0;break}case"model_fallback":Y=!0,$.sessionActions.setProviderAdmission(null),$.sessionActions.setProviderCircuit(null),$.sessionActions.setProviderRetry(null),$.sessionActions.setProviderStall(null),$.streamingBuffer.resetStreamingBuffers(),$.sessionActions.discardStreamingMessage(),$.sessionActions.setCurrentThinkingContent(null);break;case"provider_admission":{let{kind:Z,...X}=J;$.sessionActions.setProviderAdmission(J.phase==="queued"?X:null);break}case"provider_circuit":{let{kind:Z,...X}=J;$.sessionActions.setProviderCircuit(J.phase==="closed"?null:X);break}case"provider_retry":{let{kind:Z,...X}=J;$.sessionActions.setProviderRetry(J.phase==="recovered"?null:X);break}case"provider_stall":{let{kind:Z,...X}=J;$.sessionActions.setProviderStall(J.phase==="detected"?X:null);break}case"action_stationarity":{let{kind:Z,...X}=J;$.sessionActions.setActionStationarity(J.phase==="recovered"?null:X);break}case"tool_start":{let Z=J.toolCall;if(!("function"in Z))break;if(Z.function.name===V8)break;if(Q8.debug("[loopEventHandler] tool_start",{toolName:Z.function.name,toolKind:J.toolKind}),["TaskCreate","TaskUpdate","TaskList"].includes(Z.function.name))break;try{let X=JSON.parse(Z.function.arguments),K=V4(Z.function.name,X);$.sessionActions.addToolMessage(K,{toolCallId:Z.id,toolName:Z.function.name,phase:"start",summary:K,params:X})}catch(X){Q8.error("[loopEventHandler] onToolStart error:",X)}break}case"tool_progress":{let Z=J.toolCall;if(!("function"in Z))break;if(Z.function.name===V8)break;let X=J.update.total!==void 0?` ${Math.max(0,Math.min(100,Math.round((J.update.progress??0)/J.update.total*100)))}%`:"",K=`${Z.function.name}${X}: ${J.update.message}`;$.sessionActions.addToolMessage(K,{toolCallId:Z.id,toolName:Z.function.name,phase:"progress",summary:K,...J.update.admission?{admission:J.update.admission}:{}});break}case"tool_result":{let Z=J.toolCall;if(!("function"in Z))break;if(Z.function.name===V8)break;Q8.debug("[loopEventHandler] tool_result",{toolName:Z.function.name,success:J.result.success});let X=D4(j4(Z.function.name,J.result),v4);$.sessionActions.addToolMessage(X.summary,{toolCallId:Z.id,toolName:Z.function.name,phase:"complete",summary:X.summary,detail:X.detail});break}case"structured_output":$.sessionActions.replaceLastAssistantMessage(JSON.stringify(J.output,null,2));break;case"token_usage":$.sessionActions.updateTokenUsage(J.usage);break;case"compaction":if($.sessionActions.setCompacting(J.phase==="start"),J.phase==="end"){if($.sessionActions.resetContextUsage(),J.outcome!=="failed")Q.compactionCount=(Q.compactionCount??0)+1}break;case"turn_start":Q8.debug("[loopEventHandler] turn_start",{turn:J.turn,maxTurns:J.maxTurns}),$.sessionActions.updateTokenUsage({turnCount:J.turn}),$.sessionActions.setProviderCircuit(null),$.sessionActions.setProviderRetry(null),$.sessionActions.setProviderStall(null),Y=!1;break;case"task_update":$.appActions.setTasks(J.tasks);break;case"mcp_catalog_changed":{let Z=`MCP catalog r${J.revision}: +${J.added.length} -${J.removed.length} ~${J.updated.length}`;$.sessionActions.addToolMessage(Z,{toolName:"MCP Catalog",phase:"complete",summary:Z,detail:[J.added.length>0?`Added: ${J.added.join(", ")}`:"",J.removed.length>0?`Removed: ${J.removed.join(", ")}`:"",J.updated.length>0?`Updated: ${J.updated.join(", ")}`:""].filter(Boolean).join(`
4
4
  `)});break}case"mcp_content_changed":{let Z=`MCP ${J.contentKind} r${J.revision}: +${J.added.length} -${J.removed.length} ~${J.updated.length}`;$.sessionActions.addToolMessage(Z,{toolName:"MCP Content",phase:"complete",summary:Z,detail:[J.added.length>0?`Added: ${J.added.join(", ")}`:"",J.removed.length>0?`Removed: ${J.removed.join(", ")}`:"",J.updated.length>0?`Updated: ${J.updated.join(", ")}`:""].filter(Boolean).join(`
@@ -1,2 +1,2 @@
1
- import{Me as Q}from"./chunk-2xbmkyb2.js";import{_f as F,ag as k,dg as G}from"./chunk-7b467h8k.js";var V=k.String({minLength:1,maxLength:128,pattern:"^[A-Za-z0-9][A-Za-z0-9_-]*$"}),K=k.Array(k.String({minLength:1,maxLength:200,pattern:".*\\S.*"}),{maxItems:128}),W=k.Object({description:k.String({minLength:1,maxLength:4096,pattern:".*\\S.*"}),prompt:k.String({minLength:1,maxLength:1e5,pattern:".*\\S.*"}),tools:k.Optional(K),disallowedTools:k.Optional(K),model:k.Optional(k.String({minLength:1,maxLength:200,pattern:".*\\S.*"})),permissionMode:k.Optional(G(["default","acceptEdits","dontAsk","bypassPermissions","plan","ignore"])),maxTurns:k.Optional(k.Integer({minimum:1})),isolation:k.Optional(G(["none","worktree"]))},{additionalProperties:!1});function Z(R){let w;try{w=JSON.parse(R)}catch{throw Error("Invalid JSON provided to --agents")}if(w===null||Array.isArray(w)||typeof w!=="object")throw Error("--agents must be a JSON object");let H=Object.entries(w);if(H.length>64)throw Error("--agents supports at most 64 definitions");return H.map(([z,U])=>{if(!F(V,z).success)throw Error(`Invalid --agents name "${z}": use letters, numbers, hyphens, or underscores`);let I=F(W,U);if(!I.success)throw Error(`Invalid --agents definition for "${z}"`);let q=I.data;return{name:z,description:q.description.trim(),systemPrompt:q.prompt.trim(),tools:q.tools?[...new Set(q.tools.map((B)=>B.trim()))]:void 0,disallowedTools:q.disallowedTools?[...new Set(q.disallowedTools.map((B)=>B.trim()))]:void 0,model:q.model?.trim(),permissionMode:q.permissionMode===void 0?void 0:Q(q.permissionMode),maxTurns:q.maxTurns,isolation:q.isolation,source:"flag"}})}
2
- export{Z as cd};
1
+ import{We as Q}from"./chunk-bnp9asmd.js";import{ig as F,kg as k,ng as G}from"./chunk-7mdbwjxj.js";var V=k.String({minLength:1,maxLength:128,pattern:"^[A-Za-z0-9][A-Za-z0-9_-]*$"}),K=k.Array(k.String({minLength:1,maxLength:200,pattern:".*\\S.*"}),{maxItems:128}),W=k.Object({description:k.String({minLength:1,maxLength:4096,pattern:".*\\S.*"}),prompt:k.String({minLength:1,maxLength:1e5,pattern:".*\\S.*"}),tools:k.Optional(K),disallowedTools:k.Optional(K),model:k.Optional(k.String({minLength:1,maxLength:200,pattern:".*\\S.*"})),permissionMode:k.Optional(G(["default","acceptEdits","dontAsk","bypassPermissions","plan","ignore"])),maxTurns:k.Optional(k.Integer({minimum:1})),isolation:k.Optional(G(["none","worktree"]))},{additionalProperties:!1});function Z(R){let w;try{w=JSON.parse(R)}catch{throw Error("Invalid JSON provided to --agents")}if(w===null||Array.isArray(w)||typeof w!=="object")throw Error("--agents must be a JSON object");let H=Object.entries(w);if(H.length>64)throw Error("--agents supports at most 64 definitions");return H.map(([z,U])=>{if(!F(V,z).success)throw Error(`Invalid --agents name "${z}": use letters, numbers, hyphens, or underscores`);let I=F(W,U);if(!I.success)throw Error(`Invalid --agents definition for "${z}"`);let q=I.data;return{name:z,description:q.description.trim(),systemPrompt:q.prompt.trim(),tools:q.tools?[...new Set(q.tools.map((B)=>B.trim()))]:void 0,disallowedTools:q.disallowedTools?[...new Set(q.disallowedTools.map((B)=>B.trim()))]:void 0,model:q.model?.trim(),permissionMode:q.permissionMode===void 0?void 0:Q(q.permissionMode),maxTurns:q.maxTurns,isolation:q.isolation,source:"flag"}})}
2
+ export{Z as md};
@@ -1,2 +1,2 @@
1
- import{Ff as H,Gf as I}from"./chunk-2xsrqsk9.js";import{Mutex as J}from"async-mutex";class B extends Error{limit;resource="resident_runtimes";retryable=!0;constructor(b){super("Session runtime capacity is full");this.limit=b;this.name="SessionRuntimeCapacityError"}}class D extends Error{constructor(){super("Session runtime residency is closed");this.name="SessionRuntimeResidencyClosedError"}}class A extends Error{constructor(b){super(`Session runtime residency already owns key: ${b}`);this.name="SessionRuntimeResidencyConflictError"}}class K{maxResident;idleMs;now;residents=new Map;reservations=new Map;operations=new J;nextGeneration=1;closed=!1;constructor(b){if(!H(b.maxResident))throw Error("Invalid max resident Session Runtime limit");if(!I(b.idleMs))throw Error("Invalid Session Runtime idle timeout");this.maxResident=b.maxResident,this.idleMs=b.idleMs,this.now=b.now??Date.now}acquire(b){let j=this.residents.get(b);if(!j||j.poisoned)return;return j.pins++,j.lastUsedAt=this.now(),this.createLease(j)}owns(b,j){let q=this.residents.get(b);return Boolean(q&&(j===void 0||q.value===j))}async reserve(b,j){if(!b.trim())throw Error("Session runtime residency key must not be blank");return this.operations.runExclusive(async()=>{if(this.closed)throw new D;if(this.residents.has(b)||this.reservations.has(b))throw new A(b);while(this.retainedCount()>=this.maxResident){if(!j.allowEviction)throw new B(this.maxResident);let z=this.oldestEvictableWebResident();if(!z)throw new B(this.maxResident);await this.disposeResident(z,!0)}let q={generation:this.allocateGeneration(),surface:j.surface};return this.reservations.set(b,q),this.createReservation(b,q)})}async remove(b,j){return this.operations.runExclusive(async()=>{let q=this.residents.get(b);if(!q||j!==void 0&&q.value!==j)return!1;if(q.pins>0)return!1;return await this.disposeResident(q,!0),!0})}async forget(b,j){return this.operations.runExclusive(async()=>{let q=this.residents.get(b);if(!q||j!==void 0&&q.value!==j||q.pins>0)return!1;return this.residents.delete(b),!0})}async sweepIdle(){return this.operations.runExclusive(async()=>{if(this.closed)return 0;let b=0;while(!0){let j=this.oldestIdleWebResident();if(!j)return b;await this.disposeResident(j,!0),b++}})}async disposeAll(){await this.operations.runExclusive(async()=>{this.closed=!0,this.reservations.clear();let b;for(let j of[...this.residents.values()])try{await this.disposeResident(j,!1)}catch(q){b??=q}if(this.residents.clear(),b!==void 0)throw b})}getStats(){let b=0;for(let j of this.residents.values())if(j.pins>0)b++;return{resident:this.residents.size,reserved:this.reservations.size,pinned:b,maxResident:this.maxResident}}retainedCount(){return this.residents.size+this.reservations.size}allocateGeneration(){let b=this.nextGeneration;return this.nextGeneration=this.nextGeneration===Number.MAX_SAFE_INTEGER?1:this.nextGeneration+1,b}createReservation(b,j){let q=!1;return{commit:(z)=>{if(q)throw new A(b);if(z.key!==b||z.surface!==j.surface||this.reservations.get(b)!==j||this.closed)throw this.reservations.delete(b),q=!0,this.closed?new D:new A(b);this.reservations.delete(b);let G={...z,generation:j.generation,pins:1,lastUsedAt:this.now(),poisoned:!1};return this.residents.set(b,G),q=!0,this.createLease(G)},cancel:()=>{if(q)return;if(this.reservations.get(b)===j)this.reservations.delete(b);q=!0}}}createLease(b){let j=!1;return{value:b.value,release:()=>{if(j)return;j=!0;let q=this.residents.get(b.key);if(q!==b||q.generation!==b.generation)return;q.pins=Math.max(0,q.pins-1),q.lastUsedAt=this.now()}}}oldestEvictableWebResident(){return this.sortedWebResidents().find((b)=>this.canEvict(b))}oldestIdleWebResident(){let b=this.now();return this.sortedWebResidents().find((j)=>b-j.lastUsedAt>=this.idleMs&&this.canEvict(j))}sortedWebResidents(){return[...this.residents.values()].filter((b)=>b.surface==="web").sort((b,j)=>b.lastUsedAt-j.lastUsedAt||b.generation-j.generation)}canEvict(b){if(b.pins>0||b.poisoned)return!1;try{return b.canEvict()}catch{return!1}}async disposeResident(b,j){if(this.residents.get(b.key)!==b)return;this.residents.delete(b.key);try{await b.dispose()}catch(q){if(j&&!this.closed&&!this.residents.has(b.key))b.lastUsedAt=this.now(),b.poisoned=!0,this.residents.set(b.key,b);throw q}}}
1
+ import{Pf as H,Qf as I}from"./chunk-svczh6hn.js";import{Mutex as J}from"async-mutex";class B extends Error{limit;resource="resident_runtimes";retryable=!0;constructor(b){super("Session runtime capacity is full");this.limit=b;this.name="SessionRuntimeCapacityError"}}class D extends Error{constructor(){super("Session runtime residency is closed");this.name="SessionRuntimeResidencyClosedError"}}class A extends Error{constructor(b){super(`Session runtime residency already owns key: ${b}`);this.name="SessionRuntimeResidencyConflictError"}}class K{maxResident;idleMs;now;residents=new Map;reservations=new Map;operations=new J;nextGeneration=1;closed=!1;constructor(b){if(!H(b.maxResident))throw Error("Invalid max resident Session Runtime limit");if(!I(b.idleMs))throw Error("Invalid Session Runtime idle timeout");this.maxResident=b.maxResident,this.idleMs=b.idleMs,this.now=b.now??Date.now}acquire(b){let j=this.residents.get(b);if(!j||j.poisoned)return;return j.pins++,j.lastUsedAt=this.now(),this.createLease(j)}owns(b,j){let q=this.residents.get(b);return Boolean(q&&(j===void 0||q.value===j))}async reserve(b,j){if(!b.trim())throw Error("Session runtime residency key must not be blank");return this.operations.runExclusive(async()=>{if(this.closed)throw new D;if(this.residents.has(b)||this.reservations.has(b))throw new A(b);while(this.retainedCount()>=this.maxResident){if(!j.allowEviction)throw new B(this.maxResident);let z=this.oldestEvictableWebResident();if(!z)throw new B(this.maxResident);await this.disposeResident(z,!0)}let q={generation:this.allocateGeneration(),surface:j.surface};return this.reservations.set(b,q),this.createReservation(b,q)})}async remove(b,j){return this.operations.runExclusive(async()=>{let q=this.residents.get(b);if(!q||j!==void 0&&q.value!==j)return!1;if(q.pins>0)return!1;return await this.disposeResident(q,!0),!0})}async forget(b,j){return this.operations.runExclusive(async()=>{let q=this.residents.get(b);if(!q||j!==void 0&&q.value!==j||q.pins>0)return!1;return this.residents.delete(b),!0})}async sweepIdle(){return this.operations.runExclusive(async()=>{if(this.closed)return 0;let b=0;while(!0){let j=this.oldestIdleWebResident();if(!j)return b;await this.disposeResident(j,!0),b++}})}async disposeAll(){await this.operations.runExclusive(async()=>{this.closed=!0,this.reservations.clear();let b;for(let j of[...this.residents.values()])try{await this.disposeResident(j,!1)}catch(q){b??=q}if(this.residents.clear(),b!==void 0)throw b})}getStats(){let b=0;for(let j of this.residents.values())if(j.pins>0)b++;return{resident:this.residents.size,reserved:this.reservations.size,pinned:b,maxResident:this.maxResident}}retainedCount(){return this.residents.size+this.reservations.size}allocateGeneration(){let b=this.nextGeneration;return this.nextGeneration=this.nextGeneration===Number.MAX_SAFE_INTEGER?1:this.nextGeneration+1,b}createReservation(b,j){let q=!1;return{commit:(z)=>{if(q)throw new A(b);if(z.key!==b||z.surface!==j.surface||this.reservations.get(b)!==j||this.closed)throw this.reservations.delete(b),q=!0,this.closed?new D:new A(b);this.reservations.delete(b);let G={...z,generation:j.generation,pins:1,lastUsedAt:this.now(),poisoned:!1};return this.residents.set(b,G),q=!0,this.createLease(G)},cancel:()=>{if(q)return;if(this.reservations.get(b)===j)this.reservations.delete(b);q=!0}}}createLease(b){let j=!1;return{value:b.value,release:()=>{if(j)return;j=!0;let q=this.residents.get(b.key);if(q!==b||q.generation!==b.generation)return;q.pins=Math.max(0,q.pins-1),q.lastUsedAt=this.now()}}}oldestEvictableWebResident(){return this.sortedWebResidents().find((b)=>this.canEvict(b))}oldestIdleWebResident(){let b=this.now();return this.sortedWebResidents().find((j)=>b-j.lastUsedAt>=this.idleMs&&this.canEvict(j))}sortedWebResidents(){return[...this.residents.values()].filter((b)=>b.surface==="web").sort((b,j)=>b.lastUsedAt-j.lastUsedAt||b.generation-j.generation)}canEvict(b){if(b.pins>0||b.poisoned)return!1;try{return b.canEvict()}catch{return!1}}async disposeResident(b,j){if(this.residents.get(b.key)!==b)return;this.residents.delete(b.key);try{await b.dispose()}catch(q){if(j&&!this.closed&&!this.residents.has(b.key))b.lastUsedAt=this.now(),b.poisoned=!0,this.residents.set(b.key,b);throw q}}}
2
2
  export{B as s,K as t};
@@ -1,4 +1,4 @@
1
- import{hg as L,kg as _}from"./chunk-kjvntyr5.js";import{execSync as F}from"child_process";import{existsSync as Q,readFileSync as O,realpathSync as b}from"fs";import*as V from"os";import*as H from"path";import{basename as J,isAbsolute as j,resolve as R}from"path";function G(z=_()){let q=z,M=f(q);return{workingDirectory:q,projectRoot:M,platform:`${V.platform()} (${V.arch()})`,nodeVersion:process.version,currentDate:new Date().toISOString().split("T")[0],homeDirectory:V.homedir()}}function Y(z,q){try{return F(q,{cwd:z,encoding:"utf8",stdio:["pipe","pipe","ignore"]}).trim()}catch{return null}}function v(z={}){let{includeGitSnapshot:q=!0,includeDirectoryListing:M=!0,workingDirectory:W}=z,B=G(W),$=Q(H.join(B.projectRoot,".git")),T=J(process.env.SHELL||"unknown"),A=["package.json","tsconfig.json","BLADE.md",".env.example"].filter((K)=>Q(H.join(B.projectRoot,K))).map((K)=>`- \`${H.join(B.projectRoot,K)}\``),N=`# Environment
1
+ import{rg as L,ug as _}from"./chunk-d39xaa7w.js";import{execSync as F}from"child_process";import{existsSync as Q,readFileSync as O,realpathSync as b}from"fs";import*as V from"os";import*as H from"path";import{basename as J,isAbsolute as j,resolve as R}from"path";function G(z=_()){let q=z,M=f(q);return{workingDirectory:q,projectRoot:M,platform:`${V.platform()} (${V.arch()})`,nodeVersion:process.version,currentDate:new Date().toISOString().split("T")[0],homeDirectory:V.homedir()}}function Y(z,q){try{return F(q,{cwd:z,encoding:"utf8",stdio:["pipe","pipe","ignore"]}).trim()}catch{return null}}function v(z={}){let{includeGitSnapshot:q=!0,includeDirectoryListing:M=!0,workingDirectory:W}=z,B=G(W),$=Q(H.join(B.projectRoot,".git")),T=J(process.env.SHELL||"unknown"),A=["package.json","tsconfig.json","BLADE.md",".env.example"].filter((K)=>Q(H.join(B.projectRoot,K))).map((K)=>`- \`${H.join(B.projectRoot,K)}\``),N=`# Environment
2
2
  You have been invoked in the following environment:
3
3
  - Primary working directory: ${B.workingDirectory}
4
4
  - Is a git repository: ${$?"true":"false"}
@@ -25,4 +25,4 @@ ${I.join(`
25
25
 
26
26
  Project root directory listing:
27
27
  ${K}`}return N}function f(z){let q=z,M=null;while(q!==H.dirname(q)){if(Q(H.join(q,".git")))return q;if(Q(H.join(q,".blade")))return q;if(Q(H.join(q,".claude")))return q;if(!M&&Q(H.join(q,"package.json")))M=q;q=H.dirname(q)}return M??z}function x(z,q){let M=j(z)?z:R(q||process.cwd(),z),W;try{W=b(M)}catch{W=M}L(W)}
28
- export{v as hd,f as id,x as jd};
28
+ export{v as rd,f as sd,x as td};
@@ -1,2 +1,2 @@
1
1
  import{clampThinkingLevel as t,getSupportedThinkingLevels as i}from"@earendil-works/pi-ai";var f=["auto","off","minimal","low","medium","high","xhigh","max"];function s(e){return typeof e==="string"&&f.includes(e)}function g(e,o){let n=i(e);if(o!=="auto"&&!n.includes(o))throw Error(`Reasoning effort ${o} is not supported by ${e.name}`);return{selection:o,effective:o==="auto"?t(e,"high"):o,supported:n}}
2
- export{s as Yd,g as Zd};
2
+ export{s as ge,g as he};
@@ -1 +1 @@
1
- import{a as o}from"./chunk-k4ermznt.js";import"./chunk-6fdvffcc.js";import"./chunk-av10vmxk.js";import{execSync as r}from"child_process";var l={command:"update",describe:"Check for updates and install if available",handler:async()=>{console.log("Checking for updates...");try{let e=await o(!0);if(console.log(`Current version: ${e.currentVersion}`),e.error){console.log(`Warning: ${e.error}`);return}if(e.latestVersion)console.log(`Latest version: ${e.latestVersion}`);if(e.hasUpdate&&e.latestVersion){console.log(""),console.log(`\x1B[33mUpdate available: ${e.currentVersion} -> ${e.latestVersion}\x1B[0m`),console.log(""),console.log("Updating...");try{r("npm install -g blade-code@latest --registry https://registry.npmjs.org",{stdio:"inherit"}),console.log(""),console.log("Update complete!")}catch(t){console.error("Error: Update failed. Please run manually:"),console.error(" npm install -g blade-code@latest"),process.exit(1)}}else console.log("You are running the latest version of Blade")}catch(e){console.error(`Error: Failed to check for updates: ${e instanceof Error?e.message:"未知错误"}`),process.exit(1)}}};export{l as updateCommands};
1
+ import{a as o}from"./chunk-yrtmkb4a.js";import"./chunk-zpwasxzh.js";import"./chunk-arzhhj0e.js";import{execSync as r}from"child_process";var l={command:"update",describe:"Check for updates and install if available",handler:async()=>{console.log("Checking for updates...");try{let e=await o(!0);if(console.log(`Current version: ${e.currentVersion}`),e.error){console.log(`Warning: ${e.error}`);return}if(e.latestVersion)console.log(`Latest version: ${e.latestVersion}`);if(e.hasUpdate&&e.latestVersion){console.log(""),console.log(`\x1B[33mUpdate available: ${e.currentVersion} -> ${e.latestVersion}\x1B[0m`),console.log(""),console.log("Updating...");try{r("npm install -g blade-code@latest --registry https://registry.npmjs.org",{stdio:"inherit"}),console.log(""),console.log("Update complete!")}catch(t){console.error("Error: Update failed. Please run manually:"),console.error(" npm install -g blade-code@latest"),process.exit(1)}}else console.log("You are running the latest version of Blade")}catch(e){console.error(`Error: Failed to check for updates: ${e instanceof Error?e.message:"未知错误"}`),process.exit(1)}}};export{l as updateCommands};
@@ -1,3 +1,3 @@
1
- import{l as i}from"./chunk-eeac8teg.js";import{kg as s}from"./chunk-kjvntyr5.js";import"./chunk-cz68x56m.js";import"./chunk-av10vmxk.js";import m from"node:path";var r={registry:i,currentWorkspace:s,inputCwd:()=>process.cwd(),write:console.log};function c(t,e){return m.resolve(e.inputCwd(),t)}function p(t){return t.map((e)=>{let o=e.isCurrent?"*":" ",n=e.gitBranch?` · ${e.gitBranch}`:"",d=e.available?"":" · unavailable";return`${o} ${e.name}${n}${d}
1
+ import{l as i}from"./chunk-r94jtbd2.js";import{ug as s}from"./chunk-d39xaa7w.js";import"./chunk-6tacv9rs.js";import"./chunk-arzhhj0e.js";import m from"node:path";var r={registry:i,currentWorkspace:s,inputCwd:()=>process.cwd(),write:console.log};function c(t,e){return m.resolve(e.inputCwd(),t)}function p(t){return t.map((e)=>{let o=e.isCurrent?"*":" ",n=e.gitBranch?` · ${e.gitBranch}`:"",d=e.available?"":" · unavailable";return`${o} ${e.name}${n}${d}
2
2
  ${e.path}`}).join(`
3
3
  `)}async function l(t,e=r){let o=await e.registry.list(e.currentWorkspace());return e.write(t.json?JSON.stringify(o,null,2):p(o)),o}async function u(t,e=r){let o=await e.registry.bind(c(t.path,e),e.currentWorkspace());return e.write(t.json?JSON.stringify(o,null,2):`Bound project: ${o.path}`),o}async function j(t,e=r){let o=c(t.path,e),n=await e.registry.unbind(o);return e.write(t.json?JSON.stringify({path:o,removed:n},null,2):n?`Unbound project: ${o}`:`Project was not bound: ${o}`),n}var a={type:"boolean",default:!1,describe:"Print machine-readable JSON"},P={command:"list",aliases:["ls"],describe:"List bound projects",builder:(t)=>t.option("json",a),handler:async(t)=>{await l(t)}},b={command:"add <path>",aliases:["bind"],describe:"Bind a project folder",builder:(t)=>t.positional("path",{type:"string",demandOption:!0,describe:"Absolute or relative project folder"}).option("json",a),handler:async(t)=>{await u(t)}},h={command:"remove <path>",aliases:["rm","unbind"],describe:"Unbind a project folder",builder:(t)=>t.positional("path",{type:"string",demandOption:!0,describe:"Absolute or relative project folder"}).option("json",a),handler:async(t)=>{await j(t)}},y={command:"projects",aliases:["project"],describe:"Manage project bindings shared with Blade Web",builder:(t)=>t.command(P).command(b).command(h).demandCommand(1,"Choose list, add, or remove"),handler:()=>{return}};export{j as runProjectsRemove,l as runProjectsList,u as runProjectsAdd,y as projectsCommands,p as formatProjectList};
@@ -1,2 +1,2 @@
1
- import{ph as F}from"./chunk-av10vmxk.js";import{execSync as G}from"node:child_process";import*as C from"node:os";import*as v from"node:path";function H(k){return v.resolve(k).replace(/[/\\]/g,"-").replace(/:/g,"_")}function M(k){let q=k.replace(/_/g,":");if(q.startsWith("-"))q="/"+q.slice(1);return q.replace(/-/g,"/")}function z(k){let q=H(k);return v.join(E(),"projects",q)}function J(k){return typeof k==="string"&&k!=="."&&k!==".."&&/^[A-Za-z0-9_-][A-Za-z0-9._-]{0,199}$/.test(k)}function A(k){if(!J(k))throw Error(`Invalid session ID: ${k}`)}function N(k,q){return A(q),v.join(z(k),`${q}.jsonl`)}function O(k,q){return A(q),v.join(z(k),`${q}.inbox.json`)}function Q(k,q){return A(q),v.join(z(k),`${q}.goal.json`)}function T(k){try{return G("git rev-parse --abbrev-ref HEAD",{cwd:k,encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function E(){return process.env.BLADE_STORAGE_ROOT||v.join(C.homedir(),".blade")}async function U(){let{readdir:k}=await import("node:fs/promises");try{let q=v.join(E(),"projects");return(await k(q,{withFileTypes:!0})).filter((w)=>w.isDirectory()).map((w)=>w.name)}catch{return[]}}
2
- export{M as fh,z as gh,J as hh,A as ih,N as jh,O as kh,Q as lh,T as mh,E as nh,U as oh};
1
+ import{zh as F}from"./chunk-arzhhj0e.js";import{execSync as G}from"node:child_process";import*as C from"node:os";import*as v from"node:path";function H(k){return v.resolve(k).replace(/[/\\]/g,"-").replace(/:/g,"_")}function M(k){let q=k.replace(/_/g,":");if(q.startsWith("-"))q="/"+q.slice(1);return q.replace(/-/g,"/")}function z(k){let q=H(k);return v.join(E(),"projects",q)}function J(k){return typeof k==="string"&&k!=="."&&k!==".."&&/^[A-Za-z0-9_-][A-Za-z0-9._-]{0,199}$/.test(k)}function A(k){if(!J(k))throw Error(`Invalid session ID: ${k}`)}function N(k,q){return A(q),v.join(z(k),`${q}.jsonl`)}function O(k,q){return A(q),v.join(z(k),`${q}.inbox.json`)}function Q(k,q){return A(q),v.join(z(k),`${q}.goal.json`)}function T(k){try{return G("git rev-parse --abbrev-ref HEAD",{cwd:k,encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function E(){return process.env.BLADE_STORAGE_ROOT||v.join(C.homedir(),".blade")}async function U(){let{readdir:k}=await import("node:fs/promises");try{let q=v.join(E(),"projects");return(await k(q,{withFileTypes:!0})).filter((w)=>w.isDirectory()).map((w)=>w.name)}catch{return[]}}
2
+ export{M as ph,z as qh,J as rh,A as sh,N as th,O as uh,Q as vh,T as wh,E as xh,U as yh};
@@ -0,0 +1,10 @@
1
+ import{f as T,g as W,h as X,i as Y}from"./chunk-m6a1c1tg.js";import"./chunk-s1xp6g8m.js";import"./chunk-r94jtbd2.js";import"./chunk-57gp2px5.js";import"./chunk-s16x4qkb.js";import"./chunk-tb4jmrkp.js";import"./chunk-98qmtexa.js";import"./chunk-e11kmyt3.js";import"./chunk-ky32s7az.js";import"./chunk-pwehsv52.js";import"./chunk-edd8n5r0.js";import"./chunk-zxwdtn6q.js";import"./chunk-eg5mh9m9.js";import"./chunk-a49dy92d.js";import{od as R}from"./chunk-ejsggxs4.js";import"./chunk-5gjqdbxb.js";import{Kd as Q}from"./chunk-wzkr0p09.js";import"./chunk-v508x7cg.js";import"./chunk-czb954vz.js";import"./chunk-h127mgg2.js";import"./chunk-y51v2jvh.js";import"./chunk-5ha0vf37.js";import"./chunk-sbpb7pcc.js";import"./chunk-j6w1vf2q.js";import"./chunk-k4t45b64.js";import"./chunk-hbbpe5f0.js";import"./chunk-bnp9asmd.js";import"./chunk-pfmmvpfh.js";import"./chunk-2yxdneb9.js";import"./chunk-svczh6hn.js";import"./chunk-1jm8njkw.js";import"./chunk-7mdbwjxj.js";import"./chunk-fz60jh3y.js";import"./chunk-d39xaa7w.js";import"./chunk-ngmajm4h.js";import"./chunk-1vt7e9e7.js";import"./chunk-eharmsjt.js";import"./chunk-gafk33py.js";import{hh as M}from"./chunk-zpwasxzh.js";import"./chunk-793067rd.js";import"./chunk-aphcj8rz.js";import"./chunk-6tacv9rs.js";import"./chunk-arzhhj0e.js";import m from"chalk";import K from"open";var A=`
2
+ ____ _ _
3
+ | __ )| | __ _ __| | ___
4
+ | _ \\| |/ _\` |/ _\` |/ _ \\
5
+ | |_) | | (_| | (_| | __/
6
+ |____/|_|\\__,_|\\__,_|\\___|
7
+ `,C={command:"web",describe:"Start Blade server and open web interface",builder:T,handler:async(Z)=>{let H=W(Z);if(await Q(),!process.env.BLADE_SERVER_PASSWORD)console.log(m.yellow("[WARN] BLADE_SERVER_PASSWORD is not set; server is unsecured.")),console.log(m.gray(` Set this environment variable to enable Basic Auth.
8
+ `));let F=await Y.listenAsync(H);if(console.log(m.cyan(A)),console.log(m.gray(` v${M()}
9
+ `)),H.hostname==="0.0.0.0"){let q=`http://localhost:${F.port}`;console.log(m.blue.bold(" Local access: "),m.white(q));let x=X();for(let z of x)console.log(m.blue.bold(" Network access: "),m.white(`http://${z}:${F.port}`));K(q).catch(()=>{})}else{let q=F.url.toString();console.log(m.blue.bold(" Web interface: "),m.white(q)),K(q).catch(()=>{})}console.log(""),console.log(m.gray(` Press Ctrl+C to stop the server.
10
+ `));let J,$=new Promise((q)=>{J=q}),b=R(async()=>{await F.stop(),J()});try{await $}finally{b(),await F.stop()}}};export{C as webCommand};
@@ -1,3 +1,3 @@
1
- import{eh as X}from"./chunk-cm9mph7j.js";import{nh as T}from"./chunk-cz68x56m.js";import{createHash as _}from"node:crypto";import{constants as N,promises as B}from"node:fs";import A from"node:os";import F from"node:path";import{Mutex as w}from"async-mutex";import{LRUCache as k}from"lru-cache";import j from"write-file-atomic";var O=1,S=65536,D=1048576,U=100,R=64;function b(q){return q!==null&&typeof q==="object"&&!Array.isArray(q)}function C(q,Q=2048){return q.length<=Q?q:`${q.slice(0,Q-1)}…`}function M(q){if(typeof q!=="string"||!q.trim())return;try{let Q=new URL(q);return C(`${Q.origin}${Q.pathname}`)}catch{return C(q)}}function I(q){return Array.isArray(q)?q.filter((Q)=>typeof Q==="string"):[]}function m(q){if(!b(q))return[];return Object.entries(q).slice(0,U).map(([Q,Z])=>{let $=b(Z)?Z:{},H=typeof $.type==="string"?$.type:"unknown",G=typeof $.command==="string"?$.command:void 0,J=I($.args),L=H==="stdio"?C([G,...J].filter(Boolean).join(" ")):M($.url);return{kind:"mcp",name:`${Q} (${H})`,...L?{target:L}:{}}})}function E(q){if(!b(q))return[];return Object.entries(q).slice(0,U).map(([Q,Z])=>{let $=b(Z)?Z:{},H=typeof $.command==="string"?C($.command):void 0,G=b($.extensionToLanguage)?Object.keys($.extensionToLanguage).slice(0,12).join(", "):"unknown extensions";return{kind:"lsp",name:`${Q} (${G})`,...H?{target:H}:{}}})}function g(q){if(!Array.isArray(q))return[];return q.slice(0,U).flatMap((Q)=>{if(!b(Q))return[];let Z=typeof Q.id==="string"?Q.id:"unnamed",$=typeof Q.provider==="string"?Q.provider:"unknown",H=typeof Q.model==="string"?Q.model:"unknown",G=b(Q.overrides)?Q.overrides:{},J=M(G.baseUrl);return[{kind:"model",name:`${Z}: ${$}/${H}`,...J?{target:J}:{}}]})}function P(q){if(!b(q))return[];return Object.entries(q).slice(0,U).map(([Q,Z])=>{let $=b(Z)?Z:{},H=typeof $.wireApi==="string"?$.wireApi:"unknown",G=M($.baseUrl);return{kind:"model",name:`${Q} (${H})`,...G?{target:G}:{}}})}function y(q){if(!b(q))return[];let Q=[];for(let Z of["allow","ask","deny"])for(let $ of I(q[Z]).slice(0,U))Q.push({kind:"permission",name:`${Z}: ${C($,512)}`});return Q}function f(q){let Q=[...m(q.mcpServers),...E(q.lspServers),...g(q.models),...P(q.modelProviders),...y(q.permissions)];if(b(q.env))for(let Z of Object.keys(q.env).slice(0,U))Q.push({kind:"environment",name:Z});if(typeof q.permissionMode==="string")Q.push({kind:"permission",name:`permissionMode: ${q.permissionMode}`});return Q}function h(q){return q!=="hooks"&&q!=="disableAllHooks"}function v(q){return _("sha256").update(q).digest("hex")}function l(q,Q){let Z=F.relative(q,Q);return Z===""||!Z.startsWith(`..${F.sep}`)&&Z!==".."&&!F.isAbsolute(Z)}class x{storeDir;static instance=null;mutex=new w;statusCache=new k({max:R});constructor(q=F.join(T(),"workspace-trust")){this.storeDir=q}static getInstance(){if(!x.instance)x.instance=new x;return x.instance}static resetInstance(){x.instance=null}async getStatus(q){let Q=await X(q),Z;try{Z=await this.discoverSensitiveSources(Q.projectPath)}catch(Y){let V={...Q,state:"error",trusted:!1,sensitiveSources:0,sources:[],decision:"undecided",error:Y instanceof Error?Y.message:"Workspace trust review failed"};return this.cacheStatus(q,V),V}if(Z.length===0){let Y={...Q,state:"not_required",trusted:!0,sensitiveSources:0,sources:Z,decision:"undecided"};return this.cacheStatus(q,Y),Y}let $;try{$=await this.readDecisions()}catch(Y){let V={...Q,state:"error",trusted:!1,sensitiveSources:Z.length,sources:Z,decision:"undecided",error:Y instanceof Error?Y.message:"Workspace trust store is unavailable"};return this.cacheStatus(q,V),V}let H=$.filter((Y)=>l(Y.path,Q.trustRoot)),G=Math.max(-1,...H.map((Y)=>Y.path.split(F.sep).length)),J=H.filter((Y)=>Y.path.split(F.sep).length===G),L=J.length>0&&J.every((Y)=>Y.trusted),z=J[0],K=z?.path===Q.trustRoot,W={...Q,state:L?"trusted":"untrusted",trusted:L,sensitiveSources:Z.length,sources:Z,decision:z?K?z.trusted?"trusted":"untrusted":"inherited":"undecided",...z?.decidedAt?{decidedAt:z.decidedAt}:{},...!K&&z?.path?{inheritedFrom:z.path}:{}};return this.cacheStatus(q,W),W}cacheStatus(q,Q){this.statusCache.set(F.resolve(q),Q),this.statusCache.set(Q.projectPath,Q)}getCachedStatus(q){return this.statusCache.get(F.resolve(q))}isTrustedCached(q){return this.getCachedStatus(q)?.state==="trusted"}getCacheStats(){return{capacity:R,entries:this.statusCache.size}}async trust(q){return this.recordDecision(q,!0)}async revoke(q){return this.recordDecision(q,!1)}async recordDecision(q,Q){return this.mutex.runExclusive(async()=>{let Z=await X(q);await this.assertSafeTrustRoot(Z);let $={version:O,path:Z.trustRoot,trusted:Q,decidedAt:new Date().toISOString()};return await this.writeDecision($),this.statusCache.clear(),this.getStatus(q)})}async assertSafeTrustRoot(q){let Q=F.parse(q.trustRoot).root,Z=await B.realpath(A.homedir()).catch(()=>F.resolve(A.homedir()));if(!F.isAbsolute(q.trustRoot)||q.trustRoot===Q||q.trustRoot===Z)throw Error("Refusing to trust the filesystem root or user home directory")}async discoverSensitiveSources(q){let Q=[],Z=await this.reviewPackageScripts(q);if(Z)Q.push(Z);for(let[$,H]of[[".blade/config.json","config"],[".blade/settings.json","settings"],[".blade/settings.local.json","settings"]]){let G=await this.reviewConfigFile(q,$,H);if(G)Q.push(G)}for(let $ of[".blade/plugins",".claude/plugins"]){let H=await this.reviewResourceDirectory(q,$,"plugins","plugin");if(H)Q.push(H)}for(let $ of[".blade/commands",".claude/commands"]){let H=await this.reviewResourceDirectory(q,$,"commands","command");if(H)Q.push(H)}for(let[$,H,G]of[[".blade/skills","skills","skill"],[".claude/skills","skills","skill"],[".blade/agents","agents","agent"],[".claude/agents","agents","agent"]]){let J=await this.reviewResourceDirectory(q,$,H,G);if(J)Q.push(J)}for(let $ of["CLAUDE.md","AGENTS.md","BLADE.md"]){let H=await this.reviewInstructionFile(q,$);if(H)Q.push(H)}return Q}async reviewPackageScripts(q){let Q=F.join(q,"package.json"),Z;try{Z=await B.stat(Q)}catch(J){if(J.code==="ENOENT")return;throw J}if(!Z.isFile())return;if(Z.size>D)throw Error("package.json exceeds the 1 MiB workspace review limit");let $;try{$=JSON.parse(await B.readFile(Q,"utf8"))}catch{return{path:"package.json",kind:"package",keys:[],effects:[],warning:"Invalid package.json; project scripts will remain blocked"}}if(!b($)||!b($.scripts))return;let H=$.scripts,G=Object.keys(H).filter((J)=>typeof H[J]==="string").sort().slice(0,U);if(G.length===0)return;return{path:"package.json",kind:"package",keys:G,effects:G.map((J)=>({kind:"command",name:`package script: ${J}`}))}}async reviewInstructionFile(q,Q){try{if(!(await B.stat(F.join(q,Q))).isFile())return}catch(Z){if(Z.code==="ENOENT")return;throw Z}return{path:Q,kind:"instructions",keys:[Q],effects:[{kind:"instruction",name:Q}]}}async reviewConfigFile(q,Q,Z){let $=F.join(q,Q),H;try{H=await B.stat($)}catch(K){if(K.code==="ENOENT")return;throw K}if(!H.isFile())return;if(H.size>D)throw Error(`${Q} exceeds the 1 MiB workspace review limit`);let G;try{G=JSON.parse(await B.readFile($,"utf8"))}catch{return{path:Q,kind:Z,keys:[],effects:[],warning:"Invalid JSON; the file will remain blocked"}}if(!b(G))return{path:Q,kind:Z,keys:[],effects:[],warning:"Configuration root is not an object"};let J=Object.keys(G).filter(h).sort();if(J.length===0)return;let L=f(G),z=new Set(["mcpServers","lspServers","models","modelProviders","permissions","env","permissionMode"]);for(let K of J)if(!z.has(K))L.push({kind:"configuration",name:K});return{path:Q,kind:Z,keys:J,effects:L}}async reviewResourceDirectory(q,Q,Z,$){let H=F.join(q,Q),G;try{G=await B.readdir(H,{withFileTypes:!0})}catch(L){if(L.code==="ENOENT")return;throw L}let J=G.filter((L)=>Z==="plugins"||Z==="skills"?L.isDirectory()||L.isSymbolicLink():L.isFile()||L.isDirectory()||L.isSymbolicLink()).slice(0,U);if(J.length===0)return;return{path:Q,kind:Z,keys:J.map((L)=>L.name),effects:J.map((L)=>({kind:$,name:L.name}))}}async readDecisions(){let q;try{q=await B.lstat(this.storeDir)}catch($){if($.code==="ENOENT")return[];throw $}if(!q.isDirectory()||q.isSymbolicLink())throw Error("Workspace trust store must be a regular directory");if(process.getuid&&q.uid!==process.getuid())throw Error("Workspace trust store must be owned by the current user");if((q.mode&511)!==448)throw Error("Workspace trust store permissions must be 0700");let Q=await B.readdir(this.storeDir,{withFileTypes:!0}),Z=[];for(let $ of Q){if(!$.name.endsWith(".json"))continue;if(!$.isFile())throw Error("Workspace trust store entries must be regular files");Z.push(await this.readDecision(F.join(this.storeDir,$.name)))}return Z}async readDecision(q){let Q;try{Q=await B.open(q,N.O_RDONLY|N.O_NOFOLLOW)}catch{throw Error("Workspace trust decision must be a regular file")}try{let Z=await Q.stat();if(!Z.isFile()||Z.size>S)throw Error("Workspace trust decision is invalid");if(process.getuid&&Z.uid!==process.getuid())throw Error("Workspace trust decisions must be owned by the current user");if((Z.mode&511)!==384)throw Error("Workspace trust decision permissions must be 0600");let $=JSON.parse(await Q.readFile("utf8"));if(!b($)||$.version!==O||typeof $.path!=="string"||!F.isAbsolute($.path)||typeof $.trusted!=="boolean"||typeof $.decidedAt!=="string"||!Number.isFinite(Date.parse($.decidedAt))||Object.keys($).some((H)=>H!=="version"&&H!=="path"&&H!=="trusted"&&H!=="decidedAt"))throw Error("Workspace trust decision schema is invalid");return{version:O,path:$.path,trusted:$.trusted,decidedAt:$.decidedAt}}finally{await Q.close()}}async writeDecision(q){await this.ensureStoreDirectoryForWrite();let Q=F.join(this.storeDir,`${v(q.path)}.json`);try{let Z=await B.lstat(Q);if(!Z.isFile()||Z.isSymbolicLink())throw Error("Workspace trust decision must be a regular file");if(process.getuid&&Z.uid!==process.getuid())throw Error("Workspace trust decisions must be owned by the current user");if((Z.mode&511)!==384)throw Error("Workspace trust decision permissions must be 0600")}catch(Z){if(Z.code!=="ENOENT")throw Z}await j(Q,`${JSON.stringify(q,null,2)}
1
+ import{oh as X}from"./chunk-aphcj8rz.js";import{xh as T}from"./chunk-6tacv9rs.js";import{createHash as _}from"node:crypto";import{constants as N,promises as B}from"node:fs";import A from"node:os";import F from"node:path";import{Mutex as w}from"async-mutex";import{LRUCache as k}from"lru-cache";import j from"write-file-atomic";var O=1,S=65536,D=1048576,U=100,R=64;function b(q){return q!==null&&typeof q==="object"&&!Array.isArray(q)}function C(q,Q=2048){return q.length<=Q?q:`${q.slice(0,Q-1)}…`}function M(q){if(typeof q!=="string"||!q.trim())return;try{let Q=new URL(q);return C(`${Q.origin}${Q.pathname}`)}catch{return C(q)}}function I(q){return Array.isArray(q)?q.filter((Q)=>typeof Q==="string"):[]}function m(q){if(!b(q))return[];return Object.entries(q).slice(0,U).map(([Q,Z])=>{let $=b(Z)?Z:{},H=typeof $.type==="string"?$.type:"unknown",G=typeof $.command==="string"?$.command:void 0,J=I($.args),L=H==="stdio"?C([G,...J].filter(Boolean).join(" ")):M($.url);return{kind:"mcp",name:`${Q} (${H})`,...L?{target:L}:{}}})}function E(q){if(!b(q))return[];return Object.entries(q).slice(0,U).map(([Q,Z])=>{let $=b(Z)?Z:{},H=typeof $.command==="string"?C($.command):void 0,G=b($.extensionToLanguage)?Object.keys($.extensionToLanguage).slice(0,12).join(", "):"unknown extensions";return{kind:"lsp",name:`${Q} (${G})`,...H?{target:H}:{}}})}function g(q){if(!Array.isArray(q))return[];return q.slice(0,U).flatMap((Q)=>{if(!b(Q))return[];let Z=typeof Q.id==="string"?Q.id:"unnamed",$=typeof Q.provider==="string"?Q.provider:"unknown",H=typeof Q.model==="string"?Q.model:"unknown",G=b(Q.overrides)?Q.overrides:{},J=M(G.baseUrl);return[{kind:"model",name:`${Z}: ${$}/${H}`,...J?{target:J}:{}}]})}function P(q){if(!b(q))return[];return Object.entries(q).slice(0,U).map(([Q,Z])=>{let $=b(Z)?Z:{},H=typeof $.wireApi==="string"?$.wireApi:"unknown",G=M($.baseUrl);return{kind:"model",name:`${Q} (${H})`,...G?{target:G}:{}}})}function y(q){if(!b(q))return[];let Q=[];for(let Z of["allow","ask","deny"])for(let $ of I(q[Z]).slice(0,U))Q.push({kind:"permission",name:`${Z}: ${C($,512)}`});return Q}function f(q){let Q=[...m(q.mcpServers),...E(q.lspServers),...g(q.models),...P(q.modelProviders),...y(q.permissions)];if(b(q.env))for(let Z of Object.keys(q.env).slice(0,U))Q.push({kind:"environment",name:Z});if(typeof q.permissionMode==="string")Q.push({kind:"permission",name:`permissionMode: ${q.permissionMode}`});return Q}function h(q){return q!=="hooks"&&q!=="disableAllHooks"}function v(q){return _("sha256").update(q).digest("hex")}function l(q,Q){let Z=F.relative(q,Q);return Z===""||!Z.startsWith(`..${F.sep}`)&&Z!==".."&&!F.isAbsolute(Z)}class x{storeDir;static instance=null;mutex=new w;statusCache=new k({max:R});constructor(q=F.join(T(),"workspace-trust")){this.storeDir=q}static getInstance(){if(!x.instance)x.instance=new x;return x.instance}static resetInstance(){x.instance=null}async getStatus(q){let Q=await X(q),Z;try{Z=await this.discoverSensitiveSources(Q.projectPath)}catch(Y){let V={...Q,state:"error",trusted:!1,sensitiveSources:0,sources:[],decision:"undecided",error:Y instanceof Error?Y.message:"Workspace trust review failed"};return this.cacheStatus(q,V),V}if(Z.length===0){let Y={...Q,state:"not_required",trusted:!0,sensitiveSources:0,sources:Z,decision:"undecided"};return this.cacheStatus(q,Y),Y}let $;try{$=await this.readDecisions()}catch(Y){let V={...Q,state:"error",trusted:!1,sensitiveSources:Z.length,sources:Z,decision:"undecided",error:Y instanceof Error?Y.message:"Workspace trust store is unavailable"};return this.cacheStatus(q,V),V}let H=$.filter((Y)=>l(Y.path,Q.trustRoot)),G=Math.max(-1,...H.map((Y)=>Y.path.split(F.sep).length)),J=H.filter((Y)=>Y.path.split(F.sep).length===G),L=J.length>0&&J.every((Y)=>Y.trusted),z=J[0],K=z?.path===Q.trustRoot,W={...Q,state:L?"trusted":"untrusted",trusted:L,sensitiveSources:Z.length,sources:Z,decision:z?K?z.trusted?"trusted":"untrusted":"inherited":"undecided",...z?.decidedAt?{decidedAt:z.decidedAt}:{},...!K&&z?.path?{inheritedFrom:z.path}:{}};return this.cacheStatus(q,W),W}cacheStatus(q,Q){this.statusCache.set(F.resolve(q),Q),this.statusCache.set(Q.projectPath,Q)}getCachedStatus(q){return this.statusCache.get(F.resolve(q))}isTrustedCached(q){return this.getCachedStatus(q)?.state==="trusted"}getCacheStats(){return{capacity:R,entries:this.statusCache.size}}async trust(q){return this.recordDecision(q,!0)}async revoke(q){return this.recordDecision(q,!1)}async recordDecision(q,Q){return this.mutex.runExclusive(async()=>{let Z=await X(q);await this.assertSafeTrustRoot(Z);let $={version:O,path:Z.trustRoot,trusted:Q,decidedAt:new Date().toISOString()};return await this.writeDecision($),this.statusCache.clear(),this.getStatus(q)})}async assertSafeTrustRoot(q){let Q=F.parse(q.trustRoot).root,Z=await B.realpath(A.homedir()).catch(()=>F.resolve(A.homedir()));if(!F.isAbsolute(q.trustRoot)||q.trustRoot===Q||q.trustRoot===Z)throw Error("Refusing to trust the filesystem root or user home directory")}async discoverSensitiveSources(q){let Q=[],Z=await this.reviewPackageScripts(q);if(Z)Q.push(Z);for(let[$,H]of[[".blade/config.json","config"],[".blade/settings.json","settings"],[".blade/settings.local.json","settings"]]){let G=await this.reviewConfigFile(q,$,H);if(G)Q.push(G)}for(let $ of[".blade/plugins",".claude/plugins"]){let H=await this.reviewResourceDirectory(q,$,"plugins","plugin");if(H)Q.push(H)}for(let $ of[".blade/commands",".claude/commands"]){let H=await this.reviewResourceDirectory(q,$,"commands","command");if(H)Q.push(H)}for(let[$,H,G]of[[".blade/skills","skills","skill"],[".claude/skills","skills","skill"],[".blade/agents","agents","agent"],[".claude/agents","agents","agent"]]){let J=await this.reviewResourceDirectory(q,$,H,G);if(J)Q.push(J)}for(let $ of["CLAUDE.md","AGENTS.md","BLADE.md"]){let H=await this.reviewInstructionFile(q,$);if(H)Q.push(H)}return Q}async reviewPackageScripts(q){let Q=F.join(q,"package.json"),Z;try{Z=await B.stat(Q)}catch(J){if(J.code==="ENOENT")return;throw J}if(!Z.isFile())return;if(Z.size>D)throw Error("package.json exceeds the 1 MiB workspace review limit");let $;try{$=JSON.parse(await B.readFile(Q,"utf8"))}catch{return{path:"package.json",kind:"package",keys:[],effects:[],warning:"Invalid package.json; project scripts will remain blocked"}}if(!b($)||!b($.scripts))return;let H=$.scripts,G=Object.keys(H).filter((J)=>typeof H[J]==="string").sort().slice(0,U);if(G.length===0)return;return{path:"package.json",kind:"package",keys:G,effects:G.map((J)=>({kind:"command",name:`package script: ${J}`}))}}async reviewInstructionFile(q,Q){try{if(!(await B.stat(F.join(q,Q))).isFile())return}catch(Z){if(Z.code==="ENOENT")return;throw Z}return{path:Q,kind:"instructions",keys:[Q],effects:[{kind:"instruction",name:Q}]}}async reviewConfigFile(q,Q,Z){let $=F.join(q,Q),H;try{H=await B.stat($)}catch(K){if(K.code==="ENOENT")return;throw K}if(!H.isFile())return;if(H.size>D)throw Error(`${Q} exceeds the 1 MiB workspace review limit`);let G;try{G=JSON.parse(await B.readFile($,"utf8"))}catch{return{path:Q,kind:Z,keys:[],effects:[],warning:"Invalid JSON; the file will remain blocked"}}if(!b(G))return{path:Q,kind:Z,keys:[],effects:[],warning:"Configuration root is not an object"};let J=Object.keys(G).filter(h).sort();if(J.length===0)return;let L=f(G),z=new Set(["mcpServers","lspServers","models","modelProviders","permissions","env","permissionMode"]);for(let K of J)if(!z.has(K))L.push({kind:"configuration",name:K});return{path:Q,kind:Z,keys:J,effects:L}}async reviewResourceDirectory(q,Q,Z,$){let H=F.join(q,Q),G;try{G=await B.readdir(H,{withFileTypes:!0})}catch(L){if(L.code==="ENOENT")return;throw L}let J=G.filter((L)=>Z==="plugins"||Z==="skills"?L.isDirectory()||L.isSymbolicLink():L.isFile()||L.isDirectory()||L.isSymbolicLink()).slice(0,U);if(J.length===0)return;return{path:Q,kind:Z,keys:J.map((L)=>L.name),effects:J.map((L)=>({kind:$,name:L.name}))}}async readDecisions(){let q;try{q=await B.lstat(this.storeDir)}catch($){if($.code==="ENOENT")return[];throw $}if(!q.isDirectory()||q.isSymbolicLink())throw Error("Workspace trust store must be a regular directory");if(process.getuid&&q.uid!==process.getuid())throw Error("Workspace trust store must be owned by the current user");if((q.mode&511)!==448)throw Error("Workspace trust store permissions must be 0700");let Q=await B.readdir(this.storeDir,{withFileTypes:!0}),Z=[];for(let $ of Q){if(!$.name.endsWith(".json"))continue;if(!$.isFile())throw Error("Workspace trust store entries must be regular files");Z.push(await this.readDecision(F.join(this.storeDir,$.name)))}return Z}async readDecision(q){let Q;try{Q=await B.open(q,N.O_RDONLY|N.O_NOFOLLOW)}catch{throw Error("Workspace trust decision must be a regular file")}try{let Z=await Q.stat();if(!Z.isFile()||Z.size>S)throw Error("Workspace trust decision is invalid");if(process.getuid&&Z.uid!==process.getuid())throw Error("Workspace trust decisions must be owned by the current user");if((Z.mode&511)!==384)throw Error("Workspace trust decision permissions must be 0600");let $=JSON.parse(await Q.readFile("utf8"));if(!b($)||$.version!==O||typeof $.path!=="string"||!F.isAbsolute($.path)||typeof $.trusted!=="boolean"||typeof $.decidedAt!=="string"||!Number.isFinite(Date.parse($.decidedAt))||Object.keys($).some((H)=>H!=="version"&&H!=="path"&&H!=="trusted"&&H!=="decidedAt"))throw Error("Workspace trust decision schema is invalid");return{version:O,path:$.path,trusted:$.trusted,decidedAt:$.decidedAt}}finally{await Q.close()}}async writeDecision(q){await this.ensureStoreDirectoryForWrite();let Q=F.join(this.storeDir,`${v(q.path)}.json`);try{let Z=await B.lstat(Q);if(!Z.isFile()||Z.isSymbolicLink())throw Error("Workspace trust decision must be a regular file");if(process.getuid&&Z.uid!==process.getuid())throw Error("Workspace trust decisions must be owned by the current user");if((Z.mode&511)!==384)throw Error("Workspace trust decision permissions must be 0600")}catch(Z){if(Z.code!=="ENOENT")throw Z}await j(Q,`${JSON.stringify(q,null,2)}
2
2
  `,{mode:384}),await B.chmod(Q,384)}async ensureStoreDirectoryForWrite(){try{let q=await B.lstat(this.storeDir);if(!q.isDirectory()||q.isSymbolicLink())throw Error("Workspace trust store must be a regular directory");if(process.getuid&&q.uid!==process.getuid())throw Error("Workspace trust store must be owned by the current user");if((q.mode&511)!==448)throw Error("Workspace trust store permissions must be 0700")}catch(q){if(q.code!=="ENOENT")throw q;await B.mkdir(this.storeDir,{recursive:!0,mode:448}),await B.chmod(this.storeDir,448)}}}
3
- export{R as ch,x as dh};
3
+ export{R as mh,x as nh};
@@ -1,2 +1,2 @@
1
1
  import d from"typebox/schema";import o from"typebox/value";class u extends Error{issues;constructor(r){super(r.map((t)=>{return`${t.path.length>0?t.path.join("."):"root"}: ${t.message}`}).join("; "));this.issues=r;this.name="SchemaValidationError"}}function p(r){if(!r)return[];return r.split("/").slice(1).map((t)=>t.replace(/~1/g,"/").replace(/~0/g,"~")).map((t)=>/^(0|[1-9]\d*)$/.test(t)?Number(t):t)}function g(r,t){let n=r;for(let e of t){if(n===null||typeof n!=="object")return;n=n[e]}return n}function i(r,t){let[,n]=d.Errors(r,t);return n.map((e)=>{let s=p(e.instancePath);return{code:e.keyword,path:s,message:e.message,value:g(t,s)}})}function a(r,t){let n=o.Default(r,o.Clone(t)),e=i(r,n);if(e.length>0)return{success:!1,error:new u(e)};let s=o.Clean(r,n),c=i(r,s);if(c.length>0)return{success:!1,error:new u(c)};return{success:!0,data:s}}function f(r,t){let n=a(r,t);if(!n.success)throw n.error;return n.data}import l from"typebox";function x(r){return Object.defineProperties(r,{parse:{value:(t)=>f(r,t),enumerable:!1},safeParse:{value:(t)=>a(r,t),enumerable:!1}}),r}function b(r,t){return l.Optional({...r,default:t})}function V(r,t={}){return l.Unsafe({type:"string",enum:[...r],...t})}
2
- export{a as _f,f as $f,l as ag,x as bg,b as cg,V as dg};
2
+ export{a as ig,f as jg,l as kg,x as lg,b as mg,V as ng};
@@ -0,0 +1 @@
1
+ import{f as a,g as i,h as l,i as m}from"./chunk-m6a1c1tg.js";import"./chunk-s1xp6g8m.js";import"./chunk-r94jtbd2.js";import"./chunk-57gp2px5.js";import"./chunk-s16x4qkb.js";import"./chunk-tb4jmrkp.js";import"./chunk-98qmtexa.js";import"./chunk-e11kmyt3.js";import"./chunk-ky32s7az.js";import"./chunk-pwehsv52.js";import"./chunk-edd8n5r0.js";import"./chunk-zxwdtn6q.js";import"./chunk-eg5mh9m9.js";import"./chunk-a49dy92d.js";import{od as n}from"./chunk-ejsggxs4.js";import"./chunk-5gjqdbxb.js";import{Kd as s}from"./chunk-wzkr0p09.js";import"./chunk-v508x7cg.js";import"./chunk-czb954vz.js";import"./chunk-h127mgg2.js";import"./chunk-y51v2jvh.js";import"./chunk-5ha0vf37.js";import"./chunk-sbpb7pcc.js";import"./chunk-j6w1vf2q.js";import"./chunk-k4t45b64.js";import"./chunk-hbbpe5f0.js";import"./chunk-bnp9asmd.js";import"./chunk-pfmmvpfh.js";import"./chunk-2yxdneb9.js";import"./chunk-svczh6hn.js";import"./chunk-1jm8njkw.js";import"./chunk-7mdbwjxj.js";import"./chunk-fz60jh3y.js";import"./chunk-d39xaa7w.js";import"./chunk-ngmajm4h.js";import"./chunk-1vt7e9e7.js";import"./chunk-eharmsjt.js";import"./chunk-gafk33py.js";import"./chunk-zpwasxzh.js";import"./chunk-793067rd.js";import"./chunk-aphcj8rz.js";import"./chunk-6tacv9rs.js";import"./chunk-arzhhj0e.js";import v from"chalk";var C={command:"serve",describe:"Start a headless Blade server (no browser)",builder:a,handler:async(p)=>{let r=i(p);if(await s(),!process.env.BLADE_SERVER_PASSWORD)console.log(v.yellow("Warning: BLADE_SERVER_PASSWORD is not set; server is unsecured."));let e=await m.listenAsync(r);if(console.log(`Blade server listening on http://${e.hostname}:${e.port}`),r.hostname==="0.0.0.0"){let o=l();for(let g of o)console.log(` Network: http://${g}:${e.port}`)}let t,c=new Promise((o)=>{t=o}),d=n(async()=>{await e.stop(),t()});try{await c}finally{d(),await e.stop()}}};export{C as serveCommand};