blade-code 0.7.2 → 0.7.3
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.
- package/dist/blade.js +2 -2
- package/dist/{chunk-k18bq4mn.js → chunk-06awrjgg.js} +2 -2
- package/dist/chunk-1vngdr7p.js +1 -0
- package/dist/{chunk-8xdqtspw.js → chunk-29pqj0tb.js} +1 -1
- package/dist/{chunk-275gt6q1.js → chunk-373pmz70.js} +1 -1
- package/dist/{chunk-1w719wd9.js → chunk-38h3yh6z.js} +1 -1
- package/dist/{chunk-rmtcqc8q.js → chunk-5n7h04jg.js} +1 -1
- package/dist/{chunk-wc2xb6ge.js → chunk-5smacbk0.js} +2 -2
- package/dist/{chunk-cadngkwr.js → chunk-63dzf6hr.js} +1 -1
- package/dist/{chunk-67zx7ymj.js → chunk-87gff8b7.js} +1 -1
- package/dist/{chunk-g0h3rans.js → chunk-98fvxsvc.js} +1 -1
- package/dist/{chunk-m4a480k7.js → chunk-98jpdmgc.js} +2 -2
- package/dist/chunk-aevyre2t.js +1 -0
- package/dist/chunk-avebc3bj.js +2 -0
- package/dist/chunk-b4hmtjec.js +1 -0
- package/dist/{chunk-xa8szzc6.js → chunk-bmcc85nj.js} +1 -1
- package/dist/chunk-cqrg2pp7.js +1 -0
- package/dist/{chunk-m2k4h3bs.js → chunk-cw125vv3.js} +1 -1
- package/dist/{chunk-wcm0nc84.js → chunk-cyxb6fxe.js} +1 -1
- package/dist/{chunk-1mge0pzv.js → chunk-d0fata6n.js} +1 -1
- package/dist/{chunk-z0qxaky4.js → chunk-e21htmg4.js} +1 -1
- package/dist/{chunk-ztpseq3n.js → chunk-e9kfbbpm.js} +1 -1
- package/dist/{chunk-z72cp8f5.js → chunk-eady1q1w.js} +43 -43
- package/dist/{chunk-zcreym5g.js → chunk-gb0x14v5.js} +21 -21
- package/dist/{chunk-9zwf87ne.js → chunk-gjf2d2yg.js} +1 -1
- package/dist/{chunk-p9pthxkm.js → chunk-hs4j2fcr.js} +1 -1
- package/dist/{chunk-p6d7k1x6.js → chunk-jf48kahn.js} +3 -3
- package/dist/{chunk-cqrkeq20.js → chunk-k4behavv.js} +1 -1
- package/dist/chunk-k63hr1eg.js +7 -0
- package/dist/{chunk-cfrbsnfb.js → chunk-kfg3vx5z.js} +1 -1
- package/dist/{chunk-rr62k3ar.js → chunk-pvxp2gzr.js} +1 -1
- package/dist/{chunk-f9b8h03c.js → chunk-qxvp127d.js} +1 -1
- package/dist/{chunk-b6mxeey0.js → chunk-rkhhzc4r.js} +2 -2
- package/dist/{chunk-22gxb9qs.js → chunk-rtn0rb16.js} +2 -2
- package/dist/chunk-txjvy8qp.js +1 -0
- package/dist/{chunk-qw2wy4jc.js → chunk-vw3f4mbt.js} +1 -1
- package/dist/chunk-w1zb8zac.js +3 -0
- package/dist/chunk-wev2rke6.js +1 -0
- package/dist/{chunk-t6y57501.js → chunk-wp67n9q7.js} +335 -334
- package/dist/{chunk-t3pyakvc.js → chunk-y50fy1gq.js} +2 -2
- package/dist/web/assets/{FilePreview-DXDzoFFc.js → FilePreview-IDRQBiWa.js} +1 -1
- package/dist/web/assets/{MarkdownRenderer-BVPOLK1b.js → MarkdownRenderer-BgDKGD2u.js} +1 -1
- package/dist/web/assets/{McpModal-DeTf34Fw.js → McpModal-CJ2l7j-5.js} +1 -1
- package/dist/web/assets/{SettingsModal-CDLkPyL-.js → SettingsModal-BWpbIioU.js} +1 -1
- package/dist/web/assets/{SettingsStore-DYKvNeV_.js → SettingsStore-BZjkLZcL.js} +1 -1
- package/dist/web/assets/{SkillsModal-D784AUrt.js → SkillsModal-CRuRJrN-.js} +1 -1
- package/dist/web/assets/{TerminalPanel-BosJuIct.js → TerminalPanel-BnZPkS19.js} +1 -1
- package/dist/web/assets/{dialog-CgyS_4Eo.js → dialog-DYRMhlp_.js} +1 -1
- package/dist/web/assets/index-Bu13aXyE.css +1 -0
- package/dist/web/assets/index-D4CAglTd.js +10 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/chunk-108p1xw7.js +0 -1
- package/dist/chunk-42q476bq.js +0 -1
- package/dist/chunk-4hk7wfat.js +0 -3
- package/dist/chunk-7d1pn8a1.js +0 -2
- package/dist/chunk-abpvdaq2.js +0 -6
- package/dist/chunk-hv0bzn31.js +0 -1
- package/dist/chunk-j3k2c6tm.js +0 -1
- package/dist/chunk-je6r01h4.js +0 -1
- package/dist/chunk-nh37erd3.js +0 -1
- package/dist/web/assets/index-Abieffcr.js +0 -10
- package/dist/web/assets/index-CQ3JnuUf.css +0 -1
package/dist/blade.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{n as B}from"./chunk-
|
|
2
|
+
import{n as B}from"./chunk-bmcc85nj.js";import{aa as D,ba as F}from"./chunk-rtn0rb16.js";import"./chunk-5smacbk0.js";import"./chunk-rkhhzc4r.js";import"./chunk-jf48kahn.js";import{rb as E,tb as q}from"./chunk-63dzf6hr.js";import{Kb as H}from"./chunk-w1zb8zac.js";import{Nb as J}from"./chunk-kfg3vx5z.js";var X=process.argv.slice(2),$=v(X),w=$!==null;if($!==null)H.setGlobalDebug($);function v(Q){for(let W=0;W<Q.length;W+=1){let T=Q[W];if(T==="--debug"||T==="-d"){let N=Q[W+1];return N&&!N.startsWith("-")?N:!0}if(T.startsWith("--debug="))return T.slice(8)||!0}return null}function C(Q){return Q.length===1&&(Q[0]==="--version"||Q[0]==="-V")}function z(Q,...W){return Q.some((T)=>W.some((N)=>T===N||T.startsWith(`${N}=`)))}async function f(){if(C(X)){let{getVersion:K}=await import("./chunk-wev2rke6.js");console.log(K());return}let Q=D(process.cwd());if(F(Q),E(q()),process.getuid&&process.getuid()===0){let K=!!process.env.SUDO_USER,U=!!process.env.BLADE_ALLOW_ROOT;if(K&&!U)console.error(""),console.error("Error: 请不要使用 sudo 运行 blade"),console.error(""),console.error("原因:"),console.error(" 使用 sudo 会创建属于 root 的配置文件,"),console.error(" 导致普通用户无法访问。"),console.error(""),console.error("正确用法:"),console.error(" blade # 直接运行,不要加 sudo"),console.error(""),console.error("如果遇到权限错误,请运行:"),console.error(" sudo chown -R $USER:$USER ~/.blade/"),console.error(""),console.error("如果你确实需要以 root 运行(容器/CI),设置环境变量:"),console.error(" BLADE_ALLOW_ROOT=1 blade"),console.error(""),process.exit(1)}if(z(X,"--headless")){let{handleHeadlessMode:K}=await import("./chunk-98fvxsvc.js");if(await K())return}if(B(),z(X,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-hs4j2fcr.js");if(await K())return}if(X.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-k63hr1eg.js");await K();return}let[{default:W},{hideBin:T},{cliConfig:N,globalOptions:G},{loadConfiguration:I,validateOutput:L,validatePermissions:M},{doctorCommands:_},{installCommands:y},{mcpCommands:R},{serveCommand:S},{updateCommands:k},{webCommand:O}]=await Promise.all([import("yargs"),import("yargs/helpers"),import("./chunk-txjvy8qp.js"),import("./chunk-aevyre2t.js"),import("./chunk-38h3yh6z.js"),import("./chunk-qxvp127d.js"),import("./chunk-5n7h04jg.js"),import("./chunk-e9kfbbpm.js"),import("./chunk-373pmz70.js"),import("./chunk-29pqj0tb.js")]),x=W(T(process.argv)).scriptName(N.scriptName).usage(N.usage).version(N.version).locale(N.locale).showHelpOnFail(N.showHelpOnFail).demandCommand(0,"").recommendCommands().strict(N.strict).parserConfiguration({"populate--":!0}).options(G).middleware([I,M,L]).command(R).command(_).command(k).command(y).command(O).command(S).completion("completion",!1).help("help","Show help").alias("help","h").alias("version","V").fail((K,U,Z)=>{if(U){if(console.error("An error occurred:"),console.error(U.message),w&&U.stack)console.error(`
|
|
3
3
|
Stack trace:`),console.error(U.stack);else console.error(`
|
|
4
4
|
Run with --debug to show the stack trace.`);process.exit(1)}if(K)console.error("Error: Invalid arguments:"),console.error(K),console.error(`
|
|
5
|
-
Hint: Did you mean:`),Z.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let U=K._.slice(1),Z=U.length>0?U.join(" "):void 0,V=import("./chunk-
|
|
5
|
+
Hint: Did you mean:`),Z.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let U=K._.slice(1),Z=U.length>0?U.join(" "):void 0,V=import("./chunk-cqrg2pp7.js").then(({checkVersionOnStartup:A})=>A()),[{render:b},{createElement:P},{AppWrapper:h}]=await Promise.all([import("ink"),import("react"),import("./chunk-eady1q1w.js")]),Y={...K,initialMessage:Z,debug:K.debug,print:Boolean(K.print),versionCheckPromise:V};delete Y._,delete Y.$0,delete Y.message,b(P(h,Y),{patchConsole:!0,exitOnCtrlC:!1,alternateBuffer:!1})});try{await x.parse()}catch(K){console.error("Error: Parse error:",K),process.exit(1)}}if(J.main==J.module)f().catch(console.error);export{f as main};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var s={name:"blade-code",version:"0.7.
|
|
2
|
-
export{r as
|
|
1
|
+
var s={name:"blade-code",version:"0.7.3",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 Da,n as Ea,o as Fa,c as Ga,a as Ha,d as Ia};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Ab as a}from"./chunk-98jpdmgc.js";import"./chunk-w1zb8zac.js";import"./chunk-kfg3vx5z.js";export{a as createChatServiceAsync};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as Q,g as R,h as T,i as W}from"./chunk-
|
|
1
|
+
import{f as Q,g as R,h as T,i as W}from"./chunk-avebc3bj.js";import"./chunk-pvxp2gzr.js";import"./chunk-wp67n9q7.js";import"./chunk-e21htmg4.js";import"./chunk-y50fy1gq.js";import"./chunk-rtn0rb16.js";import{sa as J}from"./chunk-5smacbk0.js";import"./chunk-rkhhzc4r.js";import{Ea as M}from"./chunk-06awrjgg.js";import"./chunk-gb0x14v5.js";import"./chunk-cyxb6fxe.js";import"./chunk-jf48kahn.js";import"./chunk-63dzf6hr.js";import"./chunk-98jpdmgc.js";import"./chunk-w1zb8zac.js";import"./chunk-kfg3vx5z.js";import b from"chalk";import H from"open";var $=`
|
|
2
2
|
____ _ _
|
|
3
3
|
| __ )| | __ _ __| | ___
|
|
4
4
|
| _ \\| |/ _\` |/ _\` |/ _ \\
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as o}from"./chunk-
|
|
1
|
+
import{a as o}from"./chunk-gjf2d2yg.js";import"./chunk-kfg3vx5z.js";import{execSync as r}from"child_process";var l={command:"update",describe:"Check for updates and install if available",handler:async()=>{console.log("Checking for updates...");try{let e=await o(!0);if(console.log(`Current version: ${e.currentVersion}`),e.error){console.log(`Warning: ${e.error}`);return}if(e.latestVersion)console.log(`Latest version: ${e.latestVersion}`);if(e.hasUpdate&&e.latestVersion){console.log(""),console.log(`\x1B[33mUpdate available: ${e.currentVersion} -> ${e.latestVersion}\x1B[0m`),console.log(""),console.log("Updating...");try{r("npm install -g blade-code@latest --registry https://registry.npmjs.org",{stdio:"inherit"}),console.log(""),console.log("Update complete!")}catch(t){console.error("Error: Update failed. Please run manually:"),console.error(" npm install -g blade-code@latest"),process.exit(1)}}else console.log("You are running the latest version of Blade")}catch(e){console.error(`Error: Failed to check for updates: ${e instanceof Error?e.message:"未知错误"}`),process.exit(1)}}};export{l as updateCommands};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Aa as t}from"./chunk-rkhhzc4r.js";import{tb as r}from"./chunk-63dzf6hr.js";import"./chunk-w1zb8zac.js";import{Nb as s}from"./chunk-kfg3vx5z.js";var m={command:"doctor",describe:"Check the health of your Blade installation",handler:async()=>{console.log(`Running Blade health check...
|
|
2
2
|
`);let e=0;try{await t.getInstance().initialize(),console.log("[OK] Configuration: OK")}catch(o){console.log("[FAIL] Configuration: FAILED"),console.log(` Error: ${o instanceof Error?o.message:"未知错误"}`),e++}let n=process.version;if(parseInt(n.slice(1).split(".")[0])>=18)console.log(`[OK] Node.js version: ${n}`);else console.log(`[WARN] Node.js version: ${n} (recommended: v18+)`),e++;try{let o=await import("fs/promises"),i=r();await o.access(i,(await import("fs")).constants.R_OK|(await import("fs")).constants.W_OK),console.log("[OK] File system permissions: OK")}catch(o){console.log("[FAIL] File system permissions: FAILED"),console.log(" Error: Cannot read/write in current directory"),e++}try{await import("ink"),console.log("[OK] Dependencies: OK")}catch(o){console.log("[FAIL] Dependencies: FAILED"),console.log(" Error: Missing required dependencies"),e++}if(console.log(`
|
|
3
3
|
Health Check Summary:`),e===0)console.log("All checks passed! Blade is ready to use.");else console.log(`Warning: Found ${e} issue(s). Please resolve them for optimal performance.`),process.exit(1)}};export{m as doctorCommands};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{_ as O}from"./chunk-y50fy1gq.js";import{wa as J,ya as L}from"./chunk-5smacbk0.js";import"./chunk-rkhhzc4r.js";import"./chunk-06awrjgg.js";import"./chunk-cyxb6fxe.js";import{tb as H}from"./chunk-63dzf6hr.js";import"./chunk-w1zb8zac.js";import"./chunk-kfg3vx5z.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,4 +1,4 @@
|
|
|
1
|
-
import{Da as X0,Fa as w}from"./chunk-b6mxeey0.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 $0={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)"}},G0={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)"}},V0={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)"}},j0={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)"}},F0={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)"}},U0={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)"}},J0={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)"}},H0={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)"}},z0={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)"}},_0={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)"}},W0={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)"}},K0={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:$0,tags:["dark","popular"]},{id:"dracula",label:"Dracula",theme:G0,tags:["dark","popular"]},{id:"monokai",label:"Monokai",theme:V0,tags:["dark","classic"]},{id:"nord",label:"Nord",theme:j0,tags:["dark","minimal"]},{id:"solarized-light",label:"Solarized Light",theme:F0,tags:["light"]},{id:"solarized-dark",label:"Solarized Dark",theme:U0,tags:["dark"]},{id:"tokyo-night",label:"Tokyo Night",theme:J0,tags:["dark","popular"]},{id:"github",label:"GitHub",theme:H0,tags:["light","minimal"]},{id:"gruvbox",label:"Gruvbox",theme:z0,tags:["dark","warm"]},{id:"one-dark",label:"One Dark",theme:_0,tags:["dark","popular"]},{id:"catppuccin",label:"Catppuccin",theme:u0,tags:["dark","pastel"]},{id:"rose-pine",label:"Rose Pine",theme:W0,tags:["dark","elegant"]},{id:"kanagawa",label:"Kanagawa",theme:K0,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)"}},q0={...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",q0);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 w0={initializationStatus:"idle",initializationError:null,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null,tasks:[],awaitingSecondCtrlC:!1,thinkingModeEnabled:!1,subagentProgress:null},S=(X)=>({...w0,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)=>{X((Q)=>({app:{...Q.app,activeModal:"sessionSelector",sessionSelectorData: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 O0={isProcessing:!1,abortController:null,pendingCommands:[]},C=(X,Z)=>({...O0,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:[]}}))}}});var p0={config:null},f=(X)=>({...p0,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 x0={currentFocus:"main-input",previousFocus:null},b=(X)=>({...x0,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}}))}}});import{nanoid as E0}from"nanoid";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 P0(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=P0(X);if(!G)return 0;let U=Z/1e6*G.input+Q/1e6*G.output;if(Y&&G.cacheRead)U+=Y/1e6*G.cacheRead;if($&&G.cacheWrite)U+=$/1e6*G.cacheWrite;return Math.round(U*1e6)/1e6}var F={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,U=0,u=!1,H=[],W=[],q=!1,O=[],x=!1,z=[],j=0,V=!0;for(let p=0;p<Q.length;p++){let _=Q[p];if(q){if(_.match(F.diffEnd)){try{let K=JSON.parse(O.join(`
|
|
1
|
+
import{Aa as X0,Ca as w}from"./chunk-rkhhzc4r.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 $0={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)"}},G0={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)"}},V0={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)"}},j0={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)"}},F0={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)"}},U0={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)"}},J0={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)"}},H0={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)"}},z0={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)"}},_0={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)"}},W0={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)"}},K0={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:$0,tags:["dark","popular"]},{id:"dracula",label:"Dracula",theme:G0,tags:["dark","popular"]},{id:"monokai",label:"Monokai",theme:V0,tags:["dark","classic"]},{id:"nord",label:"Nord",theme:j0,tags:["dark","minimal"]},{id:"solarized-light",label:"Solarized Light",theme:F0,tags:["light"]},{id:"solarized-dark",label:"Solarized Dark",theme:U0,tags:["dark"]},{id:"tokyo-night",label:"Tokyo Night",theme:J0,tags:["dark","popular"]},{id:"github",label:"GitHub",theme:H0,tags:["light","minimal"]},{id:"gruvbox",label:"Gruvbox",theme:z0,tags:["dark","warm"]},{id:"one-dark",label:"One Dark",theme:_0,tags:["dark","popular"]},{id:"catppuccin",label:"Catppuccin",theme:u0,tags:["dark","pastel"]},{id:"rose-pine",label:"Rose Pine",theme:W0,tags:["dark","elegant"]},{id:"kanagawa",label:"Kanagawa",theme:K0,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)"}},q0={...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",q0);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 w0={initializationStatus:"idle",initializationError:null,activeModal:"none",sessionSelectorData:void 0,modelEditorTarget:null,tasks:[],awaitingSecondCtrlC:!1,thinkingModeEnabled:!1,subagentProgress:null},S=(X)=>({...w0,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)=>{X((Q)=>({app:{...Q.app,activeModal:"sessionSelector",sessionSelectorData: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 O0={isProcessing:!1,abortController:null,pendingCommands:[],recoveredSteeringCount:0},C=(X,Z)=>({...O0,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 p0={config:null},f=(X)=>({...p0,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 x0={currentFocus:"main-input",previousFocus:null},b=(X)=>({...x0,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}}))}}});import{nanoid as E0}from"nanoid";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 P0(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=P0(X);if(!G)return 0;let U=Z/1e6*G.input+Q/1e6*G.output;if(Y&&G.cacheRead)U+=Y/1e6*G.cacheRead;if($&&G.cacheWrite)U+=$/1e6*G.cacheWrite;return Math.round(U*1e6)/1e6}var F={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,U=0,u=!1,H=[],W=[],q=!1,O=[],x=!1,z=[],j=0,V=!0;for(let p=0;p<Q.length;p++){let _=Q[p];if(q){if(_.match(F.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(F.diffStart)){q=!0,O=[],V=!1;continue}if(Y){let K=_.match(F.codeBlock),P=_.trim()==="```";if(K&&K[1])U++,$.push(_);else if(P)if(U>0)U--,$.push(_);else{let Z0=$.join(`
|
|
4
4
|
`);Z.push({type:"code",content:Z0,language:G||void 0}),Y=!1,$=[],G=null,U=0,V=!1}else $.push(_);continue}let r=_.match(F.codeBlock);if(r){Y=!0,G=r[1]||null,U=0,V=!1;continue}let E=_.match(F.table),Y0=_.match(F.tableSeparator);if(E&&!u){if(p+1<Q.length){if(Q[p+1].match(F.tableSeparator)){u=!0,H=E[1].split("|").map((P)=>P.trim()).filter((P)=>P.length>0),W=[],V=!1;continue}}}if(u&&Y0)continue;if(u&&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;W.push(K);continue}if(u&&!E){if(H.length>0&&W.length>0)Z.push({type:"table",content:"",tableData:{headers:H,rows:W}});u=!1,H=[],W=[]}let N=_.match(F.blockquote);if(N){let K=N[1].length,P=N[2]||"";if(x&&K===j)z.push(P);else{if(x)Z.push({type:"blockquote",content:z.join(`
|
|
@@ -21,4 +21,4 @@ import{Da as X0,Fa as w}from"./chunk-b6mxeey0.js";import{nanoid as L0}from"nanoi
|
|
|
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((U)=>U.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
|
|
24
|
+
export{g as ca,o as da,F as ea,r0 as fa,c0 as ga,i0 as ha,o0 as ia,l0 as ja,n0 as ka,a0 as la,y0 as ma,J as na,u1 as oa,W1 as pa,K1 as qa,v as ra,q1 as sa,w1 as ta,O1 as ua,p1 as va,x1 as wa,P1 as xa,v1 as ya};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{realpathSync as G}from"fs";import{cwd as K}from"process";var D=null;function N(){let q="";if(typeof process<"u"&&typeof process.cwd==="function"&&typeof G==="function"){let F=K();try{q=G(F).normalize("NFC")}catch{q=F.normalize("NFC")}}return{cwd:q,originalCwd:q,projectRoot:q}}function x(){if(!D)D=N();return D}function H(){return x().cwd}function Z(q){x().cwd=q.normalize("NFC")}function J(){return x().originalCwd}function $(){return x().projectRoot}function b(q){x().projectRoot=q.normalize("NFC")}var Q;((B)=>{B.DEFAULT="default";B.AUTO_EDIT="autoEdit";B.YOLO="yolo";B.PLAN="plan"})(Q||={});import{AsyncLocalStorage as R}from"async_hooks";var U=new R;function V(){return U.getStore()??H()}function W(){try{return V()}catch{return J()}}
|
|
2
|
-
export{Z as
|
|
2
|
+
export{Z as ob,J as pb,$ as qb,b as rb,Q as sb,W as tb};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{O as c,P as g,Q as m,T as d,V as r}from"./chunk-wp67n9q7.js";import{tb as n}from"./chunk-63dzf6hr.js";async function h(){if((await c().initialize(n(),[])).plugins.length>0)await g()}async function R(e){let t=e.message||e._?.[0];if(typeof t==="string"&&t.trim())return t;let a=e.stdin??process.stdin;if(!a.isTTY){let u=[];for await(let l of a)u.push(l);return Buffer.concat(u).toString("utf-8").trim()}if(e.defaultMessage!==void 0)return e.defaultMessage;throw Error("No input provided")}async function x(e){if(!d(e))return{mode:"agent",content:e};let t=await r(e,{cwd:n(),workspaceRoot:n()});if(!t.success)return{mode:"output",content:`Error: ${t.error||"未知错误"}`,exitCode:1};let a=t.data;if(a?.action==="invoke_skill"){let{skillName:u,skillArgs:l}=a;return{mode:"agent",content:l?`Please use the "${u}" skill to help me with: ${l}`:`Please use the "${u}" skill.`}}if(a?.action==="invoke_custom_command"||a?.action==="invoke_plugin_command"){let u=a.processedContent;return{mode:"agent",content:`# Custom Command: /${a.commandName}
|
|
2
2
|
|
|
3
3
|
${u}`}}return{mode:"output",content:t.content||t.message||"",exitCode:0}}function i(e){if(!(e instanceof Error))return!1;return e.message.includes("未找到会话")||e.message.includes("ENOENT")||e.message.includes("no such file")}async function f(e){try{return await m.loadSession(e,n())}catch(t){if(i(t))return null;throw t}}async function _(e){if(e.resume===!0||e.resume==="true")throw Error("--resume without a session ID is only supported in interactive UI mode");if(typeof e.resume==="string"&&e.resume.length>0){if(e.forkSession)return m.forkSession(e.resume,{newSessionId:e.sessionId,targetProjectPath:n()});return{sessionId:e.resume,messages:await m.loadSession(e.resume)}}if(e.continue){let t=await m.listSessions();if(t.length>0){let a=t[0].sessionId;if(e.forkSession)return m.forkSession(a,{newSessionId:e.sessionId,targetProjectPath:n()});return{sessionId:a,messages:await m.loadSession(a)}}if(e.forkSession)throw Error("Cannot fork: no sessions are available to continue")}if(e.sessionId)return{sessionId:e.sessionId,messages:await f(e.sessionId)??[]};return{sessionId:`${e.fallbackSessionPrefix}-${Date.now()}`,messages:[]}}
|
|
4
4
|
export{h as p,R as q,x as r,_ as s};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{p,q as d,r as u,s as m}from"./chunk-
|
|
1
|
+
import{p,q as d,r as u,s as m}from"./chunk-87gff8b7.js";import{t as c}from"./chunk-vw3f4mbt.js";import{v as z,w as g,x as v}from"./chunk-cw125vv3.js";import{y as h}from"./chunk-k4behavv.js";import{H as y,J as C,K as E,M as W,N as S}from"./chunk-wp67n9q7.js";import"./chunk-e21htmg4.js";import"./chunk-y50fy1gq.js";import"./chunk-rtn0rb16.js";import"./chunk-5smacbk0.js";import"./chunk-rkhhzc4r.js";import"./chunk-06awrjgg.js";import{Va as F}from"./chunk-gb0x14v5.js";import"./chunk-cyxb6fxe.js";import"./chunk-jf48kahn.js";import{sb as w,tb as L}from"./chunk-63dzf6hr.js";import"./chunk-98jpdmgc.js";import"./chunk-w1zb8zac.js";import"./chunk-kfg3vx5z.js";import bq from"yargs";import{hideBin as Dq}from"yargs/helpers";import{z as $}from"zod";import{z as Q}from"zod";var k=1,D=Q.object({event_version:Q.literal(k)}),o=D.extend({type:Q.literal("content_delta"),delta:Q.string()}),a=D.extend({type:Q.literal("thinking_delta"),delta:Q.string()}),e=D.extend({type:Q.literal("thinking"),content:Q.string()}),t=D.extend({type:Q.literal("stream_end")}),qq=D.extend({type:Q.literal("content"),content:Q.string()}),Gq=D.extend({type:Q.literal("tool_start"),tool_name:Q.string(),summary:Q.string(),target:Q.string().optional(),tool_kind:Q.enum(["readonly","write","execute"]).optional()}),Qq=D.extend({type:Q.literal("tool_result"),tool_name:Q.string(),summary:Q.string(),target:Q.string().optional(),tool_kind:Q.enum(["readonly","write","execute"]).optional(),success:Q.boolean().optional(),error_type:Q.string().optional(),error_message:Q.string().optional()}),Xq=D.extend({type:Q.literal("phase"),phase:Q.enum(["turn","searching","inspecting","target_hit","executing","completed"]),status:Q.enum(["ongoing","hit","done"]),message:Q.string(),turn:Q.number().optional(),tool_name:Q.string().optional(),target:Q.string().optional()}),Yq=D.extend({type:Q.literal("tool_detail"),tool_name:Q.string(),detail:Q.string()}),Zq=D.extend({type:Q.literal("task_update"),tasks:Q.array(W)}),$q=D.extend({type:Q.literal("token_usage"),input_tokens:Q.number(),output_tokens:Q.number(),total_tokens:Q.number(),max_context_tokens:Q.number()}),Uq=D.extend({type:Q.literal("compacting"),state:Q.enum(["started","completed"])}),Kq=D.extend({type:Q.literal("turn_limit"),turns_count:Q.number(),action:Q.literal("continue")}),Vq=D.extend({type:Q.literal("output"),content:Q.string(),exit_code:Q.number()}),_q=D.extend({type:Q.literal("error"),message:Q.string()}),Tq=Q.discriminatedUnion("type",[o,a,e,t,qq,Gq,Qq,Xq,Yq,Zq,$q,Uq,Kq,Vq,_q]);function H(G,Y){return{event_version:k,type:G,...Y}}function Aq(G){if(G?.signal)return{signal:G.signal,dispose:()=>{return}};let Y=new AbortController,Z=()=>Y.abort("interrupt");return process.once("SIGINT",Z),process.once("SIGTERM",Z),{signal:Y.signal,dispose:()=>{process.removeListener("SIGINT",Z),process.removeListener("SIGTERM",Z)}}}var Mq=$.enum(["text","jsonl"]),Rq=$.object({headless:$.boolean().optional(),message:$.string().optional(),_:$.array($.union([$.string(),$.number()])).optional(),model:$.string().optional(),systemPrompt:$.string().optional(),appendSystemPrompt:$.string().optional(),maxTurns:$.number().int().refine((G)=>G===-1||G>0,{message:"must be -1 or a positive integer"}).optional(),permissionMode:$.nativeEnum(w).optional(),mcpConfig:$.array($.string()).optional(),strictMcpConfig:$.boolean().optional(),sessionId:$.string().optional(),allowedTools:$.array($.string()).optional(),disallowedTools:$.array($.string()).optional(),agents:$.string().optional(),continue:$.boolean().optional(),resume:$.union([$.string(),$.boolean()]).optional(),forkSession:$.boolean().optional(),outputFormat:Mq.optional()});class l{openedThinking=!1;wroteAssistantContent=!1;markAssistantContent(){this.wroteAssistantContent=!0}setThinkingOpened(G){this.openedThinking=G}hasOpenThinking(){return this.openedThinking}completeStream(){let G={openedThinking:this.openedThinking,wroteAssistantContent:this.wroteAssistantContent};return this.openedThinking=!1,this.wroteAssistantContent=!1,G}}function jq(G){return G.issues.map((Y)=>`${Y.path.join(".")||"options"}: ${Y.message}`).join("; ")}function fq(G){let Y=Rq.safeParse(G);if(!Y.success)throw Error(`Invalid headless options: ${jq(Y.error)}`);return Y.data}function Bq(G){return G.command("* [message]","Run full agent loop without Ink UI and print events to the terminal",(Y)=>Y.positional("message",{describe:"Message to process",type:"string"}).option("headless",{type:"boolean",describe:"Run full agent loop without Ink UI and print events to the terminal"}).option("model",{describe:"Model ID for this run",type:"string"}).option("system-prompt",{describe:"Replace the default system prompt",type:"string"}).option("append-system-prompt",{describe:"Append a system prompt to the default system prompt",type:"string"}).option("max-turns",{alias:["maxTurns"],describe:"Maximum conversation turns (-1: unlimited, N>0: limit to N turns)",type:"number"}).option("output-format",{alias:["outputFormat"],choices:["text","jsonl"],describe:"Headless output format",type:"string"}),async(Y)=>{if(!Y.headless)return;let Z=await Nq(Y);process.exit(Z)})}function A(G,Y=""){G.write(`${Y}
|
|
2
2
|
`)}function Iq(G){return`[task] [${G.status}] ${G.subject}`}function Jq(){return{requestConfirmation:async(G)=>({approved:!0,reason:"headless-auto-approved",scope:"session"})}}function xq(G){if(!(G instanceof Error))return"Unknown error";let q=G.lastError??G;if(q.responseBody)try{let V=JSON.parse(q.responseBody)?.error?.message;if(V)return q.statusCode?`${V} (HTTP ${q.statusCode})`:V}catch{}let X=G.message.match(/Last error:\s*(.+)$/);if(X)return X[1];return G.message}function Pq(G){return G==="jsonl"?"jsonl":"text"}function T(G,Y){let Z=(...q)=>{for(let X of q){let _=Y[X];if(typeof _==="string"&&_.trim()!=="")return _}return};switch(G){case"Read":case"Edit":case"Write":case"UndoEdit":return Z("file_path");case"NotebookEdit":return Z("notebook_path");case"Grep":return Z("path","pattern");case"Glob":return Z("pattern");case"WebFetch":return Z("url");case"WebSearch":return Z("query");case"Bash":return Z("command","description");case"Task":return Z("description");case"LSP":return Z("filePath","operation");case"EnterWorktree":return Z("name");case"ExitWorktree":return Z("action");default:return}}function Lq(G,Y,Z,q){let X=new Set(["Glob","Grep","WebSearch","LS"]),_=new Set(["Read","WebFetch"]);if(new Set(["Edit","Write","NotebookEdit","Bash","LSP","UndoEdit","EnterWorktree","ExitWorktree"]).has(G)&&!q.targetLocked)return{phase:"target_hit",status:"hit",message:`Target locked: ${Y}`,shouldLockTarget:!0};if(q.targetLocked)return{phase:"executing",status:"hit",message:Z?`Working within target: ${Y}`:`Executing: ${Y}`,shouldLockTarget:!1};if(X.has(G))return{phase:"searching",status:"ongoing",message:`Still searching: ${Y}`,shouldLockTarget:!1};if(_.has(G))return{phase:"inspecting",status:"ongoing",message:`Inspecting candidate: ${Y}`,shouldLockTarget:!1};return{phase:"executing",status:q.targetLocked?"hit":"ongoing",message:`Executing: ${Y}`,shouldLockTarget:!1}}function O(G,Y){let Z=(q,X)=>{G.stdout.write(`${JSON.stringify(H(q,X))}
|
|
3
3
|
`)};return{contentDelta(q){if(Y==="jsonl"){Z("content_delta",{delta:q});return}G.stdout.write(q)},thinkingDelta(q,X){if(Y==="jsonl")return Z("thinking_delta",{delta:q}),X;if(!X)G.stderr.write("[thinking] ");return G.stderr.write(q),!0},thinking(q){if(Y==="jsonl"){Z("thinking",{content:q});return}A(G.stderr,`[thinking] ${q}`)},streamEnd(q,X){if(Y==="jsonl"){Z("stream_end",{});return}if(X)G.stderr.write(`
|
|
4
4
|
`);if(q)G.stdout.write(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Lb as R}from"./chunk-w1zb8zac.js";var m=["anthropic","openai","deepseek","google-generative-ai","groq","openrouter"],d={anthropic:"",openai:"","google-generative-ai":"",deepseek:"",groq:"",openrouter:"",azure:"",ollama:"",together:"",fireworks:"",mistral:"",cohere:"",perplexity:"",xai:"",default:""},g={anthropic:"https://api.anthropic.com",openai:"https://api.openai.com/v1",google:"https://generativelanguage.googleapis.com/v1beta",deepseek:"https://api.deepseek.com/v1",groq:"https://api.groq.com/openai/v1",openrouter:"https://openrouter.ai/api/v1",togetherai:"https://api.together.xyz/v1","fireworks-ai":"https://api.fireworks.ai/inference/v1",mistral:"https://api.mistral.ai/v1",cohere:"https://api.cohere.ai/v1",perplexity:"https://api.perplexity.ai",xai:"https://api.x.ai/v1",cerebras:"https://api.cerebras.ai/v1","novita-ai":"https://api.novita.ai/v3/openai",nvidia:"https://integrate.api.nvidia.com/v1"},h={anthropic:{"anthropic-beta":"claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"},openrouter:{"HTTP-Referer":"https://github.com/anthropics/blade","X-Title":"Blade"},cerebras:{"X-Cerebras-3rd-Party-Integration":"blade"},vercel:{"http-referer":"https://github.com/anthropics/blade","x-title":"blade"},zenmux:{"HTTP-Referer":"https://github.com/anthropics/blade","X-Title":"blade"}},T=(Q)=>{return h[Q]||{}};import{createAnthropic as k}from"@ai-sdk/anthropic";import{createAzure as I}from"@ai-sdk/azure";import{createDeepSeek as A}from"@ai-sdk/deepseek";import{createGoogleGenerativeAI as U}from"@ai-sdk/google";import{createOpenAI as C}from"@ai-sdk/openai";import{createOpenAICompatible as H}from"@ai-sdk/openai-compatible";import{generateText as v,jsonSchema as f,streamText as b}from"ai";var M=new Set(["user-cancel","interrupt","sibling-error","timeout"]);function E(Q){return typeof Q==="string"&&M.has(Q)}function n(Q){if(!Q.aborted)return;if(E(Q.reason))return Q.reason;return"user-cancel"}function t(Q){if(E(Q))return!0;if(!(Q instanceof Error))return!1;if(Q.name==="AbortError")return!0;if(Q instanceof DOMException&&Q.name==="AbortError")return!0;if(Q.message.includes("aborted"))return!0;return!1}function r(...Q){let q=Q.filter(Boolean);if(q.length===0)return new AbortController().signal;if(q.length===1)return q[0];let Y=AbortSignal;if(typeof Y.any==="function")return Y.any(q);for(let $ of q)if($.aborted)return $;let J=new AbortController,X=new Map;for(let $ of q){let B=()=>{J.abort($.reason);for(let[Z,F]of X)Z.removeEventListener("abort",F)};X.set($,B)}for(let[$,B]of X)$.addEventListener("abort",B,{once:!0});return J.signal}function D(Q,q,Y){let J=Y?.throwOnAbort??!1;if(q?.aborted){if(J)return Promise.reject(new DOMException("Aborted","AbortError"));return Promise.resolve()}return new Promise((X,$)=>{let B,Z=setTimeout(()=>{if(q&&B)q.removeEventListener("abort",B);X()},Q);if(q)B=()=>{if(clearTimeout(Z),J)$(new DOMException("Aborted","AbortError"));else X()},q.addEventListener("abort",B,{once:!0})})}var z=R("Chat");function x(Q){let q=new Set;for(let Y of Q)if(Y.role==="assistant"&&Y.tool_calls)for(let J of Y.tool_calls)q.add(J.id);return Q.filter((Y)=>{if(Y.role==="tool"){if(!Y.tool_call_id)return!1;return q.has(Y.tool_call_id)}return!0})}function V(Q){if(typeof Q==="string")return Q;return Q.filter((q)=>q.type==="text").map((q)=>q.text).join(`
|
|
2
2
|
`)}function y(Q){let q=Q;return q.text??q.textDelta??q.delta}function u(Q,q={}){try{return JSON.parse(Q)}catch{return z.warn("[VercelAIChatService] Failed to parse JSON, using fallback",{str:Q}),q}}class O{model;config;constructor(Q){this.config=Q,this.model=this.createModel(Q),z.debug("[VercelAIChatService] Initialized",{provider:Q.provider,model:Q.model})}createModel(Q){let{provider:q,apiKey:Y,baseUrl:J,model:X,customHeaders:$,apiVersion:B}=Q;switch(q){case"openai":return C({apiKey:Y,baseURL:J||void 0,headers:$})(X);case"anthropic":return k({apiKey:Y,baseURL:J||void 0,headers:$})(X);case"gemini":{if(J&&!this.isGeminiOfficialUrl(J))return H({name:"gemini",apiKey:Y,baseURL:J,headers:$})(X);return U({apiKey:Y,baseURL:J||void 0})(X)}case"google":case"google-generative-ai":case"google-vertex":{if(J&&!this.isGeminiOfficialUrl(J))return H({name:q,apiKey:Y,baseURL:J,headers:$})(X);return U({apiKey:Y,baseURL:J||void 0})(X)}case"azure-openai":{let Z=this.extractAzureResourceName(J);if(Z)return I({apiKey:Y,resourceName:Z,apiVersion:B||"2024-08-01-preview"})(X);let F=this.buildAzureBaseUrl(J,X);return H({name:"azure-openai",apiKey:Y,baseURL:F,headers:{...$,"api-key":Y},queryParams:{"api-version":B||"2024-08-01-preview"}})(X)}case"azure":{let Z=this.extractAzureResourceName(J);if(Z)return I({apiKey:Y,resourceName:Z,apiVersion:B||"2024-08-01-preview"})(X);let F=this.buildAzureBaseUrl(J,X);return H({name:"azure-openai",apiKey:Y,baseURL:F,headers:{...$,"api-key":Y},queryParams:{"api-version":B||"2024-08-01-preview"}})(X)}case"deepseek":return A({apiKey:Y,baseURL:J||void 0,headers:$})(X);default:return H({name:q,apiKey:Y,baseURL:J,headers:$})(X)}}extractAzureResourceName(Q){if(!Q)return;let q=Q.match(/https:\/\/([^.]+)\.openai\.azure(?:\.com|\.us|\.cn|\.de)/);return q?q[1]:void 0}buildAzureBaseUrl(Q,q){if(!Q)return"";let Y=Q.replace(/\/$/,"").replace(/\?.*$/,"");if(Y.includes("/openai/deployments/"))return Y;return`${Y}/openai/deployments/${q}`}isGeminiOfficialUrl(Q){return Q.includes("generativelanguage.googleapis.com")||Q.includes("aiplatform.googleapis.com")}needsThinkingReplayMetadata(){return/deepseek/i.test([this.config.provider,this.config.model,this.config.baseUrl].join(" "))}getThinkingReplayProviderOptions(Q){let q=Q?.trim();if(!q||!this.needsThinkingReplayMetadata())return;return{openaiCompatible:{reasoning_content:q}}}shouldFlattenDeepSeekThinkingToolHistory(){return this.needsThinkingReplayMetadata()}flattenDeepSeekThinkingToolHistory(Q){let q=[],Y,J=()=>{if(!Y)return;q.push({role:"assistant",content:V(Y.content).trim()||"I will use the requested tool and continue from its result."}),Y=void 0};for(let X of Q){if(X.role==="system"){J(),q.push({role:"user",content:`<system>
|
|
3
3
|
${V(X.content)}
|
|
4
4
|
</system>`});continue}if(X.role==="assistant"&&X.tool_calls&&X.tool_calls.length>0&&X.reasoningContent?.trim()){J(),Y=X;continue}if(X.role==="tool"&&Y){let $=Y.tool_calls?.find((Z)=>Z.id===X.tool_call_id),B=$?.type==="function"?$.function:void 0;q.push({role:"user",content:`Tool result for ${X.name||B?.name||"tool"}${B?.arguments?`(${B.arguments})`:""}:
|
|
@@ -6,4 +6,4 @@ ${V(X.content)}
|
|
|
6
6
|
|
|
7
7
|
Continue from this tool result.`});continue}J(),q.push(X)}return J(),q}convertMessages(Q){let q=[],Y=this.needsThinkingReplayMetadata(),J=this.shouldFlattenDeepSeekThinkingToolHistory()?this.flattenDeepSeekThinkingToolHistory(Q):Q;for(let X of J)if(X.role==="system")if(Array.isArray(X.content)){let $=X.content.find((Z)=>Z.type==="text"),B={role:"system",content:V(X.content)};if($?.providerOptions)B.providerOptions=$.providerOptions;q.push(B)}else q.push({role:"system",content:X.content});else if(X.role==="user")if(Array.isArray(X.content)){let $=X.content.map((B)=>{if(B.type==="text"){let Z={type:"text",text:B.text};if(B.providerOptions)Z.providerOptions=B.providerOptions;return Z}return{type:"image",image:B.image_url.url}});q.push({role:"user",content:$})}else q.push({role:"user",content:X.content});else if(X.role==="assistant")if(X.tool_calls&&X.tool_calls.length>0){let $=X.tool_calls.map((W)=>{let G=W.function;return{type:"tool-call",toolCallId:W.id,toolName:G?.name||"",input:u(G?.arguments||"{}",{})}}),B=V(X.content),Z=Y&&X.reasoningContent?.trim()?[{type:"reasoning",text:X.reasoningContent}]:[],F=this.getThinkingReplayProviderOptions(X.reasoningContent);if(B){let W={role:"assistant",content:[...Z,{type:"text",text:B},...$]};if(F)W.providerOptions=F;q.push(W)}else if(Z.length>0){let W={role:"assistant",content:[...Z,...$]};if(F)W.providerOptions=F;q.push(W)}else q.push({role:"assistant",content:$})}else if(Y&&X.reasoningContent?.trim()){let $=V(X.content),B=[{type:"reasoning",text:X.reasoningContent}];if($)B.push({type:"text",text:$});let Z={role:"assistant",content:B},F=this.getThinkingReplayProviderOptions(X.reasoningContent);if(F)Z.providerOptions=F;q.push(Z)}else q.push({role:"assistant",content:V(X.content)});else if(X.role==="tool")q.push({role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:X.name||"unknown",output:{type:"text",value:V(X.content)}}]});if(this.config.enablePromptCaching&&this.config.provider==="anthropic"){let X=0;for(let $ of q)if($.role==="system"&&X<2)$.providerOptions={anthropic:{cacheControl:{type:"ephemeral"}}},X++;for(let $=q.length-1;$>=0;$--)if(q[$].role==="user"){q[$].providerOptions={anthropic:{cacheControl:{type:"ephemeral"}}};break}}return q}convertTools(Q){if(!Q||Q.length===0)return;let q={};for(let Y of Q)q[Y.name]={description:Y.description,inputSchema:f(Y.parameters)};return q}convertToolCalls(Q){return Q.map((q)=>({id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.args??q.input??{})}}))}convertUsage(Q,q){if(!Q)return;let Y=Q.promptTokens??Q.inputTokens??0,J=Q.completionTokens??Q.outputTokens??0,X={promptTokens:Y,completionTokens:J,totalTokens:Q.totalTokens??Y+J};if(Q.reasoningTokens)X.reasoningTokens=Q.reasoningTokens;if(q?.anthropic){if(q.anthropic.cacheCreationInputTokens!==void 0)X.cacheCreationInputTokens=q.anthropic.cacheCreationInputTokens;if(q.anthropic.cacheReadInputTokens!==void 0)X.cacheReadInputTokens=q.anthropic.cacheReadInputTokens}return X}isFallbackableError(Q){let q=[],Y=new Set,J=Q;while(J&&!Y.has(J)){if(q.push(J),Y.add(J),typeof J!=="object")break;let Z=J;J=Z.lastError??Z.cause}let X=q.filter((Z)=>Z instanceof Error).map((Z)=>Z.message.toLowerCase()),$=X.join(`
|
|
8
8
|
`);if(["prompt_too_long","prompt is too long","maximum context length","context length exceeded","context_length_exceeded","request too large"].some((Z)=>$.includes(Z)))return!1;let B=["timeout","timed out","econnreset","econnrefused","enotfound","eai_again","etimedout","fetch failed","network error","socket hang up","connection reset","connection refused"];if(B.some((Z)=>$.includes(Z)))return!0;for(let Z of q){if(!Z||typeof Z!=="object")continue;let F=Z,W=F.status??F.statusCode??F.response?.status??F.response?.statusCode;if(W!==void 0&&([408,409,429].includes(W)||W>=500))return!0;let G=F.code;if(typeof G==="string"&&B.some((L)=>G.toLowerCase().includes(L)))return!0}for(let Z of X){let F=Z.match(/\bstatus(?:\s+code)?[:\s]*(\d{3})\b/),W=F?Number(F[1]):void 0;if(W!==void 0&&([408,409,429].includes(W)||W>=500))return!0}return!1}async retryWithBackoff(Q,q,Y=2,J=1000){let X;for(let $=0;$<=Y;$++)try{return await Q()}catch(B){if(X=B,q?.aborted)await D(0,q,{throwOnAbort:!0});if($>=Y)break;if(!this.isFallbackableError(B))throw B;let Z=J*Math.pow(2,$);z.debug(`[VercelAIChatService] Retry ${$+1}/${Y} after ${Z}ms`),await D(Z,q,{throwOnAbort:!0})}throw X}getFallbackModelIds(){let Q=[];if(this.config.fallbackModels&&this.config.fallbackModels.length>0)Q.push(...this.config.fallbackModels);else if(this.config.fallbackModel)Q.push(this.config.fallbackModel);return Q}getThinkingProviderOptions(){if(!this.config.supportsThinking)return;let Q=this.config.thinkingMode??"budget";if(Q==="off")return;let q=Q==="adaptive",Y=this.config.thinkingBudget??1e4;if(this.config.provider==="anthropic")return{anthropic:{thinking:q?{type:"enabled",budgetTokens:0}:{type:"enabled",budgetTokens:Y}}};if(this.config.provider==="deepseek"||/deepseek/i.test(this.config.model))return{deepseek:{thinking:q?{type:"enabled",budgetTokens:0}:{type:"enabled",budgetTokens:Y}}};return}getStreamTextOptions(Q,q,Y,J){let X=J;if(this.config.timeout&&this.config.timeout>0){let Z=AbortSignal.timeout(this.config.timeout);if(J)X=AbortSignal.any([J,Z]);else X=Z}let $={model:Q,messages:q,tools:Y,maxOutputTokens:this.config.maxOutputTokens,maxRetries:0,temperature:this.config.temperature??0,abortSignal:X,allowSystemInMessages:!0},B=this.getThinkingProviderOptions();if(B)$.providerOptions=B;return $}async chat(Q,q,Y){let J=Date.now();z.debug("[VercelAIChatService] Starting chat request");let X=x(Q),$=this.convertMessages(X),B=this.convertTools(q),Z=async(F)=>{let W=await v(this.getStreamTextOptions(F,$,B,Y)),G=W.toolCalls&&W.toolCalls.length>0?this.convertToolCalls(W.toolCalls):void 0,L=Array.isArray(W.reasoning)?W.reasoning.map((P)=>P.text).join(""):void 0;return{content:W.text,reasoningContent:L,toolCalls:G,usage:this.convertUsage(W.usage,W.providerMetadata),finishReason:W.finishReason}};try{return await this.retryWithBackoff(()=>Z(this.model),Y,this.config.maxRetries)}catch(F){let W=Date.now()-J;if(z.error("[VercelAIChatService] Chat failed after",W,"ms"),Y?.aborted)await D(0,Y,{throwOnAbort:!0});if(!this.isFallbackableError(F))throw F;let G=this.getFallbackModelIds();if(G.length===0)throw F;for(let L of G){z.warn(`[VercelAIChatService] Trying fallback model: ${L}`);let P=this.createModel({...this.config,model:L});try{return await Z(P)}catch(_){if(z.warn(`[VercelAIChatService] Fallback ${L} failed: ${_ instanceof Error?_.message:_}`),Y?.aborted)await D(0,Y,{throwOnAbort:!0});if(!this.isFallbackableError(_))throw _}}throw F}}async*streamChat(Q,q,Y){let J=Date.now();z.debug("[VercelAIChatService] Starting stream request");let X=x(Q),$=this.convertMessages(X),B=this.convertTools(q),Z=async function*(_,N){let j=b(_.getStreamTextOptions(N,$,B,Y)),K=0;for await(let w of j.fullStream)switch(w.type){case"text-delta":yield{content:y(w)};break;case"reasoning-delta":yield{reasoningContent:y(w)};break;case"tool-call":yield{toolCalls:[{index:K++,id:w.toolCallId,type:"function",function:{name:w.toolName,arguments:JSON.stringify(w.args??w.input??{})}}]};break;case"finish":yield{finishReason:w.finishReason,usage:_.convertUsage(w.totalUsage,w.providerMetadata)};break}},F=this.config.maxRetries??2,W,G=!1;for(let _=0;_<=F;_++)try{for await(let j of Z(this,this.model))G=!0,yield j;let N=Date.now()-J;z.debug("[VercelAIChatService] Stream completed in",N,"ms");return}catch(N){if(W=N,Y?.aborted)await D(0,Y,{throwOnAbort:!0});if(G)throw N;if(!this.isFallbackableError(N))throw N;if(_<F){let j=1000*Math.pow(2,_);z.debug(`[VercelAIChatService] Stream retry ${_+1}/${F} after ${j}ms`),await D(j,Y,{throwOnAbort:!0});continue}}let L=Date.now()-J;z.error("[VercelAIChatService] Stream failed after",L,"ms");let P=this.getFallbackModelIds();if(P.length===0)throw W;for(let _ of P){z.warn(`[VercelAIChatService] Stream fallback: ${_}`),yield{modelFallback:!0};let N=this.createModel({...this.config,model:_}),j=!1;try{for await(let K of Z(this,N))j=!0,yield K;return}catch(K){if(z.warn(`[VercelAIChatService] Stream fallback ${_} failed`),Y?.aborted)await D(0,Y,{throwOnAbort:!0});if(j)throw K;if(!this.isFallbackableError(K))throw K}}throw W}getConfig(){return{...this.config}}updateConfig(Q){z.debug("[VercelAIChatService] Updating configuration"),this.config={...this.config,...Q},this.model=this.createModel(this.config),z.debug("[VercelAIChatService] Configuration updated")}}var c=R("Service");async function Gq(Q){let q=Q;if(q.provider){let Y=T(q.provider);if(Object.keys(Y).length>0)q={...q,customHeaders:{...Y,...q.customHeaders}},c.debug(`Injected ${q.provider} specific headers:`,Object.keys(Y))}return p(q)}function p(Q){return new O(Q)}
|
|
9
|
-
export{m as
|
|
9
|
+
export{m as ub,d as vb,g as wb,n as xb,t as yb,r as zb,Gq as Ab};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{v as a,w as b,x as c}from"./chunk-cw125vv3.js";import"./chunk-k4behavv.js";import"./chunk-e21htmg4.js";import"./chunk-5smacbk0.js";import"./chunk-rkhhzc4r.js";import"./chunk-63dzf6hr.js";import"./chunk-w1zb8zac.js";import"./chunk-kfg3vx5z.js";export{a as validatePermissions,c as validateOutput,b as loadConfiguration};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as _f,k as zf}from"./chunk-pvxp2gzr.js";import{A as Pf,C as Vf,D as Yf,H as Bf,I as P,K as Wf,L as Rf,N as mf,Q as g,X as kf}from"./chunk-wp67n9q7.js";import{_ as z}from"./chunk-y50fy1gq.js";import{ra as v,ta as xf,ua as Ff,ya as C}from"./chunk-5smacbk0.js";import{Ea as p}from"./chunk-06awrjgg.js";import{Ka as bf,Ma as e,Va as qf}from"./chunk-gb0x14v5.js";import{tb as U}from"./chunk-63dzf6hr.js";import{Lb as x}from"./chunk-w1zb8zac.js";import{Nb as Zf}from"./chunk-kfg3vx5z.js";var u0={port:{type:"number",describe:"Port to listen on (0 for auto)",default:0},hostname:{type:"string",describe:"Hostname to listen on",default:"127.0.0.1"},cors:{type:"array",describe:"Additional domains to allow for CORS",default:[]}};function v0(V){return{port:V.port??0,hostname:V.hostname??"127.0.0.1",cors:V.cors??[]}}import{Hono as C0}from"hono";import{cors as _0}from"hono/cors";import{existsSync as rf,readFileSync as Of}from"node:fs";import{createServer as z0}from"node:http";import{networkInterfaces as D0}from"node:os";import{dirname as b0,extname as w0,join as S}from"node:path";import{fileURLToPath as L0}from"node:url";import{WebSocketServer as P0}from"ws";import{z as i}from"zod";class c extends Error{code;statusCode;constructor(V,$,f=500){super($);this.code=V;this.statusCode=f;this.name="BladeServerError"}toObject(){return{error:{code:this.code,message:this.message}}}}class I extends c{constructor(V,$){super("NOT_FOUND",$?`${V} not found: ${$}`:`${V} not found`,404)}}class H extends c{constructor(V){super("BAD_REQUEST",V,400)}}var o0=i.object({error:i.object({code:i.string(),message:i.string()})});import{Hono as af}from"hono";import{z as u}from"zod";var Mf=x("Service"),tf=u.object({updates:u.record(u.any()),options:u.object({scope:u.enum(["local","project","global"]).optional(),immediate:u.boolean().optional()}).optional()}),Nf=()=>{let V=new af;return V.get("/",async($)=>{try{let f=v();return $.json(f||{})}catch(f){return Mf.error("[ConfigRoutes] Failed to get config:",f),$.json({})}}),V.put("/",async($)=>{try{let f=await $.req.json(),Q=tf.safeParse(f);if(!Q.success)throw new H("Invalid config update format");let{updates:O,options:J}=Q.data;return await C().updateConfig(O,J),$.json({success:!0,updates:O})}catch(f){throw Mf.error("[ConfigRoutes] Failed to update config:",f),f}}),V.get("/permissions",async($)=>{try{let f=v();return $.json(f?.permissions||{})}catch(f){return Mf.error("[ConfigRoutes] Failed to get permissions:",f),$.json({})}}),V};import{Hono as nf}from"hono";var Xf=()=>{let V=new nf;return V.get("/health",($)=>{return $.json({healthy:!0,version:p()})}),V.get("/info",($)=>{return $.json({version:p(),platform:process.platform,arch:process.arch,nodeVersion:process.version,cwd:U()})}),V};import{Hono as sf}from"hono";var a=x("Service"),Ef=()=>{let V=new sf;return V.get("/",async($)=>{try{let Q=z.getInstance().getAllServers(),O=Array.from(Q.entries()).map(([J,M])=>({id:J,name:J,status:M.status==="connected"?"connected":M.status==="connecting"?"connecting":M.lastError?"error":"offline",endpoint:M.config.command?`${M.config.command} ${(M.config.args||[]).join(" ")}`.trim():M.config.url||"Unknown",description:`MCP server: ${J}`,tools:M.tools.map((Y)=>Y.name),connectedAt:M.connectedAt?.toISOString(),error:M.lastError?.message}));return $.json(O)}catch(f){return a.error("[McpRoutes] Failed to get MCP servers:",f),$.json([])}}),V.post("/:name/connect",async($)=>{try{let f=$.req.param("name");return await z.getInstance().connectServer(f),$.json({success:!0})}catch(f){return a.error("[McpRoutes] Failed to connect MCP server:",f),$.json({success:!1,error:f.message},500)}}),V.post("/:name/disconnect",async($)=>{try{let f=$.req.param("name");return await z.getInstance().disconnectServer(f),$.json({success:!0})}catch(f){return a.error("[McpRoutes] Failed to disconnect MCP server:",f),$.json({success:!1,error:f.message},500)}}),V.delete("/:name",async($)=>{try{let f=$.req.param("name");await z.getInstance().unregisterServer(f);let O=v();if(O?.mcpServers){let{[f]:J,...M}=O.mcpServers;await C().updateConfig({mcpServers:M})}return $.json({success:!0})}catch(f){return a.error("[McpRoutes] Failed to delete MCP server:",f),$.json({success:!1,error:f.message},500)}}),V.post("/",async($)=>{try{let f=await $.req.json(),{name:Q,config:O}=f;if(!Q||!O)return $.json({success:!1,error:"Missing name or config"},400);await z.getInstance().registerServer(Q,O);let M=v();return await C().updateConfig({mcpServers:{...M?.mcpServers,[Q]:O}}),$.json({success:!0})}catch(f){return a.error("[McpRoutes] Failed to add MCP server:",f),$.json({success:!1,error:f.message},500)}}),V};import{Hono as ef}from"hono";var s=x("Service"),Uf=()=>{let V=new ef;return V.get("/",async($)=>{try{let f=xf(),Q=Ff();return $.json({configured:f,current:Q})}catch(f){return s.error("[ModelsRoutes] Failed to get models:",f),$.json({configured:[],current:null})}}),V.post("/",async($)=>{try{let f=await $.req.json(),{provider:Q,name:O,model:J,baseUrl:M,apiKey:Y}=f;if(!J)throw new H("model is required");let j=await C().addModel({provider:Q||"openai-compatible",name:O||J,model:J,baseUrl:M||void 0,apiKey:Y||void 0});return $.json({success:!0,model:j})}catch(f){throw s.error("[ModelsRoutes] Failed to add model:",f),f}}),V.put("/:modelId",async($)=>{try{let f=$.req.param("modelId"),Q=await $.req.json(),{baseUrl:O,apiKey:J,model:M}=Q;return await C().updateModel(f,{baseUrl:O||void 0,apiKey:J||void 0,model:M||void 0}),$.json({success:!0})}catch(f){throw s.error("[ModelsRoutes] Failed to update model:",f),f}}),V.delete("/:modelId",async($)=>{try{let f=$.req.param("modelId");return await C().removeModel(f),$.json({success:!0})}catch(f){throw s.error("[ModelsRoutes] Failed to delete model:",f),f}}),V};import{Hono as K0}from"hono";import{z as T}from"zod";import{Hono as f0}from"hono";import{streamSSE as $0}from"hono/streaming";import{LRUCache as V0}from"lru-cache";import{nanoid as o}from"nanoid";import{z as W}from"zod";var B=x("Service"),O0=W.object({title:W.string().optional(),projectPath:W.string().optional()}),M0=W.object({content:W.string(),attachments:W.array(W.object({type:W.enum(["file","image","url"]),path:W.string().optional(),url:W.string().optional(),content:W.string().optional(),mimeType:W.string().optional(),name:W.string().optional()})).optional(),permissionMode:W.enum(["default","autoEdit","plan","yolo"]).optional()}),J0=W.object({title:W.string().optional()}),m=new Map,D=new V0({max:100,ttl:1800000,dispose:(V,$)=>{if(V.status==="running"||V.status==="waiting_permission")V.abortController.abort(),B.debug(`[SessionRoutes] Run ${$} disposed due to cache eviction`)}}),Q0=(V)=>{if(!V||typeof V!=="object")return V;let $={...V},f=200000;if(typeof $.oldContent==="string"&&$.oldContent.length>f)delete $.oldContent;if(typeof $.newContent==="string"&&$.newContent.length>f)delete $.newContent;return $};function Af(V){if(typeof V==="string")return V;return V.filter(($)=>$.type==="text").map(($)=>$.text).join(`
|
|
2
|
+
`)}function Y0(V,$){let f=($??[]).filter((O)=>O.type==="image"&&typeof O.content==="string").map((O)=>({type:"image_url",image_url:{url:O.content}}));if(f.length===0)return V;let Q=[];if(V.trim())Q.push({type:"text",text:V});return Q.push(...f),Q}var Hf=()=>{let V=new f0,$=new Map,f=new Map,Q=async(O)=>{let J=$.get(O.id);if(J)return J;let M=f.get(O.id);if(!M)M=Bf.create({sessionId:O.id,workspaceRoot:O.projectPath}),f.set(O.id,M);try{let Y=await M;return $.set(O.id,Y),Y}finally{if(f.get(O.id)===M)f.delete(O.id)}};return V.get("/",async(O)=>{try{let J=await g.listSessions(),M=new Set(J.filter((X)=>X.relationType==="subagent").map((X)=>X.sessionId)),Y=Array.from(m.values()).filter((X)=>!M.has(X.id)&&X.relationType!=="subagent").map((X)=>({sessionId:X.id,projectPath:X.projectPath,title:X.title,parentId:void 0,relationType:void 0,status:void 0,agentType:void 0,model:void 0,messageCount:X.messages.length,firstMessageTime:X.createdAt.toISOString(),lastMessageTime:new Date().toISOString(),hasErrors:!1,isActive:!0})),j=new Set(Y.map((X)=>X.sessionId)),Z=J.filter((X)=>!m.has(X.sessionId)&&!j.has(X.sessionId)&&X.relationType!=="subagent"),K=new Set(j),N=Z.filter((X)=>{if(K.has(X.sessionId))return!1;return K.add(X.sessionId),!0}),E=[...Y,...N];return O.json(E)}catch(J){return B.error("[SessionRoutes] Failed to list sessions:",J),O.json([])}}),V.post("/",async(O)=>{try{let J=await O.req.json(),M=O0.safeParse(J);if(!M.success)throw new H("Invalid request body");let{title:Y,projectPath:j}=M.data,Z=o(12),K=j||O.get("directory")||U(),N={id:Z,projectPath:K,title:Y||`Session ${Z.slice(0,6)}`,createdAt:new Date,messages:[]};return m.set(Z,N),O.json({sessionId:Z,projectPath:K,title:N.title,parentId:void 0,relationType:void 0,status:void 0,agentType:void 0,model:void 0,messageCount:0,firstMessageTime:N.createdAt.toISOString(),lastMessageTime:N.createdAt.toISOString(),hasErrors:!1})}catch(J){throw B.error("[SessionRoutes] Failed to create session:",J),J}}),V.get("/:sessionId",async(O)=>{let J=O.req.param("sessionId"),M=m.get(J);if(M)return O.json({sessionId:M.id,projectPath:M.projectPath,title:M.title,messageCount:M.messages.length,firstMessageTime:M.createdAt.toISOString(),lastMessageTime:new Date().toISOString(),hasErrors:!1,isActive:!0});try{let j=(await g.listSessions()).find((Z)=>Z.sessionId===J);if(!j)throw new I("Session",J);return O.json(j)}catch(Y){if(Y instanceof I)throw Y;throw B.error("[SessionRoutes] Failed to get session:",Y),Y}}),V.patch("/:sessionId",async(O)=>{let J=O.req.param("sessionId");try{let M=await O.req.json(),Y=J0.safeParse(M);if(!Y.success)throw new H("Invalid request body");let{title:j}=Y.data,Z=m.get(J);if(Z&&j)Z.title=j;return O.json({success:!0,title:j})}catch(M){throw B.error("[SessionRoutes] Failed to update session:",M),M}}),V.delete("/:sessionId",async(O)=>{let J=O.req.param("sessionId"),M=m.get(J);if(M?.currentRunId){let j=D.get(M.currentRunId);if(j)j.abortController.abort(),P.publish(J,"run.cancelled",{runId:j.id}),D.delete(M.currentRunId)}try{await g.deleteSession(J)}catch(j){B.warn("[SessionRoutes] Failed to delete session file:",j)}m.delete(J),f.delete(J);let Y=$.get(J);if(Y){if(await Y.dispose(),$.delete(J),$.size===0)await z.getInstance().disconnectAll()}return O.json({success:!0})}),V.get("/:sessionId/message",async(O)=>{let J=O.req.param("sessionId");try{let M=await g.loadSession(J);return O.json(M)}catch(M){return B.error("[SessionRoutes] Failed to get messages:",M),O.json([])}}),V.get("/:sessionId/events",async(O)=>{let J=O.req.param("sessionId"),M=m.get(J);if(!M){let Y=O.get("directory")||U();M={id:J,projectPath:Y,title:`Session ${J.slice(0,6)}`,createdAt:new Date,messages:[]},m.set(J,M)}return $0(O,async(Y)=>{await Y.writeSSE({data:JSON.stringify({type:"connected",properties:{sessionId:J,timestamp:Date.now()}})});let Z=P.subscribe((N)=>{if(N.sessionId!==J)return;Y.writeSSE({data:JSON.stringify({type:N.type,properties:{sessionId:N.sessionId,...N.properties}})}).catch(()=>{})}),K=setInterval(()=>{if(!Y.aborted)Y.writeSSE({data:JSON.stringify({type:"heartbeat",properties:{timestamp:Date.now()}})}).catch(()=>{})},15000);Y.onAbort(()=>{clearInterval(K),Z()});while(!0)if(await new Promise((N)=>setTimeout(N,1000)),Y.aborted)break})}),V.post("/:sessionId/message",async(O)=>{let J=O.req.param("sessionId"),M=await O.req.json(),Y=M0.safeParse(M);if(!Y.success)throw new H("Invalid message format");let{content:j,attachments:Z,permissionMode:K}=Y.data,N=K||"default",E=O.get("directory")||U(),X=Y0(j,Z),R=m.get(J);if(!R){let _=await g.loadSession(J).catch(()=>[]);R={id:J,projectPath:E,title:`Session ${J.slice(0,6)}`,createdAt:new Date,messages:_},m.set(J,R)}let F=R.currentRunId?D.get(R.currentRunId):void 0;if(F&&(F.status==="running"||F.status==="waiting_permission")){let h=await(await Q(R)).enqueueSteering(X,{allowBeforeTurn:!0});if(!h.accepted)return O.json({status:"rejected",reason:h.reason??"turn_unavailable"},409);let l=o(12),n=h.queued;return P.publish(J,"message.created",{messageId:l,role:"user",content:Af(X)}),P.publish(J,"steering.queued",{runId:F.id,messageId:l,queued:n}),O.json({runId:F.id,status:"steering_queued",queued:n},202)}let G=o(12),q=new AbortController,L={id:G,sessionId:J,status:"running",abortController:q,createdAt:new Date};return D.set(G,L),R.currentRunId=G,Z0(L,R,X,N,Q).catch((_)=>{B.error(`[SessionRoutes] Run ${G} failed:`,_)}),O.json({runId:G,status:"running"},202)}),V.post("/:sessionId/abort",async(O)=>{let J=O.req.param("sessionId"),M=m.get(J);if(M?.currentRunId){let Y=D.get(M.currentRunId);if(Y)Y.abortController.abort(),Y.status="cancelled",P.publish(J,"run.cancelled",{runId:Y.id})}return O.json({success:!0})}),V.get("/:sessionId/status",async(O)=>{let J=O.req.param("sessionId"),M=m.get(J);if(!M?.currentRunId)return O.json({sessionId:J,status:"idle"});let Y=D.get(M.currentRunId);return O.json({sessionId:J,runId:M.currentRunId,status:Y?.status||"idle"})}),V};async function Z0(V,$,f,Q,O){let{abortController:J,sessionId:M,id:Y}=V,j=o(12),Z=o(12),K=(N,E)=>{P.publish(M,N,E)};try{K("message.created",{messageId:j,role:"user",content:Af(f)}),K("session.status",{status:"running"}),K("message.created",{messageId:Z,role:"assistant",content:""});let N=await O($),E=await mf.createWithRuntime(N,{sessionId:M}),X=async(G)=>{let q=o(12),L=300000;V.status="waiting_permission";let _=new Promise((l)=>{let n=setTimeout(()=>{B.warn(`[SessionRoutes] Permission ${q} timed out after 300000ms`),K("permission.timeout",{requestId:q}),l({approved:!1,reason:"timeout"})},300000);V.pendingPermission={permissionId:q,resolve:(cf)=>{clearTimeout(n),l(cf)},details:G}});K("permission.asked",{requestId:q,toolName:G.toolName,description:G.message,args:G.args,details:G}),B.info(`[SessionRoutes] Permission request created: ${q}, runId: ${Y}`);let h=await _;return B.info(`[SessionRoutes] Permission response received: ${q}, approved: ${h.approved}`),V.status="running",V.pendingPermission=void 0,h},R={messages:[...$.messages],userId:"web-user",sessionId:M,workspaceRoot:$.projectPath,signal:J.signal,permissionMode:Q,confirmationHandler:{requestConfirmation:X}},F=await qf(E.chatStream(f,R,{stream:!0}),async(G)=>{switch(G.kind){case"content_delta":K("message.delta",{messageId:Z,delta:G.delta});break;case"thinking_delta":K("thinking.delta",{delta:G.delta});break;case"tool_start":if("function"in G.toolCall)K("tool.start",{messageId:Z,toolName:G.toolCall.function.name,toolCallId:G.toolCall.id,arguments:G.toolCall.function.arguments,toolKind:G.toolKind});break;case"tool_result":if("function"in G.toolCall)K("tool.result",{messageId:Z,toolName:G.toolCall.function.name,toolCallId:G.toolCall.id,success:G.result.success,summary:G.result.metadata?.summary,output:Rf(Wf(G.toolCall.function.name,G.result)),metadata:Q0(G.result.metadata)});break;case"token_usage":K("token.usage",{...G.usage});break;case"turn_start":K("turn.started",{turn:G.turn,maxTurns:G.maxTurns});break;case"steering_applied":K("steering.applied",{runId:Y,messageIds:G.messageIds,count:G.count,recovered:G.recovered,queued:N.getPendingSteeringCount()});break;case"compaction":K(G.phase==="start"?"compaction.started":"compaction.completed",{});break;case"model_fallback":K("model.fallback",{});break;case"task_update":K("task.updated",{tasks:G.tasks});break;default:break}});$.messages=[...R.messages],K("message.complete",{messageId:Z}),K("thinking.completed",{}),V.status="completed",K("session.completed",{runId:Y,outputTruncated:F.metadata?.outputTruncated??!1}),K("session.status",{status:"idle"})}catch(N){B.error("[SessionRoutes] Agent execution error:",N),V.status="failed",K("session.error",{error:N instanceof Error?N.message:"Unknown error"}),K("session.status",{status:"error"})}}function Tf(V,$,f){B.info(`[SessionRoutes] Looking for permission ${$} in session ${V}`),B.info(`[SessionRoutes] Active runs: ${D.size}`);for(let[Q,O]of D.entries())if(B.info(`[SessionRoutes] Checking run ${Q}: sessionId=${O.sessionId}, pendingPermission=${O.pendingPermission?.permissionId}`),O.sessionId===V&&O.pendingPermission?.permissionId===$)return O.pendingPermission.resolve(f),B.info(`[SessionRoutes] Permission ${$} responded, runId: ${O.id}`),!0;return B.error(`[SessionRoutes] Permission not found: ${$}`),!1}var Jf=x("Service"),j0=T.object({approved:T.boolean(),remember:T.boolean().optional(),scope:T.enum(["once","session"]).optional(),targetMode:T.enum(["default","autoEdit","plan","yolo"]).optional(),feedback:T.string().optional(),answers:T.record(T.union([T.string(),T.array(T.string())])).optional()}),yf=()=>{let V=new K0;return V.post("/:permissionId",async($)=>{let f=$.req.param("permissionId"),Q=$.req.query("sessionId");Jf.info(`[PermissionRoutes] Received permission response: permissionId=${f}, sessionId=${Q}`);try{let O=await $.req.json(),J=j0.safeParse(O);if(!J.success)throw new H("Invalid permission response format");let{approved:M,remember:Y,scope:j,targetMode:Z,feedback:K,answers:N}=J.data;if(!Q)throw new H("sessionId query parameter is required");if(!Tf(Q,f,{approved:M,reason:K,scope:j,targetMode:Z,feedback:K,answers:N}))throw new I("Permission request",f);return Jf.info(`[PermissionRoutes] Permission ${f} ${M?"approved":"denied"}`),$.json({success:!0,approved:M,remember:Y})}catch(O){throw Jf.error("[PermissionRoutes] Failed to respond to permission:",O),O}}),V};import{Hono as G0}from"hono";var Cf=x("Service"),Df=()=>{let V=new G0;return V.get("/",async($)=>{try{let f=await _f();return $.json(f)}catch(f){return Cf.error("[ProviderRoutes] Failed to list providers:",f),$.json([])}}),V.get("/:provider/models",async($)=>{let f=$.req.param("provider");try{let Q=await zf(f);return $.json(Q)}catch(Q){return Cf.error("[ProviderRoutes] Failed to list models:",Q),$.json([])}}),V};import{Hono as N0}from"hono";import*as b from"node:fs/promises";import{homedir as X0}from"node:os";import*as ff from"node:path";var k=x("Service"),Qf=ff.join(X0(),".blade","skills-config.json");async function wf(){try{let V=await b.readFile(Qf,"utf-8");return JSON.parse(V)}catch{return{disabled:[]}}}async function E0(V){await b.mkdir(ff.dirname(Qf),{recursive:!0}),await b.writeFile(Qf,JSON.stringify(V,null,2))}async function x0(V,$){let f=await wf();if($)f.disabled=f.disabled.filter((Q)=>Q!==V);else if(!f.disabled.includes(V))f.disabled.push(V);await E0(f)}var d=null,F0=300000;async function U0(){if(d&&Date.now()-d.timestamp<F0)return d.data;try{let V=await fetch("https://api.github.com/repos/anthropics/skills/contents/skills",{headers:{Accept:"application/vnd.github.v3+json","User-Agent":"Blade-Skills-Catalog"}});if(!V.ok)return k.warn(`GitHub API returned ${V.status}`),d?.data||[];let $=await V.json(),f=[];for(let Q of $){if(Q.type!=="dir")continue;let O=`Official ${Q.name} skill`;try{let J=await fetch(`https://raw.githubusercontent.com/anthropics/skills/main/skills/${Q.name}/SKILL.md`,{headers:{"User-Agent":"Blade-Skills-Catalog"}});if(J.ok){let Y=(await J.text()).match(/^#[^\n]*\n+([^\n#]+)/);if(Y)O=Y[1].trim().slice(0,100)}}catch{}f.push({name:Q.name,description:O,tag:"Official",author:"Anthropic"})}return d={data:f,timestamp:Date.now()},f}catch(V){return k.warn("Failed to fetch skills catalog from GitHub:",V),d?.data||[]}}var Lf=()=>{let V=new N0;return V.get("/",async($)=>{try{let f=e();await f.initialize();let Q=f.getAll(),O=await wf(),J=Q.map((M)=>({id:M.name,name:M.name,enabled:!O.disabled.includes(M.name),description:M.description||"",version:M.version||"1.0.0",provider:"Local",location:M.source==="builtin"?"Built-in":M.basePath,capabilities:["prompts"],allowedTools:M.allowedTools||[]}));return $.json(J)}catch(f){return k.error("[SkillsRoutes] Failed to get skills:",f),$.json([])}}),V.post("/:name/toggle",async($)=>{try{let f=$.req.param("name"),Q=await $.req.json();return await x0(f,Q.enabled),$.json({success:!0,enabled:Q.enabled})}catch(f){return k.error("[SkillsRoutes] Failed to toggle skill:",f),$.json({success:!1,error:f.message},500)}}),V.delete("/:name",async($)=>{try{let f=$.req.param("name"),Q=`${process.env.HOME}/.blade/skills/${f}`;return await b.rm(Q,{recursive:!0,force:!0}),await e().refresh(),$.json({success:!0})}catch(f){return k.error("[SkillsRoutes] Failed to uninstall skill:",f),$.json({success:!1,error:f.message},500)}}),V.post("/install",async($)=>{try{let f=await $.req.json(),Q=bf(),O=e(),J=!1;if(f.source==="catalog"&&f.name){if(J=await Q.installOfficialSkill(f.name),!J)return $.json({success:!1,error:"Failed to install skill from catalog"},500)}else if(f.source==="repo"&&f.url){if(J=await Q.installFromRepo(f.url,f.name),!J)return $.json({success:!1,error:"Failed to install skill from repository. Make sure the repo contains a SKILL.md file."},500)}else if(f.source==="local"&&f.path){if(J=await Q.installFromLocal(f.path,f.name),!J)return $.json({success:!1,error:"Failed to install skill from local path. Make sure the path exists and contains a SKILL.md file."},500)}else return $.json({success:!1,error:"Invalid install parameters. Required: source with corresponding url/path/name"},400);return await O.refresh(),$.json({success:!0})}catch(f){return k.error("[SkillsRoutes] Failed to install skill:",f),$.json({success:!1,error:f.message},500)}}),V.get("/catalog",async($)=>{try{let f=await U0();return $.json(f)}catch(f){return k.error("[SkillsRoutes] Failed to get catalog:",f),$.json([])}}),V};import q0 from"fast-glob";import{Hono as B0}from"hono";import{execSync as W0}from"node:child_process";import{readdir as R0}from"node:fs/promises";import $f from"node:path";var t=x("Service"),m0=(V)=>{try{return W0("git rev-parse --abbrev-ref HEAD",{cwd:V,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||null}catch{return null}},A0=[...Vf.map((V)=>`${V}/**`),...Vf,...Yf.map((V)=>`**/${V}`)],H0=new Set(["/theme","/model","/permissions","/mcp","/skills","/exit","/resume","/ide","/login","/logout"]),Sf=()=>{let V=new B0;return V.get("/commands",async($)=>{try{let f=$.req.query("q")||"",Q=kf(f).filter((O)=>!H0.has(O.command));return $.json(Q)}catch(f){return t.error("[SuggestionsRoutes] Failed to get command suggestions:",f),$.json([])}}),V.get("/files",async($)=>{try{let f=$.req.query("q")||"",Q=$.get("directory")||U(),O=Math.min(Number($.req.query("limit"))||100,1000),M=(await q0("**/*",{cwd:Q,dot:!1,followSymbolicLinks:!1,onlyFiles:!1,markDirectories:!0,unique:!0,ignore:A0})).map((Z)=>Z.replace(/\\/g,"/"));if(!f)return $.json(M.slice(0,O));let Y=f.toLowerCase(),j=M.filter((Z)=>Z.toLowerCase().includes(Y)).slice(0,O);return $.json(j)}catch(f){return t.error("[SuggestionsRoutes] Failed to get file suggestions:",f),$.json([])}}),V.get("/files/tree",async($)=>{try{let f=$.get("directory")||U(),Q=$.req.query("path")||"",O=Q?$f.join(f,Q):f,M=(await R0(O,{withFileTypes:!0})).map((Z)=>({name:Z.name,path:Q?`${Q}/${Z.name}`:Z.name,type:Z.isDirectory()?"dir":"file"}));M.sort((Z,K)=>{if(Z.type!==K.type)return Z.type==="dir"?-1:1;return Z.name.localeCompare(K.name)});let Y=new Set(Vf),j=M.filter((Z)=>{let K=Z.name;if(K.startsWith("."))return!1;if(Y.has(K))return!1;for(let N of Yf)if(K.match(new RegExp(N.replace("*",".*"))))return!1;return!0});return $.json(j)}catch(f){return t.error("[SuggestionsRoutes] Failed to get file tree:",f),$.json([])}}),V.get("/files/content",async($)=>{try{let f=$.req.query("path");if(!f)return $.json({error:"Missing file path"},400);let Q=$.get("directory")||U(),O=$f.resolve(Q,f),J=$f.relative(Q,O);if(J.startsWith("..")||$f.isAbsolute(J))return $.json({error:"Invalid file path"},400);let M=Pf(),Y=await M.stat(O);if(!Y?.isFile)return $.json({error:"File not found"},404);let j=200000,Z=await M.readTextFile(O),K=Z.length>j;return $.json({path:f,content:K?Z.slice(0,j):Z,truncated:K,size:Y.size})}catch(f){return t.error("[SuggestionsRoutes] Failed to get file content:",f),$.json({error:"Failed to read file"},500)}}),V.get("/git-info",async($)=>{try{let f=$.get("directory")||U(),Q=m0(f);return $.json({branch:Q})}catch(f){return t.error("[SuggestionsRoutes] Failed to get git info:",f),$.json({branch:null})}}),V};import{Hono as T0}from"hono";var w=x("Service"),r=new Map,hf=2097152,If=65536;function uf(){return typeof globalThis.Bun<"u"}async function y0(V,$,f){if(uf()){let{spawn:J}=await import("bun-pty"),M=J(V,$,{name:"xterm-256color",cwd:f.cwd,env:f.env});return{pid:M.pid,write:(Y)=>M.write(Y),resize:(Y,j)=>M.resize(Y,j),kill:()=>M.kill(),onData:(Y)=>M.onData(Y),onExit:(Y)=>M.onExit(Y)}}let O=(await import("node-pty")).spawn(V,$,{name:"xterm-256color",cwd:f.cwd,env:f.env,cols:80,rows:24});return{pid:O.pid,write:(J)=>O.write(J),resize:(J,M)=>O.resize(J,M),kill:()=>O.kill(),onData:(J)=>{O.onData(J)},onExit:(J)=>{O.onExit(J)}}}var jf=void 0,Kf;if(uf())try{let{createBunWebSocket:V}=await import("hono/bun"),$=V();Kf=$.upgradeWebSocket,jf=$.websocket}catch(V){w.warn("[Terminal] Failed to initialize Bun WebSocket support:",V)}async function vf(V,$){let f=`term-${Date.now()}`;w.info(`[Terminal] New connection: ${f}, cwd: ${V}`);let Q=process.platform==="win32"?"powershell.exe":process.env.SHELL||"/bin/zsh",O=Q.endsWith("sh")?["-l"]:[],J=await y0(Q,O,{cwd:V,env:{...process.env,TERM:"xterm-256color",COLORTERM:"truecolor"}}),M={id:f,process:J,cwd:V,buffer:"",subscribers:new Set};if(r.set(f,M),M.subscribers.add($),J.onData((Y)=>{let j=!1;for(let Z of M.subscribers)try{Z.send(Y),j=!0}catch{M.subscribers.delete(Z)}if(j)return;if(M.buffer+=Y,M.buffer.length>hf)M.buffer=M.buffer.slice(-hf)}),J.onExit(({exitCode:Y})=>{w.info(`[Terminal] Process exited: ${f}, code: ${Y}`);for(let j of M.subscribers)try{j.close()}catch{}r.delete(f)}),M.buffer){let Y=M.buffer;M.buffer="";for(let j=0;j<Y.length;j+=If)$.send(Y.slice(j,j+If))}return{session:M,cleanup:()=>{if(w.info(`[Terminal] Connection closed: ${f}`),M.subscribers.delete($),M.subscribers.size===0){try{M.process.kill()}catch{}r.delete(f)}}}}function pf(V,$){V.on("connection",async(f,Q)=>{let O=new URL(Q.url||"/",`http://${Q.headers.host}`);if(!O.pathname.endsWith("/terminal/ws")){f.close();return}let J=O.searchParams.get("cwd")||$()||U();try{let{session:M,cleanup:Y}=await vf(J,{send:(j)=>f.send(j),close:()=>f.close()});f.on("message",(j)=>{try{M.process.write(String(j))}catch(Z){w.error("[Terminal] Failed to write to PTY:",Z)}}),f.on("close",Y),f.on("error",Y)}catch(M){w.error("[Terminal] Failed to spawn PTY:",M),f.close()}})}var gf=()=>{let V=new T0;if(V.get("/status",($)=>{let f=Array.from(r.values()).map((Q)=>({id:Q.id,cwd:Q.cwd}));return $.json({active:f.length,terminals:f})}),V.post("/kill/:terminalId",($)=>{let f=$.req.param("terminalId"),Q=r.get(f);if(Q){try{Q.process.kill()}catch{}for(let O of Q.subscribers)O.close();return r.delete(f),$.json({success:!0})}return $.json({success:!1,error:"Terminal not found"},404)}),Kf)V.get("/ws",Kf(($)=>{let f=$.req.query("cwd")||$.get("directory")||U(),Q;return{async onOpen(O,J){try{Q=await vf(f,{send:(M)=>J.send(M),close:()=>J.close()})}catch(M){w.error("[Terminal] Failed to spawn PTY:",M),J.close()}},onMessage(O){if(!Q)return;try{Q.session.process.write(String(O.data))}catch(J){w.error("[Terminal] Failed to write to PTY:",J)}},onClose(){Q?.cleanup()}}}));else V.get("/ws",($)=>{return $.json({message:"WebSocket endpoint - connect via ws:// protocol",hint:"Use WebSocket client to connect to this endpoint"})});return V};var A=x("Service"),Gf=[];function k0(){let V=b0(L0(import.meta.url)),$=[S(V,"web"),S(U(),"dist/web"),S(U(),"packages/cli/dist/web")];for(let f of $){let Q=S(f,"index.html");if(rf(Q)){if(Of(Q,"utf-8").includes("/assets/"))return A.debug(`[Server] Found web dist at: ${f}`),f}}return null}function S0(){let V=new C0;V.onError((f,Q)=>{if(A.error("[Server] Request error:",f),f instanceof c)return Q.json(f.toObject(),f.statusCode);let O=f instanceof Error?f.message:String(f);return Q.json({error:{code:"INTERNAL_ERROR",message:O}},500)}),V.use(async(f,Q)=>{let O=process.env.BLADE_SERVER_PASSWORD;if(!O)return Q();let J=f.req.path;if(J==="/"||J.startsWith("/assets/")||J.endsWith(".html")||J.endsWith(".js")||J.endsWith(".css"))return Q();let M=f.req.header("Authorization");if(!M?.startsWith("Basic "))return f.header("WWW-Authenticate",'Basic realm="Blade Server"'),f.json({error:{code:"UNAUTHORIZED",message:"Authentication required"}},401);let Y=Buffer.from(M.slice(6),"base64").toString(),[j,Z]=Y.split(":"),K=process.env.BLADE_SERVER_USERNAME??"blade";if(j!==K||Z!==O)return f.json({error:{code:"UNAUTHORIZED",message:"Invalid credentials"}},401);return Q()}),V.use(async(f,Q)=>{let O=f.req.path==="/health"||f.req.path==="/global/health"||f.req.path.startsWith("/assets/");if(!O)A.debug(`[Server] ${f.req.method} ${f.req.path}`);let J=Date.now();if(await Q(),!O){let M=Date.now()-J;A.debug(`[Server] ${f.req.method} ${f.req.path} - ${f.res.status} (${M}ms)`)}}),V.use(_0({origin(f){if(!f)return;if(f.startsWith("http://localhost:"))return f;if(f.startsWith("http://127.0.0.1:"))return f;if(f==="tauri://localhost"||f==="http://tauri.localhost")return f;if(Gf.includes(f))return f;return}})),V.use(async(f,Q)=>{let O=f.req.query("directory")||f.req.header("x-blade-directory")||U();try{O=decodeURIComponent(O)}catch{}return f.set("directory",O),Q()}),V.route("/global",Xf()),V.route("/sessions",Hf()),V.route("/configs",Nf()),V.route("/permissions",yf()),V.route("/providers",Df()),V.route("/models",Uf()),V.route("/suggestions",Sf()),V.route("/terminal",gf()),V.route("/mcp",Ef()),V.route("/skills",Lf()),V.get("/health",(f)=>{return f.json({healthy:!0,version:p()})});let $=k0();if($)A.info(`[Server] Serving static files from ${$}`),V.get("/assets/*",(f)=>{let Q=S($,f.req.path);if(!rf(Q))return f.json({error:{code:"NOT_FOUND",message:`File not found: ${f.req.path}`}},404);let O=Of(Q),J=w0(Q).toLowerCase(),Y={".js":"application/javascript",".css":"text/css",".html":"text/html",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject"}[J]||"application/octet-stream";return new Response(O,{headers:{"Content-Type":Y,"Cache-Control":"public, max-age=31536000, immutable"}})}),V.get("/",(f)=>{let Q=S($,"index.html"),O=Of(Q,"utf-8");return f.html(O)}),V.get("*",(f)=>{let Q=f.req.path;if(Q.includes("."))return f.json({error:{code:"NOT_FOUND",message:`File not found: ${Q}`}},404);let O=S($,"index.html"),J=Of(O,"utf-8");return f.html(J)});else A.warn('[Server] Web UI not found. Run "cd packages/cli/web && bun run build" to enable web interface.'),V.get("/",(f)=>{return f.json({message:"Blade API Server",version:p(),webUI:!1,hint:'Web UI not built. Run "cd packages/cli/web && bun run build" to enable.',endpoints:{health:"/health",sessions:"/sessions",configs:"/configs",permissions:"/permissions",providers:"/providers"}})}),V.all("*",(f)=>{return f.json({error:{code:"NOT_FOUND",message:`Route not found: ${f.req.path}`}},404)});return V}function h0(){let V=D0(),$=[];for(let f of Object.keys(V)){let Q=V[f];if(!Q)continue;for(let O of Q){if(O.internal||O.family!=="IPv4")continue;if(O.address.startsWith("172."))continue;$.push(O.address)}}return $}function of(){return typeof globalThis.Bun<"u"}function df(V,$){let f=globalThis.Bun,Q=(J)=>{try{return f.serve({hostname:$.hostname,port:J,fetch:V.fetch,idleTimeout:0,websocket:jf})}catch(M){A.error("Failed to start Bun server:",M);return}},O=$.port===0?Q(4096)??Q(0):Q($.port);if(!O)throw Error(`Failed to start Bun server on port ${$.port}`);return{url:O.url,port:O.port,hostname:O.hostname,stop:async()=>{O.stop(!0)}}}function I0(V,$){return new Promise((f,Q)=>{let O=z0(async(Z,K)=>{let N=new URL(Z.url||"/",`http://${Z.headers.host}`),E=new Headers;for(let[F,G]of Object.entries(Z.headers))if(G)if(Array.isArray(G))for(let q of G)E.append(F,q);else E.set(F,G);let X;if(Z.method!=="GET"&&Z.method!=="HEAD")X=(await new Promise((G)=>{let q=[];Z.on("data",(L)=>q.push(L)),Z.on("end",()=>G(Buffer.concat(q)))})).toString();let R=new Request(N.toString(),{method:Z.method,headers:E,body:X});try{let F=await V.fetch(R);if(K.statusCode=F.status,F.headers.forEach((G,q)=>{K.setHeader(q,G)}),F.body){let G=F.body.getReader(),q=async()=>{let{done:L,value:_}=await G.read();if(L){K.end();return}return K.write(_),q()};await q()}else{let G=await F.text();K.end(G)}}catch(F){A.error("[Server] Node request error:",F),K.statusCode=500,K.end(JSON.stringify({error:{code:"INTERNAL_ERROR",message:"Internal server error"}}))}}),J=new P0({noServer:!0}),M=U();pf(J,()=>M),O.on("upgrade",(Z,K,N)=>{if(new URL(Z.url||"/",`http://${Z.headers.host}`).pathname==="/terminal/ws")J.handleUpgrade(Z,K,N,(X)=>{J.emit("connection",X,Z)});else K.destroy()});let Y=(Z)=>{return new Promise((K,N)=>{O.once("error",(E)=>{if(E.code==="EADDRINUSE")N(E);else N(E)}),O.listen(Z,$.hostname,()=>{let E=O.address();if(E&&typeof E==="object")K(E.port);else K(Z)})})};(async()=>{let Z;if($.port===0)try{Z=await Y(4096)}catch{Z=await Y(0)}else Z=await Y($.port);let K=new URL(`http://${$.hostname==="0.0.0.0"?"localhost":$.hostname}:${Z}`);f({url:K,port:Z,hostname:$.hostname,stop:async()=>{return new Promise((N)=>{J.close(()=>{O.close(()=>N())})})}})})().catch(Q)})}var lf;((DV)=>{let V,$;function f(){if(!$)$=S0();return $}DV.getApp=f;function Q(M){Gf=M.cors??[];let Y=f();if(of())V=df(Y,M),A.info(`[Server] Blade server listening on ${V.url} (Bun runtime)`);else throw Error("Blade web server requires Bun runtime. Please run with Bun: `bun run blade web` or install Bun from https://bun.sh");let j=V;return{url:j.url,port:j.port,hostname:j.hostname,stop:async()=>{if(V)await V.stop(),V=void 0,$=void 0,A.info("[Server] Blade server stopped")}}}DV.listen=Q;async function O(M){Gf=M.cors??[];let Y=f();if(of())V=df(Y,M),A.info(`[Server] Blade server listening on ${V.url} (Bun runtime)`);else V=await I0(Y,M),A.info(`[Server] Blade server listening on ${V.url} (Node.js runtime)`);let j=V;return{url:j.url,port:j.port,hostname:j.hostname,stop:async()=>{if(V)await V.stop(),V=void 0,$=void 0,A.info("[Server] Blade server stopped")}}}DV.listenAsync=O;function J(){return V!==void 0}DV.isRunning=J})(lf||={});export{u0 as f,v0 as g,h0 as h,lf as i};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ma as a,na as b,oa as c,pa as d,qa as e,ra as f,sa as g,ta as h,ua as i,va as j,wa as k,xa as l,ya as m}from"./chunk-5smacbk0.js";import"./chunk-rkhhzc4r.js";import"./chunk-63dzf6hr.js";import"./chunk-w1zb8zac.js";import"./chunk-kfg3vx5z.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,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{na as Q}from"./chunk-5smacbk0.js";import{nb as U}from"./chunk-jf48kahn.js";import{tb as O}from"./chunk-63dzf6hr.js";import{Jb as K,Lb as N}from"./chunk-w1zb8zac.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d,e}from"./chunk-gjf2d2yg.js";import"./chunk-kfg3vx5z.js";export{b as setSkipUntilVersion,d as performUpgrade,c as getUpgradeCommand,e as checkVersionOnStartup,a as checkVersion};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{y as w}from"./chunk-
|
|
1
|
+
import{y as w}from"./chunk-k4behavv.js";import{na as y}from"./chunk-5smacbk0.js";import{Aa as b,za as u}from"./chunk-rkhhzc4r.js";import{pb as r,sb as m}from"./chunk-63dzf6hr.js";import{Lb as f}from"./chunk-w1zb8zac.js";import{promises as S}from"node:fs";import h from"node:path";import{z as o}from"zod";var P=["systemPrompt","appendSystemPrompt","initialMessage","resumeSessionId","forkSession","allowedTools","disallowedTools","mcpConfigPaths","strictMcpConfig","model","addDirs","outputFormat","inputFormat","print","includePartialMessages","replayUserMessages","agentsConfig","settingSources"],M=new Set([...Object.keys(u),...P]),T=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).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(),k=[["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(!M.has(e))throw Error(`Unknown --settings field: ${e}`);let s=T.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 d(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=h.resolve(r(),i),s;try{s=await S.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 c(n,i){if(!i)return;let t=i;for(let[s,e]of k){if(s==="permissionMode"&&n.yolo===!0)continue;if(n[e]===void 0&&t[s]!==void 0)n[e]=t[s]}}var p=f("General"),A=(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(", ")}`)}},G=async(n)=>{let i=await d(typeof n.settings==="string"?n.settings:void 0);if(c(n,i),typeof n.agents==="string")w(n.agents);C(n);try{let s=await b.getInstance().initialize(i);if(y().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 +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"}export{f as
|
|
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"}export{f as ib,b as jb,h as kb};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$a as
|
|
1
|
+
import{$a as l,Pa as a,Qa as b,Sa as c,Ta as d,Ua as e,Va as f,Wa as g,Xa as h,Ya as i,Za as j,_a as k,ab as m,bb as n,cb as o,fb as p,gb as q,hb as r}from"./chunk-gb0x14v5.js";import"./chunk-cyxb6fxe.js";import"./chunk-jf48kahn.js";import"./chunk-63dzf6hr.js";import"./chunk-98jpdmgc.js";import"./chunk-w1zb8zac.js";import"./chunk-kfg3vx5z.js";export{g as saveUserMessage,i as saveToolUse,j as saveToolResult,k as saveCompaction,h as saveAssistantMessage,d as isRootSystemPrompt,l as handleTaskListUpdate,m as handleSkillActivation,n as extractModelSwitch,r as executeLoopGenerator,f as drainLoop,c as checkStopHook,a as checkOutputRecovery,b as checkIncompleteIntent,q as checkAndCompactInLoop,o as applyToolDomainEffects,p as StreamingToolExecutor,e as ConversationState};
|
|
@@ -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
|
|
2
|
+
export{v as Y};
|