blade-code 0.7.7 → 0.7.8

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 (65) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-60se4kxq.js → chunk-0e0z8yc1.js} +2 -2
  3. package/dist/{chunk-x466sb8s.js → chunk-1w6tqkxd.js} +2 -2
  4. package/dist/{chunk-8e0rv3j5.js → chunk-2049tv49.js} +3 -3
  5. package/dist/chunk-4745ktjj.js +1570 -0
  6. package/dist/{chunk-54vk4tw8.js → chunk-48q9msfk.js} +43 -43
  7. package/dist/{chunk-v61bja34.js → chunk-4dmdn3a9.js} +1 -1
  8. package/dist/{chunk-4n7fsts0.js → chunk-5be6qr2v.js} +1 -1
  9. package/dist/chunk-67vzgcs5.js +2 -0
  10. package/dist/{chunk-2j3tb2dm.js → chunk-6811kbxn.js} +1 -1
  11. package/dist/{chunk-p7rf3zp8.js → chunk-6hn2jgw5.js} +1 -1
  12. package/dist/chunk-6js5wp6t.js +1 -0
  13. package/dist/{chunk-0y895nft.js → chunk-6kp3z956.js} +2 -2
  14. package/dist/{chunk-7e5hzpmp.js → chunk-71n472hj.js} +1 -1
  15. package/dist/chunk-78txnq4n.js +151 -0
  16. package/dist/{chunk-x24ddbhs.js → chunk-7r1hm0qz.js} +1 -1
  17. package/dist/{chunk-6087cgst.js → chunk-9kejtkey.js} +1 -1
  18. package/dist/{chunk-h79044h0.js → chunk-a7yjnqhd.js} +2 -2
  19. package/dist/chunk-bwaqaktn.js +1 -0
  20. package/dist/chunk-cb82rf5h.js +1 -0
  21. package/dist/chunk-ce11m8bq.js +1 -0
  22. package/dist/{chunk-2qckpa16.js → chunk-cjmxggke.js} +1 -1
  23. package/dist/chunk-e4rhdg3h.js +1 -0
  24. package/dist/{chunk-zet4zjc3.js → chunk-f9ybv4ph.js} +1 -1
  25. package/dist/{chunk-89j9pm90.js → chunk-faq7ay4j.js} +2 -2
  26. package/dist/{chunk-w1m1ehs1.js → chunk-fb7amc2s.js} +1 -1
  27. package/dist/{chunk-c6rtexw1.js → chunk-g6ted982.js} +1 -1
  28. package/dist/{chunk-9ad7tt9s.js → chunk-g7caymjr.js} +1 -1
  29. package/dist/{chunk-6y58y4rx.js → chunk-jm2xhnrv.js} +1 -1
  30. package/dist/chunk-ky8ctbdc.js +1 -0
  31. package/dist/chunk-mpskff34.js +1 -0
  32. package/dist/{chunk-6cry51vb.js → chunk-pd1yqxcv.js} +5 -5
  33. package/dist/{chunk-d61d6m07.js → chunk-phhmmybg.js} +2 -2
  34. package/dist/{chunk-ebcmqx1k.js → chunk-qnevwq1q.js} +1 -1
  35. package/dist/{chunk-778h8815.js → chunk-r1spf93b.js} +2 -2
  36. package/dist/{chunk-0b3m5qn6.js → chunk-rnfd5ebv.js} +1 -1
  37. package/dist/{chunk-yyw9bbfd.js → chunk-s4mke0t6.js} +1 -1
  38. package/dist/{chunk-5xjj88wd.js → chunk-t2spryz0.js} +1 -1
  39. package/dist/{chunk-2n8a87ds.js → chunk-t70aqrm4.js} +1 -1
  40. package/dist/{chunk-ptt8s7nd.js → chunk-z4c68ve0.js} +1 -1
  41. package/dist/chunk-z9zbcenc.js +6 -0
  42. package/dist/web/assets/{FilePreview-B2anY2d1.js → FilePreview-DRKRs8i2.js} +1 -1
  43. package/dist/web/assets/{MarkdownRenderer-BVfRG88x.js → MarkdownRenderer-DFqPpAnM.js} +1 -1
  44. package/dist/web/assets/{McpModal-BVvb-dzr.js → McpModal-CX5-hlNv.js} +1 -1
  45. package/dist/web/assets/{SettingsModal-aseVv-gp.js → SettingsModal-CfR_q6N7.js} +1 -1
  46. package/dist/web/assets/{SettingsStore-B87y64B4.js → SettingsStore-jup_Kikq.js} +1 -1
  47. package/dist/web/assets/{SkillsModal-BXYaF2KK.js → SkillsModal-DaAUrwXO.js} +1 -1
  48. package/dist/web/assets/{TerminalPanel-B-NRhOXN.js → TerminalPanel-DzlllDH7.js} +1 -1
  49. package/dist/web/assets/index-BJTSF3fc.js +9 -0
  50. package/dist/web/assets/index-CL6apjgo.css +1 -0
  51. package/dist/web/index.html +2 -2
  52. package/package.json +1 -1
  53. package/dist/chunk-3fcze972.js +0 -1
  54. package/dist/chunk-8p98nt9v.js +0 -151
  55. package/dist/chunk-94vj1hjp.js +0 -1
  56. package/dist/chunk-c8cxeve8.js +0 -1
  57. package/dist/chunk-gsn659hw.js +0 -1
  58. package/dist/chunk-kppxkh33.js +0 -1
  59. package/dist/chunk-qnh7np1s.js +0 -6
  60. package/dist/chunk-ran4gsmy.js +0 -1
  61. package/dist/chunk-swyvd7hd.js +0 -1
  62. package/dist/chunk-t9zdypqp.js +0 -2
  63. package/dist/chunk-x1khkevy.js +0 -1563
  64. package/dist/web/assets/index-9kl44E8k.js +0 -9
  65. package/dist/web/assets/index-CUVe9dGs.css +0 -1
@@ -1,4 +1,4 @@
1
- import{y as w}from"./chunk-ebcmqx1k.js";import{ra as S}from"./chunk-89j9pm90.js";import{Da as u,Ea as y}from"./chunk-778h8815.js";import{Bb as d,wb as r,zb as m}from"./chunk-v61bja34.js";import{Yb as b}from"./chunk-h79044h0.js";import{promises as h}from"node:fs";import P from"node:path";import{z as o}from"zod";var M=["systemPrompt","appendSystemPrompt","initialMessage","resumeSessionId","forkSession","allowedTools","disallowedTools","mcpConfigPaths","strictMcpConfig","model","addDirs","outputFormat","inputFormat","print","includePartialMessages","replayUserMessages","agentsConfig","settingSources"],T=new Set([...Object.keys(u),...M]),k=o.object({currentModelId:o.string().optional(),models:o.array(o.object({id:o.string().min(1),name:o.string().min(1),provider:o.string().min(1),apiKey:o.string(),baseUrl:o.string(),model:o.string().min(1),temperature:o.number().optional(),maxContextTokens:o.number().positive().optional(),maxOutputTokens:o.number().positive().optional(),topP:o.number().optional(),topK:o.number().optional(),supportsThinking:o.boolean().optional(),thinkingBudget:o.number().positive().optional(),thinkingMode:o.enum(["off","budget","adaptive"]).optional(),apiVersion:o.string().optional(),projectId:o.string().optional(),fallbackModels:o.array(o.string()).optional(),enablePromptCaching:o.boolean().optional(),customHeaders:o.record(o.string()).optional(),timeout:o.number().positive().optional(),maxRetries:o.number().int().min(0).optional()})).optional(),temperature:o.number().optional(),maxContextTokens:o.number().positive().optional(),maxOutputTokens:o.number().positive().optional(),stream:o.boolean().optional(),topP:o.number().optional(),topK:o.number().optional(),timeout:o.number().positive().optional(),theme:o.string().optional(),uiTheme:o.enum(["light","dark","system"]).optional(),language:o.string().optional(),fontSize:o.number().positive().optional(),autoSaveSessions:o.boolean().optional(),notifyBuild:o.boolean().optional(),notifyErrors:o.boolean().optional(),notifySounds:o.boolean().optional(),privacyTelemetry:o.boolean().optional(),privacyCrash:o.boolean().optional(),debug:o.union([o.boolean(),o.string()]).optional(),mcpEnabled:o.boolean().optional(),mcpServers:o.record(o.record(o.unknown())).optional(),permissionMode:o.nativeEnum(m).optional(),maxTurns:o.number().int().min(-1).max(d).optional(),systemPrompt:o.string().optional(),appendSystemPrompt:o.string().optional(),initialMessage:o.string().optional(),resumeSessionId:o.string().optional(),forkSession:o.boolean().optional(),allowedTools:o.array(o.string().min(1)).optional(),disallowedTools:o.array(o.string().min(1)).optional(),mcpConfigPaths:o.array(o.string().min(1)).optional(),strictMcpConfig:o.boolean().optional(),model:o.string().min(1).optional(),addDirs:o.array(o.string().min(1)).optional(),outputFormat:o.enum(["text","json","stream-json","jsonl"]).optional(),inputFormat:o.enum(["text","stream-json"]).optional(),print:o.boolean().optional(),includePartialMessages:o.boolean().optional(),replayUserMessages:o.boolean().optional(),agentsConfig:o.string().optional(),settingSources:o.string().optional(),permissions:o.object({allow:o.array(o.string()).optional(),ask:o.array(o.string()).optional(),deny:o.array(o.string()).optional()}).optional(),env:o.record(o.string()).optional(),hooks:o.record(o.unknown()).optional(),disableAllHooks:o.boolean().optional()}).passthrough(),C=[["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"]];function a(n,i){let t;try{t=JSON.parse(n)}catch(e){let l=e instanceof Error?`: ${e.message}`:"";throw Error(`Invalid JSON provided to --settings (${i})${l}`)}if(!t||typeof t!=="object"||Array.isArray(t))throw Error("--settings must contain a JSON object");for(let e of Object.keys(t))if(!T.has(e))throw Error(`Unknown --settings field: ${e}`);let s=k.safeParse(t);if(!s.success){let e=s.error.issues.map((l)=>`${l.path.join(".")||"settings"}: ${l.message}`).join("; ");throw Error(`Invalid --settings value: ${e}`)}return s.data}async function c(n){if(n===void 0)return;let i=n.trim();if(!i)throw Error("--settings requires a JSON object or file path");if(i.startsWith("{"))return a(i,"inline JSON");let t=P.resolve(r(),i),s;try{s=await h.readFile(t,"utf8")}catch(e){let l=e instanceof Error?`: ${e.message}`:"";throw Error(`Unable to read --settings file ${t}${l}`)}return a(s,t)}function f(n,i){if(!i)return;let t=i;for(let[s,e]of C){if(s==="permissionMode"&&n.yolo===!0)continue;if(n[e]===void 0&&t[s]!==void 0)n[e]=t[s]}}var p=b("General"),K=(n)=>{if(n.yolo){if(n.permissionMode&&n.permissionMode!=="yolo")throw Error("Cannot use both --yolo and --permission-mode with different values");n.permissionMode="yolo"}if(Array.isArray(n.allowedTools))n.allowedTools=n.allowedTools.flatMap((i)=>i.split(",").map((t)=>t.trim()).filter((t)=>t.length>0));if(Array.isArray(n.disallowedTools))n.disallowedTools=n.disallowedTools.flatMap((i)=>i.split(",").map((t)=>t.trim()).filter((t)=>t.length>0));if(Array.isArray(n.allowedTools)&&Array.isArray(n.disallowedTools)){let i=n.allowedTools.filter((t)=>n.disallowedTools.includes(t));if(i.length>0)throw Error(`Tools cannot be both allowed and disallowed: ${i.join(", ")}`)}},z=async(n)=>{let i=await c(typeof n.settings==="string"?n.settings:void 0);if(f(n,i),typeof n.agents==="string")w(n.agents);E(n);try{let s=await y.getInstance().initialize(i);if(S().config.actions.setConfig(s),n.debug)p.info("[CLI] 配置已加载到 Store")}catch(t){p.error("[CLI] [FAIL] 配置初始化失败",t instanceof Error?t.message:t),console.error(`
1
+ import{y as w}from"./chunk-qnevwq1q.js";import{sa as S}from"./chunk-faq7ay4j.js";import{Ea as u,Fa as y}from"./chunk-r1spf93b.js";import{Ab as m,Cb as d,xb as r}from"./chunk-4dmdn3a9.js";import{Zb as b}from"./chunk-a7yjnqhd.js";import{promises as h}from"node:fs";import P from"node:path";import{z as o}from"zod";var M=["systemPrompt","appendSystemPrompt","initialMessage","resumeSessionId","forkSession","allowedTools","disallowedTools","mcpConfigPaths","strictMcpConfig","model","addDirs","outputFormat","inputFormat","print","includePartialMessages","replayUserMessages","agentsConfig","settingSources"],T=new Set([...Object.keys(u),...M]),k=o.object({currentModelId:o.string().optional(),models:o.array(o.object({id:o.string().min(1),name:o.string().min(1),provider:o.string().min(1),apiKey:o.string(),baseUrl:o.string(),model:o.string().min(1),temperature:o.number().optional(),maxContextTokens:o.number().positive().optional(),maxOutputTokens:o.number().positive().optional(),topP:o.number().optional(),topK:o.number().optional(),supportsThinking:o.boolean().optional(),thinkingBudget:o.number().positive().optional(),thinkingMode:o.enum(["off","budget","adaptive"]).optional(),apiVersion:o.string().optional(),projectId:o.string().optional(),fallbackModels:o.array(o.string()).optional(),enablePromptCaching:o.boolean().optional(),customHeaders:o.record(o.string()).optional(),timeout:o.number().positive().optional(),maxRetries:o.number().int().min(0).optional()})).optional(),temperature:o.number().optional(),maxContextTokens:o.number().positive().optional(),maxOutputTokens:o.number().positive().optional(),stream:o.boolean().optional(),topP:o.number().optional(),topK:o.number().optional(),timeout:o.number().positive().optional(),theme:o.string().optional(),uiTheme:o.enum(["light","dark","system"]).optional(),language:o.string().optional(),fontSize:o.number().positive().optional(),autoSaveSessions:o.boolean().optional(),notifyBuild:o.boolean().optional(),notifyErrors:o.boolean().optional(),notifySounds:o.boolean().optional(),privacyTelemetry:o.boolean().optional(),privacyCrash:o.boolean().optional(),debug:o.union([o.boolean(),o.string()]).optional(),mcpEnabled:o.boolean().optional(),mcpServers:o.record(o.record(o.unknown())).optional(),permissionMode:o.nativeEnum(m).optional(),maxTurns:o.number().int().min(-1).max(d).optional(),systemPrompt:o.string().optional(),appendSystemPrompt:o.string().optional(),initialMessage:o.string().optional(),resumeSessionId:o.string().optional(),forkSession:o.boolean().optional(),allowedTools:o.array(o.string().min(1)).optional(),disallowedTools:o.array(o.string().min(1)).optional(),mcpConfigPaths:o.array(o.string().min(1)).optional(),strictMcpConfig:o.boolean().optional(),model:o.string().min(1).optional(),addDirs:o.array(o.string().min(1)).optional(),outputFormat:o.enum(["text","json","stream-json","jsonl"]).optional(),inputFormat:o.enum(["text","stream-json"]).optional(),print:o.boolean().optional(),includePartialMessages:o.boolean().optional(),replayUserMessages:o.boolean().optional(),agentsConfig:o.string().optional(),settingSources:o.string().optional(),permissions:o.object({allow:o.array(o.string()).optional(),ask:o.array(o.string()).optional(),deny:o.array(o.string()).optional()}).optional(),env:o.record(o.string()).optional(),hooks:o.record(o.unknown()).optional(),disableAllHooks:o.boolean().optional()}).passthrough(),C=[["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"]];function a(n,i){let t;try{t=JSON.parse(n)}catch(e){let l=e instanceof Error?`: ${e.message}`:"";throw Error(`Invalid JSON provided to --settings (${i})${l}`)}if(!t||typeof t!=="object"||Array.isArray(t))throw Error("--settings must contain a JSON object");for(let e of Object.keys(t))if(!T.has(e))throw Error(`Unknown --settings field: ${e}`);let s=k.safeParse(t);if(!s.success){let e=s.error.issues.map((l)=>`${l.path.join(".")||"settings"}: ${l.message}`).join("; ");throw Error(`Invalid --settings value: ${e}`)}return s.data}async function c(n){if(n===void 0)return;let i=n.trim();if(!i)throw Error("--settings requires a JSON object or file path");if(i.startsWith("{"))return a(i,"inline JSON");let t=P.resolve(r(),i),s;try{s=await h.readFile(t,"utf8")}catch(e){let l=e instanceof Error?`: ${e.message}`:"";throw Error(`Unable to read --settings file ${t}${l}`)}return a(s,t)}function f(n,i){if(!i)return;let t=i;for(let[s,e]of C){if(s==="permissionMode"&&n.yolo===!0)continue;if(n[e]===void 0&&t[s]!==void 0)n[e]=t[s]}}var p=b("General"),K=(n)=>{if(n.yolo){if(n.permissionMode&&n.permissionMode!=="yolo")throw Error("Cannot use both --yolo and --permission-mode with different values");n.permissionMode="yolo"}if(Array.isArray(n.allowedTools))n.allowedTools=n.allowedTools.flatMap((i)=>i.split(",").map((t)=>t.trim()).filter((t)=>t.length>0));if(Array.isArray(n.disallowedTools))n.disallowedTools=n.disallowedTools.flatMap((i)=>i.split(",").map((t)=>t.trim()).filter((t)=>t.length>0));if(Array.isArray(n.allowedTools)&&Array.isArray(n.disallowedTools)){let i=n.allowedTools.filter((t)=>n.disallowedTools.includes(t));if(i.length>0)throw Error(`Tools cannot be both allowed and disallowed: ${i.join(", ")}`)}},z=async(n)=>{let i=await c(typeof n.settings==="string"?n.settings:void 0);if(f(n,i),typeof n.agents==="string")w(n.agents);E(n);try{let s=await y.getInstance().initialize(i);if(S().config.actions.setConfig(s),n.debug)p.info("[CLI] 配置已加载到 Store")}catch(t){p.error("[CLI] [FAIL] 配置初始化失败",t instanceof Error?t.message:t),console.error(`
2
2
  [FAIL] 配置初始化失败
3
3
  `),console.error("原因:",t instanceof Error?t.message:"未知错误"),console.error(`
4
4
  请检查:`),console.error(" 1. 配置文件格式是否正确 (~/.blade/config.json)"),console.error(" 2. 是否需要运行 blade 进行首次配置"),console.error(` 3. 配置文件权限是否正确
@@ -1,4 +1,4 @@
1
- import{ca as O}from"./chunk-x466sb8s.js";import{Aa as J,Ca as L}from"./chunk-89j9pm90.js";import"./chunk-778h8815.js";import"./chunk-d61d6m07.js";import"./chunk-6y58y4rx.js";import"./chunk-2n8a87ds.js";import{Ab as H}from"./chunk-v61bja34.js";import"./chunk-h79044h0.js";import"./chunk-zet4zjc3.js";import P from"os";import E from"path";function _(q){return typeof q==="string"?q:void 0}function T(q){if(!Array.isArray(q))return;let z=[];for(let F of q)if(typeof F==="string")z.push(F);else if(F!=null)z.push(String(F));return z}function G(){console.log(`
1
+ import{da as O}from"./chunk-1w6tqkxd.js";import{Ba as J,Da as L}from"./chunk-faq7ay4j.js";import"./chunk-r1spf93b.js";import"./chunk-phhmmybg.js";import"./chunk-jm2xhnrv.js";import"./chunk-t70aqrm4.js";import{Bb as H}from"./chunk-4dmdn3a9.js";import"./chunk-a7yjnqhd.js";import"./chunk-f9ybv4ph.js";import P from"os";import E from"path";function _(q){return typeof q==="string"?q:void 0}function T(q){if(!Array.isArray(q))return;let z=[];for(let F of q)if(typeof F==="string")z.push(F);else if(F!=null)z.push(String(F));return z}function G(){console.log(`
2
2
  blade mcp
3
3
  `),console.log(`管理 MCP 服务器
4
4
  `),console.log("Commands:"),console.log(" blade mcp add <name> <commandOrUrl> [args...] 添加 MCP 服务器"),console.log(" blade mcp remove <name> 删除 MCP 服务器 [aliases: rm]"),console.log(" blade mcp list 列出所有 MCP 服务器并检查健康状态 [aliases: ls]"),console.log(" blade mcp get <name> 获取服务器详情"),console.log(` blade mcp add-json <name> <json> 从 JSON 字符串添加服务器
@@ -1,3 +1,3 @@
1
- import{_b as F}from"./chunk-zet4zjc3.js";import{appendFileSync as R,existsSync as x,mkdirSync as m,readdirSync as C,statSync as z,unlinkSync as V}from"node:fs";import $ from"node:path";import{execSync as A}from"node:child_process";import*as _ from"node:os";import*as M from"node:path";function B(q){return M.resolve(q).replace(/[/\\]/g,"-").replace(/:/g,"_")}function f(q){let G=q.replace(/_/g,":");if(G.startsWith("-"))G="/"+G.slice(1);return G.replace(/-/g,"/")}function X(q){let G=B(q);return M.join(W(),"projects",G)}function N(q){return typeof q==="string"&&q!=="."&&q!==".."&&/^[A-Za-z0-9_-][A-Za-z0-9._-]{0,199}$/.test(q)}function Y(q){if(!N(q))throw Error(`Invalid session ID: ${q}`)}function u(q,G){return Y(G),M.join(X(q),`${G}.jsonl`)}function P(q,G){return Y(G),M.join(X(q),`${G}.inbox.json`)}function h(q,G){return Y(G),M.join(X(q),`${G}.goal.json`)}function y(q){try{return A("git rev-parse --abbrev-ref HEAD",{cwd:q,encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function W(){return process.env.BLADE_STORAGE_ROOT||M.join(_.homedir(),".blade")}async function p(){let{readdir:q}=await import("node:fs/promises");try{let G=M.join(W(),"projects");return(await q(G,{withFileTypes:!0})).filter((H)=>H.isDirectory()).map((H)=>H.name)}catch{return[]}}var E;((J)=>{J[J.DEBUG=0]="DEBUG";J[J.INFO=1]="INFO";J[J.WARN=2]="WARN";J[J.ERROR=3]="ERROR"})(E||={});var Z=null,k=null,w=!1;function n(q){if(Z!==q)Z=q}async function l(){}function b(){if(w)return k;w=!0;try{let q=$.join(W(),"logs");if(!x(q))m(q,{recursive:!0,mode:493});if(z(q).uid===0&&process.getuid&&process.getuid()!==0)return console.error(""),console.error("[FAIL] 权限错误:~/.blade/logs 目录属于 root 用户"),console.error(""),console.error("这通常是因为您曾经使用 sudo 运行过 blade。"),console.error(""),console.error("解决方法:"),console.error(" sudo chown -R $USER:$USER ~/.blade/"),console.error(""),console.error("然后重新运行 blade(不要使用 sudo)"),console.error(""),null;return j(q,30),k=q,q}catch(q){return console.error("[Logger] 无法创建日志目录:",q),null}}function j(q,G){try{let K=C(q),H=Date.now(),J=G*24*60*60*1000;for(let T of K){if(!T.startsWith("blade-")||!T.endsWith(".log")&&!T.endsWith(".jsonl"))continue;let O=$.join(q,T);try{let U=z(O);if(H-U.mtimeMs>J)V(O)}catch(U){}}}catch(K){}}function D(){let q=b();if(!q)return null;let G=Z||"default";return $.join(q,`blade-${G}.jsonl`)}function v(q,G,K){let H=D();if(!H)return;try{let J={timestamp:new Date().toISOString(),level:E[G],category:q,message:K};R(H,JSON.stringify(J)+`
1
+ import{$b as F}from"./chunk-f9ybv4ph.js";import{appendFileSync as R,existsSync as x,mkdirSync as m,readdirSync as C,statSync as z,unlinkSync as V}from"node:fs";import $ from"node:path";import{execSync as A}from"node:child_process";import*as _ from"node:os";import*as M from"node:path";function B(q){return M.resolve(q).replace(/[/\\]/g,"-").replace(/:/g,"_")}function f(q){let G=q.replace(/_/g,":");if(G.startsWith("-"))G="/"+G.slice(1);return G.replace(/-/g,"/")}function X(q){let G=B(q);return M.join(W(),"projects",G)}function N(q){return typeof q==="string"&&q!=="."&&q!==".."&&/^[A-Za-z0-9_-][A-Za-z0-9._-]{0,199}$/.test(q)}function Y(q){if(!N(q))throw Error(`Invalid session ID: ${q}`)}function u(q,G){return Y(G),M.join(X(q),`${G}.jsonl`)}function P(q,G){return Y(G),M.join(X(q),`${G}.inbox.json`)}function h(q,G){return Y(G),M.join(X(q),`${G}.goal.json`)}function y(q){try{return A("git rev-parse --abbrev-ref HEAD",{cwd:q,encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()||void 0}catch{return}}function W(){return process.env.BLADE_STORAGE_ROOT||M.join(_.homedir(),".blade")}async function p(){let{readdir:q}=await import("node:fs/promises");try{let G=M.join(W(),"projects");return(await q(G,{withFileTypes:!0})).filter((H)=>H.isDirectory()).map((H)=>H.name)}catch{return[]}}var E;((J)=>{J[J.DEBUG=0]="DEBUG";J[J.INFO=1]="INFO";J[J.WARN=2]="WARN";J[J.ERROR=3]="ERROR"})(E||={});var Z=null,k=null,w=!1;function n(q){if(Z!==q)Z=q}async function l(){}function b(){if(w)return k;w=!0;try{let q=$.join(W(),"logs");if(!x(q))m(q,{recursive:!0,mode:493});if(z(q).uid===0&&process.getuid&&process.getuid()!==0)return console.error(""),console.error("[FAIL] 权限错误:~/.blade/logs 目录属于 root 用户"),console.error(""),console.error("这通常是因为您曾经使用 sudo 运行过 blade。"),console.error(""),console.error("解决方法:"),console.error(" sudo chown -R $USER:$USER ~/.blade/"),console.error(""),console.error("然后重新运行 blade(不要使用 sudo)"),console.error(""),null;return j(q,30),k=q,q}catch(q){return console.error("[Logger] 无法创建日志目录:",q),null}}function j(q,G){try{let K=C(q),H=Date.now(),J=G*24*60*60*1000;for(let T of K){if(!T.startsWith("blade-")||!T.endsWith(".log")&&!T.endsWith(".jsonl"))continue;let O=$.join(q,T);try{let U=z(O);if(H-U.mtimeMs>J)V(O)}catch(U){}}}catch(K){}}function D(){let q=b();if(!q)return null;let G=Z||"default";return $.join(q,`blade-${G}.jsonl`)}function v(q,G,K){let H=D();if(!H)return;try{let J={timestamp:new Date().toISOString(),level:E[G],category:q,message:K};R(H,JSON.stringify(J)+`
2
2
  `)}catch(J){}}class Q{static globalDebugConfig=null;enabled;minLevel;category;constructor(q={}){if(q.enabled!==void 0)this.enabled=q.enabled;else if(Q.globalDebugConfig!==null)this.enabled=Boolean(Q.globalDebugConfig);else this.enabled=!1;this.minLevel=q.minLevel??0,this.category=q.category??"General"}static setGlobalDebug(q){Q.globalDebugConfig=q}static clearGlobalDebug(){Q.globalDebugConfig=null}setEnabled(q){this.enabled=q}parseDebugFilter(q){if(!q)return{enabled:!1};if(q===!0||q==="true"||q==="1")return{enabled:!0};let G=String(q).trim();if(!G)return{enabled:!0};if(G.startsWith("!"))return{enabled:!0,filter:{mode:"exclude",categories:G.split(",").map((J)=>J.trim().replace(/^!/,"")).filter(Boolean)}};return{enabled:!0,filter:{mode:"include",categories:G.split(",").map((H)=>H.trim()).filter(Boolean)}}}shouldLogCategory(q){if(!q)return!0;let G=this.category.toLowerCase();if(q.mode==="include")return q.categories.some((K)=>G.includes(K.toLowerCase()));return!q.categories.some((K)=>G.includes(K.toLowerCase()))}shouldLogToConsole(q){if(Q.globalDebugConfig!==null){let{enabled:G,filter:K}=this.parseDebugFilter(Q.globalDebugConfig);if(!G)return!1;if(q<this.minLevel)return!1;return this.shouldLogCategory(K)}return this.enabled&&q>=this.minLevel}log(q,...G){let K=G.map((H)=>typeof H==="object"?JSON.stringify(H):String(H)).join(" ");if(v(this.category,q,K),this.shouldLogToConsole(q)){let H=E[q],J=`[${this.category}] [${H}]`;console.error(J,...G)}}debug(...q){this.log(0,...q)}info(...q){this.log(1,...q)}warn(...q){this.log(2,...q)}error(...q){this.log(3,...q)}}function i(q,G){return new Q({...G,category:q})}var a=new Q({category:"General"});
3
- export{f as Lb,X as Mb,N as Nb,Y as Ob,u as Pb,P as Qb,h as Rb,y as Sb,W as Tb,p as Ub,n as Vb,l as Wb,Q as Xb,i as Yb,a as Zb};
3
+ export{f as Mb,X as Nb,N as Ob,Y as Pb,u as Qb,P as Rb,h as Sb,y as Tb,W as Ub,p as Vb,n as Wb,l as Xb,Q as Yb,i as Zb,a as _b};
@@ -0,0 +1 @@
1
+ import{Lb as a}from"./chunk-6kp3z956.js";import"./chunk-a7yjnqhd.js";import"./chunk-f9ybv4ph.js";export{a as createChatServiceAsync};
@@ -0,0 +1 @@
1
+ import{t as a,u as b}from"./chunk-s4mke0t6.js";import"./chunk-phhmmybg.js";import"./chunk-f9ybv4ph.js";export{a as globalOptions,b as cliConfig};
@@ -0,0 +1 @@
1
+ import{Ia as a,Ja as b,Ka as c,La as d,Ma as e,Na as f}from"./chunk-phhmmybg.js";import"./chunk-f9ybv4ph.js";export{b as getVersion,c as getPackageName,a as getPackageInfo,e as getFormattedVersion,d as getDescription,f as getCopyright};
@@ -1,2 +1,2 @@
1
- import{_b as y}from"./chunk-zet4zjc3.js";import*as j from"fs/promises";import*as $ from"path";import b from"semver";import{fileURLToPath as N}from"url";import{ProxyAgent as G,fetch as H}from"undici";function T(){return process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy}function R(){let q=T();if(q)try{return new G(q)}catch(z){console.warn(`[proxyFetch] Invalid proxy URL: ${q}`)}return}async function K(q,z={}){let{timeout:W=30000,signal:Q,...B}=z;if(Q?.aborted)throw new DOMException("The operation was aborted.","AbortError");let J=R(),X=new AbortController,Y=!1,F=setTimeout(()=>{Y=!0,X.abort()},W),w=()=>X.abort();Q?.addEventListener("abort",w);try{let Z={method:B.method,headers:B.headers,body:B.body,signal:X.signal,dispatcher:J};return await H(q.toString(),Z)}catch(Z){if(Z instanceof Error&&Z.name==="AbortError"){if(Y)throw Error(`Request timeout after ${W}ms`);throw Z}throw Z}finally{clearTimeout(F),Q?.removeEventListener("abort",w)}}var D="blade-code",f="https://cdn.jsdelivr.net/npm/blade-code@latest/CHANGELOG.md",M=$.join(process.env.HOME||process.env.USERPROFILE||".",".blade"),S=$.join(M,"version-cache.json"),k=3600000,L=`https://registry.npmjs.org/${D}/latest`;async function x(){try{if(process.env.BLADE_VERSION)return process.env.BLADE_VERSION;let q=N(import.meta.url),z=$.dirname(q),W=[$.join(z,"..","..","package.json"),$.join(z,"..","package.json")];for(let Q of W)try{let B=await j.readFile(Q,"utf-8"),J=JSON.parse(B);if(J.name===D&&J.version)return J.version}catch{}return"unknown"}catch{return"unknown"}}async function I(){try{let q=await j.readFile(S,"utf-8"),z=JSON.parse(q);if(Date.now()-z.checkedAt<k)return z;return{...z,checkedAt:0}}catch{return null}}async function O(q){try{await j.mkdir(M,{recursive:!0,mode:493}),await j.writeFile(S,JSON.stringify(q,null,2))}catch{}}async function P(){try{let q=await K(L,{timeout:5000,headers:{Accept:"application/json"}});if(!q.ok)return null;return(await q.json()).version||null}catch{return null}}async function v(q=!1){let z=await x(),W=f;if(z==="unknown")return{currentVersion:z,latestVersion:null,hasUpdate:!1,shouldPrompt:!1,releaseNotesUrl:W,error:"Unable to determine current version"};let Q=await I(),B=Q?.skipUntilVersion,J=null;if(!q&&Q&&Q.checkedAt>0)J=Q.latestVersion;else if(J=await P(),J)await O({latestVersion:J,checkedAt:Date.now(),skipUntilVersion:B});if(!J)return{currentVersion:z,latestVersion:null,hasUpdate:!1,shouldPrompt:!1,releaseNotesUrl:W,error:"Unable to check for updates"};let X=b.gt(J,z),Y=X;if(X&&B)Y=b.gt(J,B);return{currentVersion:z,latestVersion:J,hasUpdate:X,shouldPrompt:Y,releaseNotesUrl:W}}async function u(q){let z=await I();await O({latestVersion:z?.latestVersion||q,checkedAt:z?.checkedAt||Date.now(),skipUntilVersion:q})}function g(){return`npm install -g ${D}@latest --registry https://registry.npmjs.org`}async function C(){let{spawn:q}=await import("child_process");return new Promise((z)=>{let W=g(),Q=q(W,{stdio:"inherit",shell:!0});Q.on("close",(B)=>{if(B===0)z({success:!0,message:"Upgrade successful! Please restart blade."});else z({success:!1,message:`Upgrade failed (exit code: ${B})`})}),Q.on("error",(B)=>{z({success:!1,message:`Upgrade failed: ${B.message}`})})})}async function d(){try{let q=await v();return q.shouldPrompt?q:null}catch{return null}}
1
+ import{$b as y}from"./chunk-f9ybv4ph.js";import*as j from"fs/promises";import*as $ from"path";import b from"semver";import{fileURLToPath as N}from"url";import{ProxyAgent as G,fetch as H}from"undici";function T(){return process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy}function R(){let q=T();if(q)try{return new G(q)}catch(z){console.warn(`[proxyFetch] Invalid proxy URL: ${q}`)}return}async function K(q,z={}){let{timeout:W=30000,signal:Q,...B}=z;if(Q?.aborted)throw new DOMException("The operation was aborted.","AbortError");let J=R(),X=new AbortController,Y=!1,F=setTimeout(()=>{Y=!0,X.abort()},W),w=()=>X.abort();Q?.addEventListener("abort",w);try{let Z={method:B.method,headers:B.headers,body:B.body,signal:X.signal,dispatcher:J};return await H(q.toString(),Z)}catch(Z){if(Z instanceof Error&&Z.name==="AbortError"){if(Y)throw Error(`Request timeout after ${W}ms`);throw Z}throw Z}finally{clearTimeout(F),Q?.removeEventListener("abort",w)}}var D="blade-code",f="https://cdn.jsdelivr.net/npm/blade-code@latest/CHANGELOG.md",M=$.join(process.env.HOME||process.env.USERPROFILE||".",".blade"),S=$.join(M,"version-cache.json"),k=3600000,L=`https://registry.npmjs.org/${D}/latest`;async function x(){try{if(process.env.BLADE_VERSION)return process.env.BLADE_VERSION;let q=N(import.meta.url),z=$.dirname(q),W=[$.join(z,"..","..","package.json"),$.join(z,"..","package.json")];for(let Q of W)try{let B=await j.readFile(Q,"utf-8"),J=JSON.parse(B);if(J.name===D&&J.version)return J.version}catch{}return"unknown"}catch{return"unknown"}}async function I(){try{let q=await j.readFile(S,"utf-8"),z=JSON.parse(q);if(Date.now()-z.checkedAt<k)return z;return{...z,checkedAt:0}}catch{return null}}async function O(q){try{await j.mkdir(M,{recursive:!0,mode:493}),await j.writeFile(S,JSON.stringify(q,null,2))}catch{}}async function P(){try{let q=await K(L,{timeout:5000,headers:{Accept:"application/json"}});if(!q.ok)return null;return(await q.json()).version||null}catch{return null}}async function v(q=!1){let z=await x(),W=f;if(z==="unknown")return{currentVersion:z,latestVersion:null,hasUpdate:!1,shouldPrompt:!1,releaseNotesUrl:W,error:"Unable to determine current version"};let Q=await I(),B=Q?.skipUntilVersion,J=null;if(!q&&Q&&Q.checkedAt>0)J=Q.latestVersion;else if(J=await P(),J)await O({latestVersion:J,checkedAt:Date.now(),skipUntilVersion:B});if(!J)return{currentVersion:z,latestVersion:null,hasUpdate:!1,shouldPrompt:!1,releaseNotesUrl:W,error:"Unable to check for updates"};let X=b.gt(J,z),Y=X;if(X&&B)Y=b.gt(J,B);return{currentVersion:z,latestVersion:J,hasUpdate:X,shouldPrompt:Y,releaseNotesUrl:W}}async function u(q){let z=await I();await O({latestVersion:z?.latestVersion||q,checkedAt:z?.checkedAt||Date.now(),skipUntilVersion:q})}function g(){return`npm install -g ${D}@latest --registry https://registry.npmjs.org`}async function C(){let{spawn:q}=await import("child_process");return new Promise((z)=>{let W=g(),Q=q(W,{stdio:"inherit",shell:!0});Q.on("close",(B)=>{if(B===0)z({success:!0,message:"Upgrade successful! Please restart blade."});else z({success:!1,message:`Upgrade failed (exit code: ${B})`})}),Q.on("error",(B)=>{z({success:!1,message:`Upgrade failed: ${B.message}`})})})}async function d(){try{let q=await v();return q.shouldPrompt?q:null}catch{return null}}
2
2
  export{v as a,u as b,g as c,C as d,d as e};
@@ -0,0 +1 @@
1
+ import{a,b,c,d,e}from"./chunk-cjmxggke.js";import"./chunk-f9ybv4ph.js";export{b as setSkipUntilVersion,d as performUpgrade,c as getUpgradeCommand,e as checkVersionOnStartup,a as checkVersion};
@@ -1,2 +1,2 @@
1
1
  import{createRequire as a}from"node:module";var c=a(import.meta.url);
2
- export{c as _b};
2
+ export{c as $b};
@@ -1,4 +1,4 @@
1
- import{Ea as Y0,Ga as w}from"./chunk-778h8815.js";import{ub as Q0}from"./chunk-2n8a87ds.js";import{nanoid as L0}from"nanoid";import{devtools as R0,subscribeWithSelector as I0}from"zustand/middleware";import{createStore as N0}from"zustand/vanilla";var G0={name:"ayu-dark",colors:{primary:"#ffcc66",secondary:"#bae67e",accent:"#73d0ff",success:"#bae67e",warning:"#ffcc66",error:"#ff3333",info:"#73d0ff",light:"#f0f0f0",dark:"#000000",muted:"#5c6773",highlight:"#2d323b",text:{primary:"#e6e1cf",secondary:"#bae67e",muted:"#5c6773",light:"#ffffff"},background:{primary:"#0f1419",secondary:"#14191f",dark:"#000000"},border:{light:"#2d323b",dark:"#000000"},syntax:{comment:"#5c6773",string:"#bae67e",number:"#ffcc66",keyword:"#ff8f40",function:"#73d0ff",variable:"#e6e1cf",operator:"#f29e74",type:"#73d0ff",tag:"#ff8f40",attr:"#ffd580",default:"#e6e1cf"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.2)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.2)"}},V0={name:"dracula",colors:{primary:"#bd93f9",secondary:"#ffb86c",accent:"#ff79c6",success:"#50fa7b",warning:"#f1fa8c",error:"#ff5555",info:"#8be9fd",light:"#f8f8f2",dark:"#282a36",muted:"#6272a4",highlight:"#44475a",text:{primary:"#f8f8f2",secondary:"#f1fa8c",muted:"#6272a4",light:"#ffffff"},background:{primary:"#282a36",secondary:"#44475a",dark:"#21222c"},border:{light:"#44475a",dark:"#000000"},syntax:{comment:"#6272a4",string:"#f1fa8c",number:"#bd93f9",keyword:"#ff79c6",function:"#50fa7b",variable:"#f8f8f2",operator:"#ff79c6",type:"#8be9fd",tag:"#ff79c6",attr:"#50fa7b",default:"#f8f8f2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 42, 54, 0.2)",base:"0 1px 3px 0 rgba(40, 42, 54, 0.3), 0 1px 2px 0 rgba(40, 42, 54, 0.2)",lg:"0 10px 15px -3px rgba(40, 42, 54, 0.3), 0 4px 6px -2px rgba(40, 42, 54, 0.2)"}},F0={name:"monokai",colors:{primary:"#66d9ef",secondary:"#a6e22e",accent:"#f92672",success:"#a6e22e",warning:"#e6db74",error:"#f92672",info:"#66d9ef",light:"#f8f8f2",dark:"#272822",muted:"#75715e",highlight:"#3e3d32",text:{primary:"#f8f8f2",secondary:"#e6db74",muted:"#75715e",light:"#ffffff"},background:{primary:"#272822",secondary:"#3e3d32",dark:"#1e1f1c"},border:{light:"#3e3d32",dark:"#000000"},syntax:{comment:"#75715e",string:"#e6db74",number:"#ae81ff",keyword:"#f92672",function:"#a6e22e",variable:"#f8f8f2",operator:"#f92672",type:"#66d9ef",tag:"#f92672",attr:"#a6e22e",default:"#f8f8f2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(39, 40, 34, 0.2)",base:"0 1px 3px 0 rgba(39, 40, 34, 0.3), 0 1px 2px 0 rgba(39, 40, 34, 0.2)",lg:"0 10px 15px -3px rgba(39, 40, 34, 0.3), 0 4px 6px -2px rgba(39, 40, 34, 0.2)"}},U0={name:"nord",colors:{primary:"#88c0d0",secondary:"#81a1c1",accent:"#b48ead",success:"#a3be8c",warning:"#ebcb8b",error:"#bf616a",info:"#88c0d0",light:"#eceff4",dark:"#2e3440",muted:"#4c566a",highlight:"#434c5e",text:{primary:"#eceff4",secondary:"#d8dee9",muted:"#4c566a",light:"#ffffff"},background:{primary:"#2e3440",secondary:"#3b4252",dark:"#242933"},border:{light:"#434c5e",dark:"#000000"},syntax:{comment:"#616e88",string:"#a3be8c",number:"#b48ead",keyword:"#81a1c1",function:"#88c0d0",variable:"#d8dee9",operator:"#81a1c1",type:"#8fbcbb",tag:"#81a1c1",attr:"#8fbcbb",default:"#eceff4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(46, 52, 64, 0.2)",base:"0 1px 3px 0 rgba(46, 52, 64, 0.3), 0 1px 2px 0 rgba(46, 52, 64, 0.2)",lg:"0 10px 15px -3px rgba(46, 52, 64, 0.3), 0 4px 6px -2px rgba(46, 52, 64, 0.2)"}},j0={name:"solarized-light",colors:{primary:"#268bd2",secondary:"#2aa198",accent:"#d33682",success:"#859900",warning:"#cb4b16",error:"#dc322f",info:"#268bd2",light:"#fdf6e3",dark:"#073642",muted:"#93a1a1",highlight:"#eee8d5",text:{primary:"#586e75",secondary:"#657b83",muted:"#93a1a1",light:"#002b36"},background:{primary:"#fdf6e3",secondary:"#eee8d5",dark:"#073642"},border:{light:"#eee8d5",dark:"#073642"},syntax:{comment:"#93a1a1",string:"#2aa198",number:"#d33682",keyword:"#859900",function:"#268bd2",variable:"#657b83",operator:"#859900",type:"#b58900",tag:"#268bd2",attr:"#93a1a1",default:"#657b83"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(253, 246, 227, 0.2)",base:"0 1px 3px 0 rgba(253, 246, 227, 0.3), 0 1px 2px 0 rgba(253, 246, 227, 0.2)",lg:"0 10px 15px -3px rgba(253, 246, 227, 0.3), 0 4px 6px -2px rgba(253, 246, 227, 0.2)"}},J0={name:"solarized-dark",colors:{primary:"#268bd2",secondary:"#2aa198",accent:"#d33682",success:"#859900",warning:"#b58900",error:"#dc322f",info:"#268bd2",light:"#fdf6e3",dark:"#073642",muted:"#586e75",highlight:"#073642",text:{primary:"#839496",secondary:"#93a1a1",muted:"#586e75",light:"#fdf6e3"},background:{primary:"#002b36",secondary:"#073642",dark:"#001f29"},border:{light:"#073642",dark:"#000000"},syntax:{comment:"#586e75",string:"#2aa198",number:"#d33682",keyword:"#859900",function:"#268bd2",variable:"#839496",operator:"#859900",type:"#b58900",tag:"#268bd2",attr:"#93a1a1",default:"#839496"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 43, 54, 0.2)",base:"0 1px 3px 0 rgba(0, 43, 54, 0.3), 0 1px 2px 0 rgba(0, 43, 54, 0.2)",lg:"0 10px 15px -3px rgba(0, 43, 54, 0.3), 0 4px 6px -2px rgba(0, 43, 54, 0.2)"}},H0={name:"tokyo-night",colors:{primary:"#7aa2f7",secondary:"#7dcfff",accent:"#bb9af7",success:"#9ece6a",warning:"#e0af68",error:"#f7768e",info:"#7aa2f7",light:"#c0caf5",dark:"#1a1b26",muted:"#565f89",highlight:"#292e42",text:{primary:"#a9b1d6",secondary:"#c0caf5",muted:"#565f89",light:"#ffffff"},background:{primary:"#1a1b26",secondary:"#292e42",dark:"#16161e"},border:{light:"#292e42",dark:"#000000"},syntax:{comment:"#565f89",string:"#9ece6a",number:"#ff9e64",keyword:"#bb9af7",function:"#7aa2f7",variable:"#c0caf5",operator:"#89ddff",type:"#7dcfff",tag:"#f7768e",attr:"#7aa2f7",default:"#a9b1d6"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(26, 27, 38, 0.2)",base:"0 1px 3px 0 rgba(26, 27, 38, 0.3), 0 1px 2px 0 rgba(26, 27, 38, 0.2)",lg:"0 10px 15px -3px rgba(26, 27, 38, 0.3), 0 4px 6px -2px rgba(26, 27, 38, 0.2)"}},z0={name:"github",colors:{primary:"#0969da",secondary:"#8250df",accent:"#bc4c00",success:"#1a7f37",warning:"#bc4c00",error:"#d1242f",info:"#0969da",light:"#f6f8fa",dark:"#24292f",muted:"#6e7781",highlight:"#ddf4ff",text:{primary:"#24292f",secondary:"#57606a",muted:"#6e7781",light:"#ffffff"},background:{primary:"#ffffff",secondary:"#f6f8fa",dark:"#24292f"},border:{light:"#d0d7de",dark:"#24292f"},syntax:{comment:"#6e7781",string:"#0a3069",number:"#0550ae",keyword:"#cf222e",function:"#8250df",variable:"#24292f",operator:"#cf222e",type:"#0550ae",tag:"#116329",attr:"#0550ae",default:"#24292f"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(255, 255, 255, 0.2)",base:"0 1px 3px 0 rgba(255, 255, 255, 0.3), 0 1px 2px 0 rgba(255, 255, 255, 0.2)",lg:"0 10px 15px -3px rgba(255, 255, 255, 0.3), 0 4px 6px -2px rgba(255, 255, 255, 0.2)"}},_0={name:"gruvbox",colors:{primary:"#83a598",secondary:"#8ec07c",accent:"#d3869b",success:"#b8bb26",warning:"#fabd2f",error:"#fb4934",info:"#83a598",light:"#fbf1c7",dark:"#282828",muted:"#928374",highlight:"#3c3836",text:{primary:"#ebdbb2",secondary:"#d5c4a1",muted:"#928374",light:"#ffffff"},background:{primary:"#282828",secondary:"#3c3836",dark:"#1d2021"},border:{light:"#3c3836",dark:"#000000"},syntax:{comment:"#928374",string:"#b8bb26",number:"#d3869b",keyword:"#fb4934",function:"#8ec07c",variable:"#ebdbb2",operator:"#fe8019",type:"#fabd2f",tag:"#fb4934",attr:"#b8bb26",default:"#ebdbb2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 40, 40, 0.2)",base:"0 1px 3px 0 rgba(40, 40, 40, 0.3), 0 1px 2px 0 rgba(40, 40, 40, 0.2)",lg:"0 10px 15px -3px rgba(40, 40, 40, 0.3), 0 4px 6px -2px rgba(40, 40, 40, 0.2)"}},W0={name:"one-dark",colors:{primary:"#61afef",secondary:"#c678dd",accent:"#e5c07b",success:"#98c379",warning:"#e5c07b",error:"#e06c75",info:"#56b6c2",light:"#abb2bf",dark:"#282c34",muted:"#5c6370",highlight:"#3e4451",text:{primary:"#abb2bf",secondary:"#c6c8d0",muted:"#5c6370",light:"#ffffff"},background:{primary:"#282c34",secondary:"#3e4451",dark:"#21252b"},border:{light:"#3e4451",dark:"#000000"},syntax:{comment:"#5c6370",string:"#98c379",number:"#d19a66",keyword:"#c678dd",function:"#61afef",variable:"#e06c75",operator:"#56b6c2",type:"#e5c07b",tag:"#e06c75",attr:"#d19a66",default:"#abb2bf"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 44, 52, 0.2)",base:"0 1px 3px 0 rgba(40, 44, 52, 0.3), 0 1px 2px 0 rgba(40, 44, 52, 0.2)",lg:"0 10px 15px -3px rgba(40, 44, 52, 0.3), 0 4px 6px -2px rgba(40, 44, 52, 0.2)"}},u0={name:"catppuccin",colors:{primary:"#89b4fa",secondary:"#cba6f7",accent:"#f5c2e7",success:"#a6e3a1",warning:"#f9e2af",error:"#f38ba8",info:"#89dceb",light:"#cdd6f4",dark:"#11111b",muted:"#6c7086",highlight:"#181825",text:{primary:"#cdd6f4",secondary:"#bac2de",muted:"#6c7086",light:"#ffffff"},background:{primary:"#1e1e2e",secondary:"#181825",dark:"#11111b"},border:{light:"#181825",dark:"#000000"},syntax:{comment:"#6c7086",string:"#a6e3a1",number:"#fab387",keyword:"#cba6f7",function:"#89b4fa",variable:"#cdd6f4",operator:"#89dceb",type:"#f5c2e7",tag:"#f38ba8",attr:"#89b4fa",default:"#cdd6f4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(30, 30, 46, 0.2)",base:"0 1px 3px 0 rgba(30, 30, 46, 0.3), 0 1px 2px 0 rgba(30, 30, 46, 0.2)",lg:"0 10px 15px -3px rgba(30, 30, 46, 0.3), 0 4px 6px -2px rgba(30, 30, 46, 0.2)"}},K0={name:"rose-pine",colors:{primary:"#9ccfd8",secondary:"#c4a7e7",accent:"#f6c177",success:"#31748f",warning:"#f6c177",error:"#eb6f92",info:"#9ccfd8",light:"#e0def4",dark:"#191724",muted:"#6e6a86",highlight:"#1f1d2e",text:{primary:"#e0def4",secondary:"#cecacd",muted:"#6e6a86",light:"#ffffff"},background:{primary:"#191724",secondary:"#1f1d2e",dark:"#12101a"},border:{light:"#1f1d2e",dark:"#000000"},syntax:{comment:"#6e6a86",string:"#9ccfd8",number:"#ea9a97",keyword:"#c4a7e7",function:"#31748f",variable:"#e0def4",operator:"#f6c177",type:"#9ccfd8",tag:"#eb6f92",attr:"#f6c177",default:"#e0def4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(25, 23, 36, 0.2)",base:"0 1px 3px 0 rgba(25, 23, 36, 0.3), 0 1px 2px 0 rgba(25, 23, 36, 0.2)",lg:"0 10px 15px -3px rgba(25, 23, 36, 0.3), 0 4px 6px -2px rgba(25, 23, 36, 0.2)"}},q0={name:"kanagawa",colors:{primary:"#8ba4b0",secondary:"#a292a3",accent:"#c47fd5",success:"#76946a",warning:"#c0a36e",error:"#c34043",info:"#7e9cd8",light:"#dcd7ba",dark:"#1f1f28",muted:"#727169",highlight:"#2a2a37",text:{primary:"#dcd7ba",secondary:"#c8c093",muted:"#727169",light:"#ffffff"},background:{primary:"#1f1f28",secondary:"#2a2a37",dark:"#16161d"},border:{light:"#2a2a37",dark:"#000000"},syntax:{comment:"#727169",string:"#98bb6c",number:"#d27e99",keyword:"#957fb8",function:"#7e9cd8",variable:"#dcd7ba",operator:"#c0a36e",type:"#7aa89f",tag:"#c34043",attr:"#7fb4ca",default:"#dcd7ba"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(31, 31, 40, 0.2)",base:"0 1px 3px 0 rgba(31, 31, 40, 0.3), 0 1px 2px 0 rgba(31, 31, 40, 0.2)",lg:"0 10px 15px -3px rgba(31, 31, 40, 0.3), 0 4px 6px -2px rgba(31, 31, 40, 0.2)"}},g=[{id:"ayu-dark",label:"Ayu Dark",theme:G0,tags:["dark","popular"]},{id:"dracula",label:"Dracula",theme:V0,tags:["dark","popular"]},{id:"monokai",label:"Monokai",theme:F0,tags:["dark","classic"]},{id:"nord",label:"Nord",theme:U0,tags:["dark","minimal"]},{id:"solarized-light",label:"Solarized Light",theme:j0,tags:["light"]},{id:"solarized-dark",label:"Solarized Dark",theme:J0,tags:["dark"]},{id:"tokyo-night",label:"Tokyo Night",theme:H0,tags:["dark","popular"]},{id:"github",label:"GitHub",theme:z0,tags:["light","minimal"]},{id:"gruvbox",label:"Gruvbox",theme:_0,tags:["dark","warm"]},{id:"one-dark",label:"One Dark",theme:W0,tags:["dark","popular"]},{id:"catppuccin",label:"Catppuccin",theme:u0,tags:["dark","pastel"]},{id:"rose-pine",label:"Rose Pine",theme:K0,tags:["dark","elegant"]},{id:"kanagawa",label:"Kanagawa",theme:q0,tags:["dark","japanese"]}];var c={primary:"#0066cc",secondary:"#6c757d",accent:"#e83e8c",success:"#28a745",warning:"#ffc107",error:"#dc3545",info:"#17a2b8",light:"#f8f9fa",dark:"#343a40",muted:"#6c757d",highlight:"#fff3cd",text:{primary:"#212529",secondary:"#6c757d",muted:"#6c757d",light:"#ffffff"},background:{primary:"#ffffff",secondary:"#f8f9fa",dark:"#343a40"},border:{light:"#dee2e6",dark:"#495057"},syntax:{comment:"#6c757d",string:"#28a745",number:"#e83e8c",keyword:"#007bff",function:"#17a2b8",variable:"#495057",operator:"#ffc107",type:"#007bff",tag:"#dc3545",attr:"#ffc107",default:"#212529"}},T={name:"default",colors:c,spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)"}},w0={...T,name:"dark",colors:{...c,text:{primary:"#ffffff",secondary:"#e2e8f0",muted:"#94a3b8",light:"#000000"},background:{primary:"#1e293b",secondary:"#334155",dark:"#0f172a"},border:{light:"#475569",dark:"#64748b"},syntax:{comment:"#94a3b8",string:"#34d399",number:"#f472b6",keyword:"#60a5fa",function:"#06b6d4",variable:"#e2e8f0",operator:"#fbbf24",type:"#60a5fa",tag:"#fb7185",attr:"#fbbf24",default:"#ffffff"}}};class i{currentTheme=T;themes=new Map;constructor(){this.themes.set("default",T),this.themes.set("dark",w0);for(let X of g)this.themes.set(X.id,X.theme)}setTheme(X){let Z=this.themes.get(X);if(Z)this.currentTheme=Z;else throw Error(`Theme '${X}' not found`)}getTheme(){return this.currentTheme}getAvailableThemes(){return Array.from(this.themes.keys())}getCurrentThemeName(){return this.currentTheme.name}getThemeByName(X){return this.themes.get(X)}hasTheme(X){return this.themes.has(X)}}var o=new i;var O0={initializationStatus:"idle",initializationError:null,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null,tasks:[],awaitingSecondCtrlC:!1,thinkingModeEnabled:!1,subagentProgress:null},C=(X)=>({...O0,actions:{setInitializationStatus:(Z)=>{X((Q)=>({app:{...Q.app,initializationStatus:Z}}))},setInitializationError:(Z)=>{X((Q)=>({app:{...Q.app,initializationError:Z}}))},setActiveModal:(Z)=>{X((Q)=>({app:{...Q.app,activeModal:Z}}))},showSessionSelector:(Z,Q="resume")=>{X((Y)=>({app:{...Y.app,activeModal:"sessionSelector",sessionSelectorData:{intent:Q,sessions:Z}}}))},showModelEditWizard:(Z)=>{X((Q)=>({app:{...Q.app,activeModal:"modelEditWizard",modelEditorTarget:Z}}))},closeModal:()=>{X((Z)=>({app:{...Z.app,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null}}))},setTasks:(Z)=>{X((Q)=>({app:{...Q.app,tasks:Z}}))},updateTask:(Z)=>{X((Q)=>({app:{...Q.app,tasks:Q.app.tasks.map((Y)=>Y.id===Z.id?Z:Y)}}))},setAwaitingSecondCtrlC:(Z)=>{X((Q)=>({app:{...Q.app,awaitingSecondCtrlC:Z}}))},setThinkingModeEnabled:(Z)=>{X((Q)=>({app:{...Q.app,thinkingModeEnabled:Z}}))},toggleThinkingMode:()=>{X((Z)=>({app:{...Z.app,thinkingModeEnabled:!Z.app.thinkingModeEnabled}}))},startSubagentProgress:(Z,Q,Y)=>{X(($)=>({app:{...$.app,subagentProgress:{id:Z,type:Q,description:Y,status:"running",startTime:Date.now()}}}))},updateSubagentTool:(Z)=>{X((Q)=>{if(!Q.app.subagentProgress)return Q;return{app:{...Q.app,subagentProgress:{...Q.app.subagentProgress,currentTool:Z}}}})},completeSubagentProgress:(Z)=>{X((Q)=>{if(!Q.app.subagentProgress)return Q;return{app:{...Q.app,subagentProgress:{...Q.app.subagentProgress,status:Z?"completed":"failed",currentTool:void 0}}}}),setTimeout(()=>{X((Q)=>({app:{...Q.app,subagentProgress:null}}))},1500)}}});var p0={isProcessing:!1,abortController:null,pendingCommands:[],recoveredSteeringCount:0},S=(X,Z)=>({...p0,actions:{setProcessing:(Q)=>{X((Y)=>({command:{...Y.command,isProcessing:Q}}))},createAbortController:()=>{let Q=Z().command.abortController;if(Q&&!Q.signal.aborted)Q.abort("interrupted-by-new-command");let Y=new AbortController;return X(($)=>({command:{...$.command,abortController:Y}})),Y},getAbortController:()=>{return Z().command.abortController},clearAbortController:(Q)=>{let Y=Z().command.abortController;if(Q!==void 0&&Y!==Q)return;X(($)=>({command:{...$.command,abortController:null}}))},abort:(Q)=>{let{abortController:Y}=Z().command;if(Y&&!Y.signal.aborted)Y.abort(Q??"user-cancel");X(($)=>({command:{...$.command,isProcessing:!1,pendingCommands:[]}}))},enqueueCommand:(Q)=>{X((Y)=>({command:{...Y.command,pendingCommands:[...Y.command.pendingCommands,Q]}}))},dequeueCommand:()=>{let{pendingCommands:Q}=Z().command;if(Q.length===0)return;let[Y,...$]=Q;return X((G)=>({command:{...G.command,pendingCommands:$}})),Y},clearQueue:()=>{X((Q)=>({command:{...Q.command,pendingCommands:[]}}))},setRecoveredSteeringCount:(Q)=>{X((Y)=>({command:{...Y.command,recoveredSteeringCount:Math.max(0,Q)}}))}}});var x0={config:null},f=(X)=>({...x0,actions:{setConfig:(Z)=>{X((Q)=>({config:{...Q.config,config:Z}}))},updateConfig:(Z)=>{X((Q)=>{if(!Q.config.config)throw Error(`[ConfigSlice] Config not initialized. Cannot update: ${JSON.stringify(Z)}`);return{config:{...Q.config,config:{...Q.config.config,...Z}}}})}}});var P0={currentFocus:"main-input",previousFocus:null},b=(X)=>({...P0,actions:{setFocus:(Z)=>{X((Q)=>({focus:{...Q.focus,currentFocus:Z,previousFocus:Q.focus.currentFocus}}))},restorePreviousFocus:()=>{X((Z)=>({focus:{...Z.focus,currentFocus:Z.focus.previousFocus||"main-input",previousFocus:null}}))}}});var h={"deepseek-chat":{input:0.27,output:1.1},"deepseek-coder":{input:0.14,output:0.28},"deepseek-reasoner":{input:0.55,output:2.19},"deepseek-v3":{input:0.27,output:1.1},"deepseek-v4":{input:0.27,output:1.1},"deepseek-v4-pro":{input:0.27,output:1.1},"deepseek-v4-0724":{input:0.27,output:1.1},"gpt-4o":{input:2.5,output:10},"gpt-4o-mini":{input:0.15,output:0.6},"gpt-4.1":{input:2,output:8},"gpt-4.1-mini":{input:0.4,output:1.6},"gpt-4.1-nano":{input:0.1,output:0.4},"gpt-4-turbo":{input:10,output:30},"gpt-4":{input:30,output:60},"gpt-3.5-turbo":{input:0.5,output:1.5},o1:{input:15,output:60},"o1-mini":{input:3,output:12},"o1-pro":{input:150,output:600},o3:{input:10,output:40},"o3-mini":{input:1.1,output:4.4},"o4-mini":{input:1.1,output:4.4},"claude-3.5-sonnet":{input:3,output:15,cacheRead:0.3,cacheWrite:3.75},"claude-3.5-haiku":{input:0.8,output:4,cacheRead:0.08,cacheWrite:1},"claude-sonnet-4":{input:3,output:15,cacheRead:0.3,cacheWrite:3.75},"claude-4-opus":{input:15,output:75,cacheRead:1.5,cacheWrite:18.75},"claude-opus-4":{input:15,output:75,cacheRead:1.5,cacheWrite:18.75},"qwen-plus":{input:0.8,output:2},"qwen-max":{input:2,output:6},"qwen-turbo":{input:0.3,output:0.6},"qwen3-235b":{input:2,output:8},"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:0.15,output:0.6}};function v0(X){let Z=X.toLowerCase();if(h[Z])return h[Z];for(let[Q,Y]of Object.entries(h))if(Z.includes(Q)||Q.includes(Z))return Y;return}function l(X,Z,Q,Y,$){let G=v0(X);if(!G)return 0;let j=Z/1e6*G.input+Q/1e6*G.output;if(Y&&G.cacheRead)j+=Y/1e6*G.cacheRead;if($&&G.cacheWrite)j+=$/1e6*G.cacheWrite;return Math.round(j*1e6)/1e6}var U={codeBlock:/^```(\w+)?\s*$/,heading:/^ *(#{1,4}) +(.+)/,blockquote:/^(>+)\s?(.*)/,ulItem:/^([ \t]*)([-*+]) +(.+)/,olItem:/^([ \t]*)(\d+)\. +(.+)/,hr:/^ *([-*_] *){3,} *$/,table:/^\|(.+)\|$/,tableSeparator:/^\|[\s]*:?-+:?[\s]*(\|[\s]*:?-+:?[\s]*)+\|?$/,diffStart:/^<<<DIFF>>>$/,diffEnd:/^<<<\/DIFF>>>$/,commandMessage:/<command-message>(.*?)<\/command-message>/};function r0(X){let Z=[],Q=X.split(/\r?\n/),Y=!1,$=[],G=null,j=0,W=!1,H=[],u=[],q=!1,O=[],x=!1,z=[],F=0,V=!0;for(let p=0;p<Q.length;p++){let _=Q[p];if(q){if(_.match(U.diffEnd)){try{let K=JSON.parse(O.join(`
1
+ import{Fa as Y0,Ha as w}from"./chunk-r1spf93b.js";import{vb as Q0}from"./chunk-t70aqrm4.js";import{nanoid as L0}from"nanoid";import{devtools as R0,subscribeWithSelector as I0}from"zustand/middleware";import{createStore as N0}from"zustand/vanilla";var G0={name:"ayu-dark",colors:{primary:"#ffcc66",secondary:"#bae67e",accent:"#73d0ff",success:"#bae67e",warning:"#ffcc66",error:"#ff3333",info:"#73d0ff",light:"#f0f0f0",dark:"#000000",muted:"#5c6773",highlight:"#2d323b",text:{primary:"#e6e1cf",secondary:"#bae67e",muted:"#5c6773",light:"#ffffff"},background:{primary:"#0f1419",secondary:"#14191f",dark:"#000000"},border:{light:"#2d323b",dark:"#000000"},syntax:{comment:"#5c6773",string:"#bae67e",number:"#ffcc66",keyword:"#ff8f40",function:"#73d0ff",variable:"#e6e1cf",operator:"#f29e74",type:"#73d0ff",tag:"#ff8f40",attr:"#ffd580",default:"#e6e1cf"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.2)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 2px 0 rgba(0, 0, 0, 0.2)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.2)"}},V0={name:"dracula",colors:{primary:"#bd93f9",secondary:"#ffb86c",accent:"#ff79c6",success:"#50fa7b",warning:"#f1fa8c",error:"#ff5555",info:"#8be9fd",light:"#f8f8f2",dark:"#282a36",muted:"#6272a4",highlight:"#44475a",text:{primary:"#f8f8f2",secondary:"#f1fa8c",muted:"#6272a4",light:"#ffffff"},background:{primary:"#282a36",secondary:"#44475a",dark:"#21222c"},border:{light:"#44475a",dark:"#000000"},syntax:{comment:"#6272a4",string:"#f1fa8c",number:"#bd93f9",keyword:"#ff79c6",function:"#50fa7b",variable:"#f8f8f2",operator:"#ff79c6",type:"#8be9fd",tag:"#ff79c6",attr:"#50fa7b",default:"#f8f8f2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 42, 54, 0.2)",base:"0 1px 3px 0 rgba(40, 42, 54, 0.3), 0 1px 2px 0 rgba(40, 42, 54, 0.2)",lg:"0 10px 15px -3px rgba(40, 42, 54, 0.3), 0 4px 6px -2px rgba(40, 42, 54, 0.2)"}},F0={name:"monokai",colors:{primary:"#66d9ef",secondary:"#a6e22e",accent:"#f92672",success:"#a6e22e",warning:"#e6db74",error:"#f92672",info:"#66d9ef",light:"#f8f8f2",dark:"#272822",muted:"#75715e",highlight:"#3e3d32",text:{primary:"#f8f8f2",secondary:"#e6db74",muted:"#75715e",light:"#ffffff"},background:{primary:"#272822",secondary:"#3e3d32",dark:"#1e1f1c"},border:{light:"#3e3d32",dark:"#000000"},syntax:{comment:"#75715e",string:"#e6db74",number:"#ae81ff",keyword:"#f92672",function:"#a6e22e",variable:"#f8f8f2",operator:"#f92672",type:"#66d9ef",tag:"#f92672",attr:"#a6e22e",default:"#f8f8f2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(39, 40, 34, 0.2)",base:"0 1px 3px 0 rgba(39, 40, 34, 0.3), 0 1px 2px 0 rgba(39, 40, 34, 0.2)",lg:"0 10px 15px -3px rgba(39, 40, 34, 0.3), 0 4px 6px -2px rgba(39, 40, 34, 0.2)"}},U0={name:"nord",colors:{primary:"#88c0d0",secondary:"#81a1c1",accent:"#b48ead",success:"#a3be8c",warning:"#ebcb8b",error:"#bf616a",info:"#88c0d0",light:"#eceff4",dark:"#2e3440",muted:"#4c566a",highlight:"#434c5e",text:{primary:"#eceff4",secondary:"#d8dee9",muted:"#4c566a",light:"#ffffff"},background:{primary:"#2e3440",secondary:"#3b4252",dark:"#242933"},border:{light:"#434c5e",dark:"#000000"},syntax:{comment:"#616e88",string:"#a3be8c",number:"#b48ead",keyword:"#81a1c1",function:"#88c0d0",variable:"#d8dee9",operator:"#81a1c1",type:"#8fbcbb",tag:"#81a1c1",attr:"#8fbcbb",default:"#eceff4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(46, 52, 64, 0.2)",base:"0 1px 3px 0 rgba(46, 52, 64, 0.3), 0 1px 2px 0 rgba(46, 52, 64, 0.2)",lg:"0 10px 15px -3px rgba(46, 52, 64, 0.3), 0 4px 6px -2px rgba(46, 52, 64, 0.2)"}},j0={name:"solarized-light",colors:{primary:"#268bd2",secondary:"#2aa198",accent:"#d33682",success:"#859900",warning:"#cb4b16",error:"#dc322f",info:"#268bd2",light:"#fdf6e3",dark:"#073642",muted:"#93a1a1",highlight:"#eee8d5",text:{primary:"#586e75",secondary:"#657b83",muted:"#93a1a1",light:"#002b36"},background:{primary:"#fdf6e3",secondary:"#eee8d5",dark:"#073642"},border:{light:"#eee8d5",dark:"#073642"},syntax:{comment:"#93a1a1",string:"#2aa198",number:"#d33682",keyword:"#859900",function:"#268bd2",variable:"#657b83",operator:"#859900",type:"#b58900",tag:"#268bd2",attr:"#93a1a1",default:"#657b83"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(253, 246, 227, 0.2)",base:"0 1px 3px 0 rgba(253, 246, 227, 0.3), 0 1px 2px 0 rgba(253, 246, 227, 0.2)",lg:"0 10px 15px -3px rgba(253, 246, 227, 0.3), 0 4px 6px -2px rgba(253, 246, 227, 0.2)"}},J0={name:"solarized-dark",colors:{primary:"#268bd2",secondary:"#2aa198",accent:"#d33682",success:"#859900",warning:"#b58900",error:"#dc322f",info:"#268bd2",light:"#fdf6e3",dark:"#073642",muted:"#586e75",highlight:"#073642",text:{primary:"#839496",secondary:"#93a1a1",muted:"#586e75",light:"#fdf6e3"},background:{primary:"#002b36",secondary:"#073642",dark:"#001f29"},border:{light:"#073642",dark:"#000000"},syntax:{comment:"#586e75",string:"#2aa198",number:"#d33682",keyword:"#859900",function:"#268bd2",variable:"#839496",operator:"#859900",type:"#b58900",tag:"#268bd2",attr:"#93a1a1",default:"#839496"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 43, 54, 0.2)",base:"0 1px 3px 0 rgba(0, 43, 54, 0.3), 0 1px 2px 0 rgba(0, 43, 54, 0.2)",lg:"0 10px 15px -3px rgba(0, 43, 54, 0.3), 0 4px 6px -2px rgba(0, 43, 54, 0.2)"}},H0={name:"tokyo-night",colors:{primary:"#7aa2f7",secondary:"#7dcfff",accent:"#bb9af7",success:"#9ece6a",warning:"#e0af68",error:"#f7768e",info:"#7aa2f7",light:"#c0caf5",dark:"#1a1b26",muted:"#565f89",highlight:"#292e42",text:{primary:"#a9b1d6",secondary:"#c0caf5",muted:"#565f89",light:"#ffffff"},background:{primary:"#1a1b26",secondary:"#292e42",dark:"#16161e"},border:{light:"#292e42",dark:"#000000"},syntax:{comment:"#565f89",string:"#9ece6a",number:"#ff9e64",keyword:"#bb9af7",function:"#7aa2f7",variable:"#c0caf5",operator:"#89ddff",type:"#7dcfff",tag:"#f7768e",attr:"#7aa2f7",default:"#a9b1d6"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(26, 27, 38, 0.2)",base:"0 1px 3px 0 rgba(26, 27, 38, 0.3), 0 1px 2px 0 rgba(26, 27, 38, 0.2)",lg:"0 10px 15px -3px rgba(26, 27, 38, 0.3), 0 4px 6px -2px rgba(26, 27, 38, 0.2)"}},z0={name:"github",colors:{primary:"#0969da",secondary:"#8250df",accent:"#bc4c00",success:"#1a7f37",warning:"#bc4c00",error:"#d1242f",info:"#0969da",light:"#f6f8fa",dark:"#24292f",muted:"#6e7781",highlight:"#ddf4ff",text:{primary:"#24292f",secondary:"#57606a",muted:"#6e7781",light:"#ffffff"},background:{primary:"#ffffff",secondary:"#f6f8fa",dark:"#24292f"},border:{light:"#d0d7de",dark:"#24292f"},syntax:{comment:"#6e7781",string:"#0a3069",number:"#0550ae",keyword:"#cf222e",function:"#8250df",variable:"#24292f",operator:"#cf222e",type:"#0550ae",tag:"#116329",attr:"#0550ae",default:"#24292f"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(255, 255, 255, 0.2)",base:"0 1px 3px 0 rgba(255, 255, 255, 0.3), 0 1px 2px 0 rgba(255, 255, 255, 0.2)",lg:"0 10px 15px -3px rgba(255, 255, 255, 0.3), 0 4px 6px -2px rgba(255, 255, 255, 0.2)"}},_0={name:"gruvbox",colors:{primary:"#83a598",secondary:"#8ec07c",accent:"#d3869b",success:"#b8bb26",warning:"#fabd2f",error:"#fb4934",info:"#83a598",light:"#fbf1c7",dark:"#282828",muted:"#928374",highlight:"#3c3836",text:{primary:"#ebdbb2",secondary:"#d5c4a1",muted:"#928374",light:"#ffffff"},background:{primary:"#282828",secondary:"#3c3836",dark:"#1d2021"},border:{light:"#3c3836",dark:"#000000"},syntax:{comment:"#928374",string:"#b8bb26",number:"#d3869b",keyword:"#fb4934",function:"#8ec07c",variable:"#ebdbb2",operator:"#fe8019",type:"#fabd2f",tag:"#fb4934",attr:"#b8bb26",default:"#ebdbb2"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 40, 40, 0.2)",base:"0 1px 3px 0 rgba(40, 40, 40, 0.3), 0 1px 2px 0 rgba(40, 40, 40, 0.2)",lg:"0 10px 15px -3px rgba(40, 40, 40, 0.3), 0 4px 6px -2px rgba(40, 40, 40, 0.2)"}},W0={name:"one-dark",colors:{primary:"#61afef",secondary:"#c678dd",accent:"#e5c07b",success:"#98c379",warning:"#e5c07b",error:"#e06c75",info:"#56b6c2",light:"#abb2bf",dark:"#282c34",muted:"#5c6370",highlight:"#3e4451",text:{primary:"#abb2bf",secondary:"#c6c8d0",muted:"#5c6370",light:"#ffffff"},background:{primary:"#282c34",secondary:"#3e4451",dark:"#21252b"},border:{light:"#3e4451",dark:"#000000"},syntax:{comment:"#5c6370",string:"#98c379",number:"#d19a66",keyword:"#c678dd",function:"#61afef",variable:"#e06c75",operator:"#56b6c2",type:"#e5c07b",tag:"#e06c75",attr:"#d19a66",default:"#abb2bf"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(40, 44, 52, 0.2)",base:"0 1px 3px 0 rgba(40, 44, 52, 0.3), 0 1px 2px 0 rgba(40, 44, 52, 0.2)",lg:"0 10px 15px -3px rgba(40, 44, 52, 0.3), 0 4px 6px -2px rgba(40, 44, 52, 0.2)"}},u0={name:"catppuccin",colors:{primary:"#89b4fa",secondary:"#cba6f7",accent:"#f5c2e7",success:"#a6e3a1",warning:"#f9e2af",error:"#f38ba8",info:"#89dceb",light:"#cdd6f4",dark:"#11111b",muted:"#6c7086",highlight:"#181825",text:{primary:"#cdd6f4",secondary:"#bac2de",muted:"#6c7086",light:"#ffffff"},background:{primary:"#1e1e2e",secondary:"#181825",dark:"#11111b"},border:{light:"#181825",dark:"#000000"},syntax:{comment:"#6c7086",string:"#a6e3a1",number:"#fab387",keyword:"#cba6f7",function:"#89b4fa",variable:"#cdd6f4",operator:"#89dceb",type:"#f5c2e7",tag:"#f38ba8",attr:"#89b4fa",default:"#cdd6f4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(30, 30, 46, 0.2)",base:"0 1px 3px 0 rgba(30, 30, 46, 0.3), 0 1px 2px 0 rgba(30, 30, 46, 0.2)",lg:"0 10px 15px -3px rgba(30, 30, 46, 0.3), 0 4px 6px -2px rgba(30, 30, 46, 0.2)"}},K0={name:"rose-pine",colors:{primary:"#9ccfd8",secondary:"#c4a7e7",accent:"#f6c177",success:"#31748f",warning:"#f6c177",error:"#eb6f92",info:"#9ccfd8",light:"#e0def4",dark:"#191724",muted:"#6e6a86",highlight:"#1f1d2e",text:{primary:"#e0def4",secondary:"#cecacd",muted:"#6e6a86",light:"#ffffff"},background:{primary:"#191724",secondary:"#1f1d2e",dark:"#12101a"},border:{light:"#1f1d2e",dark:"#000000"},syntax:{comment:"#6e6a86",string:"#9ccfd8",number:"#ea9a97",keyword:"#c4a7e7",function:"#31748f",variable:"#e0def4",operator:"#f6c177",type:"#9ccfd8",tag:"#eb6f92",attr:"#f6c177",default:"#e0def4"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(25, 23, 36, 0.2)",base:"0 1px 3px 0 rgba(25, 23, 36, 0.3), 0 1px 2px 0 rgba(25, 23, 36, 0.2)",lg:"0 10px 15px -3px rgba(25, 23, 36, 0.3), 0 4px 6px -2px rgba(25, 23, 36, 0.2)"}},q0={name:"kanagawa",colors:{primary:"#8ba4b0",secondary:"#a292a3",accent:"#c47fd5",success:"#76946a",warning:"#c0a36e",error:"#c34043",info:"#7e9cd8",light:"#dcd7ba",dark:"#1f1f28",muted:"#727169",highlight:"#2a2a37",text:{primary:"#dcd7ba",secondary:"#c8c093",muted:"#727169",light:"#ffffff"},background:{primary:"#1f1f28",secondary:"#2a2a37",dark:"#16161d"},border:{light:"#2a2a37",dark:"#000000"},syntax:{comment:"#727169",string:"#98bb6c",number:"#d27e99",keyword:"#957fb8",function:"#7e9cd8",variable:"#dcd7ba",operator:"#c0a36e",type:"#7aa89f",tag:"#c34043",attr:"#7fb4ca",default:"#dcd7ba"}},spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(31, 31, 40, 0.2)",base:"0 1px 3px 0 rgba(31, 31, 40, 0.3), 0 1px 2px 0 rgba(31, 31, 40, 0.2)",lg:"0 10px 15px -3px rgba(31, 31, 40, 0.3), 0 4px 6px -2px rgba(31, 31, 40, 0.2)"}},g=[{id:"ayu-dark",label:"Ayu Dark",theme:G0,tags:["dark","popular"]},{id:"dracula",label:"Dracula",theme:V0,tags:["dark","popular"]},{id:"monokai",label:"Monokai",theme:F0,tags:["dark","classic"]},{id:"nord",label:"Nord",theme:U0,tags:["dark","minimal"]},{id:"solarized-light",label:"Solarized Light",theme:j0,tags:["light"]},{id:"solarized-dark",label:"Solarized Dark",theme:J0,tags:["dark"]},{id:"tokyo-night",label:"Tokyo Night",theme:H0,tags:["dark","popular"]},{id:"github",label:"GitHub",theme:z0,tags:["light","minimal"]},{id:"gruvbox",label:"Gruvbox",theme:_0,tags:["dark","warm"]},{id:"one-dark",label:"One Dark",theme:W0,tags:["dark","popular"]},{id:"catppuccin",label:"Catppuccin",theme:u0,tags:["dark","pastel"]},{id:"rose-pine",label:"Rose Pine",theme:K0,tags:["dark","elegant"]},{id:"kanagawa",label:"Kanagawa",theme:q0,tags:["dark","japanese"]}];var c={primary:"#0066cc",secondary:"#6c757d",accent:"#e83e8c",success:"#28a745",warning:"#ffc107",error:"#dc3545",info:"#17a2b8",light:"#f8f9fa",dark:"#343a40",muted:"#6c757d",highlight:"#fff3cd",text:{primary:"#212529",secondary:"#6c757d",muted:"#6c757d",light:"#ffffff"},background:{primary:"#ffffff",secondary:"#f8f9fa",dark:"#343a40"},border:{light:"#dee2e6",dark:"#495057"},syntax:{comment:"#6c757d",string:"#28a745",number:"#e83e8c",keyword:"#007bff",function:"#17a2b8",variable:"#495057",operator:"#ffc107",type:"#007bff",tag:"#dc3545",attr:"#ffc107",default:"#212529"}},T={name:"default",colors:c,spacing:{xs:0.25,sm:0.5,md:1,lg:1.5,xl:2},typography:{fontSize:{xs:0.75,sm:0.875,base:1,lg:1.125,xl:1.25,"2xl":1.5,"3xl":1.875},fontWeight:{light:300,normal:400,medium:500,semibold:600,bold:700}},borderRadius:{sm:0.125,base:0.25,lg:0.5,xl:0.75},boxShadow:{sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)"}},w0={...T,name:"dark",colors:{...c,text:{primary:"#ffffff",secondary:"#e2e8f0",muted:"#94a3b8",light:"#000000"},background:{primary:"#1e293b",secondary:"#334155",dark:"#0f172a"},border:{light:"#475569",dark:"#64748b"},syntax:{comment:"#94a3b8",string:"#34d399",number:"#f472b6",keyword:"#60a5fa",function:"#06b6d4",variable:"#e2e8f0",operator:"#fbbf24",type:"#60a5fa",tag:"#fb7185",attr:"#fbbf24",default:"#ffffff"}}};class i{currentTheme=T;themes=new Map;constructor(){this.themes.set("default",T),this.themes.set("dark",w0);for(let X of g)this.themes.set(X.id,X.theme)}setTheme(X){let Z=this.themes.get(X);if(Z)this.currentTheme=Z;else throw Error(`Theme '${X}' not found`)}getTheme(){return this.currentTheme}getAvailableThemes(){return Array.from(this.themes.keys())}getCurrentThemeName(){return this.currentTheme.name}getThemeByName(X){return this.themes.get(X)}hasTheme(X){return this.themes.has(X)}}var o=new i;var O0={initializationStatus:"idle",initializationError:null,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null,tasks:[],awaitingSecondCtrlC:!1,thinkingModeEnabled:!1,subagentProgress:null},C=(X)=>({...O0,actions:{setInitializationStatus:(Z)=>{X((Q)=>({app:{...Q.app,initializationStatus:Z}}))},setInitializationError:(Z)=>{X((Q)=>({app:{...Q.app,initializationError:Z}}))},setActiveModal:(Z)=>{X((Q)=>({app:{...Q.app,activeModal:Z}}))},showSessionSelector:(Z,Q="resume")=>{X((Y)=>({app:{...Y.app,activeModal:"sessionSelector",sessionSelectorData:{intent:Q,sessions:Z}}}))},showModelEditWizard:(Z)=>{X((Q)=>({app:{...Q.app,activeModal:"modelEditWizard",modelEditorTarget:Z}}))},closeModal:()=>{X((Z)=>({app:{...Z.app,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null}}))},setTasks:(Z)=>{X((Q)=>({app:{...Q.app,tasks:Z}}))},updateTask:(Z)=>{X((Q)=>({app:{...Q.app,tasks:Q.app.tasks.map((Y)=>Y.id===Z.id?Z:Y)}}))},setAwaitingSecondCtrlC:(Z)=>{X((Q)=>({app:{...Q.app,awaitingSecondCtrlC:Z}}))},setThinkingModeEnabled:(Z)=>{X((Q)=>({app:{...Q.app,thinkingModeEnabled:Z}}))},toggleThinkingMode:()=>{X((Z)=>({app:{...Z.app,thinkingModeEnabled:!Z.app.thinkingModeEnabled}}))},startSubagentProgress:(Z,Q,Y)=>{X(($)=>({app:{...$.app,subagentProgress:{id:Z,type:Q,description:Y,status:"running",startTime:Date.now()}}}))},updateSubagentTool:(Z)=>{X((Q)=>{if(!Q.app.subagentProgress)return Q;return{app:{...Q.app,subagentProgress:{...Q.app.subagentProgress,currentTool:Z}}}})},completeSubagentProgress:(Z)=>{X((Q)=>{if(!Q.app.subagentProgress)return Q;return{app:{...Q.app,subagentProgress:{...Q.app.subagentProgress,status:Z?"completed":"failed",currentTool:void 0}}}}),setTimeout(()=>{X((Q)=>({app:{...Q.app,subagentProgress:null}}))},1500)}}});var p0={isProcessing:!1,abortController:null,pendingCommands:[],recoveredSteeringCount:0},S=(X,Z)=>({...p0,actions:{setProcessing:(Q)=>{X((Y)=>({command:{...Y.command,isProcessing:Q}}))},createAbortController:()=>{let Q=Z().command.abortController;if(Q&&!Q.signal.aborted)Q.abort("interrupted-by-new-command");let Y=new AbortController;return X(($)=>({command:{...$.command,abortController:Y}})),Y},getAbortController:()=>{return Z().command.abortController},clearAbortController:(Q)=>{let Y=Z().command.abortController;if(Q!==void 0&&Y!==Q)return;X(($)=>({command:{...$.command,abortController:null}}))},abort:(Q)=>{let{abortController:Y}=Z().command;if(Y&&!Y.signal.aborted)Y.abort(Q??"user-cancel");X(($)=>({command:{...$.command,isProcessing:!1,pendingCommands:[]}}))},enqueueCommand:(Q)=>{X((Y)=>({command:{...Y.command,pendingCommands:[...Y.command.pendingCommands,Q]}}))},dequeueCommand:()=>{let{pendingCommands:Q}=Z().command;if(Q.length===0)return;let[Y,...$]=Q;return X((G)=>({command:{...G.command,pendingCommands:$}})),Y},clearQueue:()=>{X((Q)=>({command:{...Q.command,pendingCommands:[]}}))},setRecoveredSteeringCount:(Q)=>{X((Y)=>({command:{...Y.command,recoveredSteeringCount:Math.max(0,Q)}}))}}});var x0={config:null},f=(X)=>({...x0,actions:{setConfig:(Z)=>{X((Q)=>({config:{...Q.config,config:Z}}))},updateConfig:(Z)=>{X((Q)=>{if(!Q.config.config)throw Error(`[ConfigSlice] Config not initialized. Cannot update: ${JSON.stringify(Z)}`);return{config:{...Q.config,config:{...Q.config.config,...Z}}}})}}});var P0={currentFocus:"main-input",previousFocus:null},b=(X)=>({...P0,actions:{setFocus:(Z)=>{X((Q)=>({focus:{...Q.focus,currentFocus:Z,previousFocus:Q.focus.currentFocus}}))},restorePreviousFocus:()=>{X((Z)=>({focus:{...Z.focus,currentFocus:Z.focus.previousFocus||"main-input",previousFocus:null}}))}}});var h={"deepseek-chat":{input:0.27,output:1.1},"deepseek-coder":{input:0.14,output:0.28},"deepseek-reasoner":{input:0.55,output:2.19},"deepseek-v3":{input:0.27,output:1.1},"deepseek-v4":{input:0.27,output:1.1},"deepseek-v4-pro":{input:0.27,output:1.1},"deepseek-v4-0724":{input:0.27,output:1.1},"gpt-4o":{input:2.5,output:10},"gpt-4o-mini":{input:0.15,output:0.6},"gpt-4.1":{input:2,output:8},"gpt-4.1-mini":{input:0.4,output:1.6},"gpt-4.1-nano":{input:0.1,output:0.4},"gpt-4-turbo":{input:10,output:30},"gpt-4":{input:30,output:60},"gpt-3.5-turbo":{input:0.5,output:1.5},o1:{input:15,output:60},"o1-mini":{input:3,output:12},"o1-pro":{input:150,output:600},o3:{input:10,output:40},"o3-mini":{input:1.1,output:4.4},"o4-mini":{input:1.1,output:4.4},"claude-3.5-sonnet":{input:3,output:15,cacheRead:0.3,cacheWrite:3.75},"claude-3.5-haiku":{input:0.8,output:4,cacheRead:0.08,cacheWrite:1},"claude-sonnet-4":{input:3,output:15,cacheRead:0.3,cacheWrite:3.75},"claude-4-opus":{input:15,output:75,cacheRead:1.5,cacheWrite:18.75},"claude-opus-4":{input:15,output:75,cacheRead:1.5,cacheWrite:18.75},"qwen-plus":{input:0.8,output:2},"qwen-max":{input:2,output:6},"qwen-turbo":{input:0.3,output:0.6},"qwen3-235b":{input:2,output:8},"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:0.15,output:0.6}};function v0(X){let Z=X.toLowerCase();if(h[Z])return h[Z];for(let[Q,Y]of Object.entries(h))if(Z.includes(Q)||Q.includes(Z))return Y;return}function l(X,Z,Q,Y,$){let G=v0(X);if(!G)return 0;let j=Z/1e6*G.input+Q/1e6*G.output;if(Y&&G.cacheRead)j+=Y/1e6*G.cacheRead;if($&&G.cacheWrite)j+=$/1e6*G.cacheWrite;return Math.round(j*1e6)/1e6}var U={codeBlock:/^```(\w+)?\s*$/,heading:/^ *(#{1,4}) +(.+)/,blockquote:/^(>+)\s?(.*)/,ulItem:/^([ \t]*)([-*+]) +(.+)/,olItem:/^([ \t]*)(\d+)\. +(.+)/,hr:/^ *([-*_] *){3,} *$/,table:/^\|(.+)\|$/,tableSeparator:/^\|[\s]*:?-+:?[\s]*(\|[\s]*:?-+:?[\s]*)+\|?$/,diffStart:/^<<<DIFF>>>$/,diffEnd:/^<<<\/DIFF>>>$/,commandMessage:/<command-message>(.*?)<\/command-message>/};function r0(X){let Z=[],Q=X.split(/\r?\n/),Y=!1,$=[],G=null,j=0,W=!1,H=[],u=[],q=!1,O=[],x=!1,z=[],F=0,V=!0;for(let p=0;p<Q.length;p++){let _=Q[p];if(q){if(_.match(U.diffEnd)){try{let K=JSON.parse(O.join(`
2
2
  `));Z.push({type:"diff",content:"",diffData:{patch:K.patch,startLine:K.startLine,matchLine:K.matchLine}})}catch(K){Z.push({type:"text",content:O.join(`
3
3
  `)})}q=!1,O=[],V=!1;continue}O.push(_);continue}if(_.match(U.diffStart)){q=!0,O=[],V=!1;continue}if(Y){let K=_.match(U.codeBlock),P=_.trim()==="```";if(K&&K[1])j++,$.push(_);else if(P)if(j>0)j--,$.push(_);else{let $0=$.join(`
4
4
  `);Z.push({type:"code",content:$0,language:G||void 0}),Y=!1,$=[],G=null,j=0,V=!1}else $.push(_);continue}let r=_.match(U.codeBlock);if(r){Y=!0,G=r[1]||null,j=0,V=!1;continue}let E=_.match(U.table),Z0=_.match(U.tableSeparator);if(E&&!W){if(p+1<Q.length){if(Q[p+1].match(U.tableSeparator)){W=!0,H=E[1].split("|").map((P)=>P.trim()).filter((P)=>P.length>0),u=[],V=!1;continue}}}if(W&&Z0)continue;if(W&&E){let K=E[1].split("|").map((P)=>P.trim()).filter((P)=>P.length>0);while(K.length<H.length)K.push("");if(K.length>H.length)K.length=H.length;u.push(K);continue}if(W&&!E){if(H.length>0&&u.length>0)Z.push({type:"table",content:"",tableData:{headers:H,rows:u}});W=!1,H=[],u=[]}let N=_.match(U.blockquote);if(N){let K=N[1].length,P=N[2]||"";if(x&&K===F)z.push(P);else{if(x)Z.push({type:"blockquote",content:z.join(`
@@ -21,4 +21,4 @@ import{Ea as Y0,Ga as w}from"./chunk-778h8815.js";import{ub as Q0}from"./chunk-2
21
21
  `+`1. 配置文件格式正确 (~/.blade/config.json)
22
22
  `+`2. 运行 blade 进行首次配置
23
23
  `+"3. 配置文件权限正确")}finally{B=null}})(),B}var w1=()=>J().config.config?.models??[],O1=()=>{let X=v();if(!X)return;let Z=X.currentModelId;return X.models.find((Y)=>Y.id===Z)??X.models[0]},p1=(X)=>{let Z=v();if(!Z)return;return Z.models.find((Q)=>Q.id===X)},x1=()=>J().config.config?.mcpServers??{},P1=()=>J().app.thinkingModeEnabled,v1=()=>({setPermissionMode:async(X)=>{J().config.actions.updateConfig({permissionMode:X})},setTheme:async(X,Z={})=>{try{o.setTheme(X)}catch{return}J().config.actions.updateConfig({theme:X}),await w().save({theme:X},{scope:"global",...Z})},setLanguage:async(X,Z={})=>{J().config.actions.updateConfig({language:X}),await w().save({language:X},{scope:"global",...Z})},setDebug:async(X,Z={})=>{J().config.actions.updateConfig({debug:X}),await w().save({debug:X},{scope:"global",...Z})},setTemperature:async(X,Z={})=>{J().config.actions.updateConfig({temperature:X}),await w().save({temperature:X},{scope:"global",...Z})},updateConfig:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let Y={...Q};J().config.actions.updateConfig(X);try{await w().save(X,Z)}catch($){throw J().config.actions.setConfig(Y),$}},flush:async()=>{await w().flush()},appendPermissionAllowRule:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let Y=Q.permissions?.allow||[];if(!Y.includes(X)){let $=[...Y,X];J().config.actions.updateConfig({permissions:{...Q.permissions,allow:$}})}await w().appendPermissionRule(X,Z)},appendLocalPermissionAllowRule:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let Y=Q.permissions?.allow||[];if(!Y.includes(X)){let $=[...Y,X];J().config.actions.updateConfig({permissions:{...Q.permissions,allow:$}})}await w().appendLocalPermissionRule(X,Z)},setCurrentModel:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");if(!Q.models.find(($)=>$.id===X))throw Error(`Model not found: ${X}`);J().config.actions.updateConfig({currentModelId:X}),await w().save({currentModelId:X},{scope:"global",...Z})},addModel:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let Y="id"in X?X:{id:L0(),...X},G={models:[...Q.models,Y]};if(Q.models.length===0)G.currentModelId=Y.id;return J().config.actions.updateConfig(G),await w().save(G,{scope:"global",...Z}),Y},updateModel:async(X,Z,Q={})=>{let Y=v();if(!Y)throw Error("Config not initialized");let $=Y.models.findIndex((j)=>j.id===X);if($===-1)throw Error(`Model not found: ${X}`);let G=[...Y.models];G[$]={...G[$],...Z},J().config.actions.updateConfig({models:G}),await w().save({models:G},{scope:"global",...Q})},removeModel:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");if(Q.models.length===1)throw Error("Cannot remove the only model");let Y=Q.models.filter((G)=>G.id!==X),$={models:Y};if(Q.currentModelId===X)$.currentModelId=Y[0].id;J().config.actions.updateConfig($),await w().save($,{scope:"global",...Z})},addMcpServer:async(X,Z,Q={})=>{let Y=v();if(!Y)throw Error("Config not initialized");let G={...Y.mcpServers??{},[X]:Z};J().config.actions.updateConfig({mcpServers:G}),await w().save({mcpServers:G},{scope:"project",...Q})},removeMcpServer:async(X,Z={})=>{let Q=v();if(!Q)throw Error("Config not initialized");let $={...Q.mcpServers??{}};delete $[X],J().config.actions.updateConfig({mcpServers:$}),await w().save({mcpServers:$},{scope:"project",...Z})}});
24
- export{g as ga,o as ha,U as ia,r0 as ja,c0 as ka,i0 as la,o0 as ma,l0 as na,n0 as oa,a0 as pa,y0 as qa,J as ra,W1 as sa,u1 as ta,K1 as ua,v as va,q1 as wa,w1 as xa,O1 as ya,p1 as za,x1 as Aa,P1 as Ba,v1 as Ca};
24
+ export{g as ha,o as ia,U as ja,r0 as ka,c0 as la,i0 as ma,o0 as na,l0 as oa,n0 as pa,a0 as qa,y0 as ra,J as sa,W1 as ta,u1 as ua,K1 as va,v as wa,q1 as xa,w1 as ya,O1 as za,p1 as Aa,x1 as Ba,P1 as Ca,v1 as Da};
@@ -1,4 +1,4 @@
1
- import{ra as Q}from"./chunk-89j9pm90.js";import{tb as U}from"./chunk-8e0rv3j5.js";import{Ab as O}from"./chunk-v61bja34.js";import{Wb as K,Yb as N}from"./chunk-h79044h0.js";function Y(){if(process.stdin.isTTY&&typeof process.stdin.setRawMode==="function")try{process.stdin.setRawMode(!1)}catch{}process.stdout.write("\x1B[<u"),process.stdout.write("\x1B[>4;0m"),process.stdout.write("\x1B[?2004l"),process.stdout.write("\x1B[?1l\x1B>"),process.stdout.write("\x1B[?25h"),process.stdout.write("\x1B[0m")}var A=N("Service");function Z(b){switch(b){case"SIGINT":return"ctrl_c";case"esc":return"esc";case"uncaughtException":case"unhandledRejection":return"error";case"SIGTERM":case"normal":default:return"user_exit"}}class D{static instance=null;cleanupHandlers=[];isShuttingDown=!1;initialized=!1;lastSigintTime=0;SIGINT_DOUBLE_CLICK_WINDOW=3000;constructor(){}static getInstance(){if(!D.instance)D.instance=new D;return D.instance}initialize(){if(this.initialized){A.debug("[GracefulShutdown] 已初始化,跳过重复初始化");return}process.on("uncaughtException",(b)=>{this.handleFatalError("uncaughtException",b)}),process.on("unhandledRejection",(b)=>{let q=b instanceof Error?b:Error(String(b));this.handleFatalError("unhandledRejection",q)}),process.on("SIGTERM",()=>{A.info("[GracefulShutdown] 收到 SIGTERM 信号"),this.shutdown("SIGTERM",0)}),process.on("SIGINT",()=>{let b=Date.now();if(b-this.lastSigintTime<this.SIGINT_DOUBLE_CLICK_WINDOW)A.info("[GracefulShutdown] 收到第二次 SIGINT 信号,执行退出"),this.shutdown("SIGINT",0);else A.info("[GracefulShutdown] 收到第一次 SIGINT 信号,再按一次退出"),this.lastSigintTime=b,console.log(`
1
+ import{sa as Q}from"./chunk-faq7ay4j.js";import{ub as U}from"./chunk-2049tv49.js";import{Bb as O}from"./chunk-4dmdn3a9.js";import{Xb as K,Zb as N}from"./chunk-a7yjnqhd.js";function Y(){if(process.stdin.isTTY&&typeof process.stdin.setRawMode==="function")try{process.stdin.setRawMode(!1)}catch{}process.stdout.write("\x1B[<u"),process.stdout.write("\x1B[>4;0m"),process.stdout.write("\x1B[?2004l"),process.stdout.write("\x1B[?1l\x1B>"),process.stdout.write("\x1B[?25h"),process.stdout.write("\x1B[0m")}var A=N("Service");function Z(b){switch(b){case"SIGINT":return"ctrl_c";case"esc":return"esc";case"uncaughtException":case"unhandledRejection":return"error";case"SIGTERM":case"normal":default:return"user_exit"}}class D{static instance=null;cleanupHandlers=[];isShuttingDown=!1;initialized=!1;lastSigintTime=0;SIGINT_DOUBLE_CLICK_WINDOW=3000;constructor(){}static getInstance(){if(!D.instance)D.instance=new D;return D.instance}initialize(){if(this.initialized){A.debug("[GracefulShutdown] 已初始化,跳过重复初始化");return}process.on("uncaughtException",(b)=>{this.handleFatalError("uncaughtException",b)}),process.on("unhandledRejection",(b)=>{let q=b instanceof Error?b:Error(String(b));this.handleFatalError("unhandledRejection",q)}),process.on("SIGTERM",()=>{A.info("[GracefulShutdown] 收到 SIGTERM 信号"),this.shutdown("SIGTERM",0)}),process.on("SIGINT",()=>{let b=Date.now();if(b-this.lastSigintTime<this.SIGINT_DOUBLE_CLICK_WINDOW)A.info("[GracefulShutdown] 收到第二次 SIGINT 信号,执行退出"),this.shutdown("SIGINT",0);else A.info("[GracefulShutdown] 收到第一次 SIGINT 信号,再按一次退出"),this.lastSigintTime=b,console.log(`
2
2
  再按一次 Ctrl+C 退出
3
3
  `)}),this.initialized=!0,A.debug("[GracefulShutdown] 全局错误处理器已初始化")}registerCleanup(b){return this.cleanupHandlers.push(b),A.debug(`[GracefulShutdown] 注册清理函数,当前共 ${this.cleanupHandlers.length} 个`),()=>{let q=this.cleanupHandlers.indexOf(b);if(q!==-1)this.cleanupHandlers.splice(q,1),A.debug(`[GracefulShutdown] 取消注册清理函数,剩余 ${this.cleanupHandlers.length} 个`)}}handleFatalError(b,q){if(this.isShuttingDown){console.error(`[GracefulShutdown] 退出过程中发生额外错误 (${b}):`,q);return}if(console.error(""),console.error("═".repeat(60)),console.error(`Uncaught error (${b})`),console.error("═".repeat(60)),console.error(""),console.error("错误信息:",q.message),console.error(""),q.stack)console.error("堆栈跟踪:"),console.error(q.stack);console.error(""),console.error("═".repeat(60)),console.error(""),this.shutdown(b,1)}async shutdown(b,q=0){if(this.isShuttingDown){A.debug("[GracefulShutdown] 已在退出过程中,跳过重复退出");return}this.isShuttingDown=!0,A.info(`[GracefulShutdown] 开始优雅退出 (原因: ${b})`);try{await K()}catch(z){}try{let z=U.getInstance();if(z.isEnabled()){let F=Q(),W=F.session?.sessionId||"unknown",X=F.config?.config?.permissionMode||"default";await z.executeSessionEndHooks(Z(b),{projectDir:O(),sessionId:W,permissionMode:X})}}catch(z){console.error("[GracefulShutdown] SessionEnd hooks 执行失败:",z)}let B=5000,V=new Promise((z,F)=>{setTimeout(()=>{F(Error(`清理超时 (${B}ms)`))},B)});try{let z=this.runCleanupHandlers();await Promise.race([z,V])}catch(z){console.error("[GracefulShutdown] 清理过程中发生错误:",z)}finally{Y(),setTimeout(()=>{process.exit(q)},100)}}async runCleanupHandlers(){let b=[...this.cleanupHandlers].reverse();for(let q of b)try{let B=q();if(B instanceof Promise)await B}catch(B){console.error("[GracefulShutdown] 清理函数执行失败:",B)}}isExiting(){return this.isShuttingDown}reset(){this.isShuttingDown=!1,this.cleanupHandlers=[],this.initialized=!1}}var J=()=>{return D.getInstance()},H=(b)=>{return J().registerCleanup(b)},P=()=>{J().initialize()},L=(b=0)=>{J().shutdown("normal",b)};
4
4
  export{J as l,H as m,P as n,L as o};
@@ -1,4 +1,4 @@
1
- import{H as m,T as g,U as c,X as d,Z as f}from"./chunk-x1khkevy.js";import{Ab as u}from"./chunk-v61bja34.js";async function R(){if((await g().initialize(u(),[])).plugins.length>0)await c()}async function x(t){let e=t.message||t._?.[0];if(typeof e==="string"&&e.trim())return e;let n=t.stdin??process.stdin;if(!n.isTTY){let a=[];for await(let l of n)a.push(l);return Buffer.concat(a).toString("utf-8").trim()}if(t.defaultMessage!==void 0)return t.defaultMessage;throw Error("No input provided")}async function P(t){if(!d(t))return{mode:"agent",content:t};let e=await f(t,{cwd:u(),workspaceRoot:u()});if(!e.success)return{mode:"output",content:`Error: ${e.error||"未知错误"}`,exitCode:1};let n=e.data;if(n?.action==="invoke_skill"){let{skillName:a,skillArgs:l}=n;return{mode:"agent",content:l?`Please use the "${a}" skill to help me with: ${l}`:`Please use the "${a}" skill.`}}if(n?.action==="invoke_custom_command"||n?.action==="invoke_plugin_command"){let a=n.processedContent;return{mode:"agent",content:`# Custom Command: /${n.commandName}
1
+ import{I as m,U as g,V as c,Y as d,_ as f}from"./chunk-4745ktjj.js";import{Bb as u}from"./chunk-4dmdn3a9.js";async function R(){if((await g().initialize(u(),[])).plugins.length>0)await c()}async function x(t){let e=t.message||t._?.[0];if(typeof e==="string"&&e.trim())return e;let n=t.stdin??process.stdin;if(!n.isTTY){let a=[];for await(let l of n)a.push(l);return Buffer.concat(a).toString("utf-8").trim()}if(t.defaultMessage!==void 0)return t.defaultMessage;throw Error("No input provided")}async function P(t){if(!d(t))return{mode:"agent",content:t};let e=await f(t,{cwd:u(),workspaceRoot:u()});if(!e.success)return{mode:"output",content:`Error: ${e.error||"未知错误"}`,exitCode:1};let n=e.data;if(n?.action==="invoke_skill"){let{skillName:a,skillArgs:l}=n;return{mode:"agent",content:l?`Please use the "${a}" skill to help me with: ${l}`:`Please use the "${a}" skill.`}}if(n?.action==="invoke_custom_command"||n?.action==="invoke_plugin_command"){let a=n.processedContent;return{mode:"agent",content:`# Custom Command: /${n.commandName}
2
2
 
3
3
  ${a}`}}return{mode:"output",content:e.content||e.message||"",exitCode:0}}function r(t){if(!(t instanceof Error))return!1;return t.message.includes("未找到会话")||t.message.includes("ENOENT")||t.message.includes("no such file")}async function i(t){try{return await m.loadSession(t,u())}catch(e){if(r(e))return null;throw e}}async function y(t){if(t.resume===!0||t.resume==="true")throw Error("--resume without a session ID is only supported in interactive UI mode");if(typeof t.resume==="string"&&t.resume.length>0){if(t.forkSession){let e=u();return m.forkSession(t.resume,{newSessionId:t.sessionId,sourceProjectPath:e,targetProjectPath:e})}return{sessionId:t.resume,messages:await m.loadSession(t.resume)}}if(t.continue){let e=t.forkSession?await m.listSessions({cwd:u()}):await m.listSessions();if(e.length>0){let n=e[0].sessionId;if(t.forkSession){let a=u();return m.forkSession(n,{newSessionId:t.sessionId,sourceProjectPath:a,targetProjectPath:a})}return{sessionId:n,messages:await m.loadSession(n)}}if(t.forkSession)throw Error("Cannot fork: no sessions are available to continue")}if(t.sessionId)return{sessionId:t.sessionId,messages:await i(t.sessionId)??[]};return{sessionId:`${t.fallbackSessionPrefix}-${Date.now()}`,messages:[]}}
4
4
  export{R as p,x as q,P as r,y as s};
@@ -1,2 +1,2 @@
1
1
  function v(b){switch(b){case"default":case"ignore":case void 0:return"default";case"acceptEdits":return"autoEdit";case"dontAsk":case"bypassPermissions":return"yolo";case"plan":return"plan";default:return"default"}}
2
- export{v as aa};
2
+ export{v as ba};
@@ -1 +1 @@
1
- function f(x){return x!==void 0&&typeof x.pattern==="string"&&typeof x.search_path==="string"}function b(x){return x!==void 0&&x.kind==="edit"&&typeof x.matches_found==="number"}function h(x){return x==="readonly"}var v="__aborted__";export{f as nb,b as ob,h as pb,v as qb};
1
+ function f(x){return x!==void 0&&typeof x.pattern==="string"&&typeof x.search_path==="string"}function b(x){return x!==void 0&&x.kind==="edit"&&typeof x.matches_found==="number"}function h(x){return x==="readonly"}var v="__aborted__";export{f as ob,b as pb,h as qb,v as rb};
@@ -0,0 +1 @@
1
+ import{v as a,w as b,x as c}from"./chunk-7r1hm0qz.js";import"./chunk-qnevwq1q.js";import"./chunk-g7caymjr.js";import"./chunk-faq7ay4j.js";import"./chunk-r1spf93b.js";import"./chunk-t70aqrm4.js";import"./chunk-4dmdn3a9.js";import"./chunk-a7yjnqhd.js";import"./chunk-f9ybv4ph.js";export{a as validatePermissions,c as validateOutput,b as loadConfiguration};
@@ -0,0 +1 @@
1
+ import{Aa as j,Ba as k,Ca as l,Da as m,ra as a,sa as b,ta as c,ua as d,va as e,wa as f,xa as g,ya as h,za as i}from"./chunk-faq7ay4j.js";import"./chunk-r1spf93b.js";import"./chunk-t70aqrm4.js";import"./chunk-4dmdn3a9.js";import"./chunk-a7yjnqhd.js";import"./chunk-f9ybv4ph.js";export{a as vanillaStore,c as sessionActions,l as getThinkingModeEnabled,b as getState,j as getModelById,e as getMessages,k as getMcpServers,i as getCurrentModel,f as getConfig,h as getAllModels,g as ensureStoreInitialized,m as configActions,d as appActions};
@@ -1,9 +1,9 @@
1
- import{B as _,H as L,K,P as T,Q as h,S as j,X as q,Z as b,_ as x}from"./chunk-x1khkevy.js";import"./chunk-9ad7tt9s.js";import{ca as I}from"./chunk-x466sb8s.js";import"./chunk-60se4kxq.js";import{va as S}from"./chunk-89j9pm90.js";import"./chunk-778h8815.js";import"./chunk-d61d6m07.js";import{_a as y}from"./chunk-54vk4tw8.js";import{qb as P}from"./chunk-6y58y4rx.js";import"./chunk-8e0rv3j5.js";import{ub as k}from"./chunk-2n8a87ds.js";import{Ab as E}from"./chunk-v61bja34.js";import"./chunk-0y895nft.js";import{Yb as B}from"./chunk-h79044h0.js";import"./chunk-zet4zjc3.js";import{Readable as d,Writable as p}from"node:stream";import*as N from"@agentclientprotocol/sdk";import A from"node:path";import{PROTOCOL_VERSION as g}from"@agentclientprotocol/sdk";import{nanoid as f}from"nanoid";var V=B("Agent");function O(z){return Object.fromEntries(z.map((H)=>[H.name,H.value]))}function v(z){if("command"in z)return{type:"stdio",command:z.command,args:z.args,env:O(z.env)};return{type:z.type,url:z.url,headers:O(z.headers)}}function c(z){return Object.fromEntries(z.map((H)=>[H.name,v(H)]))}function R(z){if(typeof z==="string")return z?[{type:"text",text:z}]:[];return z.flatMap((H)=>{if(H.type==="text")return H.text?[{type:"text",text:H.text}]:[];let J=H.image_url.url,Q=/^data:([^;,]+);base64,(.+)$/s.exec(J);if(!Q)return[{type:"text",text:"[Image]"}];return[{type:"image",mimeType:Q[1]??"image/png",data:Q[2]??""}]})}class w{id;cwd;connection;clientCapabilities;options;agent=null;runtime=null;pendingPrompt=null;pendingResumeRequested=!1;availableCommandsTimer=null;destroyed=!1;messages;mode="default";constructor(z,H,J,Q,X={}){this.id=z;this.cwd=H;this.connection=J;this.clientCapabilities=Q;this.options=X;this.messages=[...X.initialMessages??[]]}async initialize(){V.debug(`[AcpSession ${this.id}] Initializing...`),_.initializeSession(this.connection,this.id,this.clientCapabilities,this.cwd),V.debug(`[AcpSession ${this.id}] ACP service context initialized`);let z=this.options.mcpServers?c(this.options.mcpServers):void 0;this.runtime=await K.create({sessionId:this.id,workspaceRoot:this.cwd,...z?{mcpServers:z}:{}}),this.agent=await j.createWithRuntime(this.runtime,{sessionId:this.id}),V.debug(`[AcpSession ${this.id}] Agent created successfully`);let H=await this.runtime.getGoal();if(this.runtime.getPendingSteeringCount()>0||H?.status==="active")if(this.options.initialMessages===void 0)this.schedulePendingResume();else this.pendingResumeRequested=!0}async replayHistory(){for(let z of this.messages){if(!this.canSendUpdates())return;let H=z.role==="user"?"user_message_chunk":z.role==="assistant"?"agent_message_chunk":void 0;if(!H)continue;for(let J of R(z.content)){if(!this.canSendUpdates())return;if(!await this.sendUpdateAndWait({sessionUpdate:H,content:J}))return}}if(this.pendingResumeRequested)this.schedulePendingResume()}sendAvailableCommandsDelayed(){if(this.destroyed||this.connection.signal.aborted)return;if(this.availableCommandsTimer!==null)clearTimeout(this.availableCommandsTimer);V.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,H){try{V.debug(`[AcpSession ${this.id}] Executing slash command: ${z}`);let J={cwd:this.cwd,workspaceRoot:this.cwd,sessionId:this.id,messages:[...this.messages],rewind:{listCheckpoints:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.listRewindCheckpoints()},execute:async(Z)=>{if(!this.runtime)throw Error("Session runtime is unavailable");let $=await this.runtime.rewindSession(Z);return this.messages=[...$.messages],await this.agent?.destroy(),this.agent=await j.createWithRuntime(this.runtime,{sessionId:this.id}),$}},signal:H,acp:{sendMessage:(Z)=>{this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Z}})},sendToolStart:(Z,$,F)=>{let W=`tool_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,G=this.mapToolKind(F);this.sendUpdate({sessionUpdate:"tool_call",toolCallId:W,status:"in_progress",title:`${Z}`,content:[{type:"content",content:{type:"text",text:JSON.stringify($,null,2)}}],kind:G})},sendToolResult:(Z,$)=>{if($.summary)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:$.summary}})}}},Q=await b(z,J),X=Q.data?.action;if(X==="start_goal"||X==="resume_goal")this.schedulePendingResume();if(X==="rewind_session"&&Array.isArray(Q.data?.messages))this.messages=[...Q.data.messages];if((Q.message==="compact_completed"||Q.message==="compact_fallback")&&Q.data?.compactedMessages)this.messages=[...Q.data.compactedMessages];let Y=Q.content||Q.message;if(Y)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Y}});if(Q.error)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[FAIL] ${Q.error}`}});return{stopReason:Q.success?"end_turn":"cancelled"}}catch(J){return V.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 sendAvailableCommands(){try{let z=x(),H=["model","permissions","theme","config","exit","ide"],Q=z.filter((X)=>!H.includes(X.name)).map((X)=>{let Y;if(X.usage){let Z=X.usage.replace(/^\/\w+\s*/,"").trim();if(Z)Y=Z}if(X.aliases?.length){let Z=`Aliases: ${X.aliases.join(", ")}`;Y=Y?`${Y} | ${Z}`:Z}return{name:X.name,description:X.description,input:Y?{hint:Y}:void 0}});V.info(`[AcpSession ${this.id}] Sending available commands: ${JSON.stringify(Q.map((X)=>X.name))}`),this.sendUpdate({sessionUpdate:"available_commands_update",availableCommands:Q}),V.info(`[AcpSession ${this.id}] Sent ${Q.length} available commands`)}catch(z){V.error(`[AcpSession ${this.id}] Failed to send available commands:`,z)}}async prompt(z,H={}){if(_.setCurrentSession(this.id),!this.agent||!this.runtime)throw Error("Session not initialized");let J=this.resolvePrompt(z.prompt);if(this.pendingPrompt){if(/^\/goal(?:\s|$)/i.test(J.trim()))return this.handleSlashCommand(J,this.pendingPrompt.signal);let X=await this.runtime.enqueueSteering(J,{allowBeforeTurn:!0});if(!X.accepted)throw Error(X.reason==="queue_full"?"Active turn steering queue is full":"Active turn is no longer steerable");if(V.debug(`[AcpSession ${this.id}] Queued steering for active turn (${X.queued})`),X.delivery==="next_turn")this.schedulePendingResume();return{stopReason:"end_turn"}}let Q=new AbortController;this.pendingPrompt=Q;try{if(V.debug(`[AcpSession ${this.id}] Received prompt: ${J.slice(0,100)}...`),q(J))return await this.handleSlashCommand(J,Q.signal);let X={sessionId:this.id,userId:"acp-user",workspaceRoot:this.cwd,messages:[...this.messages],signal:Q.signal,permissionMode:this.mapModeToPermissionMode(),confirmationHandler:{requestConfirmation:async(Y)=>{return this.requestPermission(Y)}}};if(await y(this.agent.chatStream(J,X,{pendingInputOnly:H.pendingInputOnly,goalContinuationOnly:H.goalContinuationOnly}),async(Y)=>{switch(Y.kind){case"content_delta":this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Y.delta}});break;case"thinking_delta":this.sendUpdate({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:Y.delta}});break;case"tool_start":{let Z=Y.toolCall,$="function"in Z?Z.function.name:Z.type,F=this.mapToolKind(Y.toolKind);this.sendUpdate({sessionUpdate:"tool_call",toolCallId:Z.id,status:"in_progress",title:`Executing ${$}`,content:[],kind:F});break}case"tool_result":{let{toolCall:Z,result:$}=Y,F=[],W=$.metadata;if(W?.kind==="edit"&&typeof W.file_path==="string"&&typeof W.oldContent==="string"&&(typeof W.newContent==="string"||W.newContent===void 0))F.push({type:"diff",path:W.file_path,oldText:W.oldContent,newText:W.newContent??null});else{let D="function"in Z?Z.function.name:Z.type,C=h(T(D,$));F.push({type:"content",content:{type:"text",text:C}})}let G=$.success?"completed":"failed";this.sendUpdate({sessionUpdate:"tool_call_update",toolCallId:Z.id,status:G,content:F});break}case"task_update":this.sendPlanUpdate(Y.tasks);break;case"steering_applied":break;case"follow_up_started":for(let Z of Y.messages){if(!Z.recovered||Z.persisted)continue;for(let $ of R(Z.content))this.sendUpdate({sessionUpdate:"user_message_chunk",content:$})}if(Y.recovered>0)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[Resuming ${Y.recovered} queued instruction${Y.recovered===1?"":"s"} recovered after restart]
1
+ import{$ as A,B,I as N,L as T,Q as h,R as q,T as E,Y as b,_ as x}from"./chunk-4745ktjj.js";import"./chunk-g7caymjr.js";import{da as C}from"./chunk-1w6tqkxd.js";import"./chunk-0e0z8yc1.js";import{wa as I}from"./chunk-faq7ay4j.js";import"./chunk-r1spf93b.js";import"./chunk-phhmmybg.js";import{$a as K}from"./chunk-48q9msfk.js";import{rb as j}from"./chunk-jm2xhnrv.js";import"./chunk-2049tv49.js";import{vb as S}from"./chunk-t70aqrm4.js";import{Bb as M}from"./chunk-4dmdn3a9.js";import"./chunk-6kp3z956.js";import{Zb as L}from"./chunk-a7yjnqhd.js";import"./chunk-f9ybv4ph.js";import{Readable as d,Writable as p}from"node:stream";import*as P from"@agentclientprotocol/sdk";import k from"node:path";import{PROTOCOL_VERSION as g}from"@agentclientprotocol/sdk";import{nanoid as O}from"nanoid";var V=L("Agent");function R(z){return Object.fromEntries(z.map((H)=>[H.name,H.value]))}function v(z){if("command"in z)return{type:"stdio",command:z.command,args:z.args,env:R(z.env)};return{type:z.type,url:z.url,headers:R(z.headers)}}function c(z){return Object.fromEntries(z.map((H)=>[H.name,v(H)]))}function y(z){if(typeof z==="string")return z?[{type:"text",text:z}]:[];return z.flatMap((H)=>{if(H.type==="text")return H.text?[{type:"text",text:H.text}]:[];let J=H.image_url.url,Q=/^data:([^;,]+);base64,(.+)$/s.exec(J);if(!Q)return[{type:"text",text:"[Image]"}];return[{type:"image",mimeType:Q[1]??"image/png",data:Q[2]??""}]})}class _{id;cwd;connection;clientCapabilities;options;agent=null;runtime=null;pendingPrompt=null;pendingResumeRequested=!1;availableCommandsTimer=null;destroyed=!1;messages;mode="default";constructor(z,H,J,Q,X={}){this.id=z;this.cwd=H;this.connection=J;this.clientCapabilities=Q;this.options=X;this.messages=[...X.initialMessages??[]]}async initialize(){V.debug(`[AcpSession ${this.id}] Initializing...`),B.initializeSession(this.connection,this.id,this.clientCapabilities,this.cwd),V.debug(`[AcpSession ${this.id}] ACP service context initialized`);let z=this.options.mcpServers?c(this.options.mcpServers):void 0;this.runtime=await T.create({sessionId:this.id,workspaceRoot:this.cwd,...z?{mcpServers:z}:{}}),this.agent=await E.createWithRuntime(this.runtime,{sessionId:this.id}),V.debug(`[AcpSession ${this.id}] Agent created successfully`);let H=await this.runtime.getGoal();if(this.runtime.getPendingSteeringCount()>0||H?.status==="active")if(this.options.initialMessages===void 0)this.schedulePendingResume();else this.pendingResumeRequested=!0}async replayHistory(){for(let z of this.messages){if(!this.canSendUpdates())return;let H=z.role==="user"?"user_message_chunk":z.role==="assistant"?"agent_message_chunk":void 0;if(!H)continue;for(let J of y(z.content)){if(!this.canSendUpdates())return;if(!await this.sendUpdateAndWait({sessionUpdate:H,content:J}))return}}if(this.pendingResumeRequested)this.schedulePendingResume()}sendAvailableCommandsDelayed(){if(this.destroyed||this.connection.signal.aborted)return;if(this.availableCommandsTimer!==null)clearTimeout(this.availableCommandsTimer);V.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,H){try{V.debug(`[AcpSession ${this.id}] Executing slash command: ${z}`);let J={cwd:this.cwd,workspaceRoot:this.cwd,sessionId:this.id,messages:[...this.messages],rewind:{listCheckpoints:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.listRewindCheckpoints()},execute:async(Z)=>{if(!this.runtime)throw Error("Session runtime is unavailable");let $=await this.runtime.rewindSession(Z);return this.messages=[...$.messages],await this.agent?.destroy(),this.agent=await E.createWithRuntime(this.runtime,{sessionId:this.id}),$}},subagents:{list:async()=>{if(!this.runtime)throw Error("Session runtime is unavailable");return this.runtime.listSubagents()},resume:async(Z,$)=>{if(!this.runtime)throw Error("Session runtime is unavailable");let U=!1,W,G=(F)=>{this.sendUpdate({sessionUpdate:"tool_call_update",toolCallId:F.id,status:F.status==="completed"?"completed":"failed",content:[{type:"content",content:{type:"text",text:F.result?.message||F.result?.error||`Subagent ${F.status}`}}]})},D=this.runtime.resumeSubagent({agentId:Z,prompt:$,onCompleted:(F)=>{if(U)G(F);else W=F}});if(this.sendUpdate({sessionUpdate:"tool_call",toolCallId:D.session.id,status:"in_progress",title:`Resuming ${D.session.subagentType} subagent`,content:[{type:"content",content:{type:"text",text:`Resumed from ${D.source.id} at depth ${D.session.resumeDepth}`}}],kind:this.mapToolKind("readonly")}),U=!0,W)G(W);return D}},signal:H,acp:{sendMessage:(Z)=>{this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Z}})},sendToolStart:(Z,$,U)=>{let W=`tool_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,G=this.mapToolKind(U);this.sendUpdate({sessionUpdate:"tool_call",toolCallId:W,status:"in_progress",title:`${Z}`,content:[{type:"content",content:{type:"text",text:JSON.stringify($,null,2)}}],kind:G})},sendToolResult:(Z,$)=>{if($.summary)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:$.summary}})}}},Q=await x(z,J),X=Q.data?.action;if(X==="start_goal"||X==="resume_goal")this.schedulePendingResume();if(X==="rewind_session"&&Array.isArray(Q.data?.messages))this.messages=[...Q.data.messages];if((Q.message==="compact_completed"||Q.message==="compact_fallback")&&Q.data?.compactedMessages)this.messages=[...Q.data.compactedMessages];let Y=Q.content||Q.message;if(Y)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Y}});if(Q.error)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[FAIL] ${Q.error}`}});return{stopReason:Q.success?"end_turn":"cancelled"}}catch(J){return V.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 sendAvailableCommands(){try{let z=A(),H=["model","permissions","theme","config","exit","ide"],Q=z.filter((X)=>!H.includes(X.name)).map((X)=>{let Y;if(X.usage){let Z=X.usage.replace(/^\/\w+\s*/,"").trim();if(Z)Y=Z}if(X.aliases?.length){let Z=`Aliases: ${X.aliases.join(", ")}`;Y=Y?`${Y} | ${Z}`:Z}return{name:X.name,description:X.description,input:Y?{hint:Y}:void 0}});V.info(`[AcpSession ${this.id}] Sending available commands: ${JSON.stringify(Q.map((X)=>X.name))}`),this.sendUpdate({sessionUpdate:"available_commands_update",availableCommands:Q}),V.info(`[AcpSession ${this.id}] Sent ${Q.length} available commands`)}catch(z){V.error(`[AcpSession ${this.id}] Failed to send available commands:`,z)}}async prompt(z,H={}){if(B.setCurrentSession(this.id),!this.agent||!this.runtime)throw Error("Session not initialized");let J=this.resolvePrompt(z.prompt);if(this.pendingPrompt){if(/^\/goal(?:\s|$)/i.test(J.trim()))return this.handleSlashCommand(J,this.pendingPrompt.signal);let X=await this.runtime.enqueueSteering(J,{allowBeforeTurn:!0});if(!X.accepted)throw Error(X.reason==="queue_full"?"Active turn steering queue is full":"Active turn is no longer steerable");if(V.debug(`[AcpSession ${this.id}] Queued steering for active turn (${X.queued})`),X.delivery==="next_turn")this.schedulePendingResume();return{stopReason:"end_turn"}}let Q=new AbortController;this.pendingPrompt=Q;try{if(V.debug(`[AcpSession ${this.id}] Received prompt: ${J.slice(0,100)}...`),b(J))return await this.handleSlashCommand(J,Q.signal);let X={sessionId:this.id,userId:"acp-user",workspaceRoot:this.cwd,messages:[...this.messages],signal:Q.signal,permissionMode:this.mapModeToPermissionMode(),confirmationHandler:{requestConfirmation:async(Y)=>{return this.requestPermission(Y)}}};if(await K(this.agent.chatStream(J,X,{pendingInputOnly:H.pendingInputOnly,goalContinuationOnly:H.goalContinuationOnly}),async(Y)=>{switch(Y.kind){case"content_delta":this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:Y.delta}});break;case"thinking_delta":this.sendUpdate({sessionUpdate:"agent_thought_chunk",content:{type:"text",text:Y.delta}});break;case"tool_start":{let Z=Y.toolCall,$="function"in Z?Z.function.name:Z.type,U=this.mapToolKind(Y.toolKind),W=`Executing ${$}`;if($==="Task"&&"function"in Z)try{let G=JSON.parse(Z.function.arguments),D=G.resume_from??G.resume;if(typeof D==="string")W=`Resuming ${String(G.subagent_type||"subagent")} from ${D}`}catch{}this.sendUpdate({sessionUpdate:"tool_call",toolCallId:Z.id,status:"in_progress",title:W,content:[],kind:U});break}case"tool_result":{let{toolCall:Z,result:$}=Y,U=[],W=$.metadata;if(W?.kind==="edit"&&typeof W.file_path==="string"&&typeof W.oldContent==="string"&&(typeof W.newContent==="string"||W.newContent===void 0))U.push({type:"diff",path:W.file_path,oldText:W.oldContent,newText:W.newContent??null});else{let D="function"in Z?Z.function.name:Z.type,F=q(h(D,$));U.push({type:"content",content:{type:"text",text:F}})}let G=$.success?"completed":"failed";this.sendUpdate({sessionUpdate:"tool_call_update",toolCallId:Z.id,status:G,content:U});break}case"task_update":this.sendPlanUpdate(Y.tasks);break;case"steering_applied":break;case"follow_up_started":for(let Z of Y.messages){if(!Z.recovered||Z.persisted)continue;for(let $ of y(Z.content))this.sendUpdate({sessionUpdate:"user_message_chunk",content:$})}if(Y.recovered>0)this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[Resuming ${Y.recovered} queued instruction${Y.recovered===1?"":"s"} recovered after restart]
2
2
  `}});break;case"goal_updated":if(Y.goal&&Y.goal.status!=="active")this.sendUpdate({sessionUpdate:"agent_message_chunk",content:{type:"text",text:`[Goal ${Y.goal.status}: ${Y.goal.objective}]
3
- `}});break;case"goal_continuation_started":break;default:break}}),this.messages=[...X.messages],Q.signal.aborted)return{stopReason:"cancelled"};return{stopReason:"end_turn"}}catch(X){if(Q.signal.aborted||X instanceof Error&&X.name==="AbortError")return{stopReason:"cancelled"};throw V.error(`[AcpSession ${this.id}] Prompt error:`,X),X}finally{if(this.pendingPrompt===Q){if(this.pendingPrompt=null,!this.destroyed&&this.pendingResumeRequested)this.schedulePendingResume()}}}schedulePendingResume(){if(this.destroyed||this.connection.signal.aborted)return;this.pendingResumeRequested=!0,queueMicrotask(()=>{this.resumePendingIfIdle()})}async resumePendingIfIdle(){if(this.destroyed||this.connection.signal.aborted)return;if(this.pendingPrompt||!this.runtime||!this.agent)return;let z=this.runtime.getPendingSteeringCount()>0,J=(z?null:await this.runtime.getGoal())?.status==="active";if(!z&&!J){this.pendingResumeRequested=!1;return}this.pendingResumeRequested=!1,await this.prompt({sessionId:this.id,prompt:[]},{pendingInputOnly:z,goalContinuationOnly:J}).catch((Q)=>{V.error(`[AcpSession ${this.id}] Failed to resume pending input:`,Q)})}cancel(){if(V.info(`[AcpSession ${this.id}] Cancel requested`),this.pendingResumeRequested=!1,this.pendingPrompt)this.pendingPrompt.abort(),this.pendingPrompt=null,V.info(`[AcpSession ${this.id}] Cancelled successfully`);else V.warn(`[AcpSession ${this.id}] No pending prompt to cancel`)}async setMode(z){let H=["default","auto-edit","yolo","plan"];this.mode=H.includes(z)?z:"default",V.info(`[AcpSession ${this.id}] Mode set to: ${this.mode}`),this.sendUpdate({sessionUpdate:"current_mode_update",currentModeId:this.mode})}mapModeToPermissionMode(){switch(this.mode){case"yolo":return"yolo";case"auto-edit":return"autoEdit";case"plan":return"plan";case"default":default:return"default"}}shouldAutoApprove(z){switch(this.mode){case"yolo":return!0;case"auto-edit":return z==="readonly"||z==="write";case"plan":return z==="readonly";case"default":default:return!1}}async setModel(z){if(V.info(`[AcpSession ${this.id}] Model set to: ${z}`),this.pendingPrompt)throw Error("Cannot switch models while a prompt is active");if(!this.agent)throw Error("Session not initialized");await this.agent.switchModel(z)}async destroy(){if(this.destroyed)return;if(this.destroyed=!0,this.availableCommandsTimer!==null)clearTimeout(this.availableCommandsTimer),this.availableCommandsTimer=null;let z=this.agent,H=this.runtime;this.agent=null,this.runtime=null;let J,Q=async(X)=>{try{await X()}catch(Y){J??=Y}};if(await Q(()=>this.cancel()),z)await Q(()=>z.destroy());if(H)await Q(()=>H.dispose());if(await Q(()=>_.destroySession(this.id)),V.debug(`[AcpSession ${this.id}] Destroyed`),J!==void 0)throw J}resolvePrompt(z){let H=[];for(let J of z)if(J.type==="text")H.push(J.text);else if(J.type==="image")H.push(`[Image: ${J.mimeType}]`);else if(J.type==="resource"){let Q=J.resource;if("text"in Q)H.push(`<file path="${Q.uri}">
3
+ `}});break;case"goal_continuation_started":break;default:break}}),this.messages=[...X.messages],Q.signal.aborted)return{stopReason:"cancelled"};return{stopReason:"end_turn"}}catch(X){if(Q.signal.aborted||X instanceof Error&&X.name==="AbortError")return{stopReason:"cancelled"};throw V.error(`[AcpSession ${this.id}] Prompt error:`,X),X}finally{if(this.pendingPrompt===Q){if(this.pendingPrompt=null,!this.destroyed&&this.pendingResumeRequested)this.schedulePendingResume()}}}schedulePendingResume(){if(this.destroyed||this.connection.signal.aborted)return;this.pendingResumeRequested=!0,queueMicrotask(()=>{this.resumePendingIfIdle()})}async resumePendingIfIdle(){if(this.destroyed||this.connection.signal.aborted)return;if(this.pendingPrompt||!this.runtime||!this.agent)return;let z=this.runtime.getPendingSteeringCount()>0,J=(z?null:await this.runtime.getGoal())?.status==="active";if(!z&&!J){this.pendingResumeRequested=!1;return}this.pendingResumeRequested=!1,await this.prompt({sessionId:this.id,prompt:[]},{pendingInputOnly:z,goalContinuationOnly:J}).catch((Q)=>{V.error(`[AcpSession ${this.id}] Failed to resume pending input:`,Q)})}cancel(){if(V.info(`[AcpSession ${this.id}] Cancel requested`),this.pendingResumeRequested=!1,this.pendingPrompt)this.pendingPrompt.abort(),this.pendingPrompt=null,V.info(`[AcpSession ${this.id}] Cancelled successfully`);else V.warn(`[AcpSession ${this.id}] No pending prompt to cancel`)}async setMode(z){let H=["default","auto-edit","yolo","plan"];this.mode=H.includes(z)?z:"default",V.info(`[AcpSession ${this.id}] Mode set to: ${this.mode}`),this.sendUpdate({sessionUpdate:"current_mode_update",currentModeId:this.mode})}mapModeToPermissionMode(){switch(this.mode){case"yolo":return"yolo";case"auto-edit":return"autoEdit";case"plan":return"plan";case"default":default:return"default"}}shouldAutoApprove(z){switch(this.mode){case"yolo":return!0;case"auto-edit":return z==="readonly"||z==="write";case"plan":return z==="readonly";case"default":default:return!1}}async setModel(z){if(V.info(`[AcpSession ${this.id}] Model set to: ${z}`),this.pendingPrompt)throw Error("Cannot switch models while a prompt is active");if(!this.agent)throw Error("Session not initialized");await this.agent.switchModel(z)}async destroy(){if(this.destroyed)return;if(this.destroyed=!0,this.availableCommandsTimer!==null)clearTimeout(this.availableCommandsTimer),this.availableCommandsTimer=null;let z=this.agent,H=this.runtime;this.agent=null,this.runtime=null;let J,Q=async(X)=>{try{await X()}catch(Y){J??=Y}};if(await Q(()=>this.cancel()),z)await Q(()=>z.destroy());if(H)await Q(()=>H.dispose());if(await Q(()=>B.destroySession(this.id)),V.debug(`[AcpSession ${this.id}] Destroyed`),J!==void 0)throw J}resolvePrompt(z){let H=[];for(let J of z)if(J.type==="text")H.push(J.text);else if(J.type==="image")H.push(`[Image: ${J.mimeType}]`);else if(J.type==="resource"){let Q=J.resource;if("text"in Q)H.push(`<file path="${Q.uri}">
4
4
  ${Q.text}
5
5
  </file>`)}else if(J.type==="resource_link")H.push(`[Resource: ${J.uri}]`);return H.join(`
6
- `)}canSendUpdates(){return!this.destroyed&&!this.connection.signal.aborted}async sendUpdateAndWait(z){if(!this.canSendUpdates())return!1;return await this.connection.sessionUpdate({sessionId:this.id,update:z}),this.canSendUpdates()}sendUpdate(z){if(!this.canSendUpdates())return;let H={sessionId:this.id,update:z};this.connection.sessionUpdate(H).catch((J)=>{V.warn(`[AcpSession ${this.id}] Failed to send update:`,J)})}sendPlanUpdate(z){let H=z.map((J)=>({content:J.subject,priority:J.priority,status:J.status}));V.debug(`[AcpSession ${this.id}] Sending plan update with ${H.length} entries`),this.sendUpdate({sessionUpdate:"plan",entries:H})}async requestPermission(z){let H=this.pendingPrompt?.signal;if(z.type==="askUserQuestion")return this.requestUserQuestions(z,H);let J=z.kind?.toLowerCase()||"execute";if(this.shouldAutoApprove(J))return V.debug(`[AcpSession ${this.id}] Auto-approving ${J} in mode: ${this.mode}`),{approved:!0};if(this.mode==="plan"&&(J==="write"||J==="execute"))return V.debug(`[AcpSession ${this.id}] Rejecting ${J} in plan mode`),{approved:!1,reason:"Write and execute operations are not allowed in Plan mode"};try{let Q=f(),X=[];if(z.message)X.push({type:"content",content:{type:"text",text:z.message}});if(z.risks&&z.risks.length>0)X.push({type:"content",content:{type:"text",text:`Risks:
6
+ `)}canSendUpdates(){return!this.destroyed&&!this.connection.signal.aborted}async sendUpdateAndWait(z){if(!this.canSendUpdates())return!1;return await this.connection.sessionUpdate({sessionId:this.id,update:z}),this.canSendUpdates()}sendUpdate(z){if(!this.canSendUpdates())return;let H={sessionId:this.id,update:z};this.connection.sessionUpdate(H).catch((J)=>{V.warn(`[AcpSession ${this.id}] Failed to send update:`,J)})}sendPlanUpdate(z){let H=z.map((J)=>({content:J.subject,priority:J.priority,status:J.status}));V.debug(`[AcpSession ${this.id}] Sending plan update with ${H.length} entries`),this.sendUpdate({sessionUpdate:"plan",entries:H})}async requestPermission(z){let H=this.pendingPrompt?.signal;if(z.type==="askUserQuestion")return this.requestUserQuestions(z,H);let J=z.kind?.toLowerCase()||"execute";if(this.shouldAutoApprove(J))return V.debug(`[AcpSession ${this.id}] Auto-approving ${J} in mode: ${this.mode}`),{approved:!0};if(this.mode==="plan"&&(J==="write"||J==="execute"))return V.debug(`[AcpSession ${this.id}] Rejecting ${J} in plan mode`),{approved:!1,reason:"Write and execute operations are not allowed in Plan mode"};try{let Q=O(),X=[];if(z.message)X.push({type:"content",content:{type:"text",text:z.message}});if(z.risks&&z.risks.length>0)X.push({type:"content",content:{type:"text",text:`Risks:
7
7
  - ${z.risks.join(`
8
- - `)}`}});let Y=this.mapToolKind(J),Z={sessionId:this.id,options:[{optionId:"allow_once",name:"Allow once",kind:"allow_once"},{optionId:"allow_always",name:"Always allow",kind:"allow_always"},{optionId:"reject_once",name:"Deny once",kind:"reject_once"},{optionId:"reject_always",name:"Always deny",kind:"reject_always"}],toolCall:{toolCallId:Q,status:"pending",title:z.title||"Permission Required",content:X,kind:Y}},$=await this.waitForClientInteraction(this.connection.requestPermission(Z),H);if(!$)return{approved:!1,reason:P};let F=$.outcome;if(F.outcome==="cancelled")return{approved:!1,reason:"User cancelled the permission request"};let W=F.optionId;if(W==="allow_always")return{approved:!0,scope:"project"};if(W==="reject_always")return{approved:!1,scope:"project",reason:"User permanently denied the permission request"};let G=W==="allow_once";return{approved:G,scope:"once",reason:G?void 0:"User denied the operation"}}catch(Q){return V.warn(`[AcpSession ${this.id}] Permission request failed:`,Q),{approved:!1,reason:"Permission request failed"}}}async requestUserQuestions(z,H){let J=z.questions??[];if(J.length===0)return{approved:!1,reason:"No structured questions were provided"};if(J.some((X)=>X.multiSelect))return{approved:!1,reason:"ACP does not support multi-select question responses"};let Q={};try{for(let[X,Y]of J.entries()){let Z=Y.options.map((G,D)=>`answer:${X}:${D}`),$=`answer:${X}:cancel`,F=await this.waitForClientInteraction(this.connection.requestPermission({sessionId:this.id,options:[...Y.options.map((G,D)=>({optionId:Z[D],name:G.label,kind:"allow_once"})),{optionId:$,name:"Cancel",kind:"reject_once"}],toolCall:{toolCallId:f(),status:"pending",title:Y.header,kind:"think",content:[{type:"content",content:{type:"text",text:[Y.question,...Y.options.map((G)=>`${G.label}: ${G.description}`)].join(`
9
- `)}}]}}),H);if(!F)return{approved:!1,reason:P};if(F.outcome.outcome!=="selected")return{approved:!1,reason:"User cancelled the question prompt"};let W=Z.indexOf(F.outcome.optionId);if(W<0)return{approved:!1,reason:"User cancelled the question prompt"};Q[Y.header]=Y.options[W].label}return{approved:!0,answers:Q}}catch(X){return V.warn(`[AcpSession ${this.id}] Question request failed:`,X),{approved:!1,reason:"Question request failed"}}}async waitForClientInteraction(z,H){if(!H)return z;if(H.aborted)return;return new Promise((J,Q)=>{let X=!1,Y=($)=>{if(X)return;X=!0,H.removeEventListener("abort",Z),$()},Z=()=>Y(()=>J(void 0));if(H.addEventListener("abort",Z,{once:!0}),H.aborted)Z();z.then(($)=>Y(()=>J($)),($)=>Y(()=>Q($)))})}mapToolKind(z){return{readonly:"read",write:"edit",execute:"execute",read:"read",edit:"edit",delete:"delete",move:"move",search:"search",think:"think",fetch:"fetch"}[z||""]||"other"}}var U=B("Agent");class M{connection;sessions=new Map;sessionLoadQueues=new Map;clientCapabilities;destroyed=!1;constructor(z){this.connection=z}async initialize(z){return U.info("[BladeAgent] Initializing ACP connection"),U.debug(`[BladeAgent] Client capabilities: ${JSON.stringify(z.clientCapabilities)}`),this.clientCapabilities=z.clientCapabilities,{protocolVersion:g,agentCapabilities:{loadSession:!0,sessionCapabilities:{list:{},fork:{}},promptCapabilities:{image:!0,audio:!1,embeddedContext:!0},mcpCapabilities:{http:!0,sse:!0}}}}async authenticate(z){return}async newSession(z){this.assertNotDestroyed();let H=k("acp");U.info(`[BladeAgent] Creating new session: ${H}`),U.debug(`[BladeAgent] Session cwd: ${z.cwd||E()}`);let J=new w(H,z.cwd||E(),this.connection,this.clientCapabilities,{mcpServers:z.mcpServers});try{await J.initialize(),this.assertNotDestroyed()}catch(Q){throw await J.destroy().catch(()=>{return}),Q}return this.sessions.set(H,J),U.info(`[BladeAgent] Session ${H} created, scheduling available commands update`),J.sendAvailableCommandsDelayed(),this.buildChildSessionResponse(H)}async unstable_listSessions(z){if(z.cwd!=null&&!A.isAbsolute(z.cwd))throw Error("ACP session list cwd must be absolute");let H=await L.listSessionPage({cwd:z.cwd??void 0,cursor:z.cursor??void 0,limit:50,includeSubagents:!1});return{sessions:H.sessions.map((J)=>({sessionId:J.sessionId,cwd:J.projectPath,title:J.title??null,updatedAt:J.lastMessageTime})),nextCursor:H.nextCursor}}async unstable_forkSession(z){if(this.assertNotDestroyed(),!A.isAbsolute(z.cwd))throw Error("ACP session fork cwd must be absolute");let H=await L.forkSession(z.sessionId,{sourceProjectPath:z.cwd,targetProjectPath:z.cwd});this.assertNotDestroyed();let J=new w(H.sessionId,z.cwd,this.connection,this.clientCapabilities,{initialMessages:H.messages,mcpServers:z.mcpServers});try{await J.initialize(),this.assertNotDestroyed()}catch(Q){throw await J.destroy().catch(()=>{return}),Q}return this.sessions.set(H.sessionId,J),J.sendAvailableCommandsDelayed(),this.buildChildSessionResponse(H.sessionId)}async loadSession(z){this.assertNotDestroyed(),U.info(`[BladeAgent] Loading session: ${z.sessionId}`);let J=(this.sessionLoadQueues.get(z.sessionId)??Promise.resolve()).then(()=>this.replaceSession(z)),Q=J.then(()=>{return},()=>{return});this.sessionLoadQueues.set(z.sessionId,Q);try{return await J}finally{if(this.sessionLoadQueues.get(z.sessionId)===Q)this.sessionLoadQueues.delete(z.sessionId)}}async replaceSession(z){this.assertNotDestroyed();let H=this.sessions.get(z.sessionId);if(H)try{await H.destroy()}finally{if(this.sessions.get(z.sessionId)===H)this.sessions.delete(z.sessionId)}let J=await L.loadSession(z.sessionId,z.cwd),Q=new w(z.sessionId,z.cwd,this.connection,this.clientCapabilities,{initialMessages:J,mcpServers:z.mcpServers});try{await Q.initialize(),await Q.replayHistory(),this.assertNotDestroyed()}catch(X){throw await Q.destroy().catch(()=>{return}),X}return this.sessions.set(z.sessionId,Q),Q.sendAvailableCommandsDelayed(),this.buildSessionSetup()}buildChildSessionResponse(z){return{sessionId:z,...this.buildSessionSetup()}}assertNotDestroyed(){if(this.destroyed)throw Error("BladeAgent is destroyed")}buildSessionSetup(){let z=S(),H=z?.models||[],J=z?.currentModelId||H[0]?.id,Q=H.map((Y)=>({modelId:Y.id,name:Y.name||Y.id,description:Y.provider?`Provider: ${Y.provider}`:void 0}));return{modes:{availableModes:[{id:"default",name:"Default",description:"Ask for confirmation before all file edits and commands"},{id:"auto-edit",name:"Auto Edit",description:"Auto-approve file edits, ask for shell commands"},{id:"yolo",name:"Full Auto",description:"Auto-approve everything without confirmation"},{id:"plan",name:"Plan Only",description:"Read-only mode, no file changes or commands"}],currentModeId:"default"},models:Q.length>0?{availableModels:Q,currentModelId:J}:void 0}}async prompt(z){let H=this.sessions.get(z.sessionId);if(!H)throw Error(`Session not found: ${z.sessionId}`);return H.prompt(z)}async cancel(z){U.info(`[BladeAgent] Cancel notification received for session: ${z.sessionId}`);let H=this.sessions.get(z.sessionId);if(H)U.info("[BladeAgent] Found session, calling session.cancel()"),H.cancel();else U.warn(`[BladeAgent] Session not found for cancel: ${z.sessionId}`)}async setSessionMode(z){U.info(`[BladeAgent] Setting session mode: ${z.modeId}`);let H=this.sessions.get(z.sessionId);if(H)await H.setMode(z.modeId);return{}}async unstable_setSessionModel(z){U.info(`[BladeAgent] Setting session model: ${z.modelId}`);let H=this.sessions.get(z.sessionId);if(!H)throw Error(`Session not found: ${z.sessionId}`);return await H.setModel(z.modelId),{}}async destroy(){this.destroyed=!0,await Promise.all([...this.sessionLoadQueues.values()]),this.sessionLoadQueues.clear();let z;for(let H of this.sessions.values())try{await H.destroy()}catch(J){z??=J}this.sessions.clear();try{await I.getInstance().disconnectAll()}catch(H){z??=H}if(z!==void 0)throw z}}async function wz(){let z=p.toWeb(process.stdout),H=d.toWeb(process.stdin),J=N.ndJsonStream(z,H);await new N.AgentSideConnection((X)=>new M(X),J).closed}export{wz as runAcpIntegration};
8
+ - `)}`}});let Y=this.mapToolKind(J),Z={sessionId:this.id,options:[{optionId:"allow_once",name:"Allow once",kind:"allow_once"},{optionId:"allow_always",name:"Always allow",kind:"allow_always"},{optionId:"reject_once",name:"Deny once",kind:"reject_once"},{optionId:"reject_always",name:"Always deny",kind:"reject_always"}],toolCall:{toolCallId:Q,status:"pending",title:z.title||"Permission Required",content:X,kind:Y}},$=await this.waitForClientInteraction(this.connection.requestPermission(Z),H);if(!$)return{approved:!1,reason:j};let U=$.outcome;if(U.outcome==="cancelled")return{approved:!1,reason:"User cancelled the permission request"};let W=U.optionId;if(W==="allow_always")return{approved:!0,scope:"project"};if(W==="reject_always")return{approved:!1,scope:"project",reason:"User permanently denied the permission request"};let G=W==="allow_once";return{approved:G,scope:"once",reason:G?void 0:"User denied the operation"}}catch(Q){return V.warn(`[AcpSession ${this.id}] Permission request failed:`,Q),{approved:!1,reason:"Permission request failed"}}}async requestUserQuestions(z,H){let J=z.questions??[];if(J.length===0)return{approved:!1,reason:"No structured questions were provided"};if(J.some((X)=>X.multiSelect))return{approved:!1,reason:"ACP does not support multi-select question responses"};let Q={};try{for(let[X,Y]of J.entries()){let Z=Y.options.map((G,D)=>`answer:${X}:${D}`),$=`answer:${X}:cancel`,U=await this.waitForClientInteraction(this.connection.requestPermission({sessionId:this.id,options:[...Y.options.map((G,D)=>({optionId:Z[D],name:G.label,kind:"allow_once"})),{optionId:$,name:"Cancel",kind:"reject_once"}],toolCall:{toolCallId:O(),status:"pending",title:Y.header,kind:"think",content:[{type:"content",content:{type:"text",text:[Y.question,...Y.options.map((G)=>`${G.label}: ${G.description}`)].join(`
9
+ `)}}]}}),H);if(!U)return{approved:!1,reason:j};if(U.outcome.outcome!=="selected")return{approved:!1,reason:"User cancelled the question prompt"};let W=Z.indexOf(U.outcome.optionId);if(W<0)return{approved:!1,reason:"User cancelled the question prompt"};Q[Y.header]=Y.options[W].label}return{approved:!0,answers:Q}}catch(X){return V.warn(`[AcpSession ${this.id}] Question request failed:`,X),{approved:!1,reason:"Question request failed"}}}async waitForClientInteraction(z,H){if(!H)return z;if(H.aborted)return;return new Promise((J,Q)=>{let X=!1,Y=($)=>{if(X)return;X=!0,H.removeEventListener("abort",Z),$()},Z=()=>Y(()=>J(void 0));if(H.addEventListener("abort",Z,{once:!0}),H.aborted)Z();z.then(($)=>Y(()=>J($)),($)=>Y(()=>Q($)))})}mapToolKind(z){return{readonly:"read",write:"edit",execute:"execute",read:"read",edit:"edit",delete:"delete",move:"move",search:"search",think:"think",fetch:"fetch"}[z||""]||"other"}}var w=L("Agent");class f{connection;sessions=new Map;sessionLoadQueues=new Map;clientCapabilities;destroyed=!1;constructor(z){this.connection=z}async initialize(z){return w.info("[BladeAgent] Initializing ACP connection"),w.debug(`[BladeAgent] Client capabilities: ${JSON.stringify(z.clientCapabilities)}`),this.clientCapabilities=z.clientCapabilities,{protocolVersion:g,agentCapabilities:{loadSession:!0,sessionCapabilities:{list:{},fork:{}},promptCapabilities:{image:!0,audio:!1,embeddedContext:!0},mcpCapabilities:{http:!0,sse:!0}}}}async authenticate(z){return}async newSession(z){this.assertNotDestroyed();let H=S("acp");w.info(`[BladeAgent] Creating new session: ${H}`),w.debug(`[BladeAgent] Session cwd: ${z.cwd||M()}`);let J=new _(H,z.cwd||M(),this.connection,this.clientCapabilities,{mcpServers:z.mcpServers});try{await J.initialize(),this.assertNotDestroyed()}catch(Q){throw await J.destroy().catch(()=>{return}),Q}return this.sessions.set(H,J),w.info(`[BladeAgent] Session ${H} created, scheduling available commands update`),J.sendAvailableCommandsDelayed(),this.buildChildSessionResponse(H)}async unstable_listSessions(z){if(z.cwd!=null&&!k.isAbsolute(z.cwd))throw Error("ACP session list cwd must be absolute");let H=await N.listSessionPage({cwd:z.cwd??void 0,cursor:z.cursor??void 0,limit:50,includeSubagents:!1});return{sessions:H.sessions.map((J)=>({sessionId:J.sessionId,cwd:J.projectPath,title:J.title??null,updatedAt:J.lastMessageTime})),nextCursor:H.nextCursor}}async unstable_forkSession(z){if(this.assertNotDestroyed(),!k.isAbsolute(z.cwd))throw Error("ACP session fork cwd must be absolute");let H=await N.forkSession(z.sessionId,{sourceProjectPath:z.cwd,targetProjectPath:z.cwd});this.assertNotDestroyed();let J=new _(H.sessionId,z.cwd,this.connection,this.clientCapabilities,{initialMessages:H.messages,mcpServers:z.mcpServers});try{await J.initialize(),this.assertNotDestroyed()}catch(Q){throw await J.destroy().catch(()=>{return}),Q}return this.sessions.set(H.sessionId,J),J.sendAvailableCommandsDelayed(),this.buildChildSessionResponse(H.sessionId)}async loadSession(z){this.assertNotDestroyed(),w.info(`[BladeAgent] Loading session: ${z.sessionId}`);let J=(this.sessionLoadQueues.get(z.sessionId)??Promise.resolve()).then(()=>this.replaceSession(z)),Q=J.then(()=>{return},()=>{return});this.sessionLoadQueues.set(z.sessionId,Q);try{return await J}finally{if(this.sessionLoadQueues.get(z.sessionId)===Q)this.sessionLoadQueues.delete(z.sessionId)}}async replaceSession(z){this.assertNotDestroyed();let H=this.sessions.get(z.sessionId);if(H)try{await H.destroy()}finally{if(this.sessions.get(z.sessionId)===H)this.sessions.delete(z.sessionId)}let J=await N.loadSession(z.sessionId,z.cwd),Q=new _(z.sessionId,z.cwd,this.connection,this.clientCapabilities,{initialMessages:J,mcpServers:z.mcpServers});try{await Q.initialize(),await Q.replayHistory(),this.assertNotDestroyed()}catch(X){throw await Q.destroy().catch(()=>{return}),X}return this.sessions.set(z.sessionId,Q),Q.sendAvailableCommandsDelayed(),this.buildSessionSetup()}buildChildSessionResponse(z){return{sessionId:z,...this.buildSessionSetup()}}assertNotDestroyed(){if(this.destroyed)throw Error("BladeAgent is destroyed")}buildSessionSetup(){let z=I(),H=z?.models||[],J=z?.currentModelId||H[0]?.id,Q=H.map((Y)=>({modelId:Y.id,name:Y.name||Y.id,description:Y.provider?`Provider: ${Y.provider}`:void 0}));return{modes:{availableModes:[{id:"default",name:"Default",description:"Ask for confirmation before all file edits and commands"},{id:"auto-edit",name:"Auto Edit",description:"Auto-approve file edits, ask for shell commands"},{id:"yolo",name:"Full Auto",description:"Auto-approve everything without confirmation"},{id:"plan",name:"Plan Only",description:"Read-only mode, no file changes or commands"}],currentModeId:"default"},models:Q.length>0?{availableModels:Q,currentModelId:J}:void 0}}async prompt(z){let H=this.sessions.get(z.sessionId);if(!H)throw Error(`Session not found: ${z.sessionId}`);return H.prompt(z)}async cancel(z){w.info(`[BladeAgent] Cancel notification received for session: ${z.sessionId}`);let H=this.sessions.get(z.sessionId);if(H)w.info("[BladeAgent] Found session, calling session.cancel()"),H.cancel();else w.warn(`[BladeAgent] Session not found for cancel: ${z.sessionId}`)}async setSessionMode(z){w.info(`[BladeAgent] Setting session mode: ${z.modeId}`);let H=this.sessions.get(z.sessionId);if(H)await H.setMode(z.modeId);return{}}async unstable_setSessionModel(z){w.info(`[BladeAgent] Setting session model: ${z.modelId}`);let H=this.sessions.get(z.sessionId);if(!H)throw Error(`Session not found: ${z.sessionId}`);return await H.setModel(z.modelId),{}}async destroy(){this.destroyed=!0,await Promise.all([...this.sessionLoadQueues.values()]),this.sessionLoadQueues.clear();let z;for(let H of this.sessions.values())try{await H.destroy()}catch(J){z??=J}this.sessions.clear();try{await C.getInstance().disconnectAll()}catch(H){z??=H}if(z!==void 0)throw z}}async function Fz(){let z=p.toWeb(process.stdout),H=d.toWeb(process.stdin),J=P.ndJsonStream(z,H);await new P.AgentSideConnection((X)=>new f(X),J).closed}export{Fz as runAcpIntegration};
@@ -1,2 +1,2 @@
1
- var s={name:"blade-code",version:"0.7.7",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","test:unit":"node scripts/test.js unit","test:integration":"node scripts/test.js integration","test:real-api":"node scripts/test.js realApi","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","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",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",engines:{node:">=20.0.0"},optionalDependencies:{"@vscode/ripgrep":"^1.17.0","bun-pty":"^0.4.8","node-pty":"1.0.0"},dependencies:{"@agentclientprotocol/sdk":"^0.12.0","@ai-sdk/anthropic":"^3.0.7","@ai-sdk/azure":"^3.0.5","@ai-sdk/deepseek":"^2.0.4","@ai-sdk/google":"^3.0.4","@ai-sdk/openai":"^3.0.26","@ai-sdk/openai-compatible":"^2.0.4","@anthropic-ai/sandbox-runtime":"0.0.67","@inkjs/ui":"^2.0.0","@modelcontextprotocol/sdk":"^1.17.4",ahooks:"^3.9.6",ai:"^6.0.39","ansi-escapes":"^7.2.0","async-mutex":"^0.5.0",axios:"^1.12.2",chalk:"^5.4.1",diff:"^8.0.2","fast-glob":"^3.3.3","fuse.js":"^7.1.0","gray-matter":"^4.0.3",hono:"^4.7.10",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.17.21",lowlight:"^3.3.0","lru-cache":"^11.2.4",nanoid:"^5.1.6",open:"^10.1.2",openai:"^6.2.0",picomatch:"^4.0.3",react:"^19.1.1","react-dom":"^19.1.1",semver:"^7.7.3","string-width":"^8.1.0",undici:"^7.16.0","write-file-atomic":"^7.0.0",ws:"^8.18.0",yaml:"^2.8.1",yargs:"^18.0.0",zod:"^3.24.2","zod-to-json-schema":"^3.24.6",zustand:"^5.0.9"},devDependencies:{"@biomejs/biome":"^2.2.4","@types/bun":"^1.3.4","@types/json-schema":"^7.0.15","@types/lodash-es":"^4.17.12","@types/node":"^22.15.24","@types/picomatch":"^4.0.2","@types/react":"^19.1.1","@types/react-dom":"^19.1.1","@types/semver":"^7.7.1","@types/write-file-atomic":"^4.0.3","@types/ws":"^8.5.12","@types/yargs":"^17.0.33","@vitest/coverage-v8":"^3.0.0",jsdom:"^26.0.0",typescript:"^5.9.2",vitest:"^3.0.0"}};function r(){return{name:s.name,version:s.version,description:s.description}}function n(){return s.version}function o(){return s.name}function c(){return s.description}function a(){return`v${s.version}`}function d(){return`v${s.version} © 2025 Blade Code`}
2
- export{r as Ha,n as Ia,o as Ja,c as Ka,a as La,d as Ma};
1
+ var s={name:"blade-code",version:"0.7.8",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","test:unit":"node scripts/test.js unit","test:integration":"node scripts/test.js integration","test:real-api":"node scripts/test.js realApi","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","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",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",engines:{node:">=20.0.0"},optionalDependencies:{"@vscode/ripgrep":"^1.17.0","bun-pty":"^0.4.8","node-pty":"1.0.0"},dependencies:{"@agentclientprotocol/sdk":"^0.12.0","@ai-sdk/anthropic":"^3.0.7","@ai-sdk/azure":"^3.0.5","@ai-sdk/deepseek":"^2.0.4","@ai-sdk/google":"^3.0.4","@ai-sdk/openai":"^3.0.26","@ai-sdk/openai-compatible":"^2.0.4","@anthropic-ai/sandbox-runtime":"0.0.67","@inkjs/ui":"^2.0.0","@modelcontextprotocol/sdk":"^1.17.4",ahooks:"^3.9.6",ai:"^6.0.39","ansi-escapes":"^7.2.0","async-mutex":"^0.5.0",axios:"^1.12.2",chalk:"^5.4.1",diff:"^8.0.2","fast-glob":"^3.3.3","fuse.js":"^7.1.0","gray-matter":"^4.0.3",hono:"^4.7.10",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.17.21",lowlight:"^3.3.0","lru-cache":"^11.2.4",nanoid:"^5.1.6",open:"^10.1.2",openai:"^6.2.0",picomatch:"^4.0.3",react:"^19.1.1","react-dom":"^19.1.1",semver:"^7.7.3","string-width":"^8.1.0",undici:"^7.16.0","write-file-atomic":"^7.0.0",ws:"^8.18.0",yaml:"^2.8.1",yargs:"^18.0.0",zod:"^3.24.2","zod-to-json-schema":"^3.24.6",zustand:"^5.0.9"},devDependencies:{"@biomejs/biome":"^2.2.4","@types/bun":"^1.3.4","@types/json-schema":"^7.0.15","@types/lodash-es":"^4.17.12","@types/node":"^22.15.24","@types/picomatch":"^4.0.2","@types/react":"^19.1.1","@types/react-dom":"^19.1.1","@types/semver":"^7.7.1","@types/write-file-atomic":"^4.0.3","@types/ws":"^8.5.12","@types/yargs":"^17.0.33","@vitest/coverage-v8":"^3.0.0",jsdom:"^26.0.0",typescript:"^5.9.2",vitest:"^3.0.0"}};function r(){return{name:s.name,version:s.version,description:s.description}}function n(){return s.version}function o(){return s.name}function c(){return s.description}function a(){return`v${s.version}`}function d(){return`v${s.version} © 2025 Blade Code`}
2
+ export{r as Ia,n as Ja,o as Ka,c as La,a as Ma,d as Na};
@@ -1,2 +1,2 @@
1
- import{aa as V}from"./chunk-9ad7tt9s.js";import{Bb as Q}from"./chunk-v61bja34.js";import{z as k}from"zod";var Y=k.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9_-]*$/),K=k.array(k.string().trim().min(1).max(200)).max(128).transform((F)=>[...new Set(F)]),Z=k.object({description:k.string().trim().min(1).max(4096),prompt:k.string().trim().min(1).max(1e5),tools:K.optional(),disallowedTools:K.optional(),model:k.string().trim().min(1).max(200).optional(),permissionMode:k.enum(["default","acceptEdits","dontAsk","bypassPermissions","plan","ignore"]).optional(),maxTurns:k.number().int().positive().max(Q).optional(),isolation:k.enum(["none","worktree"]).optional()}).strict();function y(F){let w;try{w=JSON.parse(F)}catch{throw Error("Invalid JSON provided to --agents")}if(w===null||Array.isArray(w)||typeof w!=="object")throw Error("--agents must be a JSON object");let H=Object.entries(w);if(H.length>64)throw Error("--agents supports at most 64 definitions");return H.map(([B,W])=>{if(!Y.safeParse(B).success)throw Error(`Invalid --agents name "${B}": use letters, numbers, hyphens, or underscores`);let I=Z.safeParse(W);if(!I.success)throw Error(`Invalid --agents definition for "${B}"`);let q=I.data;return{name:B,description:q.description,systemPrompt:q.prompt,tools:q.tools,disallowedTools:q.disallowedTools,model:q.model,permissionMode:q.permissionMode===void 0?void 0:V(q.permissionMode),maxTurns:q.maxTurns,isolation:q.isolation,source:"flag"}})}
1
+ import{ba as V}from"./chunk-g7caymjr.js";import{Cb as Q}from"./chunk-4dmdn3a9.js";import{z as k}from"zod";var Y=k.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9_-]*$/),K=k.array(k.string().trim().min(1).max(200)).max(128).transform((F)=>[...new Set(F)]),Z=k.object({description:k.string().trim().min(1).max(4096),prompt:k.string().trim().min(1).max(1e5),tools:K.optional(),disallowedTools:K.optional(),model:k.string().trim().min(1).max(200).optional(),permissionMode:k.enum(["default","acceptEdits","dontAsk","bypassPermissions","plan","ignore"]).optional(),maxTurns:k.number().int().positive().max(Q).optional(),isolation:k.enum(["none","worktree"]).optional()}).strict();function y(F){let w;try{w=JSON.parse(F)}catch{throw Error("Invalid JSON provided to --agents")}if(w===null||Array.isArray(w)||typeof w!=="object")throw Error("--agents must be a JSON object");let H=Object.entries(w);if(H.length>64)throw Error("--agents supports at most 64 definitions");return H.map(([B,W])=>{if(!Y.safeParse(B).success)throw Error(`Invalid --agents name "${B}": use letters, numbers, hyphens, or underscores`);let I=Z.safeParse(W);if(!I.success)throw Error(`Invalid --agents definition for "${B}"`);let q=I.data;return{name:B,description:q.description,systemPrompt:q.prompt,tools:q.tools,disallowedTools:q.disallowedTools,model:q.model,permissionMode:q.permissionMode===void 0?void 0:V(q.permissionMode),maxTurns:q.maxTurns,isolation:q.isolation,source:"flag"}})}
2
2
  export{y};