blade-code 0.10.74 → 0.10.75

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 (41) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-2e6pcscc.js → chunk-0jmvv2vb.js} +1 -1
  3. package/dist/{chunk-8w1gtvy0.js → chunk-1zwq624e.js} +1 -1
  4. package/dist/{chunk-y67yrm3k.js → chunk-22sw5bv4.js} +1 -1
  5. package/dist/{chunk-1ykz47d9.js → chunk-57jj40er.js} +1 -1
  6. package/dist/{chunk-ntvm6t83.js → chunk-5a132j64.js} +1 -1
  7. package/dist/{chunk-bawbgvm3.js → chunk-5dz30k5z.js} +1 -1
  8. package/dist/{chunk-54va5hc4.js → chunk-5tat9wy9.js} +1 -1
  9. package/dist/{chunk-fhxy024n.js → chunk-6bka1j4q.js} +1 -1
  10. package/dist/chunk-7yppfbgr.js +1 -0
  11. package/dist/{chunk-6ra5d8ng.js → chunk-agxs6rwh.js} +1 -1
  12. package/dist/{chunk-453tf6d0.js → chunk-c74e0jx1.js} +1 -1
  13. package/dist/{chunk-bxtw5f52.js → chunk-d2eahefk.js} +1 -1
  14. package/dist/{chunk-7kf3hwp3.js → chunk-egp0crrc.js} +1 -1
  15. package/dist/chunk-fefz145r.js +1 -0
  16. package/dist/{chunk-yrbbx1pr.js → chunk-fpkq3ch3.js} +1 -1
  17. package/dist/{chunk-8zpsw401.js → chunk-g3fbgp1k.js} +1 -1
  18. package/dist/{chunk-map4165w.js → chunk-gz2fx7th.js} +1 -1
  19. package/dist/{chunk-d51pge1m.js → chunk-hzy5jzkp.js} +1 -1
  20. package/dist/{chunk-21bb1xda.js → chunk-kb5xaar0.js} +3 -3
  21. package/dist/{chunk-cpky2bgy.js → chunk-m6yfwyva.js} +1 -1
  22. package/dist/{chunk-16k0tc6h.js → chunk-m88zk362.js} +1 -1
  23. package/dist/{chunk-7hc84akg.js → chunk-n0x5z56v.js} +2 -2
  24. package/dist/{chunk-k3ddw7q3.js → chunk-nfyxb2q5.js} +1 -1
  25. package/dist/{chunk-8asewt01.js → chunk-pdansrbx.js} +1 -1
  26. package/dist/{chunk-74wb5e1h.js → chunk-rdtgv0n8.js} +1 -1
  27. package/dist/{chunk-shx5e10e.js → chunk-s7gf2ds9.js} +1 -1
  28. package/dist/{chunk-1qde0g23.js → chunk-ssfvcnat.js} +1 -1
  29. package/dist/{chunk-63c25yhj.js → chunk-swvp6j18.js} +1 -1
  30. package/dist/{chunk-0m2bs3s2.js → chunk-tnjq10zs.js} +1 -1
  31. package/dist/{chunk-kheaqr7j.js → chunk-v0znd20r.js} +1 -1
  32. package/dist/{chunk-xgmn301g.js → chunk-v4ek6q8t.js} +1 -1
  33. package/dist/{chunk-vm5bzhrm.js → chunk-vbxtqh24.js} +1 -1
  34. package/dist/{chunk-wgztvasm.js → chunk-vkpddj6a.js} +1 -1
  35. package/dist/{chunk-cvbacjwr.js → chunk-w1m7wz1y.js} +1 -1
  36. package/dist/{chunk-ytce7gnt.js → chunk-xts31qj4.js} +1 -1
  37. package/dist/{chunk-fx19tpcm.js → chunk-yk8s8kjt.js} +1 -1
  38. package/dist/{chunk-465tgzab.js → chunk-zph2jekm.js} +1 -1
  39. package/package.json +1 -1
  40. package/dist/chunk-aqzbsxjh.js +0 -1
  41. package/dist/chunk-x5579r4w.js +0 -1
package/dist/blade.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{Ad as W}from"./chunk-shx5e10e.js";import{Dd as F,Ed as M}from"./chunk-2m4mgw58.js";import"./chunk-ytce7gnt.js";import"./chunk-v508x7cg.js";import"./chunk-xkz9ecdx.js";import"./chunk-7kf3hwp3.js";import"./chunk-03947xkg.js";import"./chunk-465tgzab.js";import"./chunk-qp8mejbn.js";import"./chunk-c03xn5s3.js";import"./chunk-yjbq4jeg.js";import{Eg as N,Fg as B}from"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import{eh as T}from"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import"./chunk-bj5msq36.js";import"./chunk-453tf6d0.js";import"./chunk-yz80dp1a.js";import"./chunk-p7ww2tcn.js";import"./chunk-qw5j84ny.js";import{Nh as J}from"./chunk-99nevk7k.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-wgztvasm.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-63c25yhj.js");K(U.map((Z)=>v.resolve(Q,Z)))}if(q(E,"--trust-workspace","--trustWorkspace")){let{WorkspaceTrustService:K}=await import("./chunk-qxjsfp2c.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-bawbgvm3.js");if(await K())return}if(W(),q(E,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-8asewt01.js");if(await K())return}if(E.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-8w1gtvy0.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-x5579r4w.js"),import("./chunk-vm5bzhrm.js"),import("./chunk-7hc84akg.js"),import("./chunk-fj297dmj.js"),import("./chunk-d51pge1m.js"),import("./chunk-44zkyzrj.js"),import("./chunk-2v10cw32.js"),import("./chunk-1qde0g23.js"),import("./chunk-cpky2bgy.js"),import("./chunk-cvbacjwr.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{Ad as W}from"./chunk-s7gf2ds9.js";import{Dd as F,Ed as M}from"./chunk-2m4mgw58.js";import"./chunk-xts31qj4.js";import"./chunk-v508x7cg.js";import"./chunk-xkz9ecdx.js";import"./chunk-egp0crrc.js";import"./chunk-03947xkg.js";import"./chunk-zph2jekm.js";import"./chunk-qp8mejbn.js";import"./chunk-c03xn5s3.js";import"./chunk-yjbq4jeg.js";import{Eg as N,Fg as B}from"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import{eh as T}from"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import"./chunk-bj5msq36.js";import"./chunk-c74e0jx1.js";import"./chunk-yz80dp1a.js";import"./chunk-p7ww2tcn.js";import"./chunk-qw5j84ny.js";import{Nh as J}from"./chunk-99nevk7k.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-vkpddj6a.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-swvp6j18.js");K(U.map((Z)=>v.resolve(Q,Z)))}if(q(E,"--trust-workspace","--trustWorkspace")){let{WorkspaceTrustService:K}=await import("./chunk-qxjsfp2c.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-5dz30k5z.js");if(await K())return}if(W(),q(E,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-pdansrbx.js");if(await K())return}if(E.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-1zwq624e.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-7yppfbgr.js"),import("./chunk-vbxtqh24.js"),import("./chunk-n0x5z56v.js"),import("./chunk-fj297dmj.js"),import("./chunk-hzy5jzkp.js"),import("./chunk-44zkyzrj.js"),import("./chunk-2v10cw32.js"),import("./chunk-ssfvcnat.js"),import("./chunk-m6yfwyva.js"),import("./chunk-w1m7wz1y.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-aqzbsxjh.js").then(({checkVersionOnStartup:C})=>C()),[{render:w},{createElement:f},{AppWrapper:j}]=await Promise.all([import("ink"),import("react"),import("./chunk-16k0tc6h.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-fefz145r.js").then(({checkVersionOnStartup:C})=>C()),[{render:w},{createElement:f},{AppWrapper:j}]=await Promise.all([import("ink"),import("react"),import("./chunk-m88zk362.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 +1 @@
1
- import{te as a,ue as b,ve as c}from"./chunk-y67yrm3k.js";import"./chunk-465tgzab.js";import"./chunk-qp8mejbn.js";import"./chunk-c03xn5s3.js";import"./chunk-yjbq4jeg.js";import"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import"./chunk-bj5msq36.js";import"./chunk-453tf6d0.js";import"./chunk-yz80dp1a.js";import"./chunk-p7ww2tcn.js";import"./chunk-qw5j84ny.js";import"./chunk-99nevk7k.js";export{c as snapshotWorkspaceModelResources,b as resolveWorkspaceModelResources,a as cloneWorkspaceModelConfig};
1
+ import{te as a,ue as b,ve as c}from"./chunk-22sw5bv4.js";import"./chunk-zph2jekm.js";import"./chunk-qp8mejbn.js";import"./chunk-c03xn5s3.js";import"./chunk-yjbq4jeg.js";import"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import"./chunk-bj5msq36.js";import"./chunk-c74e0jx1.js";import"./chunk-yz80dp1a.js";import"./chunk-p7ww2tcn.js";import"./chunk-qw5j84ny.js";import"./chunk-99nevk7k.js";export{c as snapshotWorkspaceModelResources,b as resolveWorkspaceModelResources,a as cloneWorkspaceModelConfig};
@@ -1,4 +1,4 @@
1
- import{s as yz,t as hz}from"./chunk-k3ddw7q3.js";import{u as b}from"./chunk-6ra5d8ng.js";import{A as Bz,v as Tz,w as jz,x as Xz,y as Dz,z as Lz}from"./chunk-fhxy024n.js";import{F as N,M as Zz,N as $z,R as Qz,U as Wz,V as Yz,Z as Hz,na as Gz,oa as Fz,pa as Uz,qa as Vz}from"./chunk-21bb1xda.js";import{Aa as bz}from"./chunk-fx19tpcm.js";import{Ca as Jz}from"./chunk-22s3r2xy.js";import{Fb as zz,kb as s,wb as e}from"./chunk-8zpsw401.js";import{Qb as k}from"./chunk-fbgzeb3m.js";import{Ac as a,Cc as o,Ic as I,Jc as n,Lc as x,Oc as t,Tc as P,Wc as F,hc as v,rc as l,sc as i,xc as r}from"./chunk-1ykz47d9.js";import"./chunk-qyxbee3w.js";import"./chunk-r297pq3s.js";import{zd as Sz}from"./chunk-shx5e10e.js";import"./chunk-2m4mgw58.js";import{Ud as qz,Vd as Nz}from"./chunk-ytce7gnt.js";import"./chunk-v508x7cg.js";import{ee as C}from"./chunk-xkz9ecdx.js";import{ie as d}from"./chunk-rjgfy07e.js";import"./chunk-2faga011.js";import{re as Ez}from"./chunk-xbj18hxh.js";import"./chunk-y67yrm3k.js";import"./chunk-74wb5e1h.js";import"./chunk-kaf6m50a.js";import{af as xz}from"./chunk-0cbpjhq7.js";import"./chunk-rc7jnds2.js";import"./chunk-7kf3hwp3.js";import"./chunk-03947xkg.js";import{Uf as Rz,Xf as Pz}from"./chunk-465tgzab.js";import"./chunk-qp8mejbn.js";import"./chunk-c03xn5s3.js";import{Ag as m,Bg as M,zg as S}from"./chunk-yjbq4jeg.js";import{Fg as _z}from"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import{fh as T}from"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import{mh as Oz,ph as Az}from"./chunk-bj5msq36.js";import"./chunk-453tf6d0.js";import"./chunk-yz80dp1a.js";import"./chunk-p7ww2tcn.js";import{Lh as p}from"./chunk-qw5j84ny.js";import"./chunk-99nevk7k.js";import{Readable as dz,Writable as vz}from"node:stream";import*as y from"@agentclientprotocol/sdk";import Kz from"node:path";import{PROTOCOL_VERSION as pz,RequestError as mz}from"@agentclientprotocol/sdk";import{RequestError as Iz}from"@agentclientprotocol/sdk";import{nanoid as h}from"nanoid";var G=T("Agent");function c(z){if(!z)return{};return Object.fromEntries(z.map((Z)=>[Z.name,Z.value]))}function Cz(z){if("command"in z)return{type:"stdio",command:z.command,args:z.args,env:c(z.env)};if("url"in z)return{type:z.type,url:z.url,headers:c("headers"in z?z.headers:void 0)};return null}function fz(z){let Z={};for(let J of z){let Y=Cz(J);if(Y)Z[J.name]=Y}return Z}function wz(z){if(typeof z==="string")return z?[{type:"text",text:z}]:[];return z.flatMap((Z)=>{if(Z.type==="text")return Z.text?[{type:"text",text:Z.text}]:[];let J=Z.image_url.url,Y=/^data:([^;,]+);base64,(.+)$/s.exec(J);if(!Y)return[{type:"text",text:"[Image]"}];return[{type:"image",mimeType:Y[1]??"image/png",data:Y[2]??""}]})}function uz(z){let Z=n(z.metadata);return Z?[{type:"text",text:I(Z)}]:wz(z.content)}function gz(z){return[`Status: ${z.status}`,`Exit code: ${z.exitCode??"null"}`,`Duration: ${(z.durationMs/1000).toFixed(3)} seconds`].join(`
1
+ import{s as yz,t as hz}from"./chunk-nfyxb2q5.js";import{u as b}from"./chunk-agxs6rwh.js";import{A as Bz,v as Tz,w as jz,x as Xz,y as Dz,z as Lz}from"./chunk-6bka1j4q.js";import{F as N,M as Zz,N as $z,R as Qz,U as Wz,V as Yz,Z as Hz,na as Gz,oa as Fz,pa as Uz,qa as Vz}from"./chunk-kb5xaar0.js";import{Aa as bz}from"./chunk-yk8s8kjt.js";import{Ca as Jz}from"./chunk-22s3r2xy.js";import{Fb as zz,kb as s,wb as e}from"./chunk-g3fbgp1k.js";import{Qb as k}from"./chunk-fbgzeb3m.js";import{Ac as a,Cc as o,Ic as I,Jc as n,Lc as x,Oc as t,Tc as P,Wc as F,hc as v,rc as l,sc as i,xc as r}from"./chunk-57jj40er.js";import"./chunk-qyxbee3w.js";import"./chunk-r297pq3s.js";import{zd as Sz}from"./chunk-s7gf2ds9.js";import"./chunk-2m4mgw58.js";import{Ud as qz,Vd as Nz}from"./chunk-xts31qj4.js";import"./chunk-v508x7cg.js";import{ee as C}from"./chunk-xkz9ecdx.js";import{ie as d}from"./chunk-rjgfy07e.js";import"./chunk-2faga011.js";import{re as Ez}from"./chunk-xbj18hxh.js";import"./chunk-22sw5bv4.js";import"./chunk-rdtgv0n8.js";import"./chunk-kaf6m50a.js";import{af as xz}from"./chunk-0cbpjhq7.js";import"./chunk-rc7jnds2.js";import"./chunk-egp0crrc.js";import"./chunk-03947xkg.js";import{Uf as Rz,Xf as Pz}from"./chunk-zph2jekm.js";import"./chunk-qp8mejbn.js";import"./chunk-c03xn5s3.js";import{Ag as m,Bg as M,zg as S}from"./chunk-yjbq4jeg.js";import{Fg as _z}from"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import{fh as T}from"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import{mh as Oz,ph as Az}from"./chunk-bj5msq36.js";import"./chunk-c74e0jx1.js";import"./chunk-yz80dp1a.js";import"./chunk-p7ww2tcn.js";import{Lh as p}from"./chunk-qw5j84ny.js";import"./chunk-99nevk7k.js";import{Readable as dz,Writable as vz}from"node:stream";import*as y from"@agentclientprotocol/sdk";import Kz from"node:path";import{PROTOCOL_VERSION as pz,RequestError as mz}from"@agentclientprotocol/sdk";import{RequestError as Iz}from"@agentclientprotocol/sdk";import{nanoid as h}from"nanoid";var G=T("Agent");function c(z){if(!z)return{};return Object.fromEntries(z.map((Z)=>[Z.name,Z.value]))}function Cz(z){if("command"in z)return{type:"stdio",command:z.command,args:z.args,env:c(z.env)};if("url"in z)return{type:z.type,url:z.url,headers:c("headers"in z?z.headers:void 0)};return null}function fz(z){let Z={};for(let J of z){let Y=Cz(J);if(Y)Z[J.name]=Y}return Z}function wz(z){if(typeof z==="string")return z?[{type:"text",text:z}]:[];return z.flatMap((Z)=>{if(Z.type==="text")return Z.text?[{type:"text",text:Z.text}]:[];let J=Z.image_url.url,Y=/^data:([^;,]+);base64,(.+)$/s.exec(J);if(!Y)return[{type:"text",text:"[Image]"}];return[{type:"image",mimeType:Y[1]??"image/png",data:Y[2]??""}]})}function uz(z){let Z=n(z.metadata);return Z?[{type:"text",text:I(Z)}]:wz(z.content)}function gz(z){return[`Status: ${z.status}`,`Exit code: ${z.exitCode??"null"}`,`Duration: ${(z.durationMs/1000).toFixed(3)} seconds`].join(`
2
2
  `)}function cz(z){if(!d(z)||z.reason!=="queue_full"||z.resource!=="pending_count"&&z.resource!=="pending_bytes")return;return{...l("capacity"),resource:z.resource}}class E{id;cwd;connection;clientCapabilities;options;agent=null;runtime=null;pendingPrompt=null;pendingPromptCompletion=null;pendingUserShell=null;pendingUserShellCompletion=null;pendingSideConversation=null;pendingSideConversationCompletion=null;pendingResumeRequested=!1;availableCommandsTimer=null;taskStatusUnsubscribe;destroyed=!1;destroyFinished=!1;destroyPromise;messages;contextMessages;mode;updateEgress;constructor(z,Z,J,Y,H={}){this.id=z;this.cwd=Z;this.connection=J;this.clientCapabilities=Y;this.options=H;this.messages=[...H.initialMessages??[]],this.contextMessages=[...this.messages],this.mode=this.mapPermissionModeToMode(H.permissionMode),this.updateEgress=new Bz({maxPendingItems:jz,maxPendingBytes:Xz,writeTimeoutMs:Dz,signal:J.signal,sizeOf:(W)=>Buffer.byteLength(JSON.stringify(W)),write:async(W)=>{await J.sessionUpdate(W)},onFailure:(W)=>this.handleUpdateEgressFailure(W)})}async refreshPersistedMessages(){let[z,Z]=await Promise.all([F.loadSession(this.id,this.cwd),F.loadSessionModelContext(this.id,this.cwd)]);if(z.length>0)this.messages=z;if(Z.length>0)this.contextMessages=Z}async loadModelContextOr(z){let Z=await F.loadSessionModelContext(this.id,this.cwd);return Z.length>0?Z:[...z]}mapPermissionModeToMode(z){switch(z){case"yolo":return"yolo";case"autoEdit":return"auto-edit";case"plan":return"plan";case"default":default:return"default"}}createAgent(){if(!this.runtime)throw Error("Session runtime is unavailable");return Hz.createWithRuntime(this.runtime,{sessionId:this.id,...this.options.taskWorktree?{toolBlacklist:["EnterWorktree","ExitWorktree"]}:{}})}async initialize(){if(G.debug(`[AcpSession ${this.id}] Initializing...`),await F.setSessionPermissionMode(this.id,this.cwd,this.mapModeToPermissionMode()??"default"),N.initializeSession(this.connection,this.id,this.clientCapabilities,this.cwd,async(W)=>{await this.sendUpdateAndWait(W)}),G.debug(`[AcpSession ${this.id}] ACP service context initialized`),await zz.resolvePendingWithHandler(this.cwd,this.id,{requestConfirmation:(W)=>this.requestPermission(W)}))await this.refreshPersistedMessages();else if((this.options.initialMessages?.length??0)>0)this.contextMessages=await this.loadModelContextOr(this.options.initialMessages??[]);let Z=this.options.mcpServers?fz(this.options.mcpServers):void 0,J=N.getInstance().getTerminalService(this.id);if(this.runtime=await Qz.create({sessionId:this.id,workspaceRoot:this.cwd,permissionMode:this.mapModeToPermissionMode(),...Z?{mcpServers:Z}:{},...this.options.taskWorktree?{taskWorktree:this.options.taskWorktree}:{},...this.options.taskIsolation?{taskIsolation:this.options.taskIsolation}:{},userShellExecutor:{execute:async(W,Q)=>{let j=await J.execute(W,{cwd:Q.cwd,env:Q.env,timeout:Q.timeoutMs,signal:Q.signal,allowLocalFallback:!1,onOutput:(X)=>Q.onOutput?.("stdout",X)});return{exitCode:j.exitCode,stdout:j.stdout,stderr:j.stderr,...j.error?{error:j.error}:{},timedOut:j.failureKind==="timeout",aborted:j.failureKind==="aborted"}}},...(this.options.initialMessages?.length??0)>0?{sessionStart:{isResume:!0,resumeSessionId:this.id}}:{}}),await b.recoverInterrupted(this.cwd,this.id,this.runtime))await this.refreshPersistedMessages();this.agent=await this.createAgent(),await Fz(this.cwd),G.debug(`[AcpSession ${this.id}] Agent created successfully`),this.taskStatusUnsubscribe?.(),this.taskStatusUnsubscribe=s.subscribe((W)=>{if(W.sessionId!==this.id||W.projectPath!==this.cwd)return;if(W.type==="subagent.completion.queued"){this.sendUpdate({sessionUpdate:"session_info_update",updatedAt:new Date().toISOString(),_meta:{"blade/backgroundSubagentCompletion":W.properties}}),this.schedulePendingResume();return}if(W.type==="task.delivery"){if(!W.properties.taskDelivery||typeof W.properties.taskDelivery!=="object")return;this.sendUpdate({sessionUpdate:"session_info_update",updatedAt:typeof W.properties.updatedAt==="string"?W.properties.updatedAt:new Date().toISOString(),_meta:{"blade/taskDelivery":W.properties.taskDelivery,...W.properties.taskWorktreeRemoved===!0?{"blade/taskWorktreeRemoved":!0}:{}}});return}if(W.type.startsWith("team.")){let{teamName:Q,messageId:j,content:X}=W.properties,D=W.properties.metadata;if(W.type==="team.message.received"&&typeof Q==="string"&&typeof j==="string"&&typeof X==="string"&&$z(D,{messageId:j,teamName:Q}))(async()=>{let L=await this.runtime?.enqueueSteering(X,{allowBeforeTurn:!0,messageId:j,origin:"team_message",metadata:D});if(!L?.accepted)return;if(await new Zz(Q,p()).markDelivered([j]),L.delivery==="next_turn")this.schedulePendingResume()})().catch((L)=>{G.warn(`[AcpSession ${this.id}] Failed to deliver teammate message`,L)});this.sendUpdate({sessionUpdate:"session_info_update",updatedAt:new Date().toISOString(),_meta:{"blade/teamEvent":{type:W.type,...W.properties}}});return}if(W.type!=="task.status")return;this.sendUpdate({sessionUpdate:"session_info_update",updatedAt:typeof W.properties.updatedAt==="string"?W.properties.updatedAt:new Date().toISOString(),_meta:{"blade/taskStatus":W.properties.taskStatus,...typeof W.properties.taskStatusReason==="string"?{"blade/taskStatusReason":W.properties.taskStatusReason}:{},...W.properties.taskFailure&&typeof W.properties.taskFailure==="object"?{"blade/taskFailure":W.properties.taskFailure}:{},...typeof W.properties.taskStartedAt==="string"?{"blade/taskStartedAt":W.properties.taskStartedAt}:{},...typeof W.properties.taskCompletedAt==="string"?{"blade/taskCompletedAt":W.properties.taskCompletedAt}:{},...W.properties.taskDiffStat&&typeof W.properties.taskDiffStat==="object"?{"blade/taskDiffStat":W.properties.taskDiffStat}:{},...typeof W.properties.taskQueuePosition==="number"?{"blade/taskQueuePosition":W.properties.taskQueuePosition}:{},...typeof W.properties.taskQueueDepth==="number"?{"blade/taskQueueDepth":W.properties.taskQueueDepth}:{},...typeof W.properties.taskConcurrencyLimit==="number"?{"blade/taskConcurrencyLimit":W.properties.taskConcurrencyLimit}:{},...typeof W.properties.taskInFlight==="number"?{"blade/taskInFlight":W.properties.taskInFlight}:{}}})});let H=await this.runtime.getGoal();if(this.runtime.getPendingSteeringCount()>0||H?.status==="active"||H?.status==="verifying")if(this.options.initialMessages===void 0)this.schedulePendingResume();else this.pendingResumeRequested=!0}async replayHistory(){for(let Z of this.messages){if(!this.canSendUpdates())return;if(!o(Z))continue;let J=Z.role==="user"?"user_message_chunk":Z.role==="assistant"?"agent_message_chunk":void 0;if(!J)continue;for(let Y of uz(Z)){if(!this.canSendUpdates())return;if(!await this.sendUpdateAndWait({sessionUpdate:J,content:Y}))return}}let z=await this.runtime?.getGoal();if(z&&!await this.sendUpdateAndWait(this.goalSessionUpdate(z)))return;if(this.pendingResumeRequested)this.schedulePendingResume()}sendAvailableCommandsDelayed(){if(this.destroyed||this.connection.signal.aborted)return;if(this.availableCommandsTimer!==null)clearTimeout(this.availableCommandsTimer);G.debug(`[AcpSession ${this.id}] Scheduling available commands update (500ms delay)`),this.availableCommandsTimer=setTimeout(()=>{if(this.availableCommandsTimer=null,this.destroyed||this.connection.signal.aborted)return;this.sendAvailableCommands()},500)}async handleSlashCommand(z,Z){try{G.debug(`[AcpSession ${this.id}] Executing slash command: ${z}`);let J={cwd:this.cwd,surface:"acp",workspaceRoot:this.cwd,sessionId:this.id,messages:[...this.contextMessages],rewind:{listCheckpoints:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.listRewindCheckpoints()},execute:async(Q)=>{if(!this.runtime)throw Error("Session runtime is unavailable");let j=await this.runtime.rewindSession(Q);return this.messages=[...j.messages],this.contextMessages=await this.loadModelContextOr(j.messages),await this.agent?.destroy(),this.agent=await this.createAgent(),j}},reasoning:{get:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getReasoningConfiguration()},set:async(Q)=>{if(await this.setReasoningEffort(Q),!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getReasoningConfiguration()}},serviceTier:{get:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getServiceTierConfiguration()},set:async(Q)=>{if(await this.setServiceTier(Q),!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getServiceTierConfiguration()}},responseVerbosity:{get:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getResponseVerbosityConfiguration()},set:async(Q)=>{if(await this.setResponseVerbosity(Q),!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getResponseVerbosityConfiguration()}},communicationStyle:{get:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getCommunicationStyleConfiguration()},set:async(Q)=>{if(await this.setCommunicationStyle(Q),!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getCommunicationStyleConfiguration()}},subagents:{list:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.listSubagents()},resume:async(Q,j)=>{if(!this.runtime)throw Error("Session runtime is unavailable");let X=!1,D,L=(B)=>{this.sendUpdate({sessionUpdate:"tool_call_update",toolCallId:B.id,status:B.status==="completed"?"completed":"failed",content:[{type:"content",content:{type:"text",text:B.result?.message||B.result?.error||`Subagent ${B.status}`}}]})},U=this.runtime.resumeSubagent({agentId:Q,prompt:j,onCompleted:(B)=>{if(X)L(B);else D=B}});if(this.sendUpdate({sessionUpdate:"tool_call",toolCallId:U.session.id,status:"in_progress",title:`Resuming ${U.session.subagentType} subagent`,content:[{type:"content",content:{type:"text",text:`Resumed from ${U.source.id} at depth ${U.session.resumeDepth}`}}],kind:this.mapToolKind("readonly")}),X=!0,D)L(D);return U}},mcp:{getCatalog:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getMcpContentCatalog()},refresh:async(Q)=>{if(!this.runtime)throw Error("Session runtime is unavailable");await this.runtime.refreshMcpContentCatalogs(Q)},getPrompt:async(Q,j,X)=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getMcpPrompt(Q,j,X)},complete:async(Q,j,X)=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.completeMcpArgument(Q,j,X)},listTasks:async(Q)=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.listMcpTasks(Q)},getTask:async(Q)=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getMcpTask(Q)},cancelTask:async(Q,j)=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.cancelMcpTask(Q,j)},getLogs:async(Q,j)=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getMcpLogs(Q,j)},setLoggingLevel:async(Q,j)=>{if(!this.runtime)throw Error("Session runtime is unavailable");await this.runtime.setMcpLoggingLevel(Q,j)},getInstructions:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.getMcpInstructions()}},sideConversation:{ask:async(Q,j)=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.askSideQuestion(Q,{signal:j})}},codeReview:{run:async(Q,j)=>{if(!this.runtime)throw Error("Session runtime is unavailable");let X=await b.start({sessionId:this.id,projectPath:this.cwd,runtime:this.runtime,request:Q,signal:j,onEvent:(U)=>{if(U.kind==="tool_start")this.sendUpdate({sessionUpdate:"tool_call",toolCallId:U.toolCall.id,status:"in_progress",title:`Review: ${U.toolCall.function.name}`,content:[],kind:this.mapToolKind(U.toolKind)});else if(U.kind==="tool_result")this.sendUpdate({sessionUpdate:"tool_call_update",toolCallId:U.toolCall.id,status:U.result.success?"completed":"failed",content:[]})}}),D=await X.completion,L=(await b.list(this.cwd,this.id)).find((U)=>U.start.reviewId===X.reviewId);if(!L)throw Error(`Review not found: ${X.reviewId}`);return await this.refreshPersistedMessages(),{reviewId:X.reviewId,status:D.status,findings:D.findings.length,content:v(L.start,D)}}},signal:Z,acp:{sendMessage:(Q)=>{this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Q}})},sendToolStart:(Q,j,X)=>{let D=`tool_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,L=this.mapToolKind(X);this.sendUpdate({sessionUpdate:"tool_call",toolCallId:D,status:"in_progress",title:`${Q}`,content:[{type:"content",content:{type:"text",text:JSON.stringify(j,null,2)}}],kind:L})},sendToolResult:(Q,j)=>{if(j.summary)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:j.summary}})}}},Y=await Uz(z,J),H=Y.data?.action;if(H==="start_goal"||H==="resume_goal")this.schedulePendingResume();if(H==="rewind_session"&&Array.isArray(Y.data?.messages))this.messages=[...Y.data.messages],this.contextMessages=await this.loadModelContextOr(Y.data.messages);if((Y.message==="compact_completed"||Y.message==="compact_fallback")&&Y.data?.compactedMessages){this.contextMessages=[...Y.data.compactedMessages];let Q=await F.loadSession(this.id,this.cwd);if(Q.length>0)this.messages=Q}let W=Y.content||Y.message;if(W)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:W}});if(Y.error)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[FAIL] ${Y.error}`}});return await this.flushUpdates(),{stopReason:Y.success?"end_turn":"cancelled"}}catch(J){if(Z.aborted||J instanceof Error&&J.name==="AbortError")return{stopReason:"cancelled"};return G.error(`[AcpSession ${this.id}] Slash command error:`,J),this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[FAIL] 命令执行失败: ${J instanceof Error?J.message:"未知错误"}`}}),{stopReason:"cancelled"}}}async handleSideConversationCommand(z){if(this.pendingSideConversation)throw Error("A side conversation is already running");let Z=new AbortController,J,Y=new Promise((H)=>{J=H});this.pendingSideConversation=Z,this.pendingSideConversationCompletion=Y;try{return await this.handleSlashCommand(z,Z.signal)}catch(H){if(Z.signal.aborted||H instanceof Error&&H.name==="AbortError")return{stopReason:"cancelled"};throw H}finally{if(J(),this.pendingSideConversationCompletion===Y)this.pendingSideConversationCompletion=null;if(this.pendingSideConversation===Z)this.pendingSideConversation=null}}async sendAvailableCommands(){try{let z=Vz(this.cwd,this.runtime?.getAgentResources()),Z=["model","permissions","theme","config","exit","ide"],Y=z.filter((H)=>!Z.includes(H.name)&&(H.name!=="team"||this.runtime?.getConfig().agentTeamsEnabled===!0)).map((H)=>{let W;if(H.usage){let Q=H.usage.replace(/^\/\w+\s*/,"").trim();if(Q)W=Q}if(H.aliases?.length){let Q=`Aliases: ${H.aliases.join(", ")}`;W=W?`${W} | ${Q}`:Q}return{name:H.name,description:H.description,input:W?{hint:W}:void 0}});G.info(`[AcpSession ${this.id}] Sending available commands: ${JSON.stringify(Y.map((H)=>H.name))}`),this.sendUpdate({sessionUpdate:"available_commands_update",availableCommands:Y}),G.info(`[AcpSession ${this.id}] Sent ${Y.length} available commands`)}catch(z){G.error(`[AcpSession ${this.id}] Failed to send available commands:`,z)}}async prompt(z,Z={}){if(N.setCurrentSession(this.id),!this.agent||!this.runtime)throw Error("Session not initialized");let J=this.resolvePrompt(z.prompt),Y=J.content,H=J.displayText,W=z._meta?.outputSchema??(Z.pendingInputOnly?this.runtime.getPendingSteeringMessages().find((B)=>B.outputSchema)?.outputSchema:void 0),Q;if(W!==void 0)Q=t(W).schema;if(H.trimStart().startsWith("!")){if(Q)throw Error("Output schemas cannot be combined with user shell commands");return this.handleUserShellCommand(H)}let j=Jz(H);if(j){if(Q)throw Error("Output schemas cannot be combined with slash commands");if(Array.isArray(Y)&&Y.some((B)=>B.type==="image_url"))throw Error("Side conversations do not accept image attachments");return this.handleSideConversationCommand(j.question?`/btw ${j.question}`:"/btw")}if(this.pendingPrompt){if(Q)throw Error("Wait for the active turn to finish before setting an output schema");if(/^\/goal(?:\s|$)/i.test(H.trim()))return this.handleSlashCommand(H,this.pendingPrompt.signal);let B=await this.runtime.enqueueSteering(Y,{allowBeforeTurn:!0});if(!B.accepted)throw Error(B.reason==="queue_full"?"Active turn steering queue is full":"Active turn is no longer steerable");if(G.debug(`[AcpSession ${this.id}] Queued steering for active turn (${B.queued})`),B.delivery==="next_turn")this.schedulePendingResume();return{stopReason:"end_turn"}}let X=new AbortController,D=!1,L,U=new Promise((B)=>{L=B});this.pendingPrompt=X,this.pendingPromptCompletion=U;try{if(G.debug(`[AcpSession ${this.id}] Received prompt: ${H.slice(0,100)}...`),Gz(H)){if(Q)throw Error("Output schemas cannot be combined with slash commands");return await this.handleSlashCommand(H,X.signal)}let B={sessionId:this.id,userId:"acp-user",workspaceRoot:this.cwd,messages:[...this.contextMessages],signal:X.signal,permissionMode:this.mapModeToPermissionMode(),onPermissionModeChange:async($)=>{this.mode=this.mapPermissionModeToMode($),this.sendUpdate({sessionUpdate:"current_mode_update",currentModeId:this.mode})},...this.options.taskWorktree?{worktreeActive:!0}:{},confirmationHandler:{requestConfirmation:async($)=>{return this.requestPermission($)}}},A=await e(this.agent.chatStream(Y,B,{pendingInputOnly:Z.pendingInputOnly,goalContinuationOnly:Z.goalContinuationOnly,outputSchema:Q}),async($)=>{switch($.kind){case"content_delta":if(Q)break;this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:$.delta}});break;case"thinking_delta":this.sendUpdate({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:$.delta}});break;case"tool_start":{let V=$.toolCall,O=V.function.name;if(O===x)break;let R=this.mapToolKind($.toolKind),w=`Executing ${O}`;if(O==="Task"&&"function"in V)try{let q=JSON.parse(V.function.arguments),K=q.resume_from??q.resume;if(typeof K==="string")w=`Resuming ${String(q.subagent_type||"subagent")} from ${K}`}catch{}this.sendUpdate({sessionUpdate:"tool_call",toolCallId:V.id,status:"in_progress",title:w,content:[],kind:R});break}case"tool_progress":{let V=$.toolCall;if(V.function.name===x)break;this.sendUpdate({sessionUpdate:"tool_call_update",toolCallId:V.id,status:"in_progress",content:[{type:"content",content:{type:"text",text:$.update.message}}]});break}case"tool_result":{let V=$.toolCall;if(V.function.name===x)break;let O=$.result,R=[],w=O.metadata;if(w?.kind==="patch"&&Array.isArray(w.changes))for(let K of w.changes){if(!K||typeof K!=="object"||!("path"in K)||typeof K.path!=="string")continue;R.push({type:"diff",path:K.path,oldText:"oldContent"in K&&typeof K.oldContent==="string"?K.oldContent:null,newText:"newContent"in K&&typeof K.newContent==="string"?K.newContent:null})}else if(w?.kind==="edit"&&typeof w.file_path==="string"&&typeof w.oldContent==="string"&&(typeof w.newContent==="string"||w.newContent===void 0))R.push({type:"diff",path:w.file_path,oldText:w.oldContent,newText:w.newContent??null});else{let K=V.function.name,Mz=Yz(a(Wz(K,O),r));R.push({type:"content",content:{type:"text",text:Mz}})}if(V.function.name==="Task"&&(w?.verificationVerdict==="pass"||w?.verificationVerdict==="fail"||w?.verificationVerdict==="partial"))R.unshift({type:"content",content:{type:"text",text:`Verification result: ${w.verificationVerdict.toUpperCase()}`}});let q=O.success?"completed":"failed";this.sendUpdate({sessionUpdate:"tool_call_update",toolCallId:V.id,status:q,content:R});break}case"structured_output":this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:JSON.stringify($.output)}});break;case"mcp_catalog_changed":this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`MCP catalog r${$.revision} (${$.serverName}): +${$.added.length} -${$.removed.length} ~${$.updated.length}
3
3
  `}});break;case"mcp_content_changed":this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`MCP ${$.contentKind} r${$.revision} (${$.serverName}): +${$.added.length} -${$.removed.length} ~${$.updated.length}
4
4
  `}});break;case"mcp_resource_updated":this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`MCP resource updated r${$.revision} (${$.serverName}): ${$.uri}
@@ -1,2 +1,2 @@
1
- import{pg as F}from"./chunk-465tgzab.js";import{kh as D,lh as E}from"./chunk-gbrwzpyg.js";import G from"node:path";function A(b){if(Array.isArray(b))return b.map((q)=>A(q));if(b!==null&&typeof b==="object"&&Object.getPrototypeOf(b)===Object.prototype)return Object.fromEntries(Object.entries(b).map(([q,w])=>[q,A(w)]));return b}function H(b){return A(b)}function I(b,q){let w=new D(q?.credentials??E().credentials);return w.configureModelProviders(b.modelProviders,b.models),w}async function Q(b,q){let w=G.resolve(b),x=F.getInstance(),[J,K]=await Promise.all([x.loadWorkspaceModelConfig(w,q),x.loadWorkspaceRuntimeSettings(w,q)]),z={...H(q),...J,...K},B=I(z);return x.validateConfig(z,B),{projectRoot:w,config:z,catalog:B}}function T(b){let q=H(b.config);return{projectRoot:G.resolve(b.projectRoot),config:q,catalog:I(q,b.catalog)}}
1
+ import{pg as F}from"./chunk-zph2jekm.js";import{kh as D,lh as E}from"./chunk-gbrwzpyg.js";import G from"node:path";function A(b){if(Array.isArray(b))return b.map((q)=>A(q));if(b!==null&&typeof b==="object"&&Object.getPrototypeOf(b)===Object.prototype)return Object.fromEntries(Object.entries(b).map(([q,w])=>[q,A(w)]));return b}function H(b){return A(b)}function I(b,q){let w=new D(q?.credentials??E().credentials);return w.configureModelProviders(b.modelProviders,b.models),w}async function Q(b,q){let w=G.resolve(b),x=F.getInstance(),[J,K]=await Promise.all([x.loadWorkspaceModelConfig(w,q),x.loadWorkspaceRuntimeSettings(w,q)]),z={...H(q),...J,...K},B=I(z);return x.validateConfig(z,B),{projectRoot:w,config:z,catalog:B}}function T(b){let q=H(b.config);return{projectRoot:G.resolve(b.projectRoot),config:q,catalog:I(q,b.catalog)}}
2
2
  export{H as te,Q as ue,T as ve};
@@ -1,4 +1,4 @@
1
- import{$c as u,ad as I1,bd as O$,cd as v1,dd as I,ed as N$,fd as u1,gd as U$,hd as P1,id as F$,jd as R$,ld as g0,od as x$,pd as h1}from"./chunk-r297pq3s.js";import{re as H0}from"./chunk-xbj18hxh.js";import{af as K0}from"./chunk-0cbpjhq7.js";import{mf as V1}from"./chunk-03947xkg.js";import{Ag as m1,zg as j1}from"./chunk-yjbq4jeg.js";import{Fg as v$}from"./chunk-22aaybx2.js";import{fh as D0}from"./chunk-2qqmmxqf.js";import{mh as Y0,ph as W0}from"./chunk-bj5msq36.js";import{th as i}from"./chunk-453tf6d0.js";import{Dh as k1,Eh as B0,Fh as S1,Gh as b,Hh as m,Jh as V0,Kh as p,Lh as G0}from"./chunk-qw5j84ny.js";import{readdir as H$,readFile as s,rm as q0,stat as y0}from"node:fs/promises";import*as H from"node:path";import{nanoid as j}from"nanoid";import{createHash as e1,randomUUID as $q}from"node:crypto";import*as v from"node:fs/promises";import*as F0 from"node:path";import{execFileSync as d1}from"node:child_process";import{createHash as r1}from"node:crypto";import{readFileSync as o1}from"node:fs";var t1=/^[a-f0-9]{64}$/;function k$($){if(!$||typeof $!=="object")return!1;let q=$;return(q.platform==="linux"||q.platform==="darwin"||q.platform==="win32")&&typeof q.fingerprint==="string"&&t1.test(q.fingerprint)}var S$={readFile:($)=>o1($,"utf8"),execFile:($,q)=>d1($,q,{encoding:"utf8",timeout:$==="powershell.exe"?3000:2000,windowsHide:!0})},a1=($)=>{try{return process.kill($,0),!0}catch(q){return q instanceof Error&&"code"in q&&q.code==="EPERM"}};function l0($,q){return{platform:$,fingerprint:r1("sha256").update(`${$}\x00${q}`).digest("hex")}}function s1($,q){let L=q.readFile(`/proc/${$}/stat`).trim(),f=L.lastIndexOf(")");if(f<0)throw Error("Invalid /proc process stat");let B=L.slice(f+2).split(/\s+/)[19];if(!B||!/^\d+$/.test(B))throw Error("Missing process start ticks");return B}function N0($,q=process.platform,L=S$){if(!Number.isInteger($)||$<=1)return;try{if(q==="linux")return l0(q,s1($,L));if(q==="darwin"){let f=L.execFile("ps",["-o","lstart=","-p",String($)]).trim();return f?l0(q,f):void 0}if(q==="win32"){let f=`(Get-CimInstance Win32_Process -Filter "ProcessId = ${$}").CreationDate.ToUniversalTime().ToString('O')`,J=L.execFile("powershell.exe",["-NoProfile","-NonInteractive","-Command",f]).trim();return J?l0(q,J):void 0}}catch{return}return}function j$($,q){return N0($,q.platform)?.fingerprint===q.fingerprint}function wL($,q,L=S$,f=a1){if(!Number.isInteger($)||$<=1)return!1;let J=N0($,q.platform,L);if(J)return J.fingerprint===q.fingerprint;return!f($)}var u$=1;function qq($,q){let L=e1("sha256").update(q).digest("hex");return F0.join(B0($),".locks",`${L}.lock`)}function U0($,q){return $ instanceof Error&&"code"in $&&$.code===q}async function p0($){try{let q=JSON.parse(await v.readFile($,"utf8"));if(q.version!==u$||typeof q.sessionId!=="string"||typeof q.ownerId!=="string"||!Number.isInteger(q.pid)||(q.pid??0)<=0||q.processIdentity!==void 0&&!k$(q.processIdentity)||typeof q.acquiredAt!=="string")return;return q}catch{return}}async function m$($){let q=await p0($);if(q)return q;return await new Promise((L)=>setTimeout(L,10)),p0($)}function Lq($){try{return process.kill($,0),!0}catch(q){return U0(q,"EPERM")}}async function I$($,q){let L;try{return L=await v.open($,"wx",384),await L.writeFile(`${JSON.stringify(q)}
1
+ import{$c as u,ad as I1,bd as O$,cd as v1,dd as I,ed as N$,fd as u1,gd as U$,hd as P1,id as F$,jd as R$,ld as g0,od as x$,pd as h1}from"./chunk-r297pq3s.js";import{re as H0}from"./chunk-xbj18hxh.js";import{af as K0}from"./chunk-0cbpjhq7.js";import{mf as V1}from"./chunk-03947xkg.js";import{Ag as m1,zg as j1}from"./chunk-yjbq4jeg.js";import{Fg as v$}from"./chunk-22aaybx2.js";import{fh as D0}from"./chunk-2qqmmxqf.js";import{mh as Y0,ph as W0}from"./chunk-bj5msq36.js";import{th as i}from"./chunk-c74e0jx1.js";import{Dh as k1,Eh as B0,Fh as S1,Gh as b,Hh as m,Jh as V0,Kh as p,Lh as G0}from"./chunk-qw5j84ny.js";import{readdir as H$,readFile as s,rm as q0,stat as y0}from"node:fs/promises";import*as H from"node:path";import{nanoid as j}from"nanoid";import{createHash as e1,randomUUID as $q}from"node:crypto";import*as v from"node:fs/promises";import*as F0 from"node:path";import{execFileSync as d1}from"node:child_process";import{createHash as r1}from"node:crypto";import{readFileSync as o1}from"node:fs";var t1=/^[a-f0-9]{64}$/;function k$($){if(!$||typeof $!=="object")return!1;let q=$;return(q.platform==="linux"||q.platform==="darwin"||q.platform==="win32")&&typeof q.fingerprint==="string"&&t1.test(q.fingerprint)}var S$={readFile:($)=>o1($,"utf8"),execFile:($,q)=>d1($,q,{encoding:"utf8",timeout:$==="powershell.exe"?3000:2000,windowsHide:!0})},a1=($)=>{try{return process.kill($,0),!0}catch(q){return q instanceof Error&&"code"in q&&q.code==="EPERM"}};function l0($,q){return{platform:$,fingerprint:r1("sha256").update(`${$}\x00${q}`).digest("hex")}}function s1($,q){let L=q.readFile(`/proc/${$}/stat`).trim(),f=L.lastIndexOf(")");if(f<0)throw Error("Invalid /proc process stat");let B=L.slice(f+2).split(/\s+/)[19];if(!B||!/^\d+$/.test(B))throw Error("Missing process start ticks");return B}function N0($,q=process.platform,L=S$){if(!Number.isInteger($)||$<=1)return;try{if(q==="linux")return l0(q,s1($,L));if(q==="darwin"){let f=L.execFile("ps",["-o","lstart=","-p",String($)]).trim();return f?l0(q,f):void 0}if(q==="win32"){let f=`(Get-CimInstance Win32_Process -Filter "ProcessId = ${$}").CreationDate.ToUniversalTime().ToString('O')`,J=L.execFile("powershell.exe",["-NoProfile","-NonInteractive","-Command",f]).trim();return J?l0(q,J):void 0}}catch{return}return}function j$($,q){return N0($,q.platform)?.fingerprint===q.fingerprint}function wL($,q,L=S$,f=a1){if(!Number.isInteger($)||$<=1)return!1;let J=N0($,q.platform,L);if(J)return J.fingerprint===q.fingerprint;return!f($)}var u$=1;function qq($,q){let L=e1("sha256").update(q).digest("hex");return F0.join(B0($),".locks",`${L}.lock`)}function U0($,q){return $ instanceof Error&&"code"in $&&$.code===q}async function p0($){try{let q=JSON.parse(await v.readFile($,"utf8"));if(q.version!==u$||typeof q.sessionId!=="string"||typeof q.ownerId!=="string"||!Number.isInteger(q.pid)||(q.pid??0)<=0||q.processIdentity!==void 0&&!k$(q.processIdentity)||typeof q.acquiredAt!=="string")return;return q}catch{return}}async function m$($){let q=await p0($);if(q)return q;return await new Promise((L)=>setTimeout(L,10)),p0($)}function Lq($){try{return process.kill($,0),!0}catch(q){return U0(q,"EPERM")}}async function I$($,q){let L;try{return L=await v.open($,"wx",384),await L.writeFile(`${JSON.stringify(q)}
2
2
  `,"utf8"),!0}catch(f){if(U0(f,"EEXIST"))return!1;if(L)await v.unlink($).catch(()=>{return});throw f}finally{await L?.close().catch(()=>{return})}}class h extends Error{code="BLADE_SESSION_IN_USE";constructor($){super($?`Session is already active in another Blade process (PID ${$}). Stop that process or choose a different session.`:"Session is already active in another Blade process. Stop that process or choose a different session.");this.name="SessionInUseError"}}class c{filePath;record;released=!1;constructor($,q){this.filePath=$;this.record=q}static async acquire($,q=v$()){let L=qq(q,$),f={version:u$,sessionId:$,ownerId:$q(),pid:process.pid,processIdentity:N0(process.pid),acquiredAt:new Date().toISOString()};if(await v.mkdir(F0.dirname(L),{recursive:!0,mode:448}),await I$(L,f))return new c(L,f);let J=await m$(L);if(J&&Lq(J.pid)&&(!J.processIdentity||j$(J.pid,J.processIdentity)))throw new h(J.pid);if(await v.unlink(L).catch((B)=>{if(!U0(B,"ENOENT"))throw B}),await I$(L,f))return new c(L,f);throw new h((await m$(L))?.pid)}async release(){if(this.released)return;if(this.released=!0,(await p0(this.filePath))?.ownerId!==this.record.ownerId)return;await v.unlink(this.filePath).catch((q)=>{if(!U0(q,"ENOENT"))throw q})}}var mL=1;function i0($){return $!==null&&typeof $==="object"&&!Array.isArray($)}function fq($){if(!i0($)||typeof $.type!=="string")return!1;if($.type==="text")return typeof $.text==="string";return $.type==="image_url"&&i0($.image_url)&&typeof $.image_url.url==="string"}function Bq($){if(!i0($))return!1;if(!["system","user","assistant","tool"].includes(String($.role)))return!1;return typeof $.content==="string"||Array.isArray($.content)&&$.content.every(fq)}function P$($){if(!Array.isArray($)||$.length===0||$.length>4096)return;let q=JSON.stringify($);if(Buffer.byteLength(q)>16777216)return;let L=JSON.parse(q);if(!Array.isArray(L)||!L.every(Bq))return;return L}function IL($){let q=P$($);if(!q)throw Error("Compaction replacement context is invalid or exceeds limits");return q}function R0($){return P$($)}function Jq($,q){for(let L of $){if(L.type!=="part_created"||L.data.partType!=="tool_result")continue;let f=L.data.payload;if(!f||typeof f!=="object"||Array.isArray(f))continue;let J=f;if(J.toolCallId===q||L.data.partId===q||L.data.messageId===q)return J}return}function h$($){let q=u($),L=new Map;for(let f of q){if(f.type==="interaction_requested"){L.set(f.data.requestId,{request:f.data,hasToolResult:!1,hasRecoveryToolResult:!1});continue}if(f.type==="interaction_responded"){let J=L.get(f.data.requestId);if(J)J.response=f.data;continue}if(f.type==="interaction_recovered"){let J=L.get(f.data.requestId);if(J)J.recovery=f.data}}for(let f of L.values()){let J=Jq(q,f.request.toolCallId);f.hasToolResult=J!==void 0;let B=J?.metadata&&typeof J.metadata==="object"?J.metadata:void 0;f.hasRecoveryToolResult=B?.interactionRecovery===!0&&B.requestId===f.request.requestId}return[...L.values()]}function c$($){return h$($).reverse().find((q)=>!q.response&&!q.recovery)}function PL($){let q=new Map;for(let L of h$($))q.set(L.request.toolCallId,L);return[...q.values()].filter((L)=>L.response&&!L.recovery&&(!L.hasToolResult||L.hasRecoveryToolResult))}function n$($){if(!$)return;return{type:$.request.interactionType,requestId:$.request.requestId}}function x0($){let q=new Map,L=[];for(let f of $){if(f.type==="review_started"){if(!q.has(f.data.reviewId))L.push(f.data.reviewId),q.set(f.data.reviewId,{start:f.data});continue}if(f.type!=="review_completed")continue;let J=q.get(f.data.reviewId);if(J&&J.completion===void 0)J.completion=f.data}return L.map((f)=>q.get(f)).filter((f)=>f!==void 0)}function cL($){return x0($).reverse().find((q)=>q.completion===void 0)}function d0($){switch($){case"completed":return"completed";case"stale":return"stale: the review target changed while the reviewer was running";case"aborted":return"aborted";case"interrupted":return"interrupted by process restart";case"failed":return"failed"}}function l$($,q){let L=["## Code Review","",`Target: ${$.target.label}`,`Status: ${d0(q.status)}`,"",q.overallExplanation||"No overall explanation was provided."];if(q.findings.length===0)L.push("","No actionable findings.");else{L.push("","### Findings");for(let[f,J]of q.findings.entries()){let B=J.codeLocation.lineStart===J.codeLocation.lineEnd?`${J.codeLocation.lineStart}`:`${J.codeLocation.lineStart}-${J.codeLocation.lineEnd}`;L.push("",`${f+1}. ${J.title}`,` ${J.codeLocation.path}:L${B} · confidence ${J.confidenceScore.toFixed(2)}`,` ${J.body}`)}}if(q.error)L.push("",`Error: ${q.error}`);return L.join(`
3
3
  `)}function p$($,q){return{reviewId:$.reviewId,phase:"completed",status:q.status,target:{kind:$.target.kind,label:$.target.label,...$.target.baseSha?{reference:$.target.baseSha}:{},...$.target.commitSha?{reference:$.target.commitSha}:{}},overallExplanation:q.overallExplanation,findings:q.findings.map((L)=>({title:L.title,body:L.body,priority:L.priority,confidenceScore:L.confidenceScore,codeLocation:{...L.codeLocation}})),...q.error?{error:q.error}:{}}}var a0=1;var r0=2000,Zq='<token-budget-handoff version="1">',pL="handoff-message-",Cq=128,Gq=["version","messageId","observedPromptTokens","availableForInput","handoffThreshold","compactionThreshold","createdAt"],Qq=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/,Vq=/(?:^|\n)Remaining prompt-token headroom before compaction: (\d+)\.$/;function n($){return typeof $==="number"&&Number.isSafeInteger($)&&$>=0}function s0($){return n($)&&$>0}function Xq($){for(let q=0;q<$.length;q+=1){let L=$.charCodeAt(q);if(L<=31||L===127)return!0}return!1}function i$($){return typeof $==="string"&&$.length>=1&&$.length<=Cq&&!Xq($)}function o0($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let q=Object.getPrototypeOf($);return q===Object.prototype||q===null}function T0($,q){let L=Math.floor($/10),f=$%10;return L*q+Math.floor(f*q/10)}function Yq($){if(typeof $!=="string"||!Qq.test($))return!1;try{let q=new Date($);return Number.isFinite(q.getTime())&&q.toISOString()===$}catch{return!1}}function d$($){if(!n($))throw Error("Token budget handoff headroom must be a safe nonnegative integer");return[Zq,"Context rollover is approaching. Continue the user task from this state only.","Make objective, decisions, mutations, verification, background work, blockers, and the exact next action explicit.","For pending work, preserve exact commands, tool arguments, and required final-response constraints when they are known.","Do not claim success or completion unless it is already proven in the transcript.","Do not create bookkeeping files the user did not request.",`Remaining prompt-token headroom before compaction: ${$}.`].join(`
4
4
  `)}function Wq($){let q=d$($);if(new TextEncoder().encode(q).length>r0)throw Error(`Token budget handoff reminder exceeds ${r0} bytes`);return q}function t0($,q){let L=Object.keys($).sort(),f=[...q].sort();return L.length===f.length&&L.every((J,B)=>J===f[B])}function iL($){let{maxContextTokens:q,maxOutputTokens:L,configuredMaxOutputTokens:f}=$,J=L??f??void 0;if(J!==void 0)return J;if(!s0(q))return;return Math.min(Math.max(Math.floor(q*0.1),8192),32768)}function dL($){let{actualPromptTokens:q,maxContextTokens:L,maxOutputTokens:f}=$;if(!s0(L)||!n(f)||f>=L)return{phase:"unknown"};let J=L-f;if(J<=0)return{phase:"unknown"};let B=T0(J,7),Z=T0(J,8);if(!n(q))return{phase:"unknown",maxContextTokens:L,maxOutputTokens:f,availableForInput:J,handoffThreshold:B,compactionThreshold:Z};if(q<B)return{phase:"below_handoff",actualPromptTokens:q,maxContextTokens:L,maxOutputTokens:f,availableForInput:J,handoffThreshold:B,compactionThreshold:Z};if(q<Z)return{phase:"handoff_band",actualPromptTokens:q,maxContextTokens:L,maxOutputTokens:f,availableForInput:J,handoffThreshold:B,compactionThreshold:Z};return{phase:"compaction_due",actualPromptTokens:q,maxContextTokens:L,maxOutputTokens:f,availableForInput:J,handoffThreshold:B,compactionThreshold:Z}}function r$($){if($.type!=="token_budget_handoff_recorded"||!o0($.data))return;let q=$.data;if(!t0(q,Gq)||q.version!==a0||!i$(q.messageId)||!n(q.observedPromptTokens)||!s0(q.availableForInput)||!n(q.handoffThreshold)||!n(q.compactionThreshold)||!Yq(q.createdAt))return;let L=T0(q.availableForInput,7),f=T0(q.availableForInput,8);if(q.handoffThreshold!==L||q.compactionThreshold!==f||q.observedPromptTokens<q.handoffThreshold||q.observedPromptTokens>=q.compactionThreshold)return;return $}function Hq($){return $.type==="token_budget_handoff_recorded"}function o$($){let q=$.findLastIndex((B)=>{if(B.type!=="part_created"||B.data.partType!=="summary")return!1;let Z=B.data.payload;return Z!==null&&typeof Z==="object"&&!Array.isArray(Z)&&R0(Z.replacementMessages)!==void 0}),L=$.slice(q+1).filter(Hq);if(L.length===0)return{kind:"none"};let f=L.at(-1);if(!f)return{kind:"none"};if(L.length!==1)return{kind:"suppressed",recordId:f.id};let J=r$(f);return J?{kind:"valid",event:J}:{kind:"suppressed",recordId:f.id}}function t$($){let q=r$($);if(!q)return;let L={clientVisible:!1,tokenBudgetHandoff:{version:a0,messageId:q.data.messageId}};return{id:q.data.messageId,role:"user",content:Wq(Math.max(0,q.data.compactionThreshold-q.data.observedPromptTokens)),metadata:L}}function Kq($){if(typeof $.id!=="string"||$.role!=="user"||typeof $.content!=="string"||!o0($.metadata)||$.metadata.clientVisible!==!1)return!1;let q=$.metadata;if(!t0(q,["clientVisible","tokenBudgetHandoff"]))return!1;let L=q.tokenBudgetHandoff;if(!o0(L))return!1;if(!t0(L,["messageId","version"]))return!1;if(L.version!==a0||!i$(L.messageId)||L.messageId!==$.id)return!1;if(new TextEncoder().encode($.content).length>r0)return!1;let J=Vq.exec($.content);if(!J)return!1;let B=Number(J[1]);return n(B)&&$.content===d$(B)}function rL($){return $.filter((q)=>!Kq(q))}var e0={authentication:{message:"Provider authentication failed. Check model credentials.",retryable:!1},permission:{message:"Provider rejected this request. Check account and model permissions.",retryable:!1},rate_limit:{message:"Provider rate limit or quota exceeded.",retryable:!0},timeout:{message:"Provider request timed out.",retryable:!0},network:{message:"Provider connection failed.",retryable:!0},model_unavailable:{message:"The selected model is unavailable.",retryable:!0},context_limit:{message:"The request exceeded the model context limit.",retryable:!1},unsupported_input:{message:"The selected model does not support this input.",retryable:!1},capacity:{message:"Task admission capacity is full. Retry after running tasks complete.",retryable:!0},runtime:{message:"Agent execution failed.",retryable:!0}};function _q($){try{if($ instanceof Error)return $.message;if($!==null&&typeof $==="object"&&"message"in $&&typeof $.message==="string")return $.message;return String($)}catch{return"Unknown error"}}function Oq($){let q=$.toLowerCase();if(/\b(401|unauthorized|authentication|invalid (?:api[ _-]?)?key|api[ _-]?key|credential)\b/.test(q))return"authentication";if(/\b(403|forbidden|permission denied|not permitted)\b/.test(q))return"permission";if(/\b(429|rate limit|too many requests|quota)\b/.test(q))return"rate_limit";if(/\b(timeout|timed out|deadline exceeded|etimedout)\b/.test(q))return"timeout";if(/\b(econnreset|econnrefused|enotfound|network|socket|connection)\b/.test(q))return"network";if(/\b(model not found|model unavailable|unsupported model|no such model)\b/.test(q))return"model_unavailable";if(/\b(context (?:length|window)|maximum context|too many tokens|token limit)\b/.test(q))return"context_limit";if(/\b(image|vision|multimodal|unsupported input|does not support)\b/.test(q))return"unsupported_input";if(/\btask admission\b.*\b(capacity|queue)\b/.test(q))return"capacity";return"runtime"}function Nq($){try{if(!$||typeof $!=="object"||!("name"in $)||$.name!=="TaskAdmissionQueueFullError"&&$.name!=="SessionRuntimeCapacityError"||!("resource"in $))return;return $.resource==="pending_count"||$.resource==="pending_bytes"||$.resource==="resident_runtimes"?$.resource:void 0}catch{return}}function a$($){return{code:$,...e0[$]}}function $$($){let q=Nq($);if(q)return{...a$("capacity"),resource:q};return a$(Oq(_q($)))}function q$($){if(!$||typeof $!=="object")return!1;let q=$;if(typeof q.code!=="string"||!(q.code in e0))return!1;let L=e0[q.code],f=q.resource===void 0||q.resource==="pending_count"||q.resource==="pending_bytes"||q.resource==="resident_runtimes";return q.message===L.message&&q.retryable===L.retryable&&f&&(q.code==="capacity"||q.resource===void 0)}import{promises as J0,realpathSync as Fq}from"node:fs";import z0 from"node:path";import*as o from"fs/promises";import*as x from"path";var s$=[".git",".claude","node_modules",".env",".env.local",".env.production",".env.development",".env.test"];class r extends Error{code;constructor($,q){super($);this.code=q;this.name="PathSecurityError"}}class L${static normalize($,q){let L=x.isAbsolute($)?$:x.resolve(q,$),f=x.normalize(L),J=x.normalize(q);if(!this.isWithinWorkspace(f,J))throw new r(`Path outside workspace: ${$} (resolved to ${f}, workspace: ${J})`,"PATH_OUTSIDE_WORKSPACE");return f}static checkRestricted($){let q=$.split(x.sep);for(let L of s$)if(q.includes(L))throw new r(`Access denied: "${L}" is a protected directory`,"RESTRICTED_PATH")}static checkTraversal($){if($.includes(".."))throw new r(`Path traversal not allowed: ${$}`,"PATH_TRAVERSAL")}static async validatePath($,q){this.checkTraversal($);let L=this.normalize($,q);this.checkRestricted(L);try{await o.access(L)}catch(f){throw new r(`Path not found: ${$}`,"PATH_NOT_FOUND")}return L}static async resolveSymlink($,q){try{let L=await o.realpath($),f=await o.realpath(q);if(!this.isWithinWorkspace(L,f))throw new r(`Symlink points outside workspace: ${$} -> ${L}`,"SYMLINK_OUTSIDE_WORKSPACE");return L}catch(L){if(L instanceof r)throw L;return $}}static getRelativePath($,q){return x.relative(q,$)}static isWithinWorkspace($,q){let L=x.resolve($),f=x.resolve(q),J=x.relative(f,L);return J===""||J!==".."&&!J.startsWith(`..${x.sep}`)&&!x.isAbsolute(J)}static async isWithinWorkspaceResolved($,q){let L=x.resolve(q),f=x.isAbsolute($)?x.resolve($):x.resolve(L,$);if(!this.isWithinWorkspace(f,L))return!1;let J;try{J=await o.realpath(L)}catch{return!1}let B=f;while(!0){try{let C=await o.realpath(B);return this.isWithinWorkspace(C,J)}catch(C){let Q=C.code;if(Q!=="ENOENT"&&Q!=="ENOTDIR")return!1}let Z=x.dirname(B);if(Z===B)return!1;B=Z}}static isRestricted($){let q=$.split(x.sep);return s$.some((L)=>q.includes(L))}}var Z0=D0("Tool");class l{static instance=null;accessedFiles=new Map;pathAliases=new Map;constructor(){}static getInstance(){if(!l.instance)l.instance=new l;return l.instance}async recordFileRead($,q){try{let L=await J0.stat($),f={filePath:z0.resolve($),accessTime:Date.now(),mtime:L.mtimeMs,sessionId:q,lastOperation:"read"};this.setRecord(f),await this.recordAliases($,f.filePath),Z0.debug(`记录文件读取: ${$}`)}catch(L){Z0.warn(`记录文件读取失败: ${$}`,L)}}async recordFileEdit($,q,L="edit"){try{let f=await J0.stat($),J={filePath:z0.resolve($),accessTime:Date.now(),mtime:f.mtimeMs,sessionId:q,lastOperation:L};this.setRecord(J),await this.recordAliases($,J.filePath),Z0.debug(`记录文件${L==="edit"?"编辑":"写入"}: ${$}`)}catch(f){Z0.warn(`记录文件${L==="edit"?"编辑":"写入"}失败: ${$}`,f)}}hasFileBeenRead($,q){let L=this.accessedFiles.get(this.resolveTrackedPath($));if(!L)return!1;return q?L.has(q):L.size>0}async checkFileModification($,q){let L=this.getFileRecord($,q);if(!L)return{modified:!1,message:"文件未被跟踪"};try{let f=await J0.stat($);if(Math.abs(f.mtimeMs-L.mtime)>1)return{modified:!0,message:`文件在访问后被修改(访问时间: ${new Date(L.accessTime).toISOString()}, 当前修改时间: ${f.mtime.toISOString()})`};return{modified:!1}}catch(f){let J=f;if(J.code==="ENOENT")return{modified:!0,message:"文件已被删除"};return{modified:!1,message:`无法检查文件状态: ${J.message}`}}}async checkExternalModification($,q){let L=this.getFileRecord($,q);if(!L)return{isExternal:!1,message:"文件未被跟踪"};try{let f=await J0.stat($);if(f.mtimeMs-L.mtime>2000)return{isExternal:!0,message:`文件在 ${new Date(L.accessTime).toISOString()} (${L.lastOperation}) 之后被外部程序修改(当前修改时间: ${f.mtime.toISOString()})`};return{isExternal:!1}}catch(f){let J=f;if(J.code==="ENOENT")return{isExternal:!0,message:"文件已被删除"};return Z0.warn(`检查文件外部修改失败: ${$}`,f),{isExternal:!1,message:`无法检查文件状态: ${J.message}`}}}getFileRecord($,q){let L=this.accessedFiles.get(this.resolveTrackedPath($));if(!L)return;if(q)return L.get(q);return[...L.values()].sort((f,J)=>J.accessTime-f.accessTime)[0]}getTrackedRecords(){return[...this.accessedFiles.values()].flatMap(($)=>[...$.values()])}clearFileRecord($,q){let L=this.resolveTrackedPath($);if(!q){this.accessedFiles.delete(L),this.removeAliases(L);return}let f=this.accessedFiles.get(L);if(f?.delete(q),f?.size===0)this.accessedFiles.delete(L),this.removeAliases(L)}clearAll(){this.accessedFiles.clear(),this.pathAliases.clear()}clearSession($,q){for(let[L,f]of this.accessedFiles.entries()){if(q&&!L$.isWithinWorkspace(L,q))continue;if(f.delete($),f.size===0)this.accessedFiles.delete(L),this.removeAliases(L)}}getTrackedFiles(){return Array.from(this.accessedFiles.keys())}getTrackedFileCount(){return this.accessedFiles.size}static resetInstance(){l.instance=null}setRecord($){let q=this.accessedFiles.get($.filePath);if(!q)q=new Map,this.accessedFiles.set($.filePath,q);q.set($.sessionId,$)}async recordAliases($,q){this.pathAliases.set(z0.resolve($),q);let L=await J0.realpath($).catch(()=>{return});if(L)this.pathAliases.set(L,q)}resolveTrackedPath($){let q=z0.resolve($);if(this.accessedFiles.has(q))return q;let L=this.pathAliases.get(q);if(L)return L;try{let f=Fq.native(q);return this.pathAliases.get(f)??f}catch{return q}}removeAliases($){for(let[q,L]of this.pathAliases)if(L===$)this.pathAliases.delete(q)}}import*as C0 from"node:crypto";import{promises as _}from"node:fs";import*as N from"node:path";import f$ from"write-file-atomic";var e$="missing";class A0{sessionId;workspaceRoot;enableCheckpoints;maxSnapshots;snapshotDir;manifestPath;trackedFileBackups=new Map;snapshots=[];constructor($){if(b($.sessionId),this.sessionId=$.sessionId,$.workspaceRoot&&!N.isAbsolute($.workspaceRoot))throw Error("Snapshot workspace root must be absolute");this.workspaceRoot=$.workspaceRoot?N.resolve($.workspaceRoot):void 0,this.enableCheckpoints=$.enableCheckpoints??!0,this.maxSnapshots=$.maxSnapshots??10;let q=G0();this.snapshotDir=N.join(q,"file-history",this.sessionId),this.manifestPath=N.join(this.snapshotDir,"manifest.json")}async initialize(){if(!this.enableCheckpoints)return;if(this.workspaceRoot)await this.selectWorkspaceSnapshotDir();await _.mkdir(this.snapshotDir,{recursive:!0,mode:493}),await this.loadManifest()}async selectWorkspaceSnapshotDir(){let $=G0(),q=await _.realpath(this.workspaceRoot).catch(()=>this.workspaceRoot),L=C0.createHash("sha256").update(q).digest("hex").slice(0,24),f=N.join($,"file-history",this.sessionId),J=N.join($,"file-history","workspaces",L,this.sessionId),B=N.join(J,"manifest.json");try{await _.access(B)}catch{await this.migrateLegacySnapshotDir(f,J,q)}this.snapshotDir=J,this.manifestPath=B}async migrateLegacySnapshotDir($,q,L){let f;try{f=JSON.parse(await _.readFile(N.join($,"manifest.json"),"utf8"))}catch{return}if(f.schemaVersion!==1||!Array.isArray(f.snapshots)||!f.snapshots.every((J)=>this.isWithinWorkspace(J.filePath,L)))return;await _.mkdir(N.dirname(q),{recursive:!0,mode:493});try{await _.rename($,q)}catch(J){let B=J.code;if(B!=="ENOENT"&&B!=="EEXIST"&&B!=="ENOTEMPTY")throw J}}isWithinWorkspace($,q){if(!N.isAbsolute($))return!1;let L=N.relative(q,N.resolve($));return L===""||L!==".."&&!L.startsWith(`..${N.sep}`)&&!N.isAbsolute(L)}async createSnapshot($,q){if(!this.enableCheckpoints)return{backupFileName:"",version:0,backupTime:new Date};let L=await this.resolveFileIdentity($),f=!0;try{await _.access(L)}catch{f=!1}let J=this.trackedFileBackups.get(L),B=J?J.version+1:1,Z=this.generateFileHash(L,B),C=this.getSnapshotPath(Z,B),Q=new Date;if(f){let Y=await _.readFile(L);await _.writeFile(C,Y)}let X={backupFileName:Z,version:B,backupTime:Q};return this.trackedFileBackups.set(L,X),this.snapshots.push({messageId:q,backupFileName:Z,timestamp:Q,filePath:L,version:B,existedBefore:f}),await this.cleanupOldSnapshots(L),await this.persistManifest(),X}async recordPostEditState($,q){if(!this.enableCheckpoints||!q.backupFileName)return;let L=await this.resolveFileIdentity($),f=this.snapshots.find((J)=>J.filePath===L&&J.backupFileName===q.backupFileName&&J.version===q.version);if(!f)throw Error(`未找到待完成的快照: ${L}`);f.postEditHash=await this.hashFile(L),await this.persistManifest()}async discardSnapshot($,q){if(!this.enableCheckpoints||!q.backupFileName)return;let L=await this.resolveFileIdentity($),f=this.snapshots.find((J)=>J.filePath===L&&J.backupFileName===q.backupFileName&&J.version===q.version);if(!f)return;this.removeSnapshot(f),await _.rm(this.getSnapshotPath(f.backupFileName,f.version),{force:!0}),await this.persistManifest()}async rewindLatest($){let q=await this.resolveFileIdentity($),L=this.snapshots.slice().reverse().find((B)=>B.filePath===q&&B.postEditHash!==void 0);if(!L?.postEditHash)throw Error(`未找到可回退快照: ${q}`);if(await this.hashFile(q)!==L.postEditHash)throw Error(`文件在 Blade 编辑后已被修改,拒绝覆盖: ${q}`);let J=this.getSnapshotPath(L.backupFileName,L.version);if(L.existedBefore){let B=await _.readFile(J);await _.mkdir(N.dirname(q),{recursive:!0}),await _.writeFile(q,B)}else await _.rm(q,{force:!0});return this.removeSnapshot(L),await _.rm(J,{force:!0}),await this.persistManifest(),L}async restoreSnapshot($,q){let L=await this.resolveFileIdentity($),f=this.snapshots.slice().reverse().find((B)=>B.messageId===q&&B.filePath===L);if(!f)throw Error(`未找到快照: messageId=${q}, filePath=${L}`);let J=this.getSnapshotPath(f.backupFileName,f.version);if(f.existedBefore){let B=await _.readFile(J);await _.mkdir(N.dirname(L),{recursive:!0}),await _.writeFile(L,B)}else await _.rm(L,{force:!0})}async listSnapshots($){let q=await this.resolveFileIdentity($);return this.snapshots.filter((L)=>L.filePath===q)}async listAllSnapshots(){return this.snapshots.filter(($)=>$.postEditHash!==void 0)}async previewRewind($){let q=this.buildRewindPlan($);return{files:q.map((L)=>L.filePath),snapshotCount:q.reduce((L,f)=>L+f.selected.length,0)}}async rewindSnapshots($){let q=this.buildRewindPlan($);if(q.length===0)return{files:[],snapshotCount:0};let L=new Map;for(let J of q){let B,Z=!0;try{B=await _.readFile(J.filePath)}catch(Q){if(Q.code!=="ENOENT")throw Q;Z=!1}if((B?C0.createHash("sha256").update(B).digest("hex"):e$)!==J.latest.postEditHash)throw Error(`文件在 Blade 编辑后已被修改,拒绝覆盖: ${J.filePath}`);if(L.set(J.filePath,{existed:Z,content:B}),J.target.existedBefore)await _.access(this.getSnapshotPath(J.target.backupFileName,J.target.version))}let f=[...this.snapshots];try{for(let B of q)if(B.target.existedBefore){let Z=await _.readFile(this.getSnapshotPath(B.target.backupFileName,B.target.version));await _.mkdir(N.dirname(B.filePath),{recursive:!0}),await f$(B.filePath,Z)}else await _.rm(B.filePath,{force:!0});let J=new Set(q.flatMap((B)=>B.selected));this.snapshots=this.snapshots.filter((B)=>!J.has(B)),this.rebuildTrackedFileBackups(),await this.persistManifest(),await Promise.all([...J].map((B)=>_.rm(this.getSnapshotPath(B.backupFileName,B.version),{force:!0}).catch(()=>{return})))}catch(J){this.snapshots=f,this.rebuildTrackedFileBackups();let B=[];for(let[Z,C]of L)try{if(C.existed&&C.content)await f$(Z,C.content);else await _.rm(Z,{force:!0})}catch(Q){B.push(Q)}if(B.length>0)throw AggregateError([J,...B],"快照回退失败且无法完整恢复回退前状态");throw J}return{files:q.map((J)=>J.filePath),snapshotCount:q.reduce((J,B)=>J+B.selected.length,0)}}async commitSnapshots($){let q=this.buildRewindPlan($),L=new Set(q.flatMap((J)=>J.selected));if(L.size===0)return{files:[],snapshotCount:0};let f=[...this.snapshots];this.snapshots=this.snapshots.filter((J)=>!L.has(J)),this.rebuildTrackedFileBackups();try{await this.persistManifest()}catch(J){throw this.snapshots=f,this.rebuildTrackedFileBackups(),J}return await Promise.all([...L].map((J)=>_.rm(this.getSnapshotPath(J.backupFileName,J.version),{force:!0}).catch(()=>{return}))),{files:q.map((J)=>J.filePath),snapshotCount:L.size}}buildRewindPlan($){let q=new Set($),L=this.snapshots.filter((B)=>B.postEditHash!==void 0),f=L.filter((B)=>q.has(B.messageId));return[...new Set(f.map((B)=>B.filePath))].sort().map((B)=>{let Z=L.filter((Y)=>Y.filePath===B),C=Z.filter((Y)=>q.has(Y.messageId)),Q=Z.indexOf(C[0]),X=Z.slice(Q);if(X.length!==C.length||X.some((Y)=>!q.has(Y.messageId)))throw Error(`请求的快照不是文件历史的连续后缀: ${B}`);return{filePath:B,selected:C,target:C[0],latest:C.at(-1)}})}async loadManifest(){try{let $=await _.readFile(this.manifestPath,"utf-8"),q=JSON.parse($);if(q.schemaVersion!==1||!Array.isArray(q.snapshots))throw Error("Unsupported snapshot manifest");this.snapshots=await Promise.all(q.snapshots.map(async(L)=>({...L,filePath:await this.resolveFileIdentity(L.filePath),timestamp:new Date(L.timestamp)}))),this.rebuildTrackedFileBackups()}catch($){if($.code!=="ENOENT")throw $;this.snapshots=[],this.trackedFileBackups.clear()}}async persistManifest(){if(this.snapshots.length===0){await _.rm(this.manifestPath,{force:!0});return}let $={schemaVersion:1,snapshots:this.snapshots.map((q)=>({...q,timestamp:q.timestamp.toISOString()}))};await f$(this.manifestPath,JSON.stringify($,null,2),{encoding:"utf-8",mode:384})}async cleanupOldSnapshots($){let L=this.snapshots.filter((f)=>f.filePath===$).slice(0,-this.maxSnapshots);for(let f of L)await _.rm(this.getSnapshotPath(f.backupFileName,f.version),{force:!0}),this.removeSnapshot(f)}async cleanup($=0){let q=this.snapshots.slice().sort((f,J)=>J.timestamp.getTime()-f.timestamp.getTime()),L=new Set(q.slice(0,$));for(let f of this.snapshots)if(!L.has(f))await _.rm(this.getSnapshotPath(f.backupFileName,f.version),{force:!0});this.snapshots=q.slice(0,$).reverse(),this.rebuildTrackedFileBackups(),await this.persistManifest()}getSnapshotPath($,q){return N.join(this.snapshotDir,`${$}@v${q}`)}async resolveFileIdentity($){let q=N.resolve($),L=[],f=q;while(!0){try{let B=await _.realpath(f);return N.join(B,...L.reverse())}catch(B){let Z=B.code;if(Z!=="ENOENT"&&Z!=="ENOTDIR")throw B}let J=N.dirname(f);if(J===f)return q;L.push(N.basename(f)),f=J}}async hashFile($){try{let q=await _.readFile($);return C0.createHash("sha256").update(q).digest("hex")}catch(q){if(q.code==="ENOENT")return e$;throw q}}removeSnapshot($){let q=this.snapshots.indexOf($);if(q>=0)this.snapshots.splice(q,1);this.rebuildTrackedFileBackups()}rebuildTrackedFileBackups(){this.trackedFileBackups.clear();for(let $ of this.snapshots){let q=this.trackedFileBackups.get($.filePath);if(!q||q.version<$.version)this.trackedFileBackups.set($.filePath,{backupFileName:$.backupFileName,version:$.version,backupTime:$.timestamp})}}generateFileHash($,q){let L=C0.createHash("md5");return L.update(`${$}:${q}`),L.digest("hex").substring(0,16)}getSnapshotDir(){return this.snapshotDir}getSessionId(){return this.sessionId}getTrackedFileCount(){return this.trackedFileBackups.size}getSnapshotCount(){return this.snapshots.length}}var Q2=1200,V2=2000,X2=2000,Y2=2000;function q1($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function Rq($){if(typeof $==="string"&&$.length>0)return $;if(q1($)&&typeof $.message==="string")return $.message;return}function xq($,q){if($===null||$===void 0)return q??"";if(typeof $==="string")return $;if(typeof $==="object")return $;return String($)}function L1($){let q=$.error!==null&&$.error!==void 0,L=q?Rq($.error)??"Tool execution failed":void 0,f=q1($.metadata)?$.metadata:void 0;return{success:!q,llmContent:xq($.output,L),...L?{error:{type:"execution_error",message:L}}:{},...f?{metadata:f}:{}}}function J$($,q){if($.length<=q)return $;let L=Math.max(0,q);if(L>0&&L<$.length&&/[\uD800-\uDBFF]/.test($.charAt(L-1)))L-=1;return $.slice(0,L)}function $1($,q){if($.length<=q)return $;let L=Math.max(0,$.length-q);if(L<$.length&&/[\uDC00-\uDFFF]/.test($.charAt(L)))L+=1;return $.slice(L)}function B$($,q){if($.length<=q)return $;if(q<=0)return"";let L=`
@@ -1 +1 @@
1
- import{Ab as j,Bb as k,Ib as l,Jb as m,Kb as n,Lb as o,Nb as p,Ob as q,Pb as r,nb as a,ob as b,qb as c,ub as d,vb as e,wb as f,xb as g,yb as h,zb as i}from"./chunk-8zpsw401.js";import"./chunk-fbgzeb3m.js";import"./chunk-1ykz47d9.js";import"./chunk-qyxbee3w.js";import"./chunk-r297pq3s.js";import"./chunk-xkz9ecdx.js";import"./chunk-rjgfy07e.js";import"./chunk-xbj18hxh.js";import"./chunk-kaf6m50a.js";import"./chunk-0cbpjhq7.js";import"./chunk-7kf3hwp3.js";import"./chunk-03947xkg.js";import"./chunk-qp8mejbn.js";import"./chunk-c03xn5s3.js";import"./chunk-yjbq4jeg.js";import"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import"./chunk-bj5msq36.js";import"./chunk-453tf6d0.js";import"./chunk-p7ww2tcn.js";import"./chunk-qw5j84ny.js";import"./chunk-99nevk7k.js";export{g as saveUserMessage,i as saveToolUse,j as saveToolResult,k as saveCompaction,h as saveAssistantMessage,d as isRootSystemPrompt,m as handleTaskListUpdate,n as handleSkillActivation,o as extractModelSwitch,r as executeLoopGenerator,f as drainLoop,c as checkStopHook,a as checkOutputRecovery,b as checkIncompleteIntent,q as checkAndCompactInLoop,p as applyToolDomainEffects,l as StreamingToolExecutor,e as ConversationState};
1
+ import{Ab as j,Bb as k,Ib as l,Jb as m,Kb as n,Lb as o,Nb as p,Ob as q,Pb as r,nb as a,ob as b,qb as c,ub as d,vb as e,wb as f,xb as g,yb as h,zb as i}from"./chunk-g3fbgp1k.js";import"./chunk-fbgzeb3m.js";import"./chunk-57jj40er.js";import"./chunk-qyxbee3w.js";import"./chunk-r297pq3s.js";import"./chunk-xkz9ecdx.js";import"./chunk-rjgfy07e.js";import"./chunk-xbj18hxh.js";import"./chunk-kaf6m50a.js";import"./chunk-0cbpjhq7.js";import"./chunk-egp0crrc.js";import"./chunk-03947xkg.js";import"./chunk-qp8mejbn.js";import"./chunk-c03xn5s3.js";import"./chunk-yjbq4jeg.js";import"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import"./chunk-bj5msq36.js";import"./chunk-c74e0jx1.js";import"./chunk-p7ww2tcn.js";import"./chunk-qw5j84ny.js";import"./chunk-99nevk7k.js";export{g as saveUserMessage,i as saveToolUse,j as saveToolResult,k as saveCompaction,h as saveAssistantMessage,d as isRootSystemPrompt,m as handleTaskListUpdate,n as handleSkillActivation,o as extractModelSwitch,r as executeLoopGenerator,f as drainLoop,c as checkStopHook,a as checkOutputRecovery,b as checkIncompleteIntent,q as checkAndCompactInLoop,p as applyToolDomainEffects,l as StreamingToolExecutor,e as ConversationState};
@@ -1,4 +1,4 @@
1
- import{m as fH,n as yH,o as SH,p as TH,q as bH,r as RH}from"./chunk-xgmn301g.js";import{A as JH,v as MH,w as t,x as e,y as HH,z as d}from"./chunk-fhxy024n.js";import{B as VH,R as xH,T as UH,U as _H,W as ZH,Z as GH}from"./chunk-21bb1xda.js";import"./chunk-fx19tpcm.js";import"./chunk-22s3r2xy.js";import{Fb as jH,kb as s,wb as WH}from"./chunk-8zpsw401.js";import"./chunk-fbgzeb3m.js";import{Ac as LH,Lc as O,Wc as a,wc as DH}from"./chunk-1ykz47d9.js";import"./chunk-qyxbee3w.js";import"./chunk-r297pq3s.js";import{sd as FH}from"./chunk-map4165w.js";import{ud as EH,vd as zH,wd as AH}from"./chunk-bxtw5f52.js";import{xd as PH}from"./chunk-4ppgfhqd.js";import"./chunk-2m4mgw58.js";import{Xd as QH}from"./chunk-ytce7gnt.js";import"./chunk-v508x7cg.js";import"./chunk-xkz9ecdx.js";import"./chunk-rjgfy07e.js";import"./chunk-2faga011.js";import"./chunk-xbj18hxh.js";import"./chunk-y67yrm3k.js";import"./chunk-74wb5e1h.js";import"./chunk-kaf6m50a.js";import"./chunk-0cbpjhq7.js";import"./chunk-rc7jnds2.js";import"./chunk-7kf3hwp3.js";import"./chunk-03947xkg.js";import"./chunk-465tgzab.js";import{rg as BH}from"./chunk-qp8mejbn.js";import{tg as NH,vg as H,wg as KH,yg as N}from"./chunk-c03xn5s3.js";import"./chunk-yjbq4jeg.js";import{Fg as g}from"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import"./chunk-bj5msq36.js";import"./chunk-453tf6d0.js";import"./chunk-yz80dp1a.js";import"./chunk-p7ww2tcn.js";import"./chunk-qw5j84ny.js";import"./chunk-99nevk7k.js";import fJ from"yargs";import{hideBin as yJ}from"yargs/helpers";function p(K,V,Q){if(K.off){K.off(V,Q);return}K.removeListener?.(V,Q)}function mH(K,V){if(!K.once&&!K.on||!K.off&&!K.removeListener)throw Error("Writable returned false without an observable drain contract");return new Promise((Q,q)=>{let J=!1,Z=()=>{p(K,"drain",x),p(K,"error",j),V.removeEventListener("abort",G)},W=(F)=>{if(J)return;J=!0,Z(),F()},x=()=>W(Q),j=(F)=>W(()=>q(F??Error("Writable emitted an error"))),G=()=>W(()=>q(V.reason??Error("Writable drain aborted")));if(V.aborted){G();return}let f=K.once?.bind(K)??K.on?.bind(K);f?.("drain",x),f?.("error",j),V.addEventListener("abort",G,{once:!0})})}async function cH(K,V,Q){if(K.destroyed||K.writableEnded)throw Error("Writable is already closed");if(K.write(V)===!1)await mH(K,Q)}class v{options;queues;sinkErrorListeners=[];failed=!1;closing=!1;handleAbort=()=>{this.fail(new d("aborted","Headless output was aborted",{cause:this.options.signal?.reason}))};constructor(K,V={}){this.options=V;let Q=(q)=>new JH({maxPendingItems:V.maxPendingItems??t,maxPendingBytes:V.maxPendingBytes??e,writeTimeoutMs:V.writeTimeoutMs??HH,sizeOf:(J)=>Buffer.byteLength(J),write:(J,Z)=>cH(K[q],J,Z),onFailure:(J)=>this.fail(J)});if(this.queues={stdout:Q("stdout"),stderr:Q("stderr")},this.observeSinkErrors(K.stdout),K.stderr!==K.stdout)this.observeSinkErrors(K.stderr);if(V.signal?.addEventListener("abort",this.handleAbort,{once:!0}),V.signal?.aborted)this.handleAbort()}write(K,V){return this.queues[K].offer(V).accepted}async flush(){await Promise.all([this.queues.stdout.flush(),this.queues.stderr.flush()])}close(K){if(this.closing||this.failed)return;this.closing=!0,this.options.signal?.removeEventListener("abort",this.handleAbort),this.removeSinkErrorListeners(),this.queues.stdout.close(K),this.queues.stderr.close(K)}stats(){return{stdout:this.queues.stdout.stats(),stderr:this.queues.stderr.stats()}}observeSinkErrors(K){if(!K.on||!K.off&&!K.removeListener)return;let V=(Q)=>{this.fail(new d("write_failed","Headless writable failed",{cause:Q??Error("Writable emitted an error")}))};K.on("error",V),this.sinkErrorListeners.push({writer:K,listener:V})}fail(K){if(this.closing||this.failed)return;this.failed=!0,this.options.signal?.removeEventListener("abort",this.handleAbort),this.removeSinkErrorListeners(),this.queues.stdout.close(K),this.queues.stderr.close(K),this.options.onFailure?.(K)}removeSinkErrorListeners(){for(let{writer:K,listener:V}of this.sinkErrorListeners.splice(0))p(K,"error",V)}}var $H=1;function D(K){return H.Object({event_version:H.Literal($H),...K})}var uH=D({type:H.Literal("content_delta"),delta:H.String()}),dH=D({type:H.Literal("thinking_delta"),delta:H.String()}),pH=D({type:H.Literal("thinking"),content:H.String()}),vH=D({type:H.Literal("stream_end")}),lH=D({type:H.Literal("content"),content:H.String()}),aH=D({type:H.Literal("structured_output"),output:H.Record(H.String(),H.Unknown()),schema_digest:H.String({pattern:"^[a-f0-9]{64}$"})}),l=N(["readonly","write","execute"]),sH=H.Object({kind:l,scope:N(["global","session"]),queue_position:H.Integer({minimum:1}),in_flight:H.Integer({minimum:0}),limit:H.Integer({minimum:1})}),iH=D({type:H.Literal("tool_start"),tool_name:H.String(),summary:H.String(),target:H.Optional(H.String()),tool_kind:H.Optional(l)}),oH=D({type:H.Literal("tool_progress"),tool_name:H.String(),message:H.String(),progress:H.Optional(H.Number()),total:H.Optional(H.Number()),admission:H.Optional(sH)}),rH=H.Object({auto_backgrounded:H.Literal(!0),background_reason:H.Literal("foreground_budget"),foreground_budget_ms:H.Integer({minimum:1}),shell_id:H.String({minLength:1,maxLength:128,pattern:"^bash_[A-Za-z0-9-]+$"}),pid:H.Optional(H.Integer({minimum:1})),terminal_transport:N(["local","acp"])}),nH=D({type:H.Literal("tool_result"),tool_name:H.String(),summary:H.String(),target:H.Optional(H.String()),tool_kind:H.Optional(l),success:H.Optional(H.Boolean()),error_type:H.Optional(H.String()),error_message:H.Optional(H.String()),background:H.Optional(rH)}),tH=D({type:H.Literal("mcp_catalog_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),added:H.Array(H.String()),removed:H.Array(H.String()),updated:H.Array(H.String())}),eH=D({type:H.Literal("mcp_content_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),content_kind:N(["resources","resource_templates","prompts"]),added:H.Array(H.String()),removed:H.Array(H.String()),updated:H.Array(H.String())}),HJ=D({type:H.Literal("mcp_resource_updated"),revision:H.Integer({minimum:1}),server_name:H.String(),uri:H.String()}),JJ=D({type:H.Literal("mcp_connection_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),phase:N(["reconnecting","recovered","failed"]),reason:H.String(),attempt:H.Integer({minimum:0}),max_attempts:H.Integer({minimum:0}),next_retry_at:H.Optional(H.Integer({minimum:0})),error:H.Optional(H.String())}),KJ=D({type:H.Literal("mcp_log"),revision:H.Integer({minimum:1}),server_name:H.String(),level:N(["debug","info","notice","warning","error","critical","alert","emergency"]),logger:H.Optional(H.String()),message:H.String(),projected_bytes:H.Integer({minimum:0}),data_sha256:H.String(),truncated:H.Boolean(),details_omitted:H.Boolean(),timestamp:H.Integer({minimum:0}),synthetic:H.Optional(H.Boolean())}),VJ=D({type:H.Literal("mcp_instructions_changed"),revision:H.Integer({minimum:0}),server_name:H.String(),action:N(["added","removed"]),reason:N(["snapshot","connection","disconnection"]),text:H.Optional(H.String()),source_bytes:H.Optional(H.Integer({minimum:0})),projected_bytes:H.Optional(H.Integer({minimum:0})),sha256:H.Optional(H.String()),truncated:H.Optional(H.Boolean()),details_omitted:H.Optional(H.Boolean())}),ZJ=D({type:H.Literal("mcp_task_changed"),revision:H.Integer({minimum:0}),task_id:H.String(),server_name:H.String(),tool_name:H.String(),status:N(["working","input_required","interrupted","completed","failed","cancelled"]),status_message:H.Optional(H.String()),created_at:H.Integer({minimum:0}),updated_at:H.Integer({minimum:0}),completed_at:H.Optional(H.Integer({minimum:0})),has_result:H.Boolean(),error:H.Optional(H.String())}),$J=D({type:H.Literal("project_rules_loaded"),files:H.Array(H.Object({id:H.String(),relative_path:H.String(),source:N(["project","local"]),conditional:H.Boolean(),content_sha256:H.String({pattern:"^[a-f0-9]{64}$"})})),trigger_paths:H.Array(H.String()),blocked_write:H.Boolean()}),qJ=D({type:H.Literal("user_shell_started"),execution_id:H.String(),command:H.String(),auxiliary:H.Boolean()}),XJ=D({type:H.Literal("user_shell_output"),execution_id:H.String(),stream:N(["stdout","stderr"]),chunk:H.String(),stream_truncated:H.Boolean()}),YJ=D({type:H.Literal("user_shell_completed"),execution_id:H.String(),message_id:H.String(),status:N(["completed","failed","aborted","timed_out","spawn_error"]),exit_code:H.Union([H.Integer(),H.Null()]),duration_ms:H.Number({minimum:0}),stdout:H.String(),stderr:H.String(),truncated:H.Boolean(),auxiliary:H.Boolean()}),BJ=D({type:H.Literal("phase"),phase:N(["turn","searching","inspecting","target_hit","executing","completed"]),status:N(["ongoing","hit","done"]),message:H.String(),turn:H.Optional(H.Number()),tool_name:H.Optional(H.String()),target:H.Optional(H.String())}),NJ=D({type:H.Literal("tool_detail"),tool_name:H.String(),detail:H.String()}),QJ=D({type:H.Literal("task_update"),tasks:H.Array(ZH)}),DJ=D({type:H.Literal("goal"),state:N(["updated","cleared"]),goal_id:H.Optional(H.String()),status:H.Optional(N(["active","verifying","paused","blocked","usage_limited","budget_limited","complete"])),verification_attempt:H.Optional(H.Integer({minimum:1})),verification_status:H.Optional(N(["pending","pass","fail","partial"])),verifier_session_id:H.Optional(H.String()),verification_evidence_sha256:H.Optional(H.String({pattern:"^[a-f0-9]{64}$"})),premature_stop_pattern:H.Optional(N(VH)),premature_stop_count:H.Optional(H.Integer({minimum:1}))}),LJ=D({type:H.Literal("subagent"),state:N(["spawned","completed"]),session_id:H.String(),subagent_type:H.Optional(H.String()),success:H.Optional(H.Boolean()),summary:H.Optional(H.String()),verification_verdict:H.Optional(N(["pass","fail","partial"])),resumed_from:H.Optional(H.String()),root_agent_id:H.Optional(H.String()),resume_depth:H.Optional(H.Integer({minimum:0}))}),WJ=D({type:H.Literal("token_usage"),input_tokens:H.Number(),output_tokens:H.Number(),total_tokens:H.Number(),max_context_tokens:H.Number(),cache_read_tokens:H.Optional(H.Number()),cache_write_tokens:H.Optional(H.Number()),prompt_cache_break:H.Optional(H.Object({reason:N(["model_changed","system_prompt_changed","tools_changed","request_policy_changed","ttl_expired","server_side"]),previous_cache_read_tokens:H.Number(),cache_read_tokens:H.Number(),cache_write_tokens:H.Number(),token_drop:H.Number(),elapsed_ms:H.Number(),call_number:H.Number(),system_prompt_changed:H.Boolean(),system_char_delta:H.Number(),tools_changed:H.Boolean(),added_tool_count:H.Number(),removed_tool_count:H.Number(),changed_tool_count:H.Number(),model_changed:H.Boolean(),request_policy_changed:H.Boolean()})),cost_usd:H.Optional(H.Number())}),jJ=D({type:H.Literal("compacting"),state:N(["started","completed"]),reason:H.Optional(N(["threshold","context_limit","turn_limit","manual"])),strategy:H.Optional(N(["llm","fallback","snip"])),outcome:H.Optional(N(["completed","fallback","failed"])),pre_tokens:H.Optional(H.Number({minimum:0})),post_tokens:H.Optional(H.Number({minimum:0}))}),xJ=D({type:H.Literal("provider_retry"),phase:N(["scheduled","waiting","attempt","recovered","exhausted"]),attempt:H.Integer({minimum:0}),max_retries:H.Integer({minimum:0}),reason:N(["rate_limit","server_error","timeout","transport","stream_closed"]),status_code:H.Optional(H.Integer({minimum:100,maximum:599})),delay_ms:H.Optional(H.Integer({minimum:0})),next_retry_at:H.Optional(H.Integer({minimum:0})),mode:H.Optional(N(["standard","bounded_foreground"])),recovery_budget_ms:H.Optional(H.Integer({minimum:0})),recovery_elapsed_ms:H.Optional(H.Integer({minimum:0})),recovery_remaining_ms:H.Optional(H.Integer({minimum:0})),exhausted_by:H.Optional(N(["attempt_limit","recovery_budget"]))}),UJ=D({type:H.Literal("provider_admission"),phase:N(["queued","admitted","rejected"]),request_class:N(["foreground","background","internal"]),resource:N(["stream","pending_count","pending_bytes"]),scope:N(["global","domain","owner","class"]),reason:H.Optional(N(["capacity","queue_full","wait_timeout","closed"])),queue_position:H.Integer({minimum:0}),queue_depth:H.Integer({minimum:0}),in_flight:H.Integer({minimum:0}),limit:H.Integer({minimum:0}),wait_ms:H.Integer({minimum:0}),max_wait_ms:H.Integer({minimum:0}),recovery_remaining_ms:H.Optional(H.Integer({minimum:0}))}),_J=D({type:H.Literal("provider_circuit"),phase:N(["opened","waiting","probe","closed","reopened","rejected"]),reason:N(["rate_limit","server_error","transport","stream_closed"]),status_code:H.Optional(H.Integer({minimum:100,maximum:599})),retry_after_ms:H.Optional(H.Integer({minimum:0})),next_probe_at:H.Optional(H.Integer({minimum:0})),open_duration_ms:H.Integer({minimum:0}),sample_count:H.Optional(H.Integer({minimum:0})),failure_count:H.Optional(H.Integer({minimum:0})),recovery_remaining_ms:H.Optional(H.Integer({minimum:0}))}),GJ=D({type:H.Literal("provider_stall"),phase:N(["detected","recovered"]),stall_count:H.Integer({minimum:1}),duration_ms:H.Integer({minimum:0}),warning_after_ms:H.Integer({minimum:1}),timeout_ms:H.Integer({minimum:1}),output_started:H.Boolean()}),PJ=D({type:H.Literal("action_stationarity"),phase:N(["detected","recovered","halted"]),tool_name:H.String(),run_length:H.Integer({minimum:1}),nudge_threshold:H.Integer({minimum:1}),halt_threshold:H.Integer({minimum:1}),progress_aware:H.Boolean()}),FJ=D({type:H.Literal("turn_limit"),turns_count:H.Number(),action:H.Literal("continue")}),EJ=D({type:H.Literal("task_session"),session_id:H.String(),project_path:H.String(),source_project_path:H.String(),isolation:N(["local","worktree"]),worktree_branch:H.Optional(H.String()),base_commit:H.Optional(H.String())}),zJ=D({type:H.Literal("task_admission"),state:N(["queued","running"]),queue_position:H.Optional(H.Integer({minimum:1})),queue_depth:H.Integer({minimum:0}),in_flight:H.Integer({minimum:0}),max_concurrent_tasks:H.Integer({minimum:1})}),AJ=D({type:H.Literal("output"),content:H.String(),exit_code:H.Number()}),MJ=D({type:H.Literal("error"),message:H.String()}),iJ=KH(H.Union([uH,dH,pH,vH,lH,aH,iH,oH,nH,tH,eH,HJ,JJ,KJ,VJ,ZJ,$J,qJ,XJ,YJ,BJ,NJ,QJ,DJ,LJ,WJ,jJ,UJ,_J,xJ,GJ,PJ,FJ,EJ,zJ,AJ,MJ]));function qH(K,V){return{event_version:$H,type:K,...V}}function SJ(K){if(!K||typeof K!=="object"||Array.isArray(K))return;let V=K;if(V.auto_backgrounded!==!0||V.background_reason!=="foreground_budget"||!Number.isSafeInteger(V.foreground_budget_ms)||V.foreground_budget_ms<=0||typeof V.shell_id!=="string"||!/^bash_[A-Za-z0-9-]+$/.test(V.shell_id)||V.shell_id.length>128||V.terminal_transport!=="local"&&V.terminal_transport!=="acp"||V.pid!==void 0&&(!Number.isSafeInteger(V.pid)||V.pid<=0))return;return{auto_backgrounded:!0,background_reason:"foreground_budget",foreground_budget_ms:V.foreground_budget_ms,shell_id:V.shell_id,...V.pid===void 0?{}:{pid:V.pid},terminal_transport:V.terminal_transport}}function TJ(K){let V=new AbortController,Q=(Z)=>{if(!V.signal.aborted)V.abort(Z)},q=()=>Q("interrupt"),J=()=>Q(K?.signal?.reason);if(K?.signal){if(K.signal.addEventListener("abort",J,{once:!0}),K.signal.aborted)J()}else process.once("SIGINT",q),process.once("SIGTERM",q);return{signal:V.signal,abort:Q,dispose:()=>{K?.signal?.removeEventListener("abort",J),process.removeListener("SIGINT",q),process.removeListener("SIGTERM",q)}}}var bJ=N(["text","jsonl"]),RJ=H.Object({headless:H.Optional(H.Boolean()),message:H.Optional(H.String()),_:H.Optional(H.Array(H.Union([H.String(),H.Number()]))),model:H.Optional(H.String()),systemPrompt:H.Optional(H.String()),appendSystemPrompt:H.Optional(H.String()),verificationAgent:H.Optional(H.Boolean()),maxTurns:H.Optional(H.Refine(H.Integer(),(K)=>K===-1||K>0,()=>"must be -1 (unlimited) or a positive integer")),permissionMode:H.Optional(H.Enum(BH)),mcpConfig:H.Optional(H.Array(H.String())),strictMcpConfig:H.Optional(H.Boolean()),sessionId:H.Optional(H.String()),allowedTools:H.Optional(H.Array(H.String())),disallowedTools:H.Optional(H.Array(H.String())),agents:H.Optional(H.String()),continue:H.Optional(H.Boolean()),resume:H.Optional(H.Union([H.String(),H.Boolean()])),forkSession:H.Optional(H.Boolean()),taskIsolation:H.Optional(N(["local","worktree"])),outputFormat:H.Optional(bJ),jsonSchema:H.Optional(H.String()),outputSchema:H.Optional(H.String())});class IH{openedThinking=!1;wroteAssistantContent=!1;markAssistantContent(){this.wroteAssistantContent=!0}setThinkingOpened(K){this.openedThinking=K}hasOpenThinking(){return this.openedThinking}completeStream(){let K={openedThinking:this.openedThinking,wroteAssistantContent:this.wroteAssistantContent};return this.openedThinking=!1,this.wroteAssistantContent=!1,K}}function IJ(K){return K.issues.map((V)=>`${V.path.join(".")||"options"}: ${V.message}`).join("; ")}function gJ(K){let V=NH(RJ,K);if(!V.success)throw Error(`Invalid headless options: ${IJ(V.error)}`);return V.data}function CJ(K){return K.command("* [message]","Run full agent loop without Ink UI and print events to the terminal",(V)=>V.positional("message",{describe:"Message to process",type:"string"}).option("headless",{type:"boolean",describe:"Run full agent loop without Ink UI and print events to the terminal"}).option("model",{describe:"Model ID for this run",type:"string"}).option("system-prompt",{describe:"Replace the default system prompt",type:"string"}).option("append-system-prompt",{describe:"Append a system prompt to the default system prompt",type:"string"}).option("verification-agent",{describe:"Run the built-in independent verification agent after non-trivial changes",type:"boolean",default:!0}).option("max-turns",{alias:["maxTurns"],describe:"Maximum conversation turns (-1: unlimited, N>0: limit to N turns)",type:"number"}).option("output-format",{alias:["outputFormat"],choices:["text","jsonl"],describe:"Headless output format",type:"string"}).option("json-schema",{alias:["jsonSchema"],describe:"Inline JSON Schema for the structured final response",type:"string"}).option("output-schema",{alias:["outputSchema"],describe:"Path to a JSON Schema file for the structured final response",type:"string"}).option("task-isolation",{alias:["taskIsolation"],choices:["local","worktree"],describe:"Dispatch a new durable task in the selected workspace mode",type:"string"}),async(V)=>{if(!V.headless)return;let Q=await cJ(V);process.exit(Q)})}function L(K,V=""){K.write(`${V}
1
+ import{m as fH,n as yH,o as SH,p as TH,q as bH,r as RH}from"./chunk-v4ek6q8t.js";import{A as JH,v as MH,w as t,x as e,y as HH,z as d}from"./chunk-6bka1j4q.js";import{B as VH,R as xH,T as UH,U as _H,W as ZH,Z as GH}from"./chunk-kb5xaar0.js";import"./chunk-yk8s8kjt.js";import"./chunk-22s3r2xy.js";import{Fb as jH,kb as s,wb as WH}from"./chunk-g3fbgp1k.js";import"./chunk-fbgzeb3m.js";import{Ac as LH,Lc as O,Wc as a,wc as DH}from"./chunk-57jj40er.js";import"./chunk-qyxbee3w.js";import"./chunk-r297pq3s.js";import{sd as FH}from"./chunk-gz2fx7th.js";import{ud as EH,vd as zH,wd as AH}from"./chunk-d2eahefk.js";import{xd as PH}from"./chunk-4ppgfhqd.js";import"./chunk-2m4mgw58.js";import{Xd as QH}from"./chunk-xts31qj4.js";import"./chunk-v508x7cg.js";import"./chunk-xkz9ecdx.js";import"./chunk-rjgfy07e.js";import"./chunk-2faga011.js";import"./chunk-xbj18hxh.js";import"./chunk-22sw5bv4.js";import"./chunk-rdtgv0n8.js";import"./chunk-kaf6m50a.js";import"./chunk-0cbpjhq7.js";import"./chunk-rc7jnds2.js";import"./chunk-egp0crrc.js";import"./chunk-03947xkg.js";import"./chunk-zph2jekm.js";import{rg as BH}from"./chunk-qp8mejbn.js";import{tg as NH,vg as H,wg as KH,yg as N}from"./chunk-c03xn5s3.js";import"./chunk-yjbq4jeg.js";import{Fg as g}from"./chunk-22aaybx2.js";import"./chunk-qtt17d5s.js";import"./chunk-2qqmmxqf.js";import"./chunk-gbrwzpyg.js";import"./chunk-bj5msq36.js";import"./chunk-c74e0jx1.js";import"./chunk-yz80dp1a.js";import"./chunk-p7ww2tcn.js";import"./chunk-qw5j84ny.js";import"./chunk-99nevk7k.js";import fJ from"yargs";import{hideBin as yJ}from"yargs/helpers";function p(K,V,Q){if(K.off){K.off(V,Q);return}K.removeListener?.(V,Q)}function mH(K,V){if(!K.once&&!K.on||!K.off&&!K.removeListener)throw Error("Writable returned false without an observable drain contract");return new Promise((Q,q)=>{let J=!1,Z=()=>{p(K,"drain",x),p(K,"error",j),V.removeEventListener("abort",G)},W=(F)=>{if(J)return;J=!0,Z(),F()},x=()=>W(Q),j=(F)=>W(()=>q(F??Error("Writable emitted an error"))),G=()=>W(()=>q(V.reason??Error("Writable drain aborted")));if(V.aborted){G();return}let f=K.once?.bind(K)??K.on?.bind(K);f?.("drain",x),f?.("error",j),V.addEventListener("abort",G,{once:!0})})}async function cH(K,V,Q){if(K.destroyed||K.writableEnded)throw Error("Writable is already closed");if(K.write(V)===!1)await mH(K,Q)}class v{options;queues;sinkErrorListeners=[];failed=!1;closing=!1;handleAbort=()=>{this.fail(new d("aborted","Headless output was aborted",{cause:this.options.signal?.reason}))};constructor(K,V={}){this.options=V;let Q=(q)=>new JH({maxPendingItems:V.maxPendingItems??t,maxPendingBytes:V.maxPendingBytes??e,writeTimeoutMs:V.writeTimeoutMs??HH,sizeOf:(J)=>Buffer.byteLength(J),write:(J,Z)=>cH(K[q],J,Z),onFailure:(J)=>this.fail(J)});if(this.queues={stdout:Q("stdout"),stderr:Q("stderr")},this.observeSinkErrors(K.stdout),K.stderr!==K.stdout)this.observeSinkErrors(K.stderr);if(V.signal?.addEventListener("abort",this.handleAbort,{once:!0}),V.signal?.aborted)this.handleAbort()}write(K,V){return this.queues[K].offer(V).accepted}async flush(){await Promise.all([this.queues.stdout.flush(),this.queues.stderr.flush()])}close(K){if(this.closing||this.failed)return;this.closing=!0,this.options.signal?.removeEventListener("abort",this.handleAbort),this.removeSinkErrorListeners(),this.queues.stdout.close(K),this.queues.stderr.close(K)}stats(){return{stdout:this.queues.stdout.stats(),stderr:this.queues.stderr.stats()}}observeSinkErrors(K){if(!K.on||!K.off&&!K.removeListener)return;let V=(Q)=>{this.fail(new d("write_failed","Headless writable failed",{cause:Q??Error("Writable emitted an error")}))};K.on("error",V),this.sinkErrorListeners.push({writer:K,listener:V})}fail(K){if(this.closing||this.failed)return;this.failed=!0,this.options.signal?.removeEventListener("abort",this.handleAbort),this.removeSinkErrorListeners(),this.queues.stdout.close(K),this.queues.stderr.close(K),this.options.onFailure?.(K)}removeSinkErrorListeners(){for(let{writer:K,listener:V}of this.sinkErrorListeners.splice(0))p(K,"error",V)}}var $H=1;function D(K){return H.Object({event_version:H.Literal($H),...K})}var uH=D({type:H.Literal("content_delta"),delta:H.String()}),dH=D({type:H.Literal("thinking_delta"),delta:H.String()}),pH=D({type:H.Literal("thinking"),content:H.String()}),vH=D({type:H.Literal("stream_end")}),lH=D({type:H.Literal("content"),content:H.String()}),aH=D({type:H.Literal("structured_output"),output:H.Record(H.String(),H.Unknown()),schema_digest:H.String({pattern:"^[a-f0-9]{64}$"})}),l=N(["readonly","write","execute"]),sH=H.Object({kind:l,scope:N(["global","session"]),queue_position:H.Integer({minimum:1}),in_flight:H.Integer({minimum:0}),limit:H.Integer({minimum:1})}),iH=D({type:H.Literal("tool_start"),tool_name:H.String(),summary:H.String(),target:H.Optional(H.String()),tool_kind:H.Optional(l)}),oH=D({type:H.Literal("tool_progress"),tool_name:H.String(),message:H.String(),progress:H.Optional(H.Number()),total:H.Optional(H.Number()),admission:H.Optional(sH)}),rH=H.Object({auto_backgrounded:H.Literal(!0),background_reason:H.Literal("foreground_budget"),foreground_budget_ms:H.Integer({minimum:1}),shell_id:H.String({minLength:1,maxLength:128,pattern:"^bash_[A-Za-z0-9-]+$"}),pid:H.Optional(H.Integer({minimum:1})),terminal_transport:N(["local","acp"])}),nH=D({type:H.Literal("tool_result"),tool_name:H.String(),summary:H.String(),target:H.Optional(H.String()),tool_kind:H.Optional(l),success:H.Optional(H.Boolean()),error_type:H.Optional(H.String()),error_message:H.Optional(H.String()),background:H.Optional(rH)}),tH=D({type:H.Literal("mcp_catalog_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),added:H.Array(H.String()),removed:H.Array(H.String()),updated:H.Array(H.String())}),eH=D({type:H.Literal("mcp_content_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),content_kind:N(["resources","resource_templates","prompts"]),added:H.Array(H.String()),removed:H.Array(H.String()),updated:H.Array(H.String())}),HJ=D({type:H.Literal("mcp_resource_updated"),revision:H.Integer({minimum:1}),server_name:H.String(),uri:H.String()}),JJ=D({type:H.Literal("mcp_connection_changed"),revision:H.Integer({minimum:1}),server_name:H.String(),phase:N(["reconnecting","recovered","failed"]),reason:H.String(),attempt:H.Integer({minimum:0}),max_attempts:H.Integer({minimum:0}),next_retry_at:H.Optional(H.Integer({minimum:0})),error:H.Optional(H.String())}),KJ=D({type:H.Literal("mcp_log"),revision:H.Integer({minimum:1}),server_name:H.String(),level:N(["debug","info","notice","warning","error","critical","alert","emergency"]),logger:H.Optional(H.String()),message:H.String(),projected_bytes:H.Integer({minimum:0}),data_sha256:H.String(),truncated:H.Boolean(),details_omitted:H.Boolean(),timestamp:H.Integer({minimum:0}),synthetic:H.Optional(H.Boolean())}),VJ=D({type:H.Literal("mcp_instructions_changed"),revision:H.Integer({minimum:0}),server_name:H.String(),action:N(["added","removed"]),reason:N(["snapshot","connection","disconnection"]),text:H.Optional(H.String()),source_bytes:H.Optional(H.Integer({minimum:0})),projected_bytes:H.Optional(H.Integer({minimum:0})),sha256:H.Optional(H.String()),truncated:H.Optional(H.Boolean()),details_omitted:H.Optional(H.Boolean())}),ZJ=D({type:H.Literal("mcp_task_changed"),revision:H.Integer({minimum:0}),task_id:H.String(),server_name:H.String(),tool_name:H.String(),status:N(["working","input_required","interrupted","completed","failed","cancelled"]),status_message:H.Optional(H.String()),created_at:H.Integer({minimum:0}),updated_at:H.Integer({minimum:0}),completed_at:H.Optional(H.Integer({minimum:0})),has_result:H.Boolean(),error:H.Optional(H.String())}),$J=D({type:H.Literal("project_rules_loaded"),files:H.Array(H.Object({id:H.String(),relative_path:H.String(),source:N(["project","local"]),conditional:H.Boolean(),content_sha256:H.String({pattern:"^[a-f0-9]{64}$"})})),trigger_paths:H.Array(H.String()),blocked_write:H.Boolean()}),qJ=D({type:H.Literal("user_shell_started"),execution_id:H.String(),command:H.String(),auxiliary:H.Boolean()}),XJ=D({type:H.Literal("user_shell_output"),execution_id:H.String(),stream:N(["stdout","stderr"]),chunk:H.String(),stream_truncated:H.Boolean()}),YJ=D({type:H.Literal("user_shell_completed"),execution_id:H.String(),message_id:H.String(),status:N(["completed","failed","aborted","timed_out","spawn_error"]),exit_code:H.Union([H.Integer(),H.Null()]),duration_ms:H.Number({minimum:0}),stdout:H.String(),stderr:H.String(),truncated:H.Boolean(),auxiliary:H.Boolean()}),BJ=D({type:H.Literal("phase"),phase:N(["turn","searching","inspecting","target_hit","executing","completed"]),status:N(["ongoing","hit","done"]),message:H.String(),turn:H.Optional(H.Number()),tool_name:H.Optional(H.String()),target:H.Optional(H.String())}),NJ=D({type:H.Literal("tool_detail"),tool_name:H.String(),detail:H.String()}),QJ=D({type:H.Literal("task_update"),tasks:H.Array(ZH)}),DJ=D({type:H.Literal("goal"),state:N(["updated","cleared"]),goal_id:H.Optional(H.String()),status:H.Optional(N(["active","verifying","paused","blocked","usage_limited","budget_limited","complete"])),verification_attempt:H.Optional(H.Integer({minimum:1})),verification_status:H.Optional(N(["pending","pass","fail","partial"])),verifier_session_id:H.Optional(H.String()),verification_evidence_sha256:H.Optional(H.String({pattern:"^[a-f0-9]{64}$"})),premature_stop_pattern:H.Optional(N(VH)),premature_stop_count:H.Optional(H.Integer({minimum:1}))}),LJ=D({type:H.Literal("subagent"),state:N(["spawned","completed"]),session_id:H.String(),subagent_type:H.Optional(H.String()),success:H.Optional(H.Boolean()),summary:H.Optional(H.String()),verification_verdict:H.Optional(N(["pass","fail","partial"])),resumed_from:H.Optional(H.String()),root_agent_id:H.Optional(H.String()),resume_depth:H.Optional(H.Integer({minimum:0}))}),WJ=D({type:H.Literal("token_usage"),input_tokens:H.Number(),output_tokens:H.Number(),total_tokens:H.Number(),max_context_tokens:H.Number(),cache_read_tokens:H.Optional(H.Number()),cache_write_tokens:H.Optional(H.Number()),prompt_cache_break:H.Optional(H.Object({reason:N(["model_changed","system_prompt_changed","tools_changed","request_policy_changed","ttl_expired","server_side"]),previous_cache_read_tokens:H.Number(),cache_read_tokens:H.Number(),cache_write_tokens:H.Number(),token_drop:H.Number(),elapsed_ms:H.Number(),call_number:H.Number(),system_prompt_changed:H.Boolean(),system_char_delta:H.Number(),tools_changed:H.Boolean(),added_tool_count:H.Number(),removed_tool_count:H.Number(),changed_tool_count:H.Number(),model_changed:H.Boolean(),request_policy_changed:H.Boolean()})),cost_usd:H.Optional(H.Number())}),jJ=D({type:H.Literal("compacting"),state:N(["started","completed"]),reason:H.Optional(N(["threshold","context_limit","turn_limit","manual"])),strategy:H.Optional(N(["llm","fallback","snip"])),outcome:H.Optional(N(["completed","fallback","failed"])),pre_tokens:H.Optional(H.Number({minimum:0})),post_tokens:H.Optional(H.Number({minimum:0}))}),xJ=D({type:H.Literal("provider_retry"),phase:N(["scheduled","waiting","attempt","recovered","exhausted"]),attempt:H.Integer({minimum:0}),max_retries:H.Integer({minimum:0}),reason:N(["rate_limit","server_error","timeout","transport","stream_closed"]),status_code:H.Optional(H.Integer({minimum:100,maximum:599})),delay_ms:H.Optional(H.Integer({minimum:0})),next_retry_at:H.Optional(H.Integer({minimum:0})),mode:H.Optional(N(["standard","bounded_foreground"])),recovery_budget_ms:H.Optional(H.Integer({minimum:0})),recovery_elapsed_ms:H.Optional(H.Integer({minimum:0})),recovery_remaining_ms:H.Optional(H.Integer({minimum:0})),exhausted_by:H.Optional(N(["attempt_limit","recovery_budget"]))}),UJ=D({type:H.Literal("provider_admission"),phase:N(["queued","admitted","rejected"]),request_class:N(["foreground","background","internal"]),resource:N(["stream","pending_count","pending_bytes"]),scope:N(["global","domain","owner","class"]),reason:H.Optional(N(["capacity","queue_full","wait_timeout","closed"])),queue_position:H.Integer({minimum:0}),queue_depth:H.Integer({minimum:0}),in_flight:H.Integer({minimum:0}),limit:H.Integer({minimum:0}),wait_ms:H.Integer({minimum:0}),max_wait_ms:H.Integer({minimum:0}),recovery_remaining_ms:H.Optional(H.Integer({minimum:0}))}),_J=D({type:H.Literal("provider_circuit"),phase:N(["opened","waiting","probe","closed","reopened","rejected"]),reason:N(["rate_limit","server_error","transport","stream_closed"]),status_code:H.Optional(H.Integer({minimum:100,maximum:599})),retry_after_ms:H.Optional(H.Integer({minimum:0})),next_probe_at:H.Optional(H.Integer({minimum:0})),open_duration_ms:H.Integer({minimum:0}),sample_count:H.Optional(H.Integer({minimum:0})),failure_count:H.Optional(H.Integer({minimum:0})),recovery_remaining_ms:H.Optional(H.Integer({minimum:0}))}),GJ=D({type:H.Literal("provider_stall"),phase:N(["detected","recovered"]),stall_count:H.Integer({minimum:1}),duration_ms:H.Integer({minimum:0}),warning_after_ms:H.Integer({minimum:1}),timeout_ms:H.Integer({minimum:1}),output_started:H.Boolean()}),PJ=D({type:H.Literal("action_stationarity"),phase:N(["detected","recovered","halted"]),tool_name:H.String(),run_length:H.Integer({minimum:1}),nudge_threshold:H.Integer({minimum:1}),halt_threshold:H.Integer({minimum:1}),progress_aware:H.Boolean()}),FJ=D({type:H.Literal("turn_limit"),turns_count:H.Number(),action:H.Literal("continue")}),EJ=D({type:H.Literal("task_session"),session_id:H.String(),project_path:H.String(),source_project_path:H.String(),isolation:N(["local","worktree"]),worktree_branch:H.Optional(H.String()),base_commit:H.Optional(H.String())}),zJ=D({type:H.Literal("task_admission"),state:N(["queued","running"]),queue_position:H.Optional(H.Integer({minimum:1})),queue_depth:H.Integer({minimum:0}),in_flight:H.Integer({minimum:0}),max_concurrent_tasks:H.Integer({minimum:1})}),AJ=D({type:H.Literal("output"),content:H.String(),exit_code:H.Number()}),MJ=D({type:H.Literal("error"),message:H.String()}),iJ=KH(H.Union([uH,dH,pH,vH,lH,aH,iH,oH,nH,tH,eH,HJ,JJ,KJ,VJ,ZJ,$J,qJ,XJ,YJ,BJ,NJ,QJ,DJ,LJ,WJ,jJ,UJ,_J,xJ,GJ,PJ,FJ,EJ,zJ,AJ,MJ]));function qH(K,V){return{event_version:$H,type:K,...V}}function SJ(K){if(!K||typeof K!=="object"||Array.isArray(K))return;let V=K;if(V.auto_backgrounded!==!0||V.background_reason!=="foreground_budget"||!Number.isSafeInteger(V.foreground_budget_ms)||V.foreground_budget_ms<=0||typeof V.shell_id!=="string"||!/^bash_[A-Za-z0-9-]+$/.test(V.shell_id)||V.shell_id.length>128||V.terminal_transport!=="local"&&V.terminal_transport!=="acp"||V.pid!==void 0&&(!Number.isSafeInteger(V.pid)||V.pid<=0))return;return{auto_backgrounded:!0,background_reason:"foreground_budget",foreground_budget_ms:V.foreground_budget_ms,shell_id:V.shell_id,...V.pid===void 0?{}:{pid:V.pid},terminal_transport:V.terminal_transport}}function TJ(K){let V=new AbortController,Q=(Z)=>{if(!V.signal.aborted)V.abort(Z)},q=()=>Q("interrupt"),J=()=>Q(K?.signal?.reason);if(K?.signal){if(K.signal.addEventListener("abort",J,{once:!0}),K.signal.aborted)J()}else process.once("SIGINT",q),process.once("SIGTERM",q);return{signal:V.signal,abort:Q,dispose:()=>{K?.signal?.removeEventListener("abort",J),process.removeListener("SIGINT",q),process.removeListener("SIGTERM",q)}}}var bJ=N(["text","jsonl"]),RJ=H.Object({headless:H.Optional(H.Boolean()),message:H.Optional(H.String()),_:H.Optional(H.Array(H.Union([H.String(),H.Number()]))),model:H.Optional(H.String()),systemPrompt:H.Optional(H.String()),appendSystemPrompt:H.Optional(H.String()),verificationAgent:H.Optional(H.Boolean()),maxTurns:H.Optional(H.Refine(H.Integer(),(K)=>K===-1||K>0,()=>"must be -1 (unlimited) or a positive integer")),permissionMode:H.Optional(H.Enum(BH)),mcpConfig:H.Optional(H.Array(H.String())),strictMcpConfig:H.Optional(H.Boolean()),sessionId:H.Optional(H.String()),allowedTools:H.Optional(H.Array(H.String())),disallowedTools:H.Optional(H.Array(H.String())),agents:H.Optional(H.String()),continue:H.Optional(H.Boolean()),resume:H.Optional(H.Union([H.String(),H.Boolean()])),forkSession:H.Optional(H.Boolean()),taskIsolation:H.Optional(N(["local","worktree"])),outputFormat:H.Optional(bJ),jsonSchema:H.Optional(H.String()),outputSchema:H.Optional(H.String())});class IH{openedThinking=!1;wroteAssistantContent=!1;markAssistantContent(){this.wroteAssistantContent=!0}setThinkingOpened(K){this.openedThinking=K}hasOpenThinking(){return this.openedThinking}completeStream(){let K={openedThinking:this.openedThinking,wroteAssistantContent:this.wroteAssistantContent};return this.openedThinking=!1,this.wroteAssistantContent=!1,K}}function IJ(K){return K.issues.map((V)=>`${V.path.join(".")||"options"}: ${V.message}`).join("; ")}function gJ(K){let V=NH(RJ,K);if(!V.success)throw Error(`Invalid headless options: ${IJ(V.error)}`);return V.data}function CJ(K){return K.command("* [message]","Run full agent loop without Ink UI and print events to the terminal",(V)=>V.positional("message",{describe:"Message to process",type:"string"}).option("headless",{type:"boolean",describe:"Run full agent loop without Ink UI and print events to the terminal"}).option("model",{describe:"Model ID for this run",type:"string"}).option("system-prompt",{describe:"Replace the default system prompt",type:"string"}).option("append-system-prompt",{describe:"Append a system prompt to the default system prompt",type:"string"}).option("verification-agent",{describe:"Run the built-in independent verification agent after non-trivial changes",type:"boolean",default:!0}).option("max-turns",{alias:["maxTurns"],describe:"Maximum conversation turns (-1: unlimited, N>0: limit to N turns)",type:"number"}).option("output-format",{alias:["outputFormat"],choices:["text","jsonl"],describe:"Headless output format",type:"string"}).option("json-schema",{alias:["jsonSchema"],describe:"Inline JSON Schema for the structured final response",type:"string"}).option("output-schema",{alias:["outputSchema"],describe:"Path to a JSON Schema file for the structured final response",type:"string"}).option("task-isolation",{alias:["taskIsolation"],choices:["local","worktree"],describe:"Dispatch a new durable task in the selected workspace mode",type:"string"}),async(V)=>{if(!V.headless)return;let Q=await cJ(V);process.exit(Q)})}function L(K,V=""){K.write(`${V}
2
2
  `)}function kJ(K){return`[task] [${K.status}] ${K.subject}`}function hJ(){return{requestConfirmation:async(K)=>K.type==="mcpElicitation"?{approved:!1,reason:"headless-mcp-elicitation-unavailable",elicitation:{action:"cancel"}}:K.type==="mcpSampling"?{approved:!1,reason:"headless-mcp-sampling-unavailable"}:{approved:!0,reason:"headless-auto-approved",scope:"session"}}}function OJ(K){if(!(K instanceof Error))return"Unknown error";let q=K.lastError??K;if(q.responseBody)try{let W=JSON.parse(q.responseBody)?.error?.message;if(W)return q.statusCode?`${W} (HTTP ${q.statusCode})`:W}catch{}let J=K.message.match(/Last error:\s*(.+)$/);if(J)return J[1];return K.message}function wJ(K){return K==="jsonl"?"jsonl":"text"}function XH(K,V){let Q=(...q)=>{for(let J of q){let Z=V[J];if(typeof Z==="string"&&Z.trim()!=="")return Z}return};switch(K){case"Read":case"Edit":case"Write":case"UndoEdit":return Q("file_path");case"ApplyPatch":return"multi-file patch";case"NotebookEdit":return Q("notebook_path");case"Grep":return Q("path","pattern");case"Glob":return Q("pattern");case"WebFetch":return Q("url");case"WebSearch":return Q("query");case"Bash":return Q("command","description");case"Task":return Q("description");case"LSP":return Q("filePath","operation");case"EnterWorktree":return Q("name");case"ExitWorktree":return Q("action");default:return}}function mJ(K,V,Q,q){let J=new Set(["Glob","Grep","WebSearch","LS"]),Z=new Set(["Read","WebFetch"]);if(new Set(["Edit","Write","ApplyPatch","NotebookEdit","Bash","LSP","UndoEdit","EnterWorktree","ExitWorktree"]).has(K)&&!q.targetLocked)return{phase:"target_hit",status:"hit",message:`Target locked: ${V}`,shouldLockTarget:!0};if(q.targetLocked)return{phase:"executing",status:"hit",message:Q?`Working within target: ${V}`:`Executing: ${V}`,shouldLockTarget:!1};if(J.has(K))return{phase:"searching",status:"ongoing",message:`Still searching: ${V}`,shouldLockTarget:!1};if(Z.has(K))return{phase:"inspecting",status:"ongoing",message:`Inspecting candidate: ${V}`,shouldLockTarget:!1};return{phase:"executing",status:q.targetLocked?"hit":"ongoing",message:`Executing: ${V}`,shouldLockTarget:!1}}function YH(K,V,Q=!1){let q=(J,Z)=>{K.stdout.write(`${JSON.stringify(qH(J,Z))}
3
3
  `)};return{contentDelta(J){if(V==="jsonl"){q("content_delta",{delta:J});return}if(Q)return;K.stdout.write(J)},thinkingDelta(J,Z){if(V==="jsonl")return q("thinking_delta",{delta:J}),Z;if(!Z)K.stderr.write("[thinking] ");return K.stderr.write(J),!0},thinking(J){if(V==="jsonl"){q("thinking",{content:J});return}L(K.stderr,`[thinking] ${J}`)},streamEnd(J,Z){if(V==="jsonl"){q("stream_end",{});return}if(Z)K.stderr.write(`
4
4
  `);if(J)K.stdout.write(`
@@ -1,4 +1,4 @@
1
- import{j as H4,k as L4}from"./chunk-1zkwxaa0.js";import{l as O1}from"./chunk-h4d37zt2.js";import{s as J0,t as o$}from"./chunk-k3ddw7q3.js";import{u as oO}from"./chunk-6ra5d8ng.js";import{A as e1,v as u$,w as t1,x as s1,y as r1,z as x0}from"./chunk-fhxy024n.js";import{$ as Z4,D as E4,G as P$,H as N0,I as S1,J as n0,K as H1,L as EO,M as f$,N as m$,O as h$,P as L1,Q as mO,R as S0,U as y0,V as f0,X as l4,Y as g$,Z as v$,_ as Q4,aa as J4,ba as Y4,ca as z4,da as G4,ea as X4,fa as V4,ga as N4,ja as D4,ma as e4,ra as k4}from"./chunk-21bb1xda.js";import{Aa as UO,ua as V$}from"./chunk-fx19tpcm.js";import{Ea as z1,Ha as I4,Ia as R1,Ja as p$,Ka as d$,La as P4,Ma as y4,Na as E1,Oa as f4,Pa as sO,Qa as w4,Ra as A4,Sa as M4,Ta as l$,Ua as i$,Va as c$,Wa as a$,Xa as a1,Ya as f1}from"./chunk-22s3r2xy.js";import{Fb as nO,hb as gO,ib as u,kb as S,lb as y$,wb as D1}from"./chunk-8zpsw401.js";import{Qb as S$}from"./chunk-fbgzeb3m.js";import{Ac as P0,Cc as E$,Ic as k$,Jc as q$,Lc as z0,Oc as F1,Tc as I$,Uc as U1,Vc as _1,Wc as R,hc as R$,sc as t0,yc as I0,zc as A1}from"./chunk-1ykz47d9.js";import{Qd as p4,Ud as QO,Yd as F$,de as BO}from"./chunk-ytce7gnt.js";import{ee as W1}from"./chunk-xkz9ecdx.js";import{se as b$}from"./chunk-xbj18hxh.js";import{ue as o0}from"./chunk-y67yrm3k.js";import{Be as d4,De as b4,Ge as x4,Ke as j0,Le as b0,Pe as Yx,Se as jO,Te as C0,We as zx}from"./chunk-74wb5e1h.js";import{cf as U$,df as C$}from"./chunk-0cbpjhq7.js";import{hf as Y$,if as Z0}from"./chunk-7kf3hwp3.js";import{Af as X$,Uf as M$,Xf as T$,Zf as j$,kg as z$,pg as T0}from"./chunk-465tgzab.js";import{sg as K1}from"./chunk-qp8mejbn.js";import{tg as q,vg as V,wg as eO,yg as JO}from"./chunk-c03xn5s3.js";import{Ag as r0}from"./chunk-yjbq4jeg.js";import{Fg as c}from"./chunk-22aaybx2.js";import{fh as o}from"./chunk-2qqmmxqf.js";import{lh as cO}from"./chunk-gbrwzpyg.js";import{nh as K$,oh as w$,qh as W$,rh as A$}from"./chunk-bj5msq36.js";import{th as Q0}from"./chunk-453tf6d0.js";import{Ah as y1}from"./chunk-yz80dp1a.js";import{Gh as i0,Kh as $$,Lh as s0}from"./chunk-qw5j84ny.js";import{Nh as q1}from"./chunk-99nevk7k.js";var F3={port:{type:"number",describe:"Port to listen on (0 for auto)",default:0},hostname:{type:"string",describe:"Hostname to listen on",default:"127.0.0.1"},cors:{type:"array",describe:"Additional domains to allow for CORS",default:[]}};function U3(O){return{port:O.port??0,hostname:O.hostname??"127.0.0.1",cors:O.cors??[]}}import{existsSync as m1,readFileSync as g0}from"node:fs";import{createServer as i2}from"node:http";import{networkInterfaces as c2}from"node:os";import{dirname as a2,extname as o2,join as dO}from"node:path";import{fileURLToPath as n2}from"node:url";import{brotliCompressSync as t2,gzipSync as s2,constants as r2}from"node:zlib";import{Hono as e2}from"hono";import{cors as O3}from"hono/cors";import{WebSocketServer as $3}from"ws";var $0=o("Service"),Vx=30000,Nx=new Set(["completed","failed","cancelled","interrupted"]);class G1{dispatch;store;tickMs;timer;unsubscribeBus;ticking=!1;inFlight=new Set;constructor(O){this.dispatch=O.dispatch,this.store=O.store??a1.getInstance(),this.tickMs=O.tickMs??Vx}start(){if(this.timer)return;$0.info("[TaskScheduler] Starting scheduler tick loop"),this.timer=setInterval(()=>{this.tick()},this.tickMs),this.timer.unref?.(),this.unsubscribeBus=S.subscribe((O)=>{if(O.type!=="task.status")return;let $=O.properties.taskStatus;if(typeof $!=="string"||!Nx.has($))return;this.recordTerminalStatus(O.sessionId,$,typeof O.properties.taskStatusReason==="string"?O.properties.taskStatusReason:void 0)}),this.tick()}stop(){if(this.timer)clearInterval(this.timer),this.timer=void 0,this.unsubscribeBus?.(),this.unsubscribeBus=void 0,$0.info("[TaskScheduler] Stopped scheduler tick loop")}async tick(O=new Date){if(this.ticking)return;this.ticking=!0;try{let $=await this.store.list();for(let x of $)await this.evaluate(x,O)}catch($){$0.warn("[TaskScheduler] Tick failed:",$)}finally{this.ticking=!1}}async evaluate(O,$){if(!O.enabled)return;if(this.inFlight.has(O.id))return;if(O.expiresAt&&new Date(O.expiresAt).getTime()<=$.getTime()){await this.store.update(O.id,{enabled:!1,nextRunAt:null}),$0.info(`[TaskScheduler] Schedule ${O.id} expired; disabled`);return}if(!O.nextRunAt)return;if(!(new Date(O.nextRunAt).getTime()<=$.getTime()))return;await this.fire(O,$)}async fire(O,$=new Date,x={}){if(this.inFlight.has(O.id))throw Error(`Schedule ${O.id} is already dispatching`);this.inFlight.add(O.id);let Q=$.toISOString();try{let Z=await this.dispatch({prompt:O.prompt,title:O.title??Kx(O),sourceProjectPath:O.projectPath,isolation:O.dispatch.isolation??"worktree",permissionMode:O.dispatch.permissionMode??"default",modelId:O.dispatch.modelId,reasoningEffort:O.dispatch.reasoningEffort,serviceTier:O.dispatch.serviceTier,responseVerbosity:O.dispatch.responseVerbosity,communicationStyle:O.dispatch.communicationStyle}),G=O.trigger.kind==="once"?null:x.manual?O.nextRunAt?new Date(O.nextRunAt):null:z1(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:Q,lastRunSessionId:Z.session.sessionId,lastStatus:Z.status,lastError:void 0,runCount:O.runCount+1,nextRunAt:G?G.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled}),S.publish({sessionId:Z.session.sessionId,projectPath:O.projectPath},"schedule.fired",{scheduleId:O.id,firedAt:Q,sessionId:Z.session.sessionId,runId:Z.runId,status:Z.status}),$0.info(`[TaskScheduler] Fired schedule ${O.id} -> session ${Z.session.sessionId} (${Z.status})`)}catch(Z){let G=Z instanceof Error?Z.message:String(Z);$0.warn(`[TaskScheduler] Schedule ${O.id} dispatch failed:`,Z);let z=O.trigger.kind==="once"?null:x.manual?O.nextRunAt?new Date(O.nextRunAt):null:z1(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:Q,lastStatus:"error",lastError:G,nextRunAt:z?z.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled})}finally{this.inFlight.delete(O.id)}}async recordTerminalStatus(O,$,x){let Z=(await this.store.list()).find((G)=>G.lastRunSessionId===O);if(!Z)return;await this.store.update(Z.id,{lastStatus:$,...x?{lastError:x}:{lastError:void 0}})}}function Kx(O){return`Scheduled: ${O.prompt.trim().replace(/\s+/g," ").slice(0,60)}`}class xO extends Error{code;statusCode;details;constructor(O,$,x=500,Q){super($);this.code=O;this.statusCode=x;this.details=Q;this.name="BladeServerError"}toObject(){return{error:{code:this.code,message:this.message,...this.details?{details:this.details}:{}}}}}class f extends xO{constructor(O,$){super("NOT_FOUND",$?`${O} not found: ${$}`:`${O} not found`,404)}}class _ extends xO{constructor(O){super("BAD_REQUEST",O,400)}}class k extends xO{constructor(O){super("CONFLICT",O,409)}}class kO extends xO{constructor(O,$){super("TOO_MANY_REQUESTS",O,429,$)}}class qO extends xO{constructor(O="Server is shutting down"){super("SERVICE_UNAVAILABLE",O,503)}}class LO extends xO{constructor(){super("AMBIGUOUS_SESSION","Multiple workspaces contain this session ID; projectPath is required",409)}}class t extends xO{constructor(O="Internal server error"){super("INTERNAL_ERROR",O,500)}}var M3=V.Object({error:V.Object({code:V.String(),message:V.String(),details:V.Optional(V.Record(V.String(),V.Unknown()))})});import{Hono as Wx}from"hono";var X1=o("Service"),Fx=V.Object({updates:V.Record(V.String(),V.Any()),options:V.Optional(V.Object({scope:V.Optional(JO(["local","project","global"])),immediate:V.Optional(V.Boolean())}))});function Ux(O){return{currentModelId:O.currentModelId,permissionMode:O.permissionMode,language:O.language,codeTheme:O.codeTheme,uiTheme:O.uiTheme,autoSaveSessions:O.autoSaveSessions,notifyBuild:O.notifyBuild,notifyErrors:O.notifyErrors,notifySounds:O.notifySounds,privacyTelemetry:O.privacyTelemetry,privacyCrash:O.privacyCrash,agentTeamsEnabled:O.agentTeamsEnabled===!0,communicationStyle:O.communicationStyle,maxConcurrentTasks:O.maxConcurrentTasks,maxQueuedTasks:O.maxQueuedTasks,maxQueuedTaskBytes:O.maxQueuedTaskBytes,maxResidentSessionRuntimes:O.maxResidentSessionRuntimes,sessionRuntimeIdleMs:O.sessionRuntimeIdleMs}}var o1=()=>{let O=new Wx;return O.get("/",async($)=>{try{let x=QO();return $.json(x?Ux(x):{})}catch(x){return X1.error("[ConfigRoutes] Failed to get config:",x),$.json({})}}),O.put("/",async($)=>{try{let x=await $.req.json(),Q=q(Fx,x);if(!Q.success)throw new _("Invalid config update format");let{updates:Z,options:G}=Q.data;return await BO().updateConfig(Z,G),$.json({success:!0,updates:Z})}catch(x){throw X1.error("[ConfigRoutes] Failed to update config:",x),x}}),O.get("/permissions",async($)=>{try{let x=QO();return $.json(x?.permissions||{})}catch(x){return X1.error("[ConfigRoutes] Failed to get permissions:",x),$.json({})}}),O};import{Hono as _x}from"hono";import{streamSSE as Dx}from"hono/streaming";function n1(O){let $="";if(O.id!==void 0)$+=`id: ${O.id}
1
+ import{j as H4,k as L4}from"./chunk-1zkwxaa0.js";import{l as O1}from"./chunk-h4d37zt2.js";import{s as J0,t as o$}from"./chunk-nfyxb2q5.js";import{u as oO}from"./chunk-agxs6rwh.js";import{A as e1,v as u$,w as t1,x as s1,y as r1,z as x0}from"./chunk-6bka1j4q.js";import{$ as Z4,D as E4,G as P$,H as N0,I as S1,J as n0,K as H1,L as EO,M as f$,N as m$,O as h$,P as L1,Q as mO,R as S0,U as y0,V as f0,X as l4,Y as g$,Z as v$,_ as Q4,aa as J4,ba as Y4,ca as z4,da as G4,ea as X4,fa as V4,ga as N4,ja as D4,ma as e4,ra as k4}from"./chunk-kb5xaar0.js";import{Aa as UO,ua as V$}from"./chunk-yk8s8kjt.js";import{Ea as z1,Ha as I4,Ia as R1,Ja as p$,Ka as d$,La as P4,Ma as y4,Na as E1,Oa as f4,Pa as sO,Qa as w4,Ra as A4,Sa as M4,Ta as l$,Ua as i$,Va as c$,Wa as a$,Xa as a1,Ya as f1}from"./chunk-22s3r2xy.js";import{Fb as nO,hb as gO,ib as u,kb as S,lb as y$,wb as D1}from"./chunk-g3fbgp1k.js";import{Qb as S$}from"./chunk-fbgzeb3m.js";import{Ac as P0,Cc as E$,Ic as k$,Jc as q$,Lc as z0,Oc as F1,Tc as I$,Uc as U1,Vc as _1,Wc as R,hc as R$,sc as t0,yc as I0,zc as A1}from"./chunk-57jj40er.js";import{Qd as p4,Ud as QO,Yd as F$,de as BO}from"./chunk-xts31qj4.js";import{ee as W1}from"./chunk-xkz9ecdx.js";import{se as b$}from"./chunk-xbj18hxh.js";import{ue as o0}from"./chunk-22sw5bv4.js";import{Be as d4,De as b4,Ge as x4,Ke as j0,Le as b0,Pe as Yx,Se as jO,Te as C0,We as zx}from"./chunk-rdtgv0n8.js";import{cf as U$,df as C$}from"./chunk-0cbpjhq7.js";import{hf as Y$,if as Z0}from"./chunk-egp0crrc.js";import{Af as X$,Uf as M$,Xf as T$,Zf as j$,kg as z$,pg as T0}from"./chunk-zph2jekm.js";import{sg as K1}from"./chunk-qp8mejbn.js";import{tg as q,vg as V,wg as eO,yg as JO}from"./chunk-c03xn5s3.js";import{Ag as r0}from"./chunk-yjbq4jeg.js";import{Fg as c}from"./chunk-22aaybx2.js";import{fh as o}from"./chunk-2qqmmxqf.js";import{lh as cO}from"./chunk-gbrwzpyg.js";import{nh as K$,oh as w$,qh as W$,rh as A$}from"./chunk-bj5msq36.js";import{th as Q0}from"./chunk-c74e0jx1.js";import{Ah as y1}from"./chunk-yz80dp1a.js";import{Gh as i0,Kh as $$,Lh as s0}from"./chunk-qw5j84ny.js";import{Nh as q1}from"./chunk-99nevk7k.js";var F3={port:{type:"number",describe:"Port to listen on (0 for auto)",default:0},hostname:{type:"string",describe:"Hostname to listen on",default:"127.0.0.1"},cors:{type:"array",describe:"Additional domains to allow for CORS",default:[]}};function U3(O){return{port:O.port??0,hostname:O.hostname??"127.0.0.1",cors:O.cors??[]}}import{existsSync as m1,readFileSync as g0}from"node:fs";import{createServer as i2}from"node:http";import{networkInterfaces as c2}from"node:os";import{dirname as a2,extname as o2,join as dO}from"node:path";import{fileURLToPath as n2}from"node:url";import{brotliCompressSync as t2,gzipSync as s2,constants as r2}from"node:zlib";import{Hono as e2}from"hono";import{cors as O3}from"hono/cors";import{WebSocketServer as $3}from"ws";var $0=o("Service"),Vx=30000,Nx=new Set(["completed","failed","cancelled","interrupted"]);class G1{dispatch;store;tickMs;timer;unsubscribeBus;ticking=!1;inFlight=new Set;constructor(O){this.dispatch=O.dispatch,this.store=O.store??a1.getInstance(),this.tickMs=O.tickMs??Vx}start(){if(this.timer)return;$0.info("[TaskScheduler] Starting scheduler tick loop"),this.timer=setInterval(()=>{this.tick()},this.tickMs),this.timer.unref?.(),this.unsubscribeBus=S.subscribe((O)=>{if(O.type!=="task.status")return;let $=O.properties.taskStatus;if(typeof $!=="string"||!Nx.has($))return;this.recordTerminalStatus(O.sessionId,$,typeof O.properties.taskStatusReason==="string"?O.properties.taskStatusReason:void 0)}),this.tick()}stop(){if(this.timer)clearInterval(this.timer),this.timer=void 0,this.unsubscribeBus?.(),this.unsubscribeBus=void 0,$0.info("[TaskScheduler] Stopped scheduler tick loop")}async tick(O=new Date){if(this.ticking)return;this.ticking=!0;try{let $=await this.store.list();for(let x of $)await this.evaluate(x,O)}catch($){$0.warn("[TaskScheduler] Tick failed:",$)}finally{this.ticking=!1}}async evaluate(O,$){if(!O.enabled)return;if(this.inFlight.has(O.id))return;if(O.expiresAt&&new Date(O.expiresAt).getTime()<=$.getTime()){await this.store.update(O.id,{enabled:!1,nextRunAt:null}),$0.info(`[TaskScheduler] Schedule ${O.id} expired; disabled`);return}if(!O.nextRunAt)return;if(!(new Date(O.nextRunAt).getTime()<=$.getTime()))return;await this.fire(O,$)}async fire(O,$=new Date,x={}){if(this.inFlight.has(O.id))throw Error(`Schedule ${O.id} is already dispatching`);this.inFlight.add(O.id);let Q=$.toISOString();try{let Z=await this.dispatch({prompt:O.prompt,title:O.title??Kx(O),sourceProjectPath:O.projectPath,isolation:O.dispatch.isolation??"worktree",permissionMode:O.dispatch.permissionMode??"default",modelId:O.dispatch.modelId,reasoningEffort:O.dispatch.reasoningEffort,serviceTier:O.dispatch.serviceTier,responseVerbosity:O.dispatch.responseVerbosity,communicationStyle:O.dispatch.communicationStyle}),G=O.trigger.kind==="once"?null:x.manual?O.nextRunAt?new Date(O.nextRunAt):null:z1(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:Q,lastRunSessionId:Z.session.sessionId,lastStatus:Z.status,lastError:void 0,runCount:O.runCount+1,nextRunAt:G?G.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled}),S.publish({sessionId:Z.session.sessionId,projectPath:O.projectPath},"schedule.fired",{scheduleId:O.id,firedAt:Q,sessionId:Z.session.sessionId,runId:Z.runId,status:Z.status}),$0.info(`[TaskScheduler] Fired schedule ${O.id} -> session ${Z.session.sessionId} (${Z.status})`)}catch(Z){let G=Z instanceof Error?Z.message:String(Z);$0.warn(`[TaskScheduler] Schedule ${O.id} dispatch failed:`,Z);let z=O.trigger.kind==="once"?null:x.manual?O.nextRunAt?new Date(O.nextRunAt):null:z1(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:Q,lastStatus:"error",lastError:G,nextRunAt:z?z.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled})}finally{this.inFlight.delete(O.id)}}async recordTerminalStatus(O,$,x){let Z=(await this.store.list()).find((G)=>G.lastRunSessionId===O);if(!Z)return;await this.store.update(Z.id,{lastStatus:$,...x?{lastError:x}:{lastError:void 0}})}}function Kx(O){return`Scheduled: ${O.prompt.trim().replace(/\s+/g," ").slice(0,60)}`}class xO extends Error{code;statusCode;details;constructor(O,$,x=500,Q){super($);this.code=O;this.statusCode=x;this.details=Q;this.name="BladeServerError"}toObject(){return{error:{code:this.code,message:this.message,...this.details?{details:this.details}:{}}}}}class f extends xO{constructor(O,$){super("NOT_FOUND",$?`${O} not found: ${$}`:`${O} not found`,404)}}class _ extends xO{constructor(O){super("BAD_REQUEST",O,400)}}class k extends xO{constructor(O){super("CONFLICT",O,409)}}class kO extends xO{constructor(O,$){super("TOO_MANY_REQUESTS",O,429,$)}}class qO extends xO{constructor(O="Server is shutting down"){super("SERVICE_UNAVAILABLE",O,503)}}class LO extends xO{constructor(){super("AMBIGUOUS_SESSION","Multiple workspaces contain this session ID; projectPath is required",409)}}class t extends xO{constructor(O="Internal server error"){super("INTERNAL_ERROR",O,500)}}var M3=V.Object({error:V.Object({code:V.String(),message:V.String(),details:V.Optional(V.Record(V.String(),V.Unknown()))})});import{Hono as Wx}from"hono";var X1=o("Service"),Fx=V.Object({updates:V.Record(V.String(),V.Any()),options:V.Optional(V.Object({scope:V.Optional(JO(["local","project","global"])),immediate:V.Optional(V.Boolean())}))});function Ux(O){return{currentModelId:O.currentModelId,permissionMode:O.permissionMode,language:O.language,codeTheme:O.codeTheme,uiTheme:O.uiTheme,autoSaveSessions:O.autoSaveSessions,notifyBuild:O.notifyBuild,notifyErrors:O.notifyErrors,notifySounds:O.notifySounds,privacyTelemetry:O.privacyTelemetry,privacyCrash:O.privacyCrash,agentTeamsEnabled:O.agentTeamsEnabled===!0,communicationStyle:O.communicationStyle,maxConcurrentTasks:O.maxConcurrentTasks,maxQueuedTasks:O.maxQueuedTasks,maxQueuedTaskBytes:O.maxQueuedTaskBytes,maxResidentSessionRuntimes:O.maxResidentSessionRuntimes,sessionRuntimeIdleMs:O.sessionRuntimeIdleMs}}var o1=()=>{let O=new Wx;return O.get("/",async($)=>{try{let x=QO();return $.json(x?Ux(x):{})}catch(x){return X1.error("[ConfigRoutes] Failed to get config:",x),$.json({})}}),O.put("/",async($)=>{try{let x=await $.req.json(),Q=q(Fx,x);if(!Q.success)throw new _("Invalid config update format");let{updates:Z,options:G}=Q.data;return await BO().updateConfig(Z,G),$.json({success:!0,updates:Z})}catch(x){throw X1.error("[ConfigRoutes] Failed to update config:",x),x}}),O.get("/permissions",async($)=>{try{let x=QO();return $.json(x?.permissions||{})}catch(x){return X1.error("[ConfigRoutes] Failed to get permissions:",x),$.json({})}}),O};import{Hono as _x}from"hono";import{streamSSE as Dx}from"hono/streaming";function n1(O){let $="";if(O.id!==void 0)$+=`id: ${O.id}
2
2
  `;if(O.event!==void 0)$+=`event: ${O.event}
3
3
  `;for(let x of O.data.split(/\r\n|\r|\n/))$+=`data: ${x}
4
4
  `;if(O.retry!==void 0)$+=`retry: ${O.retry}
@@ -1,2 +1,2 @@
1
- import{L as I}from"./chunk-21bb1xda.js";import{Wc as M}from"./chunk-1ykz47d9.js";import P from"node:path";function w(s){let a=s.replace(/\s+/g," ").trim();return a.length<=72?a:`${a.slice(0,69)}...`}function W(s){let a=s.replace(/\s+/g," ").trim();return a.length<=500?a:`${a.slice(0,497)}...`}function A(s){return`task/${s.replace(/[^a-zA-Z0-9_-]/g,"-").slice(0,40)}`}class C{static async createSessionTask(s){if(!s.prompt.trim())throw Error("Task prompt must not be blank");if(!P.isAbsolute(s.sourceProjectPath))throw Error("Task source project path must be absolute");let a=P.resolve(s.sourceProjectPath),t;try{return t=s.isolation==="worktree"?await I.enter({sessionId:s.sessionId,workspaceRoot:a,name:A(s.sessionId)}):void 0,{metadata:await M.createSessionMetadata(s.sessionId,t?.workspaceRoot??a,{title:s.title?.trim()||w(s.prompt),taskPromptSummary:W(s.prompt),taskPriority:s.taskPriority,taskKind:s.taskKind,taskDueAt:s.taskDueAt,taskDispatch:s.dispatch,taskModelId:s.dispatch?.modelId,selectedModelId:s.dispatch?.modelId,permissionMode:s.dispatch?.permissionMode,reasoningEffort:s.dispatch?.reasoningEffort,serviceTier:s.dispatch?.serviceTier,responseVerbosity:s.dispatch?.responseVerbosity,communicationStyle:s.dispatch?.communicationStyle,communicationStyleDigest:s.dispatch?.communicationStyleDigest,projectInstructionsDigest:s.dispatch?.projectInstructionsDigest,taskRetriedFrom:s.retriedFrom,taskIsolation:s.isolation,taskSourceProjectPath:a,taskWorktree:t}),taskWorktree:t}}catch(k){if(t)await I.exit({sessionId:s.sessionId,action:"remove",discardChanges:!0}).catch(()=>{return});throw k}}}var $=256,V=8388608,x=30000;class i extends Error{kind;pendingItems;pendingBytes;constructor(s,a,t){super(a,t);this.kind=s;this.name="BoundedSerialEgressError",this.pendingItems=t?.pendingItems,this.pendingBytes=t?.pendingBytes}}function T(s){s.catch(()=>{return})}class K{options;pending=[];flushWaiters=[];pendingBytes=0;nextSequence=0;completedSequence=0;draining=!1;closed=!1;failure;activeWriteAbort;activeWriteStop;activeWriteTimeout;constructor(s){this.options=s;if(this.assertPositiveInteger(s.maxPendingItems,"maxPendingItems"),this.assertPositiveInteger(s.maxPendingBytes,"maxPendingBytes"),this.assertPositiveInteger(s.writeTimeoutMs,"writeTimeoutMs"),s.signal?.addEventListener("abort",this.handleAbort,{once:!0}),s.signal?.aborted)this.handleAbort()}offer(s){if(this.closed)return{accepted:!1,error:this.failure??new i("closed","Egress is already closed")};let a;try{a=this.options.sizeOf(s)}catch(h){return this.rejectAdmission(new i("invalid_size","Egress size calculation failed",{cause:h}))}if(!Number.isSafeInteger(a)||a<0)return this.rejectAdmission(new i("invalid_size","Egress size must be a non-negative safe integer"));if(a>this.options.maxPendingBytes)return this.rejectAdmission(new i("oversized",`Egress value requires ${a} bytes; limit is ${this.options.maxPendingBytes}`));if(this.pending.length>=this.options.maxPendingItems||this.pendingBytes+a>this.options.maxPendingBytes)return this.rejectAdmission(new i("overflow",`Egress pending limit exceeded (${this.pending.length} items, ${this.pendingBytes} bytes)`));let t,k,c=new Promise((h,m)=>{t=h,k=m});return T(c),this.nextSequence+=1,this.pending.push({value:s,bytes:a,sequence:this.nextSequence,resolve:t,reject:k,completion:c}),this.pendingBytes+=a,this.startDrain(),{accepted:!0,completion:c}}flush(){if(this.failure){let c=Promise.reject(this.failure);return T(c),c}let s=this.nextSequence;if(s<=this.completedSequence)return Promise.resolve();let a,t,k=new Promise((c,h)=>{a=c,t=h});return T(k),this.flushWaiters.push({targetSequence:s,resolve:a,reject:t}),k}close(s){let a=s instanceof i?s:new i("closed","Egress was closed",{cause:s});this.fail(a)}stats(){return{closed:this.closed,pendingItems:this.pending.length,pendingBytes:this.pendingBytes}}handleAbort=()=>{this.fail(new i("aborted","Egress was aborted",{cause:this.options.signal?.reason}))};rejectAdmission(s){return this.fail(s),{accepted:!1,error:s}}startDrain(){if(this.draining||this.closed)return;this.draining=!0;let s=this.drain();T(s)}async drain(){try{while(!this.closed){let s=this.pending[0];if(!s)return;try{await this.writeOne(s.value)}catch(a){this.fail(this.normalizeWriteError(a));return}if(this.closed||this.pending[0]!==s)return;this.pending.shift(),this.pendingBytes-=s.bytes,this.completedSequence=s.sequence,s.resolve(),this.settleFlushWaiters()}}finally{if(this.draining=!1,!this.closed&&this.pending.length>0)this.startDrain()}}async writeOne(s){let a=new AbortController;this.activeWriteAbort=a;let t,k,c=new Promise((S,f)=>{k=f});T(c),this.activeWriteStop=k;let h=Promise.resolve().then(()=>this.options.write(s,a.signal));T(h);let m=new Promise((S,f)=>{t=setTimeout(()=>{let D=new i("write_timeout",`Egress write timed out after ${this.options.writeTimeoutMs}ms`);a.abort(D),f(D)},this.options.writeTimeoutMs),this.activeWriteTimeout=t});T(m);try{await Promise.race([h,m,c])}finally{if(t!==void 0)clearTimeout(t);if(this.activeWriteTimeout===t)this.activeWriteTimeout=void 0;if(this.activeWriteAbort===a)this.activeWriteAbort=void 0;if(this.activeWriteStop===k)this.activeWriteStop=void 0}}normalizeWriteError(s){if(s instanceof i)return s;return new i("write_failed","Egress write failed",{cause:s})}fail(s){if(this.closed)return;if(s.pendingItems??=this.pending.length,s.pendingBytes??=this.pendingBytes,this.closed=!0,this.failure=s,this.options.signal?.removeEventListener("abort",this.handleAbort),this.activeWriteTimeout!==void 0)clearTimeout(this.activeWriteTimeout),this.activeWriteTimeout=void 0;this.activeWriteAbort?.abort(s),this.activeWriteStop?.(s),this.activeWriteAbort=void 0,this.activeWriteStop=void 0;let a=this.pending.splice(0);this.pendingBytes=0;for(let t of a)t.reject(s);for(let t of this.flushWaiters.splice(0))t.reject(s);try{this.options.onFailure?.(s)}catch{}}settleFlushWaiters(){for(let s=0;s<this.flushWaiters.length;){let a=this.flushWaiters[s];if(a.targetSequence>this.completedSequence){s+=1;continue}this.flushWaiters.splice(s,1),a.resolve()}}assertPositiveInteger(s,a){if(!Number.isSafeInteger(s)||s<=0)throw RangeError(`${a} must be a positive safe integer`)}}
1
+ import{L as I}from"./chunk-kb5xaar0.js";import{Wc as M}from"./chunk-57jj40er.js";import P from"node:path";function w(s){let a=s.replace(/\s+/g," ").trim();return a.length<=72?a:`${a.slice(0,69)}...`}function W(s){let a=s.replace(/\s+/g," ").trim();return a.length<=500?a:`${a.slice(0,497)}...`}function A(s){return`task/${s.replace(/[^a-zA-Z0-9_-]/g,"-").slice(0,40)}`}class C{static async createSessionTask(s){if(!s.prompt.trim())throw Error("Task prompt must not be blank");if(!P.isAbsolute(s.sourceProjectPath))throw Error("Task source project path must be absolute");let a=P.resolve(s.sourceProjectPath),t;try{return t=s.isolation==="worktree"?await I.enter({sessionId:s.sessionId,workspaceRoot:a,name:A(s.sessionId)}):void 0,{metadata:await M.createSessionMetadata(s.sessionId,t?.workspaceRoot??a,{title:s.title?.trim()||w(s.prompt),taskPromptSummary:W(s.prompt),taskPriority:s.taskPriority,taskKind:s.taskKind,taskDueAt:s.taskDueAt,taskDispatch:s.dispatch,taskModelId:s.dispatch?.modelId,selectedModelId:s.dispatch?.modelId,permissionMode:s.dispatch?.permissionMode,reasoningEffort:s.dispatch?.reasoningEffort,serviceTier:s.dispatch?.serviceTier,responseVerbosity:s.dispatch?.responseVerbosity,communicationStyle:s.dispatch?.communicationStyle,communicationStyleDigest:s.dispatch?.communicationStyleDigest,projectInstructionsDigest:s.dispatch?.projectInstructionsDigest,taskRetriedFrom:s.retriedFrom,taskIsolation:s.isolation,taskSourceProjectPath:a,taskWorktree:t}),taskWorktree:t}}catch(k){if(t)await I.exit({sessionId:s.sessionId,action:"remove",discardChanges:!0}).catch(()=>{return});throw k}}}var $=256,V=8388608,x=30000;class i extends Error{kind;pendingItems;pendingBytes;constructor(s,a,t){super(a,t);this.kind=s;this.name="BoundedSerialEgressError",this.pendingItems=t?.pendingItems,this.pendingBytes=t?.pendingBytes}}function T(s){s.catch(()=>{return})}class K{options;pending=[];flushWaiters=[];pendingBytes=0;nextSequence=0;completedSequence=0;draining=!1;closed=!1;failure;activeWriteAbort;activeWriteStop;activeWriteTimeout;constructor(s){this.options=s;if(this.assertPositiveInteger(s.maxPendingItems,"maxPendingItems"),this.assertPositiveInteger(s.maxPendingBytes,"maxPendingBytes"),this.assertPositiveInteger(s.writeTimeoutMs,"writeTimeoutMs"),s.signal?.addEventListener("abort",this.handleAbort,{once:!0}),s.signal?.aborted)this.handleAbort()}offer(s){if(this.closed)return{accepted:!1,error:this.failure??new i("closed","Egress is already closed")};let a;try{a=this.options.sizeOf(s)}catch(h){return this.rejectAdmission(new i("invalid_size","Egress size calculation failed",{cause:h}))}if(!Number.isSafeInteger(a)||a<0)return this.rejectAdmission(new i("invalid_size","Egress size must be a non-negative safe integer"));if(a>this.options.maxPendingBytes)return this.rejectAdmission(new i("oversized",`Egress value requires ${a} bytes; limit is ${this.options.maxPendingBytes}`));if(this.pending.length>=this.options.maxPendingItems||this.pendingBytes+a>this.options.maxPendingBytes)return this.rejectAdmission(new i("overflow",`Egress pending limit exceeded (${this.pending.length} items, ${this.pendingBytes} bytes)`));let t,k,c=new Promise((h,m)=>{t=h,k=m});return T(c),this.nextSequence+=1,this.pending.push({value:s,bytes:a,sequence:this.nextSequence,resolve:t,reject:k,completion:c}),this.pendingBytes+=a,this.startDrain(),{accepted:!0,completion:c}}flush(){if(this.failure){let c=Promise.reject(this.failure);return T(c),c}let s=this.nextSequence;if(s<=this.completedSequence)return Promise.resolve();let a,t,k=new Promise((c,h)=>{a=c,t=h});return T(k),this.flushWaiters.push({targetSequence:s,resolve:a,reject:t}),k}close(s){let a=s instanceof i?s:new i("closed","Egress was closed",{cause:s});this.fail(a)}stats(){return{closed:this.closed,pendingItems:this.pending.length,pendingBytes:this.pendingBytes}}handleAbort=()=>{this.fail(new i("aborted","Egress was aborted",{cause:this.options.signal?.reason}))};rejectAdmission(s){return this.fail(s),{accepted:!1,error:s}}startDrain(){if(this.draining||this.closed)return;this.draining=!0;let s=this.drain();T(s)}async drain(){try{while(!this.closed){let s=this.pending[0];if(!s)return;try{await this.writeOne(s.value)}catch(a){this.fail(this.normalizeWriteError(a));return}if(this.closed||this.pending[0]!==s)return;this.pending.shift(),this.pendingBytes-=s.bytes,this.completedSequence=s.sequence,s.resolve(),this.settleFlushWaiters()}}finally{if(this.draining=!1,!this.closed&&this.pending.length>0)this.startDrain()}}async writeOne(s){let a=new AbortController;this.activeWriteAbort=a;let t,k,c=new Promise((S,f)=>{k=f});T(c),this.activeWriteStop=k;let h=Promise.resolve().then(()=>this.options.write(s,a.signal));T(h);let m=new Promise((S,f)=>{t=setTimeout(()=>{let D=new i("write_timeout",`Egress write timed out after ${this.options.writeTimeoutMs}ms`);a.abort(D),f(D)},this.options.writeTimeoutMs),this.activeWriteTimeout=t});T(m);try{await Promise.race([h,m,c])}finally{if(t!==void 0)clearTimeout(t);if(this.activeWriteTimeout===t)this.activeWriteTimeout=void 0;if(this.activeWriteAbort===a)this.activeWriteAbort=void 0;if(this.activeWriteStop===k)this.activeWriteStop=void 0}}normalizeWriteError(s){if(s instanceof i)return s;return new i("write_failed","Egress write failed",{cause:s})}fail(s){if(this.closed)return;if(s.pendingItems??=this.pending.length,s.pendingBytes??=this.pendingBytes,this.closed=!0,this.failure=s,this.options.signal?.removeEventListener("abort",this.handleAbort),this.activeWriteTimeout!==void 0)clearTimeout(this.activeWriteTimeout),this.activeWriteTimeout=void 0;this.activeWriteAbort?.abort(s),this.activeWriteStop?.(s),this.activeWriteAbort=void 0,this.activeWriteStop=void 0;let a=this.pending.splice(0);this.pendingBytes=0;for(let t of a)t.reject(s);for(let t of this.flushWaiters.splice(0))t.reject(s);try{this.options.onFailure?.(s)}catch{}}settleFlushWaiters(){for(let s=0;s<this.flushWaiters.length;){let a=this.flushWaiters[s];if(a.targetSequence>this.completedSequence){s+=1;continue}this.flushWaiters.splice(s,1),a.resolve()}}assertPositiveInteger(s,a){if(!Number.isSafeInteger(s)||s<=0)throw RangeError(`${a} must be a positive safe integer`)}}
2
2
  export{C as v,$ as w,V as x,x as y,i as z,K as A};
@@ -0,0 +1 @@
1
+ import{sd as a,td as b}from"./chunk-gz2fx7th.js";import"./chunk-c74e0jx1.js";import"./chunk-99nevk7k.js";export{a as globalOptions,b as cliConfig};
@@ -1,4 +1,4 @@
1
- import{S as P}from"./chunk-21bb1xda.js";import{mb as K}from"./chunk-8zpsw401.js";import{Wc as B,ec as G,fc as N,gc as S,hc as O,ic as s}from"./chunk-1ykz47d9.js";import{dd as j}from"./chunk-r297pq3s.js";import{ee as q}from"./chunk-xkz9ecdx.js";import{ye as v}from"./chunk-74wb5e1h.js";import{Hh as z}from"./chunk-qw5j84ny.js";import R from"node:path";import{nanoid as cf}from"nanoid";import{execFile as I}from"node:child_process";import{createHash as p}from"node:crypto";import{lstat as o,readFile as ff,realpath as V}from"node:fs/promises";import A from"node:path";import{promisify as af}from"node:util";var tf=af(I),L=8388608,U=500,Y=200;async function y(n,a){try{return(await tf("git",["-c","core.pager=cat",...a],{cwd:n,encoding:"utf8",timeout:30000,maxBuffer:L+1024,env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",GIT_PAGER:"cat",GIT_OPTIONAL_LOCKS:"0"}})).stdout}catch(f){let t=f instanceof Error&&f.message.includes("maxBuffer")?`Review target exceeds the ${L} byte limit`:f instanceof Error?f.message:String(f);throw Error(`Git review target failed: ${t}`)}}function Q(n,a){let f=n?.trim();if(!f||f.length>Y||f.includes("\x00")||f.includes(`
1
+ import{S as P}from"./chunk-kb5xaar0.js";import{mb as K}from"./chunk-g3fbgp1k.js";import{Wc as B,ec as G,fc as N,gc as S,hc as O,ic as s}from"./chunk-57jj40er.js";import{dd as j}from"./chunk-r297pq3s.js";import{ee as q}from"./chunk-xkz9ecdx.js";import{ye as v}from"./chunk-rdtgv0n8.js";import{Hh as z}from"./chunk-qw5j84ny.js";import R from"node:path";import{nanoid as cf}from"nanoid";import{execFile as I}from"node:child_process";import{createHash as p}from"node:crypto";import{lstat as o,readFile as ff,realpath as V}from"node:fs/promises";import A from"node:path";import{promisify as af}from"node:util";var tf=af(I),L=8388608,U=500,Y=200;async function y(n,a){try{return(await tf("git",["-c","core.pager=cat",...a],{cwd:n,encoding:"utf8",timeout:30000,maxBuffer:L+1024,env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",GIT_PAGER:"cat",GIT_OPTIONAL_LOCKS:"0"}})).stdout}catch(f){let t=f instanceof Error&&f.message.includes("maxBuffer")?`Review target exceeds the ${L} byte limit`:f instanceof Error?f.message:String(f);throw Error(`Git review target failed: ${t}`)}}function Q(n,a){let f=n?.trim();if(!f||f.length>Y||f.includes("\x00")||f.includes(`
2
2
  `)||f.includes("\r"))throw Error(`${a} must contain 1-${Y} characters`);return f}function W(n){return n.split("\x00").filter(Boolean)}async function _(n,a){return(await y(n,["rev-parse","--verify",`${a}^{commit}`])).trim()}async function nf(n,a,f,t,g){let w=g,c=await V(n);for(let e of a){let $=A.resolve(c,e),l=A.relative(c,$);if(!l||l.startsWith("..")||A.isAbsolute(l))throw Error(`Untracked review path escapes the workspace: ${e}`);let i=await o($);if(!i.isFile()||i.isSymbolicLink())throw Error(`Untracked review target must be a regular file: ${e}`);if(w+=i.size,w>L)throw Error(`Review target exceeds ${L} bytes`);f.update("\x00untracked\x00"),f.update(l.replaceAll(A.sep,"/")),f.update("\x00");let b=await ff($);f.update(b);let m=Math.max(1,b.toString("utf8").split(`
3
3
  `).length);t.set(l.replaceAll(A.sep,"/"),[{start:1,end:m}])}}function M(n,a){let f=new Map,t,g,w,c,e=!1,$=(l,i)=>{let b=f.get(l)??[],m=b.at(-1);if(m&&i<=m.end+1)m.end=Math.max(m.end,i);else b.push({start:i,end:i});f.set(l,b)};for(let l of n.split(`
4
4
  `)){if(l.startsWith("--- ")){let i=l.slice(4).split("\t")[0]?.trim();t=i&&i!=="/dev/null"?i.replace(/^a\//,"").replaceAll("\\","/"):void 0;continue}if(l.startsWith("+++ ")){let i=l.slice(4).split("\t")[0]?.trim();e=i==="/dev/null",g=e?t:i?i.replace(/^b\//,"").replaceAll("\\","/"):void 0,w=void 0,c=void 0;continue}if(l.startsWith("@@ ")){let i=/-(\d+)(?:,\d+)? \+(\d+)(?:,\d+)?/.exec(l);w=i?Math.max(1,Number(i[1])):void 0,c=i?Math.max(1,Number(i[2])):void 0;continue}if(!g||w===void 0||c===void 0)continue;if(l.startsWith("+")&&!l.startsWith("+++"))$(g,c),c++;else if(l.startsWith("-")&&!l.startsWith("---"))$(g,e?w:c),w++;else if(!l.startsWith("\\"))w++,c++}for(let l of a)if(!f.has(l))f.set(l,[{start:1,end:1}]);return f}function D(n){if(n.length>U)throw Error(`Review target exceeds the ${U} file limit`)}class d{static async resolve(n,a){let f=await V(n);await y(f,["rev-parse","--is-inside-work-tree"]);let t=await _(f,"HEAD"),g=p("sha256");g.update(`kind\x00${a.kind}\x00head\x00${t}\x00`);let w="",c=[],e,$,l,i,b=new Map;switch(a.kind){case"uncommitted":{w=await y(f,["diff","--binary","--no-ext-diff","--relative","HEAD","--","."]);let m=W(await y(f,["diff","--name-only","-z","--relative","HEAD","--","."])),h=W(await y(f,["ls-files","--others","--exclude-standard","-z","--","."]));if(c=[...new Set([...m,...h])].sort(),D(c),c.length===0)throw Error("No uncommitted changes to review");g.update(w),b=M(w,m),await nf(f,h,g,b,Buffer.byteLength(w)),l="uncommitted changes",i=["Review the uncommitted working tree against HEAD.","Use git status --short, git diff --cached, and git diff, then inspect","every relevant untracked file listed by git status."].join(" ");break}case"base":{let m=Q(a.ref,"Base ref");e=await _(f,m);let h=(await y(f,["merge-base",e,t])).trim();if(w=await y(f,["diff","--binary","--no-ext-diff","--relative",`${h}..${t}`,"--","."]),c=W(await y(f,["diff","--name-only","-z","--relative",`${h}..${t}`,"--","."])),D(c),c.length===0)throw Error(`No changes between ${m} and HEAD`);g.update(w),g.update(`\x00merge-base\x00${h}`),b=M(w,c),l=`changes against ${m}`,i=`Review changes introduced by ${h}..${t}.`;break}case"commit":{let m=Q(a.ref,"Commit ref");if($=await _(f,m),w=await y(f,["show","--format=","--binary","--no-ext-diff","--relative",$,"--","."]),c=W(await y(f,["diff-tree","--root","--no-commit-id","--name-only","-r","-z",$,"--","."])),D(c),c.length===0)throw Error(`Commit has no changes in this workspace: ${m}`);g.update(w),g.update(`\x00commit\x00${$}`),b=M(w,c),l=`commit ${m}`,i=`Review only the changes introduced by commit ${$}.`;break}}if(Buffer.byteLength(w)>L)throw Error(`Review diff exceeds ${L} bytes`);return{info:{kind:a.kind,label:l,headSha:t,...e?{baseSha:e}:{},...$?{commitSha:$}:{},digest:g.digest("hex"),fileCount:c.length},instruction:i,changedLines:b}}}var wf=131072,X=50,E=new Set;function Z(n,a){return`${R.resolve(n)}\x00${a}`}function J(n){return`/review ${n.kind}${n.kind==="uncommitted"?"":` ${n.ref?.trim()??""}`}`}function C(n,a,f,t=!1){if(typeof n!=="string")throw Error(`${a} must be a string`);let g=n.trim();if(!t&&!g||g.length>f)throw Error(`${a} exceeds its allowed length`);return g}function lf(n,a,f){if(!n||typeof n!=="object"||Array.isArray(n))throw Error("Review finding must be an object");let t=n,g=typeof t.line==="number"&&Number.isInteger(t.line)?t.line:void 0,w=t.code_location??(typeof t.file==="string"&&g!==void 0?{path:t.file,line_start:g,line_end:g}:void 0);if(!w||typeof w!=="object"||Array.isArray(w))throw Error("Review finding has no code_location");let c=w,e=C(c.path,"Finding path",1000),$=R.posix.normalize(e.replaceAll("\\","/"));if(R.posix.isAbsolute($)||$===".."||$.startsWith("../"))throw Error("Review finding path must be workspace-relative");let l=R.resolve(a,$),i=R.relative(R.resolve(a),l);if(i.startsWith("..")||R.isAbsolute(i))throw Error("Review finding path escapes the workspace");let b=typeof t.severity==="string"?t.severity.toLowerCase():"",m=b==="critical"?0:b==="high"?1:b==="medium"?2:b==="low"?3:void 0,h=t.priority??m;if(h!==0&&h!==1&&h!==2&&h!==3)throw Error("Review finding priority must be 0-3");let x=t.confidence_score??t.confidence??0.8;if(typeof x!=="number"||!Number.isFinite(x)||x<0||x>1)throw Error("Review finding confidence_score must be between 0 and 1");let{line_start:r,line_end:u}=c;if(!Number.isInteger(r)||!Number.isInteger(u)||r<1||u<r||u-r>=10)throw Error("Review finding line range is invalid");let F=f.changedLines.get($);if(!F)throw Error("Review finding path is outside the review target");if(!F.some((T)=>r<=T.end&&u>=T.start))throw Error("Review finding line range does not overlap the changed lines");let k=C(t.title??`[P${h}] ${String(t.type??"Review finding").replaceAll("-"," ").replace(/\b\w/g,(T)=>T.toUpperCase())}`,"Finding title",120);if(!k.startsWith(`[P${h}] `))throw Error("Review finding title priority does not match priority");return{title:k,body:C(t.body??t.description,"Finding body",4000),priority:h,confidenceScore:x,codeLocation:{path:$,lineStart:r,lineEnd:u}}}function mf(n,a,f){if(Buffer.byteLength(n)>wf)throw Error("Review output exceeds the 128 KiB limit");let t=n.indexOf("{"),g=n.lastIndexOf("}");if(t<0||g<=t)throw Error("Reviewer did not return a JSON object");let w;try{w=JSON.parse(n.slice(t,g+1))}catch{throw Error("Reviewer returned invalid JSON")}if(!w||typeof w!=="object"||Array.isArray(w))throw Error("Reviewer output must be an object");let c=w;if(!Array.isArray(c.findings))throw Error("Reviewer output must contain findings");if(c.findings.length>X)throw Error(`Reviewer returned more than ${X} findings`);return{overallExplanation:C(c.overall_explanation??c.summary,"Review explanation",1e4,!0),findings:c.findings.map((e)=>lf(e,a,f))}}async function H(n,a){return new j(z(n,a)).readAll()}class gf{static async start(n){let{sessionId:a,projectPath:f,runtime:t,request:g,onEvent:w}=n;if(t.sessionId!==a||R.resolve(t.workspaceRoot)!==R.resolve(f))throw Error("Review runtime does not own the requested Session");if(t.hasTurnOwner())throw Error("Cannot start a review during an active turn");await B.assertSessionWritable(a,f);let c=Z(f,a);if(E.has(c))throw Error("Session already has an active review");let e=await H(f,a);if(N(e))throw Error("Session has an interrupted review that must be recovered");let $=g.instructions?.trim();if($&&$.length>4000)throw Error("Review instructions exceed 4,000 characters");let l=await d.resolve(f,g),i=cf(16),b=q("review"),m=new Date().toISOString(),h={reviewId:i,reviewerSessionId:b,target:l.info,startedAt:m},x=new K(f);await x.saveReviewStart(a,h),await x.saveMessage(a,"user",J(g),null,{codeReview:{reviewId:i,phase:"started",targetKind:l.info.kind,targetDigest:l.info.digest}}),await B.updateSessionMetadata(a,f,{taskStatus:"running",taskStatusReason:`Reviewing ${l.info.label}`,taskPromptSummary:J(g),taskStartedAt:m,taskCompletedAt:null,taskFailure:null}),E.add(c);let r=this.execute({...n,target:l,reviewId:i,reviewerSessionId:b,instructions:$,store:x,onEvent:w}).finally(()=>{E.delete(c)});return{reviewId:i,completion:r}}static async execute(n){let{sessionId:a,projectPath:f,runtime:t,request:g,signal:w,onEvent:c,target:e,reviewId:$,reviewerSessionId:l,instructions:i,store:b}=n,m;try{let x=[e.instruction,"Bash already starts in the review workspace. Never prefix a command with cd.",`Authoritative target digest: ${e.info.digest}`,`Changed file count: ${e.info.fileCount}`,i?`Additional review instructions:
@@ -1,2 +1,2 @@
1
- import{readFileSync as l}from"node:fs";import{dirname as o,join as u}from"node:path";import{fileURLToPath as a}from"node:url";var e={name:"blade-code",version:"0.10.74",private:!1,description:"🗡️ Blade Code - 智能代码助手命令行工具",type:"module",bin:{blade:"dist/blade.js"},files:["dist","vendor/ripgrep/**","README.md"],scripts:{dev:"node scripts/run-bun.js --watch src/blade.tsx","dev:serve":"node scripts/run-bun.js --watch src/blade.tsx serve --port 4097",build:"rm -rf dist && node scripts/run-bun.js run scripts/build.ts",start:"node scripts/run-bun.js run dist/blade.js",test:"node scripts/test.js","test:all":"vitest run --config vitest.config.ts --project='!performance' && vitest run --config vitest.config.ts --project=performance","test:unit":"node scripts/test.js unit","test:integration":"node scripts/test.js integration","test:real-api":"node scripts/test.js realApi","test:real-api:qualification":"node scripts/test.js realApiQualification","test:cli":"node scripts/test.js cli","test:headless-core":"node scripts/test.js headlessCore","test:e2e":"node scripts/test.js e2e","test:performance":"node scripts/test.js performance","test:snapshot":"node scripts/test.js snapshot","test:security":"node scripts/test.js security","browser:install":"playwright install chromium","browser:check":"node scripts/run-bun.js run scripts/browser-check.ts","test:coverage":"node scripts/test.js all --coverage","test:watch":"vitest --watch --config vitest.config.ts","qualify:local":"node scripts/run-bun.js run scripts/qualify.ts local","qualify:production":"node scripts/run-bun.js run scripts/qualify.ts production","benchmark:repo":"node scripts/run-bun.js run scripts/run-real-repo-benchmark.ts","test:update-snapshots":"node scripts/test.js snapshot --update",lint:"biome lint src tests","lint:fix":"biome lint --write src tests","type-check":"tsc --noEmit","format:check":"biome format src tests",ready:"node scripts/run-bun.js run scripts/qualify.ts production","detect-unused":"node scripts/run-bun.js run scripts/detect-unused.ts",prepack:"node scripts/run-bun.js run build",release:"node scripts/release.js","release:dry":"node scripts/release.js --dry-run","release:major":"node scripts/release.js --major","release:minor":"node scripts/release.js --minor","release:patch":"node scripts/release.js --patch"},keywords:["cli","blade","ai","assistant","agent","llm"],author:"echoVic",license:"MIT",repository:{type:"git",url:"git+https://github.com/echoVic/blade-code.git"},homepage:"https://github.com/echoVic/blade-code#readme",bugs:{url:"https://github.com/echoVic/blade-code/issues"},engines:{node:">=22.19.0"},optionalDependencies:{"@vscode/ripgrep":"^1.18.0","better-sqlite3":"^11.8.1","bun-pty":"^0.4.8","node-pty":"1.1.0"},dependencies:{"@agentclientprotocol/sdk":"^1.3.0","@anthropic-ai/sandbox-runtime":"0.0.67","@earendil-works/pi-ai":"0.84.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/sdk":"^1.30.0",ahooks:"^3.9.7",ajv:"^8.17.1","ansi-escapes":"^7.3.0","async-mutex":"^0.5.0",axios:"^1.19.0",chalk:"^5.4.1",diff:"^8.0.2","fast-glob":"^3.3.3","fuse.js":"^7.5.0","gray-matter":"^4.0.3",hono:"^4.13.0",ink:"npm:@jrichman/ink@6.4.10","ink-big-text":"^2.0.0","ink-gradient":"^3.0.0","ink-select-input":"^6.2.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","js-tiktoken":"^1.0.21","lodash-es":"^4.18.1",lowlight:"^3.3.0","lru-cache":"^11.5.2",nanoid:"^5.1.6",open:"^10.1.2",picomatch:"^4.0.5","proper-lockfile":"^4.1.2",react:"19.2.4","react-dom":"19.2.4",semver:"^7.8.5","string-width":"^8.2.2",typebox:"1.3.10",undici:"^7.16.0","vscode-jsonrpc":"8.2.1","vscode-languageserver-protocol":"3.17.5","vscode-languageserver-types":"3.17.5","write-file-atomic":"^7.0.0",ws:"^8.21.2",yaml:"^2.9.0",yargs:"^18.1.0",zustand:"^5.0.14"},devDependencies:{"@biomejs/biome":"2.5.7","@types/bun":"^1.3.14","@types/json-schema":"^7.0.15","@types/lodash-es":"^4.17.12","@types/node":"^22.15.24","@types/picomatch":"^4.0.3","@types/proper-lockfile":"^4.1.4","@types/react":"19.2.10","@types/react-dom":"19.2.3","@types/semver":"^7.8.0","@types/write-file-atomic":"^4.0.3","@types/ws":"^8.18.1","@types/yargs":"^17.0.35","@vitest/coverage-v8":"^4.1.10",jsdom:"^26.0.0",playwright:"1.62.1",typescript:"^5.9.2",vitest:"^4.1.10"}};var s;function r(){if(s)return s;let i=o(a(import.meta.url));for(let n=0;n<5;n++){try{let t=JSON.parse(l(u(i,"package.json"),"utf8"));if(t.name===e.name&&typeof t.version==="string"&&typeof t.description==="string")return s=t,s}catch{}i=o(i)}return s={name:e.name,version:process.env.BLADE_VERSION??e.version,description:e.description},s}function y(){return{...r()}}function p(){return r().version}function v(){return r().name}function g(){return r().description}function f(){return`v${p()}`}function w(){return`v${p()} © 2025 Blade Code`}
1
+ import{readFileSync as l}from"node:fs";import{dirname as o,join as u}from"node:path";import{fileURLToPath as a}from"node:url";var e={name:"blade-code",version:"0.10.75",private:!1,description:"🗡️ Blade Code - 智能代码助手命令行工具",type:"module",bin:{blade:"dist/blade.js"},files:["dist","vendor/ripgrep/**","README.md"],scripts:{dev:"node scripts/run-bun.js --watch src/blade.tsx","dev:serve":"node scripts/run-bun.js --watch src/blade.tsx serve --port 4097",build:"rm -rf dist && node scripts/run-bun.js run scripts/build.ts",start:"node scripts/run-bun.js run dist/blade.js",test:"node scripts/test.js","test:all":"vitest run --config vitest.config.ts --project='!performance' && vitest run --config vitest.config.ts --project=performance","test:unit":"node scripts/test.js unit","test:integration":"node scripts/test.js integration","test:real-api":"node scripts/test.js realApi","test:real-api:qualification":"node scripts/test.js realApiQualification","test:cli":"node scripts/test.js cli","test:headless-core":"node scripts/test.js headlessCore","test:e2e":"node scripts/test.js e2e","test:performance":"node scripts/test.js performance","test:snapshot":"node scripts/test.js snapshot","test:security":"node scripts/test.js security","browser:install":"playwright install chromium","browser:check":"node scripts/run-bun.js run scripts/browser-check.ts","test:coverage":"node scripts/test.js all --coverage","test:watch":"vitest --watch --config vitest.config.ts","qualify:local":"node scripts/run-bun.js run scripts/qualify.ts local","qualify:production":"node scripts/run-bun.js run scripts/qualify.ts production","benchmark:repo":"node scripts/run-bun.js run scripts/run-real-repo-benchmark.ts","test:update-snapshots":"node scripts/test.js snapshot --update",lint:"biome lint src tests","lint:fix":"biome lint --write src tests","type-check":"tsc --noEmit","format:check":"biome format src tests",ready:"node scripts/run-bun.js run scripts/qualify.ts production","detect-unused":"node scripts/run-bun.js run scripts/detect-unused.ts",prepack:"node scripts/run-bun.js run build",release:"node scripts/release.js","release:dry":"node scripts/release.js --dry-run","release:major":"node scripts/release.js --major","release:minor":"node scripts/release.js --minor","release:patch":"node scripts/release.js --patch"},keywords:["cli","blade","ai","assistant","agent","llm"],author:"echoVic",license:"MIT",repository:{type:"git",url:"git+https://github.com/echoVic/blade-code.git"},homepage:"https://github.com/echoVic/blade-code#readme",bugs:{url:"https://github.com/echoVic/blade-code/issues"},engines:{node:">=22.19.0"},optionalDependencies:{"@vscode/ripgrep":"^1.18.0","better-sqlite3":"^11.8.1","bun-pty":"^0.4.8","node-pty":"1.1.0"},dependencies:{"@agentclientprotocol/sdk":"^1.3.0","@anthropic-ai/sandbox-runtime":"0.0.67","@earendil-works/pi-ai":"0.84.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/sdk":"^1.30.0",ahooks:"^3.9.7",ajv:"^8.17.1","ansi-escapes":"^7.3.0","async-mutex":"^0.5.0",axios:"^1.19.0",chalk:"^5.4.1",diff:"^8.0.2","fast-glob":"^3.3.3","fuse.js":"^7.5.0","gray-matter":"^4.0.3",hono:"^4.13.0",ink:"npm:@jrichman/ink@6.4.10","ink-big-text":"^2.0.0","ink-gradient":"^3.0.0","ink-select-input":"^6.2.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","js-tiktoken":"^1.0.21","lodash-es":"^4.18.1",lowlight:"^3.3.0","lru-cache":"^11.5.2",nanoid:"^5.1.6",open:"^10.1.2",picomatch:"^4.0.5","proper-lockfile":"^4.1.2",react:"19.2.4","react-dom":"19.2.4",semver:"^7.8.5","string-width":"^8.2.2",typebox:"1.3.10",undici:"^7.16.0","vscode-jsonrpc":"8.2.1","vscode-languageserver-protocol":"3.17.5","vscode-languageserver-types":"3.17.5","write-file-atomic":"^7.0.0",ws:"^8.21.2",yaml:"^2.9.0",yargs:"^18.1.0",zustand:"^5.0.14"},devDependencies:{"@biomejs/biome":"2.5.7","@types/bun":"^1.3.14","@types/json-schema":"^7.0.15","@types/lodash-es":"^4.17.12","@types/node":"^22.15.24","@types/picomatch":"^4.0.3","@types/proper-lockfile":"^4.1.4","@types/react":"19.2.10","@types/react-dom":"19.2.3","@types/semver":"^7.8.0","@types/write-file-atomic":"^4.0.3","@types/ws":"^8.18.1","@types/yargs":"^17.0.35","@vitest/coverage-v8":"^4.1.10",jsdom:"^26.0.0",playwright:"1.62.1",typescript:"^5.9.2",vitest:"^4.1.10"}};var s;function r(){if(s)return s;let i=o(a(import.meta.url));for(let n=0;n<5;n++){try{let t=JSON.parse(l(u(i,"package.json"),"utf8"));if(t.name===e.name&&typeof t.version==="string"&&typeof t.description==="string")return s=t,s}catch{}i=o(i)}return s={name:e.name,version:process.env.BLADE_VERSION??e.version,description:e.description},s}function y(){return{...r()}}function p(){return r().version}function v(){return r().name}function g(){return r().description}function f(){return`v${p()}`}function w(){return`v${p()} © 2025 Blade Code`}
2
2
  export{y as sh,p as th,v as uh,g as vh,f as wh,w as xh};
@@ -1,4 +1,4 @@
1
- import{xd as s}from"./chunk-4ppgfhqd.js";import{Qd as o}from"./chunk-ytce7gnt.js";import{Qf as y,Rf as D,Tf as N,Vf as j,Wf as F,Yf as R,ag as E,bg as _,cg as f,dg as C,fg as S,gg as m,kg as c,pg as l,qg as n}from"./chunk-465tgzab.js";import{rg as Y}from"./chunk-qp8mejbn.js";import{tg as x,vg as k,yg as Z}from"./chunk-c03xn5s3.js";import{Dg as X}from"./chunk-22aaybx2.js";import{Hg as h,Ig as A,Og as P,Pg as T,Rg as $,Sg as U,Tg as G,Vg as L,Wg as M,Yg as O,Zg as I}from"./chunk-qtt17d5s.js";import{fh as d}from"./chunk-2qqmmxqf.js";import{promises as i}from"node:fs";import t from"node:path";var e=["systemPrompt","appendSystemPrompt","initialMessage","resumeSessionId","forkSession","allowedTools","disallowedTools","mcpConfigPaths","strictMcpConfig","model","addDirs","outputFormat","inputFormat","print","includePartialMessages","replayUserMessages","agentsConfig","settingSources"],v=new Set([...Object.keys(c),...e,"providerRequestConcurrency","providerGlobalConcurrency","providerOwnerConcurrency"]),W=k.Number({exclusiveMinimum:0}),z=k.String({minLength:1}),b=k.Array(k.String()),a=k.Object({currentModelId:k.Optional(k.String()),modelProviders:k.Optional(k.Record(z,k.Object({name:z,baseUrl:z,wireApi:Z(["openai-completions","anthropic-messages"]),apiKeyEnv:k.Optional(z)}))),models:k.Optional(k.Array(k.Object({id:z,displayName:k.Optional(z),provider:z,model:z,overrides:k.Optional(k.Object({baseUrl:k.Optional(k.String()),temperature:k.Optional(k.Number()),maxOutputTokens:k.Optional(W),timeout:k.Optional(W),streamIdleTimeout:k.Optional(k.Number({minimum:1000})),apiVersion:k.Optional(k.String()),customHeaders:k.Optional(k.Record(k.String(),k.String())),maxRetries:k.Optional(k.Integer({minimum:0})),enablePromptCaching:k.Optional(k.Boolean())})),fallbackModels:k.Optional(k.Array(k.Object({provider:z,model:z,configId:k.Optional(z)})))}))),temperature:k.Optional(k.Number()),maxOutputTokens:k.Optional(W),stream:k.Optional(k.Boolean()),topP:k.Optional(k.Number()),topK:k.Optional(k.Number()),timeout:k.Optional(W),bashForegroundHandoffMs:k.Optional(k.Union([k.Literal(0),k.Integer({minimum:y,maximum:D})])),providerForegroundRecoveryMs:k.Optional(k.Union([k.Literal(0),k.Integer({minimum:h,maximum:A})])),providerCircuitBreakerOpenMs:k.Optional(k.Union([k.Literal(0),k.Integer({minimum:P,maximum:T})])),providerRequestConcurrency:k.Optional(k.Integer({minimum:$,maximum:U})),providerGlobalConcurrency:k.Optional(k.Integer({minimum:$,maximum:G})),providerOwnerConcurrency:k.Optional(k.Integer({minimum:$,maximum:G})),providerRequestAdmissionMs:k.Optional(k.Union([k.Literal(0),k.Integer({minimum:L,maximum:M})])),providerRequestPendingBytes:k.Optional(k.Integer({minimum:O,maximum:I})),agentTeamsEnabled:k.Optional(k.Boolean()),codeTheme:k.Optional(k.String()),uiTheme:k.Optional(Z(["light","dark","system"])),language:k.Optional(k.String()),fontSize:k.Optional(W),autoSaveSessions:k.Optional(k.Boolean()),notifyBuild:k.Optional(k.Boolean()),notifyErrors:k.Optional(k.Boolean()),notifySounds:k.Optional(k.Boolean()),privacyTelemetry:k.Optional(k.Boolean()),privacyCrash:k.Optional(k.Boolean()),debug:k.Optional(k.Union([k.Boolean(),k.String()])),mcpEnabled:k.Optional(k.Boolean()),mcpServers:k.Optional(k.Record(k.String(),k.Record(k.String(),k.Unknown()))),lspServers:k.Optional(k.Record(z,k.Object({command:z,args:k.Optional(k.Array(k.String())),extensionToLanguage:k.Record(z,z),env:k.Optional(k.Record(k.String(),k.String())),initializationOptions:k.Optional(k.Unknown()),settings:k.Optional(k.Unknown()),enabled:k.Optional(k.Boolean()),priority:k.Optional(k.Integer()),startupTimeout:k.Optional(k.Integer({minimum:100})),shutdownTimeout:k.Optional(k.Integer({minimum:100})),requestTimeout:k.Optional(k.Integer({minimum:100})),diagnosticWaitTimeout:k.Optional(k.Integer({minimum:0})),maxRestarts:k.Optional(k.Integer({minimum:0,maximum:10}))}))),permissionMode:k.Optional(k.Enum(Y)),maxTurns:k.Optional(k.Integer({minimum:-1})),maxConcurrentTasks:k.Optional(k.Integer({minimum:E,maximum:_})),maxQueuedTasks:k.Optional(k.Integer({minimum:f,maximum:C})),maxQueuedTaskBytes:k.Optional(k.Integer({minimum:S,maximum:m})),maxResidentSessionRuntimes:k.Optional(k.Integer({minimum:N,maximum:j})),sessionRuntimeIdleMs:k.Optional(k.Integer({minimum:F,maximum:R})),systemPrompt:k.Optional(k.String()),appendSystemPrompt:k.Optional(k.String()),initialMessage:k.Optional(k.String()),resumeSessionId:k.Optional(k.String()),forkSession:k.Optional(k.Boolean()),allowedTools:k.Optional(k.Array(z)),disallowedTools:k.Optional(k.Array(z)),mcpConfigPaths:k.Optional(k.Array(z)),strictMcpConfig:k.Optional(k.Boolean()),model:k.Optional(z),addDirs:k.Optional(k.Array(z)),outputFormat:k.Optional(Z(["text","json","stream-json","jsonl"])),inputFormat:k.Optional(Z(["text","stream-json"])),print:k.Optional(k.Boolean()),includePartialMessages:k.Optional(k.Boolean()),replayUserMessages:k.Optional(k.Boolean()),agentsConfig:k.Optional(k.String()),settingSources:k.Optional(k.String()),permissions:k.Optional(k.Object({allow:k.Optional(b),ask:k.Optional(b),deny:k.Optional(b)})),env:k.Optional(k.Record(k.String(),k.String())),hooks:k.Optional(k.Record(k.String(),k.Unknown())),enabledPlugins:k.Optional(k.Record(z,k.Boolean())),pluginSourcePolicy:k.Optional(k.Object({restrictToAllowedSources:k.Optional(k.Boolean()),requireGitCommitSha:k.Optional(k.Boolean()),allowedGitHosts:k.Optional(k.Array(z)),allowedMarketplaces:k.Optional(k.Array(z)),allowedLocalRoots:k.Optional(k.Array(z))})),disableAllHooks:k.Optional(k.Boolean())}),g=[["systemPrompt","systemPrompt"],["appendSystemPrompt","appendSystemPrompt"],["initialMessage","initialMessage"],["resumeSessionId","sessionId"],["forkSession","forkSession"],["allowedTools","allowedTools"],["disallowedTools","disallowedTools"],["mcpConfigPaths","mcpConfig"],["strictMcpConfig","strictMcpConfig"],["model","model"],["addDirs","addDir"],["outputFormat","outputFormat"],["inputFormat","inputFormat"],["print","print"],["includePartialMessages","includePartialMessages"],["replayUserMessages","replayUserMessages"],["agentsConfig","agents"],["settingSources","settingSources"],["permissionMode","permissionMode"],["maxTurns","maxTurns"],["maxConcurrentTasks","maxConcurrentTasks"],["maxQueuedTasks","maxQueuedTasks"],["maxQueuedTaskBytes","maxQueuedTaskBytes"],["maxResidentSessionRuntimes","maxResidentSessionRuntimes"],["sessionRuntimeIdleMs","sessionRuntimeIdleMs"]];function V(q,B){let w;try{w=JSON.parse(q)}catch(H){let K=H instanceof Error?`: ${H.message}`:"";throw Error(`Invalid JSON provided to --settings (${B})${K}`)}if(!w||typeof w!=="object"||Array.isArray(w))throw Error("--settings must contain a JSON object");for(let H of Object.keys(w))if(!v.has(H))throw Error(`Unknown --settings field: ${H}`);let J=x(a,w);if(!J.success){let H=J.error.issues.map((K)=>`${K.path.join(".")||"settings"}: ${K.message}`).join("; ");throw Error(`Invalid --settings value: ${H}`)}return J.data}async function p(q){if(q===void 0)return;let B=q.trim();if(!B)throw Error("--settings requires a JSON object or file path");if(B.startsWith("{"))return V(B,"inline JSON");let w=t.resolve(X(),B),J;try{J=await i.readFile(w,"utf8")}catch(H){let K=H instanceof Error?`: ${H.message}`:"";throw Error(`Unable to read --settings file ${w}${K}`)}return V(J,w)}function u(q,B){if(!B)return;let w=B;for(let[J,H]of g){if(J==="permissionMode"&&q.yolo===!0)continue;if(q[H]===void 0&&w[J]!==void 0)q[H]=w[J]}}var Q=d("General"),Dk=(q)=>{if(q.yolo){if(q.permissionMode&&q.permissionMode!=="yolo")throw Error("Cannot use both --yolo and --permission-mode with different values");q.permissionMode="yolo"}if(Array.isArray(q.allowedTools))q.allowedTools=q.allowedTools.flatMap((B)=>B.split(",").map((w)=>w.trim()).filter((w)=>w.length>0));if(Array.isArray(q.disallowedTools))q.disallowedTools=q.disallowedTools.flatMap((B)=>B.split(",").map((w)=>w.trim()).filter((w)=>w.length>0));if(Array.isArray(q.allowedTools)&&Array.isArray(q.disallowedTools)){let B=q.allowedTools.filter((w)=>q.disallowedTools.includes(w));if(B.length>0)throw Error(`Tools cannot be both allowed and disallowed: ${B.join(", ")}`)}},hk=async(q)=>{let B=await p(typeof q.settings==="string"?q.settings:void 0);if(u(q,B),typeof q.agents==="string")s(q.agents);r(q);try{let J=await l.getInstance().initialize(B),H=n(J,q);if(o().config.actions.setConfig(H),q.debug)Q.info("[CLI] 配置已加载到 Store")}catch(w){Q.error("[CLI] [FAIL] 配置初始化失败",w instanceof Error?w.message:w),console.error(`
1
+ import{xd as s}from"./chunk-4ppgfhqd.js";import{Qd as o}from"./chunk-xts31qj4.js";import{Qf as y,Rf as D,Tf as N,Vf as j,Wf as F,Yf as R,ag as E,bg as _,cg as f,dg as C,fg as S,gg as m,kg as c,pg as l,qg as n}from"./chunk-zph2jekm.js";import{rg as Y}from"./chunk-qp8mejbn.js";import{tg as x,vg as k,yg as Z}from"./chunk-c03xn5s3.js";import{Dg as X}from"./chunk-22aaybx2.js";import{Hg as h,Ig as A,Og as P,Pg as T,Rg as $,Sg as U,Tg as G,Vg as L,Wg as M,Yg as O,Zg as I}from"./chunk-qtt17d5s.js";import{fh as d}from"./chunk-2qqmmxqf.js";import{promises as i}from"node:fs";import t from"node:path";var e=["systemPrompt","appendSystemPrompt","initialMessage","resumeSessionId","forkSession","allowedTools","disallowedTools","mcpConfigPaths","strictMcpConfig","model","addDirs","outputFormat","inputFormat","print","includePartialMessages","replayUserMessages","agentsConfig","settingSources"],v=new Set([...Object.keys(c),...e,"providerRequestConcurrency","providerGlobalConcurrency","providerOwnerConcurrency"]),W=k.Number({exclusiveMinimum:0}),z=k.String({minLength:1}),b=k.Array(k.String()),a=k.Object({currentModelId:k.Optional(k.String()),modelProviders:k.Optional(k.Record(z,k.Object({name:z,baseUrl:z,wireApi:Z(["openai-completions","anthropic-messages"]),apiKeyEnv:k.Optional(z)}))),models:k.Optional(k.Array(k.Object({id:z,displayName:k.Optional(z),provider:z,model:z,overrides:k.Optional(k.Object({baseUrl:k.Optional(k.String()),temperature:k.Optional(k.Number()),maxOutputTokens:k.Optional(W),timeout:k.Optional(W),streamIdleTimeout:k.Optional(k.Number({minimum:1000})),apiVersion:k.Optional(k.String()),customHeaders:k.Optional(k.Record(k.String(),k.String())),maxRetries:k.Optional(k.Integer({minimum:0})),enablePromptCaching:k.Optional(k.Boolean())})),fallbackModels:k.Optional(k.Array(k.Object({provider:z,model:z,configId:k.Optional(z)})))}))),temperature:k.Optional(k.Number()),maxOutputTokens:k.Optional(W),stream:k.Optional(k.Boolean()),topP:k.Optional(k.Number()),topK:k.Optional(k.Number()),timeout:k.Optional(W),bashForegroundHandoffMs:k.Optional(k.Union([k.Literal(0),k.Integer({minimum:y,maximum:D})])),providerForegroundRecoveryMs:k.Optional(k.Union([k.Literal(0),k.Integer({minimum:h,maximum:A})])),providerCircuitBreakerOpenMs:k.Optional(k.Union([k.Literal(0),k.Integer({minimum:P,maximum:T})])),providerRequestConcurrency:k.Optional(k.Integer({minimum:$,maximum:U})),providerGlobalConcurrency:k.Optional(k.Integer({minimum:$,maximum:G})),providerOwnerConcurrency:k.Optional(k.Integer({minimum:$,maximum:G})),providerRequestAdmissionMs:k.Optional(k.Union([k.Literal(0),k.Integer({minimum:L,maximum:M})])),providerRequestPendingBytes:k.Optional(k.Integer({minimum:O,maximum:I})),agentTeamsEnabled:k.Optional(k.Boolean()),codeTheme:k.Optional(k.String()),uiTheme:k.Optional(Z(["light","dark","system"])),language:k.Optional(k.String()),fontSize:k.Optional(W),autoSaveSessions:k.Optional(k.Boolean()),notifyBuild:k.Optional(k.Boolean()),notifyErrors:k.Optional(k.Boolean()),notifySounds:k.Optional(k.Boolean()),privacyTelemetry:k.Optional(k.Boolean()),privacyCrash:k.Optional(k.Boolean()),debug:k.Optional(k.Union([k.Boolean(),k.String()])),mcpEnabled:k.Optional(k.Boolean()),mcpServers:k.Optional(k.Record(k.String(),k.Record(k.String(),k.Unknown()))),lspServers:k.Optional(k.Record(z,k.Object({command:z,args:k.Optional(k.Array(k.String())),extensionToLanguage:k.Record(z,z),env:k.Optional(k.Record(k.String(),k.String())),initializationOptions:k.Optional(k.Unknown()),settings:k.Optional(k.Unknown()),enabled:k.Optional(k.Boolean()),priority:k.Optional(k.Integer()),startupTimeout:k.Optional(k.Integer({minimum:100})),shutdownTimeout:k.Optional(k.Integer({minimum:100})),requestTimeout:k.Optional(k.Integer({minimum:100})),diagnosticWaitTimeout:k.Optional(k.Integer({minimum:0})),maxRestarts:k.Optional(k.Integer({minimum:0,maximum:10}))}))),permissionMode:k.Optional(k.Enum(Y)),maxTurns:k.Optional(k.Integer({minimum:-1})),maxConcurrentTasks:k.Optional(k.Integer({minimum:E,maximum:_})),maxQueuedTasks:k.Optional(k.Integer({minimum:f,maximum:C})),maxQueuedTaskBytes:k.Optional(k.Integer({minimum:S,maximum:m})),maxResidentSessionRuntimes:k.Optional(k.Integer({minimum:N,maximum:j})),sessionRuntimeIdleMs:k.Optional(k.Integer({minimum:F,maximum:R})),systemPrompt:k.Optional(k.String()),appendSystemPrompt:k.Optional(k.String()),initialMessage:k.Optional(k.String()),resumeSessionId:k.Optional(k.String()),forkSession:k.Optional(k.Boolean()),allowedTools:k.Optional(k.Array(z)),disallowedTools:k.Optional(k.Array(z)),mcpConfigPaths:k.Optional(k.Array(z)),strictMcpConfig:k.Optional(k.Boolean()),model:k.Optional(z),addDirs:k.Optional(k.Array(z)),outputFormat:k.Optional(Z(["text","json","stream-json","jsonl"])),inputFormat:k.Optional(Z(["text","stream-json"])),print:k.Optional(k.Boolean()),includePartialMessages:k.Optional(k.Boolean()),replayUserMessages:k.Optional(k.Boolean()),agentsConfig:k.Optional(k.String()),settingSources:k.Optional(k.String()),permissions:k.Optional(k.Object({allow:k.Optional(b),ask:k.Optional(b),deny:k.Optional(b)})),env:k.Optional(k.Record(k.String(),k.String())),hooks:k.Optional(k.Record(k.String(),k.Unknown())),enabledPlugins:k.Optional(k.Record(z,k.Boolean())),pluginSourcePolicy:k.Optional(k.Object({restrictToAllowedSources:k.Optional(k.Boolean()),requireGitCommitSha:k.Optional(k.Boolean()),allowedGitHosts:k.Optional(k.Array(z)),allowedMarketplaces:k.Optional(k.Array(z)),allowedLocalRoots:k.Optional(k.Array(z))})),disableAllHooks:k.Optional(k.Boolean())}),g=[["systemPrompt","systemPrompt"],["appendSystemPrompt","appendSystemPrompt"],["initialMessage","initialMessage"],["resumeSessionId","sessionId"],["forkSession","forkSession"],["allowedTools","allowedTools"],["disallowedTools","disallowedTools"],["mcpConfigPaths","mcpConfig"],["strictMcpConfig","strictMcpConfig"],["model","model"],["addDirs","addDir"],["outputFormat","outputFormat"],["inputFormat","inputFormat"],["print","print"],["includePartialMessages","includePartialMessages"],["replayUserMessages","replayUserMessages"],["agentsConfig","agents"],["settingSources","settingSources"],["permissionMode","permissionMode"],["maxTurns","maxTurns"],["maxConcurrentTasks","maxConcurrentTasks"],["maxQueuedTasks","maxQueuedTasks"],["maxQueuedTaskBytes","maxQueuedTaskBytes"],["maxResidentSessionRuntimes","maxResidentSessionRuntimes"],["sessionRuntimeIdleMs","sessionRuntimeIdleMs"]];function V(q,B){let w;try{w=JSON.parse(q)}catch(H){let K=H instanceof Error?`: ${H.message}`:"";throw Error(`Invalid JSON provided to --settings (${B})${K}`)}if(!w||typeof w!=="object"||Array.isArray(w))throw Error("--settings must contain a JSON object");for(let H of Object.keys(w))if(!v.has(H))throw Error(`Unknown --settings field: ${H}`);let J=x(a,w);if(!J.success){let H=J.error.issues.map((K)=>`${K.path.join(".")||"settings"}: ${K.message}`).join("; ");throw Error(`Invalid --settings value: ${H}`)}return J.data}async function p(q){if(q===void 0)return;let B=q.trim();if(!B)throw Error("--settings requires a JSON object or file path");if(B.startsWith("{"))return V(B,"inline JSON");let w=t.resolve(X(),B),J;try{J=await i.readFile(w,"utf8")}catch(H){let K=H instanceof Error?`: ${H.message}`:"";throw Error(`Unable to read --settings file ${w}${K}`)}return V(J,w)}function u(q,B){if(!B)return;let w=B;for(let[J,H]of g){if(J==="permissionMode"&&q.yolo===!0)continue;if(q[H]===void 0&&w[J]!==void 0)q[H]=w[J]}}var Q=d("General"),Dk=(q)=>{if(q.yolo){if(q.permissionMode&&q.permissionMode!=="yolo")throw Error("Cannot use both --yolo and --permission-mode with different values");q.permissionMode="yolo"}if(Array.isArray(q.allowedTools))q.allowedTools=q.allowedTools.flatMap((B)=>B.split(",").map((w)=>w.trim()).filter((w)=>w.length>0));if(Array.isArray(q.disallowedTools))q.disallowedTools=q.disallowedTools.flatMap((B)=>B.split(",").map((w)=>w.trim()).filter((w)=>w.length>0));if(Array.isArray(q.allowedTools)&&Array.isArray(q.disallowedTools)){let B=q.allowedTools.filter((w)=>q.disallowedTools.includes(w));if(B.length>0)throw Error(`Tools cannot be both allowed and disallowed: ${B.join(", ")}`)}},hk=async(q)=>{let B=await p(typeof q.settings==="string"?q.settings:void 0);if(u(q,B),typeof q.agents==="string")s(q.agents);r(q);try{let J=await l.getInstance().initialize(B),H=n(J,q);if(o().config.actions.setConfig(H),q.debug)Q.info("[CLI] 配置已加载到 Store")}catch(w){Q.error("[CLI] [FAIL] 配置初始化失败",w instanceof Error?w.message:w),console.error(`
2
2
  [FAIL] 配置初始化失败
3
3
  `),console.error("原因:",w instanceof Error?w.message:"未知错误"),console.error(`
4
4
  请检查:`),console.error(" 1. 配置文件格式是否正确 (~/.blade/config.json)"),console.error(" 2. 是否需要运行 blade 进行首次配置"),console.error(` 3. 配置文件权限是否正确