blade-code 0.10.123 → 0.10.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-0enwqp1t.js → chunk-07gqhhfd.js} +1 -1
  3. package/dist/{chunk-00bg01aq.js → chunk-0hf6dd5w.js} +1 -1
  4. package/dist/{chunk-kbg2xp3f.js → chunk-0t5hvj49.js} +1 -1
  5. package/dist/{chunk-5hsv9btx.js → chunk-1eq5phqv.js} +1 -1
  6. package/dist/{chunk-f90evsjc.js → chunk-1kbx9es5.js} +1 -1
  7. package/dist/{chunk-z5t56vsg.js → chunk-2824tzwn.js} +1 -1
  8. package/dist/{chunk-t249wvk1.js → chunk-2zewxt27.js} +1 -1
  9. package/dist/{chunk-ff3h9sbh.js → chunk-32z8gkex.js} +1 -1
  10. package/dist/{chunk-pctvr6rs.js → chunk-43dg28ph.js} +1 -1
  11. package/dist/{chunk-fvm3trb2.js → chunk-4a79dppv.js} +1 -1
  12. package/dist/{chunk-1ag0rs5c.js → chunk-4x0xm63t.js} +1 -1
  13. package/dist/{chunk-qmpdjmmz.js → chunk-5kg2kvbw.js} +1 -1
  14. package/dist/{chunk-njqpnzvq.js → chunk-5nban6rq.js} +1 -1
  15. package/dist/{chunk-6ptyr6ad.js → chunk-62c3707d.js} +1 -1
  16. package/dist/{chunk-3smgbzcz.js → chunk-6bvc4z1c.js} +387 -387
  17. package/dist/{chunk-v0wdd4va.js → chunk-8nsv9gpn.js} +1 -1
  18. package/dist/{chunk-1epf5qt5.js → chunk-90v9qj85.js} +1 -1
  19. package/dist/{chunk-8vcynmzn.js → chunk-9fntcgem.js} +1 -1
  20. package/dist/{chunk-5z40cr1e.js → chunk-c4aeejq1.js} +1 -1
  21. package/dist/{chunk-3jnkhqa9.js → chunk-e7va75fw.js} +1 -1
  22. package/dist/{chunk-jdhmptcr.js → chunk-fneerm4v.js} +1 -1
  23. package/dist/chunk-javj7p2j.js +1 -0
  24. package/dist/{chunk-syw1qt6f.js → chunk-jdjmr823.js} +1 -1
  25. package/dist/{chunk-jmwd14s0.js → chunk-m2ak1nky.js} +1 -1
  26. package/dist/{chunk-hmbym0eg.js → chunk-me93hkqv.js} +1 -1
  27. package/dist/{chunk-zp065txw.js → chunk-mtmg3cxy.js} +1 -1
  28. package/dist/{chunk-encs9pxs.js → chunk-ne9dyvcc.js} +1 -1
  29. package/dist/{chunk-wpa4v0c3.js → chunk-nz4a0mep.js} +1 -1
  30. package/dist/{chunk-7dyaya9y.js → chunk-p89wgwn0.js} +2 -2
  31. package/dist/{chunk-b2ptb5nj.js → chunk-rgqxy1j1.js} +1 -1
  32. package/dist/{chunk-9hzz0zb7.js → chunk-rkk31kq5.js} +1 -1
  33. package/dist/{chunk-d3j4e5r0.js → chunk-sn0cv7vd.js} +1 -1
  34. package/dist/chunk-sy0x18rq.js +1 -0
  35. package/dist/{chunk-cgx83c3b.js → chunk-tg54jbta.js} +1 -1
  36. package/dist/{chunk-bfwzrkek.js → chunk-vjenmz1x.js} +1 -1
  37. package/dist/{chunk-gffned6y.js → chunk-w6cg2fnz.js} +1 -1
  38. package/dist/{chunk-c2vkgxwf.js → chunk-wvq95qx6.js} +1 -1
  39. package/package.json +1 -1
  40. package/dist/chunk-0q787jff.js +0 -1
  41. package/dist/chunk-qpprbpzp.js +0 -1
@@ -1,4 +1,4 @@
1
- import{ua as F,wa as L}from"./chunk-3smgbzcz.js";import{Kd as $,Md as B,Ud as Q}from"./chunk-3jnkhqa9.js";import{Wf as y}from"./chunk-c2vkgxwf.js";import{Th as V}from"./chunk-kzzty3v5.js";async function j(){await y(V())}async function I(b){let q=b.message||b._?.[0];if(typeof q==="string"&&q.trim())return q;let z=b.stdin??process.stdin;if(!z.isTTY){let G=[];for await(let K of z)G.push(K);return Buffer.concat(G).toString("utf-8").trim()}if(b.defaultMessage!==void 0)return b.defaultMessage;throw Error("No input provided")}async function M(b){let q=b.message||b._?.[0];if(typeof q==="string"&&q.trim())return q;let z=b.stdin??process.stdin;if(z.isTTY)return;let G=[];for await(let Z of z)G.push(Buffer.isBuffer(Z)?Z:Buffer.from(Z));return Buffer.concat(G).toString("utf-8").trim()||void 0}async function R(b){if(!F(b))return{mode:"agent",content:b};let q=await L(b,{cwd:V(),surface:"headless",workspaceRoot:V()});if(!q.success)return{mode:"output",content:`Error: ${q.error||"未知错误"}`,exitCode:1};let z=q.data;if(z?.action==="invoke_skill"){let{skillName:G,skillArgs:K}=z;return{mode:"agent",content:K?`Please use the "${G}" skill to help me with: ${K}`:`Please use the "${G}" skill.`}}if(z?.action==="invoke_custom_command"||z?.action==="invoke_plugin_command"){let G=z.processedContent;return{mode:"agent",content:`# Custom Command: /${z.commandName}
1
+ import{ua as F,wa as L}from"./chunk-6bvc4z1c.js";import{Kd as $,Md as B,Ud as Q}from"./chunk-e7va75fw.js";import{Wf as y}from"./chunk-wvq95qx6.js";import{Th as V}from"./chunk-kzzty3v5.js";async function j(){await y(V())}async function I(b){let q=b.message||b._?.[0];if(typeof q==="string"&&q.trim())return q;let z=b.stdin??process.stdin;if(!z.isTTY){let G=[];for await(let K of z)G.push(K);return Buffer.concat(G).toString("utf-8").trim()}if(b.defaultMessage!==void 0)return b.defaultMessage;throw Error("No input provided")}async function M(b){let q=b.message||b._?.[0];if(typeof q==="string"&&q.trim())return q;let z=b.stdin??process.stdin;if(z.isTTY)return;let G=[];for await(let Z of z)G.push(Buffer.isBuffer(Z)?Z:Buffer.from(Z));return Buffer.concat(G).toString("utf-8").trim()||void 0}async function R(b){if(!F(b))return{mode:"agent",content:b};let q=await L(b,{cwd:V(),surface:"headless",workspaceRoot:V()});if(!q.success)return{mode:"output",content:`Error: ${q.error||"未知错误"}`,exitCode:1};let z=q.data;if(z?.action==="invoke_skill"){let{skillName:G,skillArgs:K}=z;return{mode:"agent",content:K?`Please use the "${G}" skill to help me with: ${K}`:`Please use the "${G}" skill.`}}if(z?.action==="invoke_custom_command"||z?.action==="invoke_plugin_command"){let G=z.processedContent;return{mode:"agent",content:`# Custom Command: /${z.commandName}
2
2
 
3
3
  ${G}`}}return{mode:"output",content:q.content||q.message||"",exitCode:0}}import{readFile as D,stat as H}from"node:fs/promises";import J from"node:path";function x(b,q){let z;try{z=JSON.parse(b)}catch(G){throw Error(`Invalid JSON output schema from ${q}`,{cause:G})}return B(z).schema}async function _(b){if(b.jsonSchema!==void 0&&b.outputSchema!==void 0)throw Error("--json-schema cannot be combined with --output-schema");if(b.jsonSchema!==void 0)return x(b.jsonSchema,"--json-schema");if(b.outputSchema===void 0)return;let q=J.resolve(b.outputSchema),z=await H(q);if(!z.isFile())throw Error(`Output schema path is not a regular file: ${q}`);if(z.size>$)throw Error(`Output schema exceeds ${$} bytes: ${q}`);return x(await D(q,"utf8"),q)}function N(b){if(!(b instanceof Error))return!1;return b.message.includes("未找到会话")||b.message.includes("ENOENT")||b.message.includes("no such file")}async function W(b){try{return await Q.loadSessionModelContext(b,V())}catch(q){if(N(q))return null;throw q}}async function C(b){if(b.resume===!0||b.resume==="true")throw Error("--resume without a session ID is only supported in interactive UI mode");if(typeof b.resume==="string"&&b.resume.length>0){if(b.forkSession){let G=V(),K=await Q.forkSession(b.resume,{newSessionId:b.sessionId,sourceProjectPath:G,targetProjectPath:G});return{...K,messages:await Q.loadSessionModelContext(K.sessionId,G)}}let[q,z]=await Promise.all([Q.loadSessionModelContext(b.resume),Q.findSessionMetadata(b.resume)]);return{sessionId:b.resume,messages:q,metadata:z}}if(b.continue){let q=b.forkSession?await Q.listSessions({cwd:V()}):await Q.listSessions();if(q.length>0){let z=q[0].sessionId;if(b.forkSession){let G=V(),K=await Q.forkSession(z,{newSessionId:b.sessionId,sourceProjectPath:G,targetProjectPath:G});return{...K,messages:await Q.loadSessionModelContext(K.sessionId,G)}}return{sessionId:z,messages:await Q.loadSessionModelContext(z),metadata:q[0]}}if(b.forkSession)throw Error("Cannot fork: no sessions are available to continue")}if(b.sessionId){let q=await W(b.sessionId);return{sessionId:b.sessionId,messages:q??[],...q?{metadata:await Q.findSessionMetadata(b.sessionId,V())}:{}}}return{sessionId:`${b.fallbackSessionPrefix}-${Date.now()}`,messages:[]}}
4
4
  export{j as m,I as n,M as o,R as p,_ as q,C as r};
@@ -1,2 +1,2 @@
1
- import{readFileSync as l}from"node:fs";import{dirname as o,join as u}from"node:path";import{fileURLToPath as a}from"node:url";var e={name:"blade-code",version:"0.10.123",private:!1,description:"🗡️ Blade Code - 智能代码助手命令行工具",type:"module",bin:{blade:"dist/blade.js"},files:["dist","vendor/ripgrep/**","README.md"],scripts:{dev:"node scripts/run-bun.js --watch src/blade.tsx","dev:serve":"node scripts/run-bun.js --watch src/blade.tsx serve --port 4097",build:"rm -rf dist && node scripts/run-bun.js run scripts/build.ts",start:"node scripts/run-bun.js run dist/blade.js",test:"node scripts/test.js","test:all":"vitest run --config vitest.config.ts --project='!performance' && vitest run --config vitest.config.ts --project=performance","test:unit":"node scripts/test.js unit","test:integration":"node scripts/test.js integration","test:real-api":"node scripts/test.js realApi","test:real-api:qualification":"node scripts/test.js realApiQualification","test:cli":"node scripts/test.js cli","test:headless-core":"node scripts/test.js headlessCore","test:e2e":"node scripts/test.js e2e","test:performance":"node scripts/test.js performance","test:snapshot":"node scripts/test.js snapshot","test:security":"node scripts/test.js security","browser:install":"playwright install chromium","browser:check":"node scripts/run-bun.js run scripts/browser-check.ts","test:coverage":"node scripts/test.js all --coverage","test:watch":"vitest --watch --config vitest.config.ts","qualify:local":"node scripts/run-bun.js run scripts/qualify.ts local","qualify:production":"node scripts/run-bun.js run scripts/qualify.ts production","benchmark:repo":"node scripts/run-bun.js run scripts/run-real-repo-benchmark.ts","test:update-snapshots":"node scripts/test.js snapshot --update",lint:"biome lint src tests","lint:fix":"biome lint --write src tests","type-check":"tsc --noEmit","format:check":"biome format src tests",ready:"node scripts/run-bun.js run scripts/qualify.ts production","detect-unused":"node scripts/run-bun.js run scripts/detect-unused.ts",prepack:"node scripts/run-bun.js run build",release:"node scripts/release.js","release:dry":"node scripts/release.js --dry-run","release:major":"node scripts/release.js --major","release:minor":"node scripts/release.js --minor","release:patch":"node scripts/release.js --patch"},keywords:["cli","blade","ai","assistant","agent","llm"],author:"echoVic",license:"MIT",repository:{type:"git",url:"git+https://github.com/echoVic/blade-code.git"},homepage:"https://github.com/echoVic/blade-code#readme",bugs:{url:"https://github.com/echoVic/blade-code/issues"},engines:{node:">=22.19.0"},optionalDependencies:{"@vscode/ripgrep":"^1.18.0","better-sqlite3":"^11.8.1","bun-pty":"^0.4.8","node-pty":"1.1.0"},dependencies:{"@agentclientprotocol/sdk":"^1.3.0","@anthropic-ai/sandbox-runtime":"0.0.67","@earendil-works/pi-ai":"0.84.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/sdk":"^1.30.0",ahooks:"^3.9.7",ajv:"^8.17.1","ansi-escapes":"^7.3.0","async-mutex":"^0.5.0",axios:"^1.19.0",chalk:"^5.4.1",diff:"^8.0.2","fast-glob":"^3.3.3","fuse.js":"^7.5.0","gray-matter":"^4.0.3",hono:"^4.13.0",ink:"npm:@jrichman/ink@6.4.10","ink-big-text":"^2.0.0","ink-gradient":"^3.0.0","ink-select-input":"^6.2.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","js-tiktoken":"^1.0.21","lodash-es":"^4.18.1",lowlight:"^3.3.0","lru-cache":"^11.5.2",nanoid:"^5.1.6",open:"^10.1.2",picomatch:"^4.0.5",playwright:"1.62.1","proper-lockfile":"^4.1.2",react:"19.2.4","react-dom":"19.2.4",semver:"^7.8.5","string-width":"^8.2.2",typebox:"1.3.10",undici:"^7.16.0","vscode-jsonrpc":"8.2.1","vscode-languageserver-protocol":"3.17.5","vscode-languageserver-types":"3.17.5","write-file-atomic":"^7.0.0",ws:"^8.21.2",yaml:"^2.9.0",yargs:"^18.1.0",zustand:"^5.0.14"},devDependencies:{"@biomejs/biome":"2.5.7","@types/bun":"^1.3.14","@types/json-schema":"^7.0.15","@types/lodash-es":"^4.17.12","@types/node":"^22.15.24","@types/picomatch":"^4.0.3","@types/proper-lockfile":"^4.1.4","@types/react":"19.2.10","@types/react-dom":"19.2.3","@types/semver":"^7.8.0","@types/write-file-atomic":"^4.0.3","@types/ws":"^8.18.1","@types/yargs":"^17.0.35","@vitest/coverage-v8":"^4.1.10",jsdom:"^26.0.0",typescript:"^5.9.2",vitest:"^4.1.10"}};var s;function r(){if(s)return s;let i=o(a(import.meta.url));for(let n=0;n<5;n++){try{let t=JSON.parse(l(u(i,"package.json"),"utf8"));if(t.name===e.name&&typeof t.version==="string"&&typeof t.description==="string")return s=t,s}catch{}i=o(i)}return s={name:e.name,version:process.env.BLADE_VERSION??e.version,description:e.description},s}function y(){return{...r()}}function p(){return r().version}function v(){return r().name}function g(){return r().description}function f(){return`v${p()}`}function w(){return`v${p()} © 2025 Blade Code`}
1
+ import{readFileSync as l}from"node:fs";import{dirname as o,join as u}from"node:path";import{fileURLToPath as a}from"node:url";var e={name:"blade-code",version:"0.10.124",private:!1,description:"🗡️ Blade Code - 智能代码助手命令行工具",type:"module",bin:{blade:"dist/blade.js"},files:["dist","vendor/ripgrep/**","README.md"],scripts:{dev:"node scripts/run-bun.js --watch src/blade.tsx","dev:serve":"node scripts/run-bun.js --watch src/blade.tsx serve --port 4097",build:"rm -rf dist && node scripts/run-bun.js run scripts/build.ts",start:"node scripts/run-bun.js run dist/blade.js",test:"node scripts/test.js","test:all":"vitest run --config vitest.config.ts --project='!performance' && vitest run --config vitest.config.ts --project=performance","test:unit":"node scripts/test.js unit","test:integration":"node scripts/test.js integration","test:real-api":"node scripts/test.js realApi","test:real-api:qualification":"node scripts/test.js realApiQualification","test:cli":"node scripts/test.js cli","test:headless-core":"node scripts/test.js headlessCore","test:e2e":"node scripts/test.js e2e","test:performance":"node scripts/test.js performance","test:snapshot":"node scripts/test.js snapshot","test:security":"node scripts/test.js security","browser:install":"playwright install chromium","browser:check":"node scripts/run-bun.js run scripts/browser-check.ts","test:coverage":"node scripts/test.js all --coverage","test:watch":"vitest --watch --config vitest.config.ts","qualify:local":"node scripts/run-bun.js run scripts/qualify.ts local","qualify:production":"node scripts/run-bun.js run scripts/qualify.ts production","benchmark:repo":"node scripts/run-bun.js run scripts/run-real-repo-benchmark.ts","test:update-snapshots":"node scripts/test.js snapshot --update",lint:"biome lint src tests","lint:fix":"biome lint --write src tests","type-check":"tsc --noEmit","format:check":"biome format src tests",ready:"node scripts/run-bun.js run scripts/qualify.ts production","detect-unused":"node scripts/run-bun.js run scripts/detect-unused.ts",prepack:"node scripts/run-bun.js run build",release:"node scripts/release.js","release:dry":"node scripts/release.js --dry-run","release:major":"node scripts/release.js --major","release:minor":"node scripts/release.js --minor","release:patch":"node scripts/release.js --patch"},keywords:["cli","blade","ai","assistant","agent","llm"],author:"echoVic",license:"MIT",repository:{type:"git",url:"git+https://github.com/echoVic/blade-code.git"},homepage:"https://github.com/echoVic/blade-code#readme",bugs:{url:"https://github.com/echoVic/blade-code/issues"},engines:{node:">=22.19.0"},optionalDependencies:{"@vscode/ripgrep":"^1.18.0","better-sqlite3":"^11.8.1","bun-pty":"^0.4.8","node-pty":"1.1.0"},dependencies:{"@agentclientprotocol/sdk":"^1.3.0","@anthropic-ai/sandbox-runtime":"0.0.67","@earendil-works/pi-ai":"0.84.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/sdk":"^1.30.0",ahooks:"^3.9.7",ajv:"^8.17.1","ansi-escapes":"^7.3.0","async-mutex":"^0.5.0",axios:"^1.19.0",chalk:"^5.4.1",diff:"^8.0.2","fast-glob":"^3.3.3","fuse.js":"^7.5.0","gray-matter":"^4.0.3",hono:"^4.13.0",ink:"npm:@jrichman/ink@6.4.10","ink-big-text":"^2.0.0","ink-gradient":"^3.0.0","ink-select-input":"^6.2.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","js-tiktoken":"^1.0.21","lodash-es":"^4.18.1",lowlight:"^3.3.0","lru-cache":"^11.5.2",nanoid:"^5.1.6",open:"^10.1.2",picomatch:"^4.0.5",playwright:"1.62.1","proper-lockfile":"^4.1.2",react:"19.2.4","react-dom":"19.2.4",semver:"^7.8.5","string-width":"^8.2.2",typebox:"1.3.10",undici:"^7.16.0","vscode-jsonrpc":"8.2.1","vscode-languageserver-protocol":"3.17.5","vscode-languageserver-types":"3.17.5","write-file-atomic":"^7.0.0",ws:"^8.21.2",yaml:"^2.9.0",yargs:"^18.1.0",zustand:"^5.0.14"},devDependencies:{"@biomejs/biome":"2.5.7","@types/bun":"^1.3.14","@types/json-schema":"^7.0.15","@types/lodash-es":"^4.17.12","@types/node":"^22.15.24","@types/picomatch":"^4.0.3","@types/proper-lockfile":"^4.1.4","@types/react":"19.2.10","@types/react-dom":"19.2.3","@types/semver":"^7.8.0","@types/write-file-atomic":"^4.0.3","@types/ws":"^8.18.1","@types/yargs":"^17.0.35","@vitest/coverage-v8":"^4.1.10",jsdom:"^26.0.0",typescript:"^5.9.2",vitest:"^4.1.10"}};var s;function r(){if(s)return s;let i=o(a(import.meta.url));for(let n=0;n<5;n++){try{let t=JSON.parse(l(u(i,"package.json"),"utf8"));if(t.name===e.name&&typeof t.version==="string"&&typeof t.description==="string")return s=t,s}catch{}i=o(i)}return s={name:e.name,version:process.env.BLADE_VERSION??e.version,description:e.description},s}function y(){return{...r()}}function p(){return r().version}function v(){return r().name}function g(){return r().description}function f(){return`v${p()}`}function w(){return`v${p()} © 2025 Blade Code`}
2
2
  export{y as Gi,p as Hi,v as Ii,g as Ji,f as Ki,w as Li};
@@ -1 +1 @@
1
- import{ue as a,ve as b,we as c}from"./chunk-gffned6y.js";import"./chunk-3jqd18d8.js";import"./chunk-ff3h9sbh.js";import"./chunk-v508x7cg.js";import"./chunk-ye4wyq1k.js";import"./chunk-85bamng3.js";import"./chunk-z5t56vsg.js";import"./chunk-kz15jy62.js";import"./chunk-9fgkg1vr.js";import"./chunk-pykxe413.js";import"./chunk-kzzty3v5.js";import"./chunk-9jtjq50j.js";import"./chunk-w4xqaw4h.js";import"./chunk-r6svhe3w.js";import"./chunk-a4dmw23t.js";import"./chunk-qmpdjmmz.js";import"./chunk-ncqagb27.js";import"./chunk-207s8tns.js";import"./chunk-spxb931p.js";import"./chunk-m7b779kd.js";export{a as validatePermissions,c as validateOutput,b as loadConfiguration};
1
+ import{ue as a,ve as b,we as c}from"./chunk-w6cg2fnz.js";import"./chunk-3jqd18d8.js";import"./chunk-32z8gkex.js";import"./chunk-v508x7cg.js";import"./chunk-ye4wyq1k.js";import"./chunk-85bamng3.js";import"./chunk-2824tzwn.js";import"./chunk-kz15jy62.js";import"./chunk-9fgkg1vr.js";import"./chunk-pykxe413.js";import"./chunk-kzzty3v5.js";import"./chunk-9jtjq50j.js";import"./chunk-w4xqaw4h.js";import"./chunk-r6svhe3w.js";import"./chunk-a4dmw23t.js";import"./chunk-5kg2kvbw.js";import"./chunk-ncqagb27.js";import"./chunk-207s8tns.js";import"./chunk-spxb931p.js";import"./chunk-m7b779kd.js";export{a as validatePermissions,c as validateOutput,b as loadConfiguration};
@@ -1,4 +1,4 @@
1
- import{e as L3,f as w3}from"./chunk-anjpwev3.js";import{i as BX,j as AX,k as bX}from"./chunk-00bg01aq.js";import{v as P9,w as M9,x as T8}from"./chunk-5hsv9btx.js";import{$ as I9,F as bY,J as vX,L as m4,M as v4,N as _Y,T as e9,U as $Y,Z as g$,aa as S9,ca as JY,ea as j2,fa as V3,ga as j3,ja as E3,ka as h3,oa as rJ,pa as xY,ra as gY,sa as mY,ta as VX,ua as m9,wa as p9,ya as PY}from"./chunk-3smgbzcz.js";import"./chunk-dabq8kdx.js";import{Ga as e6,Ha as $3,Ia as J3,La as DX}from"./chunk-jdhmptcr.js";import{Na as s9}from"./chunk-fpjhg6ce.js";import{Hb as t9,Qb as I4,ub as o9,vb as n9}from"./chunk-f90evsjc.js";import{$b as m2}from"./chunk-sca5q3tt.js";import{Fd as D9,Gd as C4,Hd as v9,Jd as A8,Rd as V2,Ud as x0,ed as u9,od as b9,pd as z2,td as R9,yd as C9}from"./chunk-3jnkhqa9.js";import"./chunk-q265drks.js";import"./chunk-7dykmcjj.js";import{xe as LX}from"./chunk-3jqd18d8.js";import{Be as X1,ye as p2,ze as R8}from"./chunk-wpa4v0c3.js";import"./chunk-twdfyk78.js";import{Fe as Y2,Ge as W$,He as k1,Ie as zJ,Je as w8,Ke as y9,Le as B6,Me as SJ,Ne as q3,Oe as A6,Pe as Q2,Qe as _$,Re as kX,Se as F$,Te as FX,Ue as K4,Ve as h2,Ye as h9,df as G$}from"./chunk-ff3h9sbh.js";import"./chunk-v508x7cg.js";import"./chunk-ye4wyq1k.js";import"./chunk-kpqdfn9z.js";import{tf as kJ}from"./chunk-b41den40.js";import"./chunk-8qp8v96d.js";import"./chunk-8vcynmzn.js";import{Ff as S8,If as o3,Nf as v3,Wf as fX}from"./chunk-c2vkgxwf.js";import"./chunk-0zzh482s.js";import"./chunk-adkpwx6c.js";import"./chunk-85bamng3.js";import{sg as NJ,ug as D$}from"./chunk-encs9pxs.js";import"./chunk-2t6b962t.js";import{Bh as D3,Ch as SX,wh as IX}from"./chunk-z5t56vsg.js";import"./chunk-kz15jy62.js";import"./chunk-9fgkg1vr.js";import{Lh as O2,Mh as b8,Oh as HJ}from"./chunk-pykxe413.js";import{Th as U$}from"./chunk-kzzty3v5.js";import"./chunk-9jtjq50j.js";import{qi as CX,ti as S1}from"./chunk-w4xqaw4h.js";import{vi as H3,wi as W3,zi as _1}from"./chunk-r6svhe3w.js";import"./chunk-a4dmw23t.js";import{Li as Z3}from"./chunk-qmpdjmmz.js";import{Oi as lJ}from"./chunk-ncqagb27.js";import"./chunk-207s8tns.js";import{Zi as R4}from"./chunk-spxb931p.js";import{$i as _J}from"./chunk-m7b779kd.js";import{useMemoizedFn as L4}from"ahooks";import{useEffect as gK,useState as w4}from"react";import{useMemoizedFn as z$}from"ahooks";import WX from"ansi-escapes";import{Box as M1,useStdout as fK}from"ink";import{useEffect as y1,useMemo as DK,useRef as $8,useState as vK}from"react";import{useShallow as EX}from"zustand/react/shallow";import{useStore as jX}from"zustand";function U0($){return jX(Q2,$)}var hX=[],K2=()=>U0(($)=>$.session.sessionId),Y1=()=>U0(($)=>$.session.workspaceRoot),Z8=()=>U0(($)=>$.session.messages),aJ=()=>U0(($)=>$.session.clearCount),iJ=()=>U0(($)=>$.session.isCompacting),oJ=()=>U0(($)=>$.session.tokenUsage.estimatedCostUsd),nJ=()=>U0(($)=>{let{totalInputTokens:J,cacheReadTokens:X,cacheWriteTokens:Y}=$.session.tokenUsage;return rJ({totalInputTokens:J,cacheReadTokens:X,cacheWriteTokens:Y}).hitRate}),tJ=()=>U0(($)=>$.session.providerCircuit),sJ=()=>U0(($)=>$.session.providerAdmission),eJ=()=>U0(($)=>$.session.providerRetry),$9=()=>U0(($)=>$.session.providerStall),J9=()=>U0(($)=>$.session.actionStationarity),C1=()=>U0(($)=>$.session.actions),Y9=()=>U0(($)=>{let{totalTokens:J,maxContextTokens:X}=$.session.tokenUsage;if(X<=0)return 100;let Y=Math.max(0,100-J/X*100);return Math.round(Y)}),X9=()=>U0(($)=>$.app.initializationStatus),Z9=()=>U0(($)=>$.app.initializationError),Q8=()=>U0(($)=>$.app.activeModal),Q9=()=>U0(($)=>$.app.tasks),K9=()=>U0(($)=>$.app.modelEditorTarget),U9=()=>U0(($)=>$.app.sessionSelectorData),G9=()=>U0(($)=>$.app.awaitingSecondCtrlC),I1=()=>U0(($)=>$.app.actions),K8=()=>U0(($)=>$.app.sideConversation),q9=()=>U0(($)=>$.app.teams),U8=()=>U0(($)=>$.app.initializationStatus==="ready"),z9=()=>U0(($)=>$.app.tasks.length>0),U2=()=>U0(($)=>$.config.config?.permissionMode||"default"),O9=()=>U0(($)=>$.config.config?.models??hX),G8=()=>U0(($)=>{let J=$.config.config;if(!J)return;let X=J.currentModelId;return J.models.find((Z)=>Z.id===X)??J.models[0]}),q8=()=>U0(($)=>$.config.config?.currentModelId),_9=()=>U0(($)=>$.config.config?.agentTeamsEnabled===!0),k0=()=>U0(($)=>{return W$.getTheme()}),N9=()=>U0(($)=>$.config.config?.codeTheme??"default"),K$=()=>U0(($)=>$.focus.currentFocus),H9=()=>U0(($)=>$.focus.actions),G2=()=>U0(($)=>$.command.isProcessing),W9=()=>U0(($)=>$.command.actions),q2=()=>U0(($)=>$.command.pendingCommands),F9=()=>U0(($)=>$.command.recoveredSteeringCount),z8=()=>U0(($)=>$.app.reasoningEffort!=="off"),O8=()=>U0(($)=>$.app.reasoningEffort),_8=()=>U0(($)=>$.app.serviceTier),N8=()=>U0(($)=>$.app.responseVerbosity),H8=()=>U0(($)=>$.app.communicationStyle),W8=()=>U0(($)=>$.session.currentThinkingContent),L9=()=>U0(($)=>$.session.thinkingExpanded),F8=()=>U0(($)=>$.session.currentStreamingMessageId),L8=()=>U0(EX(($)=>({lines:$.session.currentStreamingLines,tail:$.session.currentStreamingTail,lineCount:$.session.currentStreamingLineCount,version:$.session.currentStreamingVersion}))),w9=()=>U0(($)=>$.session.finalizingStreamingMessageId),B9=()=>U0(($)=>$.session.historyExpanded),A9=()=>U0(($)=>$.session.expandedMessageCount);import{useMemoizedFn as O1}from"ahooks";import{useEffect as u1,useMemo as UZ,useRef as I8}from"react";function gX($,J){try{return $.code===J.code&&$.message===J.message&&$.retryable===J.retryable&&$.resource===J.resource}catch{return!1}}class B4{options;requested=!1;waitingForIdle=!1;disposed=!1;generation=0;wakeEpoch=0;idleEpoch=0;attempt=0;recoveryStartedAt=null;scheduledToken=null;activeAttemptToken=null;activeRunController=null;retryTimer=null;deadlineTimer=null;now;scheduleCallback;setTimerCallback;clearTimerCallback;constructor($){this.options=$;this.now=$.now??Date.now,this.scheduleCallback=$.scheduleMicrotask??queueMicrotask,this.setTimerCallback=$.setTimer??setTimeout,this.clearTimerCallback=$.clearTimer??clearTimeout}request(){if(this.disposed)return;if(this.wakeEpoch++,this.requested=!0,this.waitingForIdle||this.retryTimer)return;this.scheduleIfRunnable()}notifyIdle(){if(this.disposed)return;if(this.idleEpoch++,this.retryTimer)return;this.waitingForIdle=!1,this.scheduleIfRunnable()}dispose(){if(this.disposed)return;this.disposed=!0,this.generation++,this.requested=!1,this.waitingForIdle=!1,this.scheduledToken=null,this.clearOwnedTimer("retry"),this.clearOwnedTimer("deadline"),this.activeAttemptToken=null;let $=this.activeRunController;this.activeRunController=null,$?.abort("pending-resume-coordinator-disposed"),this.resetEpisodeBudget()}scheduleIfRunnable(){if(this.disposed||!this.requested||this.scheduledToken||this.activeAttemptToken||this.retryTimer||this.waitingForIdle)return;if(!this.options.canRun()){this.waitingForIdle=!0;return}let $=this.generation,J={};this.scheduledToken=J;try{this.scheduleCallback(()=>{if(this.disposed||$!==this.generation||this.scheduledToken!==J)return;this.scheduledToken=null,this.flush($).catch((X)=>{this.handleUnexpectedFailure(X,$)})})}catch(X){this.handleUnexpectedFailure(X,$)}}async flush($){if(this.disposed||$!==this.generation||this.activeAttemptToken||!this.requested||this.retryTimer||this.waitingForIdle)return;if(!this.options.canRun()){this.waitingForIdle=!0;return}let J={},X=new AbortController,Y=this.wakeEpoch,Z=this.idleEpoch;if(this.attempt++,this.recoveryStartedAt===null)this.recoveryStartedAt=this.now(),this.installDeadlineTimer($);this.activeAttemptToken=J,this.activeRunController=X;let Q=await this.options.run(X.signal);if(this.disposed||$!==this.generation||this.activeAttemptToken!==J)return;if(this.activeAttemptToken=null,this.activeRunController=null,Q.status==="completed"){let K=this.wakeEpoch!==Y;if(this.clearEpisode(),K)this.requested=!0,this.scheduleIfRunnable();return}if(Q.status==="deferred"){if(this.attempt--,this.attempt===0)this.clearOwnedTimer("deadline"),this.resetEpisodeBudget();if(this.requested=!0,this.idleEpoch!==Z)this.waitingForIdle=!1,this.scheduleIfRunnable();else this.waitingForIdle=!0;return}this.handleFailure(Q,$)}handleFailure($,J){let X=z2($.taskFailure),Y=this.options.sessionIdentity;if($.workKind!=="pending_input"||!$.evidence||!Y||!gX($.taskFailure,$.evidence.taskFailure)){this.terminate("failed",this.attempt,X);return}let Z=M9({sessionIdentity:Y,failedAttempt:this.attempt,recoveryStartedAt:this.recoveryStartedAt??this.now(),now:this.now(),workStillPending:$.workStillPending,evidence:$.evidence});if(Z.phase!=="retry_scheduled"){this.terminate(Z.phase,this.attempt,X);return}this.requested=!0,this.waitingForIdle=!1;let Q={},K=this.setTimerCallback(()=>{if(this.disposed||J!==this.generation||this.retryTimer?.token!==Q)return;this.retryTimer=null,this.scheduleIfRunnable()},Z.delayMs);this.retryTimer={handle:K,token:Q},K.unref?.()}handleUnexpectedFailure($,J){if(this.disposed||J!==this.generation)return;this.terminate("failed",Math.max(1,this.attempt),z2($),"pending-resume-coordinator-failed")}installDeadlineTimer($){let J={},X=this.setTimerCallback(()=>{if(this.disposed||$!==this.generation||this.deadlineTimer?.token!==J)return;this.deadlineTimer=null,this.terminate("exhausted",Math.max(1,this.attempt),b9("timeout"),"pending-resume-recovery-deadline-exceeded")},P9);this.deadlineTimer={handle:X,token:J},X.unref?.()}terminate($,J,X,Y){let Z=this.activeRunController;if(this.generation++,this.requested=!1,this.waitingForIdle=!1,this.scheduledToken=null,this.activeAttemptToken=null,this.activeRunController=null,this.clearOwnedTimer("retry"),this.clearOwnedTimer("deadline"),this.resetEpisodeBudget(),Y)Z?.abort(Y);try{this.options.onTerminalFailure?.({phase:$,attempt:J,taskFailure:X})}catch{}}clearEpisode(){this.requested=!1,this.waitingForIdle=!1,this.clearOwnedTimer("retry"),this.clearOwnedTimer("deadline"),this.resetEpisodeBudget()}resetEpisodeBudget(){this.attempt=0,this.recoveryStartedAt=null}clearOwnedTimer($){let J=$==="retry"?this.retryTimer:this.deadlineTimer;if(!J)return;if($==="retry")this.retryTimer=null;else this.deadlineTimer=null;this.clearTimerCallback(J.handle)}}class D2{options;finalized=!1;constructor($){this.options=$}get isFinalized(){return this.finalized}acceptsDeltas(){return!this.finalized&&!this.options.signal.aborted}startTurn(){this.finalized=!1}finalize(){if(!this.acceptsDeltas())return!1;return this.finalized=!0,this.commit(this.options.streamingBuffer.drainPendingBuffers()),!0}abortAndFinalize($){if(this.finalized)return $(),!1;this.finalized=!0;let J=this.options.streamingBuffer.drainPendingBuffers();return $(),this.commit(J),!0}discard(){this.finalized=!0,this.options.streamingBuffer.resetStreamingBuffers(),this.options.discardStreamingMessage(),this.options.clearThinking()}commit($){let J=this.options.getStreamingMessageId();if(J){if($.extraContent)w8(J,$.extraContent);y9(J)}this.options.finalizeStreamingMessage($.extraContent,$.extraThinking)}}function mX($){if(!($ instanceof Error))return"未知错误";let Y=$.lastError??$;if(Y.responseBody)try{let K=JSON.parse(Y.responseBody)?.error?.message;if(K){let U=Y.statusCode?` (HTTP ${Y.statusCode})`:"";return`${K}${U}`}}catch{}let Z=$.message.match(/Last error:\s*(.+)$/);if(Z)return Z[1];return $.message}function pX($){if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.includes("aborted")}function xX($){if(!($ instanceof Error))return!1;let J=$.message;return J.includes("can only concatenate str")||J.includes("image_url")||J.includes("multimodal")||J.includes("vision")||J.includes("does not support images")}function B8($){let J=pX($),X=xX($),Y;if(X)Y="当前模型不支持图片理解功能。请切换到支持视觉能力的模型(如 Claude 4.5、GPT-5.2、Gemini 3 Pro、Qwen3-VL-Plus 等)后重试。";else Y=mX($);return{displayMessage:Y,isAbort:J,isVisionNotSupported:X}}import{appendFileSync as cX,mkdirSync as uX,writeFileSync as dX}from"node:fs";import lX from"node:os";import A4 from"node:path";var T9=null;function rX(){let $=process.env.BLADE_STORAGE_ROOT||A4.join(lX.homedir(),".blade");return A4.join($,"logs","stream-debug.log")}function aX($){if(T9===$)return;let J=A4.dirname($);uX(J,{recursive:!0,mode:493}),dX($,`=== Stream Debug Log Started: ${new Date().toISOString()} ===
1
+ import{e as L3,f as w3}from"./chunk-anjpwev3.js";import{i as BX,j as AX,k as bX}from"./chunk-0hf6dd5w.js";import{v as P9,w as M9,x as T8}from"./chunk-1eq5phqv.js";import{$ as I9,F as bY,J as vX,L as m4,M as v4,N as _Y,T as e9,U as $Y,Z as g$,aa as S9,ca as JY,ea as j2,fa as V3,ga as j3,ja as E3,ka as h3,oa as rJ,pa as xY,ra as gY,sa as mY,ta as VX,ua as m9,wa as p9,ya as PY}from"./chunk-6bvc4z1c.js";import"./chunk-dabq8kdx.js";import{Ga as e6,Ha as $3,Ia as J3,La as DX}from"./chunk-fneerm4v.js";import{Na as s9}from"./chunk-fpjhg6ce.js";import{Hb as t9,Qb as I4,ub as o9,vb as n9}from"./chunk-1kbx9es5.js";import{$b as m2}from"./chunk-sca5q3tt.js";import{Fd as D9,Gd as C4,Hd as v9,Jd as A8,Rd as V2,Ud as x0,ed as u9,od as b9,pd as z2,td as R9,yd as C9}from"./chunk-e7va75fw.js";import"./chunk-q265drks.js";import"./chunk-7dykmcjj.js";import{xe as LX}from"./chunk-3jqd18d8.js";import{Be as X1,ye as p2,ze as R8}from"./chunk-nz4a0mep.js";import"./chunk-twdfyk78.js";import{Fe as Y2,Ge as W$,He as k1,Ie as zJ,Je as w8,Ke as y9,Le as B6,Me as SJ,Ne as q3,Oe as A6,Pe as Q2,Qe as _$,Re as kX,Se as F$,Te as FX,Ue as K4,Ve as h2,Ye as h9,df as G$}from"./chunk-32z8gkex.js";import"./chunk-v508x7cg.js";import"./chunk-ye4wyq1k.js";import"./chunk-kpqdfn9z.js";import{tf as kJ}from"./chunk-b41den40.js";import"./chunk-8qp8v96d.js";import"./chunk-9fntcgem.js";import{Ff as S8,If as o3,Nf as v3,Wf as fX}from"./chunk-wvq95qx6.js";import"./chunk-0zzh482s.js";import"./chunk-adkpwx6c.js";import"./chunk-85bamng3.js";import{sg as NJ,ug as D$}from"./chunk-ne9dyvcc.js";import"./chunk-2t6b962t.js";import{Bh as D3,Ch as SX,wh as IX}from"./chunk-2824tzwn.js";import"./chunk-kz15jy62.js";import"./chunk-9fgkg1vr.js";import{Lh as O2,Mh as b8,Oh as HJ}from"./chunk-pykxe413.js";import{Th as U$}from"./chunk-kzzty3v5.js";import"./chunk-9jtjq50j.js";import{qi as CX,ti as S1}from"./chunk-w4xqaw4h.js";import{vi as H3,wi as W3,zi as _1}from"./chunk-r6svhe3w.js";import"./chunk-a4dmw23t.js";import{Li as Z3}from"./chunk-5kg2kvbw.js";import{Oi as lJ}from"./chunk-ncqagb27.js";import"./chunk-207s8tns.js";import{Zi as R4}from"./chunk-spxb931p.js";import{$i as _J}from"./chunk-m7b779kd.js";import{useMemoizedFn as L4}from"ahooks";import{useEffect as gK,useState as w4}from"react";import{useMemoizedFn as z$}from"ahooks";import WX from"ansi-escapes";import{Box as M1,useStdout as fK}from"ink";import{useEffect as y1,useMemo as DK,useRef as $8,useState as vK}from"react";import{useShallow as EX}from"zustand/react/shallow";import{useStore as jX}from"zustand";function U0($){return jX(Q2,$)}var hX=[],K2=()=>U0(($)=>$.session.sessionId),Y1=()=>U0(($)=>$.session.workspaceRoot),Z8=()=>U0(($)=>$.session.messages),aJ=()=>U0(($)=>$.session.clearCount),iJ=()=>U0(($)=>$.session.isCompacting),oJ=()=>U0(($)=>$.session.tokenUsage.estimatedCostUsd),nJ=()=>U0(($)=>{let{totalInputTokens:J,cacheReadTokens:X,cacheWriteTokens:Y}=$.session.tokenUsage;return rJ({totalInputTokens:J,cacheReadTokens:X,cacheWriteTokens:Y}).hitRate}),tJ=()=>U0(($)=>$.session.providerCircuit),sJ=()=>U0(($)=>$.session.providerAdmission),eJ=()=>U0(($)=>$.session.providerRetry),$9=()=>U0(($)=>$.session.providerStall),J9=()=>U0(($)=>$.session.actionStationarity),C1=()=>U0(($)=>$.session.actions),Y9=()=>U0(($)=>{let{totalTokens:J,maxContextTokens:X}=$.session.tokenUsage;if(X<=0)return 100;let Y=Math.max(0,100-J/X*100);return Math.round(Y)}),X9=()=>U0(($)=>$.app.initializationStatus),Z9=()=>U0(($)=>$.app.initializationError),Q8=()=>U0(($)=>$.app.activeModal),Q9=()=>U0(($)=>$.app.tasks),K9=()=>U0(($)=>$.app.modelEditorTarget),U9=()=>U0(($)=>$.app.sessionSelectorData),G9=()=>U0(($)=>$.app.awaitingSecondCtrlC),I1=()=>U0(($)=>$.app.actions),K8=()=>U0(($)=>$.app.sideConversation),q9=()=>U0(($)=>$.app.teams),U8=()=>U0(($)=>$.app.initializationStatus==="ready"),z9=()=>U0(($)=>$.app.tasks.length>0),U2=()=>U0(($)=>$.config.config?.permissionMode||"default"),O9=()=>U0(($)=>$.config.config?.models??hX),G8=()=>U0(($)=>{let J=$.config.config;if(!J)return;let X=J.currentModelId;return J.models.find((Z)=>Z.id===X)??J.models[0]}),q8=()=>U0(($)=>$.config.config?.currentModelId),_9=()=>U0(($)=>$.config.config?.agentTeamsEnabled===!0),k0=()=>U0(($)=>{return W$.getTheme()}),N9=()=>U0(($)=>$.config.config?.codeTheme??"default"),K$=()=>U0(($)=>$.focus.currentFocus),H9=()=>U0(($)=>$.focus.actions),G2=()=>U0(($)=>$.command.isProcessing),W9=()=>U0(($)=>$.command.actions),q2=()=>U0(($)=>$.command.pendingCommands),F9=()=>U0(($)=>$.command.recoveredSteeringCount),z8=()=>U0(($)=>$.app.reasoningEffort!=="off"),O8=()=>U0(($)=>$.app.reasoningEffort),_8=()=>U0(($)=>$.app.serviceTier),N8=()=>U0(($)=>$.app.responseVerbosity),H8=()=>U0(($)=>$.app.communicationStyle),W8=()=>U0(($)=>$.session.currentThinkingContent),L9=()=>U0(($)=>$.session.thinkingExpanded),F8=()=>U0(($)=>$.session.currentStreamingMessageId),L8=()=>U0(EX(($)=>({lines:$.session.currentStreamingLines,tail:$.session.currentStreamingTail,lineCount:$.session.currentStreamingLineCount,version:$.session.currentStreamingVersion}))),w9=()=>U0(($)=>$.session.finalizingStreamingMessageId),B9=()=>U0(($)=>$.session.historyExpanded),A9=()=>U0(($)=>$.session.expandedMessageCount);import{useMemoizedFn as O1}from"ahooks";import{useEffect as u1,useMemo as UZ,useRef as I8}from"react";function gX($,J){try{return $.code===J.code&&$.message===J.message&&$.retryable===J.retryable&&$.resource===J.resource}catch{return!1}}class B4{options;requested=!1;waitingForIdle=!1;disposed=!1;generation=0;wakeEpoch=0;idleEpoch=0;attempt=0;recoveryStartedAt=null;scheduledToken=null;activeAttemptToken=null;activeRunController=null;retryTimer=null;deadlineTimer=null;now;scheduleCallback;setTimerCallback;clearTimerCallback;constructor($){this.options=$;this.now=$.now??Date.now,this.scheduleCallback=$.scheduleMicrotask??queueMicrotask,this.setTimerCallback=$.setTimer??setTimeout,this.clearTimerCallback=$.clearTimer??clearTimeout}request(){if(this.disposed)return;if(this.wakeEpoch++,this.requested=!0,this.waitingForIdle||this.retryTimer)return;this.scheduleIfRunnable()}notifyIdle(){if(this.disposed)return;if(this.idleEpoch++,this.retryTimer)return;this.waitingForIdle=!1,this.scheduleIfRunnable()}dispose(){if(this.disposed)return;this.disposed=!0,this.generation++,this.requested=!1,this.waitingForIdle=!1,this.scheduledToken=null,this.clearOwnedTimer("retry"),this.clearOwnedTimer("deadline"),this.activeAttemptToken=null;let $=this.activeRunController;this.activeRunController=null,$?.abort("pending-resume-coordinator-disposed"),this.resetEpisodeBudget()}scheduleIfRunnable(){if(this.disposed||!this.requested||this.scheduledToken||this.activeAttemptToken||this.retryTimer||this.waitingForIdle)return;if(!this.options.canRun()){this.waitingForIdle=!0;return}let $=this.generation,J={};this.scheduledToken=J;try{this.scheduleCallback(()=>{if(this.disposed||$!==this.generation||this.scheduledToken!==J)return;this.scheduledToken=null,this.flush($).catch((X)=>{this.handleUnexpectedFailure(X,$)})})}catch(X){this.handleUnexpectedFailure(X,$)}}async flush($){if(this.disposed||$!==this.generation||this.activeAttemptToken||!this.requested||this.retryTimer||this.waitingForIdle)return;if(!this.options.canRun()){this.waitingForIdle=!0;return}let J={},X=new AbortController,Y=this.wakeEpoch,Z=this.idleEpoch;if(this.attempt++,this.recoveryStartedAt===null)this.recoveryStartedAt=this.now(),this.installDeadlineTimer($);this.activeAttemptToken=J,this.activeRunController=X;let Q=await this.options.run(X.signal);if(this.disposed||$!==this.generation||this.activeAttemptToken!==J)return;if(this.activeAttemptToken=null,this.activeRunController=null,Q.status==="completed"){let K=this.wakeEpoch!==Y;if(this.clearEpisode(),K)this.requested=!0,this.scheduleIfRunnable();return}if(Q.status==="deferred"){if(this.attempt--,this.attempt===0)this.clearOwnedTimer("deadline"),this.resetEpisodeBudget();if(this.requested=!0,this.idleEpoch!==Z)this.waitingForIdle=!1,this.scheduleIfRunnable();else this.waitingForIdle=!0;return}this.handleFailure(Q,$)}handleFailure($,J){let X=z2($.taskFailure),Y=this.options.sessionIdentity;if($.workKind!=="pending_input"||!$.evidence||!Y||!gX($.taskFailure,$.evidence.taskFailure)){this.terminate("failed",this.attempt,X);return}let Z=M9({sessionIdentity:Y,failedAttempt:this.attempt,recoveryStartedAt:this.recoveryStartedAt??this.now(),now:this.now(),workStillPending:$.workStillPending,evidence:$.evidence});if(Z.phase!=="retry_scheduled"){this.terminate(Z.phase,this.attempt,X);return}this.requested=!0,this.waitingForIdle=!1;let Q={},K=this.setTimerCallback(()=>{if(this.disposed||J!==this.generation||this.retryTimer?.token!==Q)return;this.retryTimer=null,this.scheduleIfRunnable()},Z.delayMs);this.retryTimer={handle:K,token:Q},K.unref?.()}handleUnexpectedFailure($,J){if(this.disposed||J!==this.generation)return;this.terminate("failed",Math.max(1,this.attempt),z2($),"pending-resume-coordinator-failed")}installDeadlineTimer($){let J={},X=this.setTimerCallback(()=>{if(this.disposed||$!==this.generation||this.deadlineTimer?.token!==J)return;this.deadlineTimer=null,this.terminate("exhausted",Math.max(1,this.attempt),b9("timeout"),"pending-resume-recovery-deadline-exceeded")},P9);this.deadlineTimer={handle:X,token:J},X.unref?.()}terminate($,J,X,Y){let Z=this.activeRunController;if(this.generation++,this.requested=!1,this.waitingForIdle=!1,this.scheduledToken=null,this.activeAttemptToken=null,this.activeRunController=null,this.clearOwnedTimer("retry"),this.clearOwnedTimer("deadline"),this.resetEpisodeBudget(),Y)Z?.abort(Y);try{this.options.onTerminalFailure?.({phase:$,attempt:J,taskFailure:X})}catch{}}clearEpisode(){this.requested=!1,this.waitingForIdle=!1,this.clearOwnedTimer("retry"),this.clearOwnedTimer("deadline"),this.resetEpisodeBudget()}resetEpisodeBudget(){this.attempt=0,this.recoveryStartedAt=null}clearOwnedTimer($){let J=$==="retry"?this.retryTimer:this.deadlineTimer;if(!J)return;if($==="retry")this.retryTimer=null;else this.deadlineTimer=null;this.clearTimerCallback(J.handle)}}class D2{options;finalized=!1;constructor($){this.options=$}get isFinalized(){return this.finalized}acceptsDeltas(){return!this.finalized&&!this.options.signal.aborted}startTurn(){this.finalized=!1}finalize(){if(!this.acceptsDeltas())return!1;return this.finalized=!0,this.commit(this.options.streamingBuffer.drainPendingBuffers()),!0}abortAndFinalize($){if(this.finalized)return $(),!1;this.finalized=!0;let J=this.options.streamingBuffer.drainPendingBuffers();return $(),this.commit(J),!0}discard(){this.finalized=!0,this.options.streamingBuffer.resetStreamingBuffers(),this.options.discardStreamingMessage(),this.options.clearThinking()}commit($){let J=this.options.getStreamingMessageId();if(J){if($.extraContent)w8(J,$.extraContent);y9(J)}this.options.finalizeStreamingMessage($.extraContent,$.extraThinking)}}function mX($){if(!($ instanceof Error))return"未知错误";let Y=$.lastError??$;if(Y.responseBody)try{let K=JSON.parse(Y.responseBody)?.error?.message;if(K){let U=Y.statusCode?` (HTTP ${Y.statusCode})`:"";return`${K}${U}`}}catch{}let Z=$.message.match(/Last error:\s*(.+)$/);if(Z)return Z[1];return $.message}function pX($){if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.includes("aborted")}function xX($){if(!($ instanceof Error))return!1;let J=$.message;return J.includes("can only concatenate str")||J.includes("image_url")||J.includes("multimodal")||J.includes("vision")||J.includes("does not support images")}function B8($){let J=pX($),X=xX($),Y;if(X)Y="当前模型不支持图片理解功能。请切换到支持视觉能力的模型(如 Claude 4.5、GPT-5.2、Gemini 3 Pro、Qwen3-VL-Plus 等)后重试。";else Y=mX($);return{displayMessage:Y,isAbort:J,isVisionNotSupported:X}}import{appendFileSync as cX,mkdirSync as uX,writeFileSync as dX}from"node:fs";import lX from"node:os";import A4 from"node:path";var T9=null;function rX(){let $=process.env.BLADE_STORAGE_ROOT||A4.join(lX.homedir(),".blade");return A4.join($,"logs","stream-debug.log")}function aX($){if(T9===$)return;let J=A4.dirname($);uX(J,{recursive:!0,mode:493}),dX($,`=== Stream Debug Log Started: ${new Date().toISOString()} ===
2
2
  `),T9=$}function b4($,J,X){try{let Y=rX();aX(Y);let Z=new Date().toISOString(),Q=X?` | ${JSON.stringify(X)}`:"",K=`[${Z}] [${$}] ${J}${Q}
3
3
  `;cX(Y,K)}catch{}}var v2=S1("UI");function M4($,J){if(J.state==="requires_attention"){let X=J.reason==="interrupted_tool_call";$.addToolMessage("Turn recovery requires attention",{toolName:"Runtime Recovery",phase:"complete",summary:X?"An interrupted tool may have partially completed":"A completed tool may already have changed external state",detail:`${J.turnId} · inspect workspace, processes, and external state before retrying`});return}$.addToolMessage(J.state==="completed"?"Recovered completed turn":"Resuming interrupted turn",{toolName:"Runtime Recovery",phase:"complete",summary:J.state==="completed"?"The durable final response was recovered":"No tool execution was recorded before interruption",detail:J.turnId})}function k9($,J){let X=$.streamSession??new D2({signal:$.signal,streamingBuffer:$.streamingBuffer,getStreamingMessageId:$.getStreamingMessageId,finalizeStreamingMessage:$.sessionActions.finalizeStreamingMessage,discardStreamingMessage:$.sessionActions.discardStreamingMessage,clearThinking:()=>$.sessionActions.setCurrentThinkingContent(null)});return(Y)=>{switch(Y.kind){case"content_delta":if(Y.delta.length>0)J.outputStarted=!0;if(!X.acceptsDeltas())break;J.contentDeltaCount++,J.contentDeltaTotalLen+=Y.delta.length,b4("loopEventHandler","onContentDelta",{callCount:J.contentDeltaCount,deltaLen:Y.delta.length,totalLen:J.contentDeltaTotalLen}),$.streamingBuffer.batchAppendContent(Y.delta);break;case"thinking_delta":if(Y.delta.length>0)J.outputStarted=!0;if(!X.acceptsDeltas())break;if($.thinkingModeEnabled)$.streamingBuffer.batchAppendThinking(Y.delta);break;case"stream_end":{$.sessionActions.setProviderCircuit(null),$.sessionActions.setProviderRetry(null),$.sessionActions.setProviderStall(null),v2.debug("[loopEventHandler] stream_end",{contentDeltaCount:J.contentDeltaCount,contentDeltaTotalLen:J.contentDeltaTotalLen,streamFinalized:X.isFinalized,signalAborted:$.signal.aborted}),b4("loopEventHandler","onStreamEnd",{contentDeltaCallCount:J.contentDeltaCount,contentDeltaTotalLen:J.contentDeltaTotalLen,streamFinalized:X.isFinalized,signalAborted:$.signal.aborted}),X.finalize();break}case"model_fallback":$.sessionActions.setProviderAdmission(null),$.sessionActions.setProviderCircuit(null),$.sessionActions.setProviderRetry(null),$.sessionActions.setProviderStall(null),X.discard();break;case"provider_admission":{let{kind:Z,...Q}=Y;$.sessionActions.setProviderAdmission(Y.phase==="queued"?Q:null);break}case"provider_circuit":{let{kind:Z,...Q}=Y;$.sessionActions.setProviderCircuit(Y.phase==="closed"?null:Q);break}case"provider_retry":{let{kind:Z,...Q}=Y;$.sessionActions.setProviderRetry(Y.phase==="recovered"?null:Q);break}case"provider_stall":{let{kind:Z,...Q}=Y;$.sessionActions.setProviderStall(Y.phase==="detected"?Q:null);break}case"action_stationarity":{let{kind:Z,...Q}=Y;$.sessionActions.setActionStationarity(Y.phase==="recovered"?null:Q);break}case"turn_recovery":{M4($.sessionActions,Y.assessment);break}case"tool_start":{J.toolExecutionStarted=!0;let Z=Y.toolCall;if(!("function"in Z))break;if(Z.function.name===A8)break;if(v2.debug("[loopEventHandler] tool_start",{toolName:Z.function.name,toolKind:Y.toolKind}),["TaskCreate","TaskUpdate","TaskList"].includes(Z.function.name))break;try{let Q=JSON.parse(Z.function.arguments),K=I9(Z.function.name,Q);$.sessionActions.addToolMessage(K,{toolCallId:Z.id,toolName:Z.function.name,phase:"start",summary:K,params:Q})}catch(Q){v2.error("[loopEventHandler] onToolStart error:",Q)}break}case"tool_progress":{J.toolExecutionStarted=!0;let Z=Y.toolCall;if(!("function"in Z))break;if(Z.function.name===A8)break;let Q=Y.update.total!==void 0?` ${Math.max(0,Math.min(100,Math.round((Y.update.progress??0)/Y.update.total*100)))}%`:"",K=`${Z.function.name}${Q}: ${Y.update.message}`;$.sessionActions.addToolMessage(K,{toolCallId:Z.id,toolName:Z.function.name,phase:"progress",summary:K,...Y.update.admission?{admission:Y.update.admission}:{}});break}case"tool_result":{J.toolExecutionStarted=!0;let Z=Y.toolCall;if(!("function"in Z))break;if(Z.function.name===A8)break;v2.debug("[loopEventHandler] tool_result",{toolName:Z.function.name,success:Y.result.success});let Q=C9(S9(Z.function.name,Y.result),R9);$.sessionActions.addToolMessage(Q.summary,{toolCallId:Z.id,toolName:Z.function.name,phase:"complete",summary:Q.summary,detail:Q.detail});break}case"structured_output":J.outputStarted=!0,$.sessionActions.replaceLastAssistantMessage(JSON.stringify(Y.output,null,2));break;case"token_usage":$.sessionActions.updateTokenUsage(Y.usage);break;case"compaction":if($.sessionActions.setCompacting(Y.phase==="start"),Y.phase==="end"){if($.sessionActions.resetContextUsage(),Y.outcome!=="failed")J.compactionCount=(J.compactionCount??0)+1}break;case"turn_start":v2.debug("[loopEventHandler] turn_start",{turn:Y.turn,maxTurns:Y.maxTurns}),$.sessionActions.updateTokenUsage({turnCount:Y.turn}),$.sessionActions.setProviderCircuit(null),$.sessionActions.setProviderRetry(null),$.sessionActions.setProviderStall(null),X.startTurn();break;case"task_update":$.appActions.setTasks(Y.tasks);break;case"goal_frontier_updated":$.appActions.setTasks(Y.tasks);break;case"mcp_catalog_changed":{let Z=`MCP catalog r${Y.revision}: +${Y.added.length} -${Y.removed.length} ~${Y.updated.length}`;$.sessionActions.addToolMessage(Z,{toolName:"MCP Catalog",phase:"complete",summary:Z,detail:[Y.added.length>0?`Added: ${Y.added.join(", ")}`:"",Y.removed.length>0?`Removed: ${Y.removed.join(", ")}`:"",Y.updated.length>0?`Updated: ${Y.updated.join(", ")}`:""].filter(Boolean).join(`
4
4
  `)});break}case"mcp_content_changed":{let Z=`MCP ${Y.contentKind} r${Y.revision}: +${Y.added.length} -${Y.removed.length} ~${Y.updated.length}`;$.sessionActions.addToolMessage(Z,{toolName:"MCP Content",phase:"complete",summary:Z,detail:[Y.added.length>0?`Added: ${Y.added.join(", ")}`:"",Y.removed.length>0?`Removed: ${Y.removed.join(", ")}`:"",Y.updated.length>0?`Updated: ${Y.updated.join(", ")}`:""].filter(Boolean).join(`