blade-code 0.10.36 → 0.10.38

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 (85) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-qwrdss51.js → chunk-0b3fnxry.js} +3 -3
  3. package/dist/{chunk-qvdcesry.js → chunk-0dw58ycv.js} +2 -2
  4. package/dist/{chunk-1t8ebwsp.js → chunk-0tdc8pg9.js} +1 -1
  5. package/dist/chunk-13bzyvs2.js +1 -0
  6. package/dist/chunk-169rpaqn.js +1 -0
  7. package/dist/{chunk-1raz6s2b.js → chunk-199as76m.js} +2 -2
  8. package/dist/chunk-2mkdj63h.js +1 -0
  9. package/dist/chunk-4mpx8rad.js +1 -0
  10. package/dist/chunk-572gdsjd.js +1 -0
  11. package/dist/{chunk-q15qd9x4.js → chunk-5xfef98g.js} +1 -1
  12. package/dist/{chunk-acw8q8w9.js → chunk-6aw2ts3m.js} +1 -1
  13. package/dist/{chunk-95n8g52h.js → chunk-6t2bkj8s.js} +1 -1
  14. package/dist/chunk-7t97xngf.js +160 -0
  15. package/dist/chunk-8xp6djrk.js +1 -0
  16. package/dist/chunk-921c6fm5.js +1 -0
  17. package/dist/{chunk-7c5tnz4y.js → chunk-9yd3av82.js} +1 -1
  18. package/dist/{chunk-ekzck3x7.js → chunk-9zfr1ydk.js} +1 -1
  19. package/dist/{chunk-9g6rzbcv.js → chunk-a1shhh83.js} +1 -1
  20. package/dist/{chunk-cc7dmst6.js → chunk-a9r3w0t9.js} +2 -2
  21. package/dist/{chunk-6jpspf3v.js → chunk-ahkpjvaq.js} +1 -1
  22. package/dist/{chunk-qxvk42rf.js → chunk-ak37gg0n.js} +1 -1
  23. package/dist/{chunk-g510tpqt.js → chunk-asqah231.js} +1 -1
  24. package/dist/{chunk-phgqzja3.js → chunk-atdb1pks.js} +1 -1
  25. package/dist/{chunk-gy8esxaa.js → chunk-aw4r1zhr.js} +2 -2
  26. package/dist/{chunk-cnctwxqn.js → chunk-b9zfq3et.js} +1 -1
  27. package/dist/{chunk-2mvp3rqw.js → chunk-cm4t4cz6.js} +2 -2
  28. package/dist/{chunk-4bbnytq5.js → chunk-e6ttz45s.js} +1 -1
  29. package/dist/{chunk-n4555gej.js → chunk-e8wpd0s4.js} +1 -1
  30. package/dist/{chunk-xrhtwcd0.js → chunk-fj6frvhd.js} +1 -1
  31. package/dist/chunk-fjpqxdct.js +1 -0
  32. package/dist/{chunk-0m4s8r87.js → chunk-g7v01gjg.js} +3 -3
  33. package/dist/chunk-gc7bk6v0.js +1 -0
  34. package/dist/{chunk-95k17p11.js → chunk-gh0vdddb.js} +1 -1
  35. package/dist/{chunk-6gcmfvfj.js → chunk-gvx3707k.js} +1 -1
  36. package/dist/chunk-h4k801hr.js +6 -0
  37. package/dist/chunk-hcrfkqc1.js +1 -0
  38. package/dist/chunk-hkrbsqsw.js +6 -0
  39. package/dist/{chunk-rshbnfr8.js → chunk-htvt9e1j.js} +3 -3
  40. package/dist/chunk-jd764yqg.js +5 -0
  41. package/dist/{chunk-m2w03hpc.js → chunk-jpzrwcm7.js} +1 -1
  42. package/dist/{chunk-4s0c6tkd.js → chunk-jtjcg93t.js} +1 -1
  43. package/dist/chunk-jtv91ez8.js +2 -0
  44. package/dist/{chunk-250vpvr5.js → chunk-kw543czm.js} +1 -1
  45. package/dist/{chunk-y990fa4r.js → chunk-kzr5n83y.js} +41 -41
  46. package/dist/{chunk-0dj2qm8a.js → chunk-m0a2zdm8.js} +1 -1
  47. package/dist/{chunk-09qkatb5.js → chunk-m3yb3rek.js} +1 -1
  48. package/dist/chunk-n5nj8d8f.js +1 -0
  49. package/dist/{chunk-y9nq48st.js → chunk-qc5qwgpt.js} +2 -2
  50. package/dist/{chunk-ck5tvxkj.js → chunk-r863t0fx.js} +1 -1
  51. package/dist/{chunk-e23sz81n.js → chunk-rfec0k27.js} +1 -1
  52. package/dist/{chunk-5xc50n8e.js → chunk-rj1z55m8.js} +1 -1
  53. package/dist/{chunk-m6dh31kb.js → chunk-tczrjn95.js} +2 -2
  54. package/dist/chunk-ts8h7mx5.js +44 -0
  55. package/dist/{chunk-hq1wrf1g.js → chunk-vxpj2jgx.js} +1 -1
  56. package/dist/chunk-vxxhd72z.js +1 -0
  57. package/dist/{chunk-8ft7j7aw.js → chunk-y3sb4wda.js} +1 -1
  58. package/dist/{chunk-99ywfge1.js → chunk-ydy9bvcp.js} +1 -1
  59. package/dist/web/assets/{ChatView-Dx9j7CGg.js → ChatView-BB4nYdEf.js} +12 -12
  60. package/dist/web/assets/{CodeBlockHighlighter-CZADKR6S.js → CodeBlockHighlighter-CAFugWXU.js} +1 -1
  61. package/dist/web/assets/{FilePreview-BOIDa_oJ.js → FilePreview-O5aDfFS4.js} +1 -1
  62. package/dist/web/assets/{MarkdownRenderer-DXsfHVUX.js → MarkdownRenderer-C_qekwq_.js} +3 -3
  63. package/dist/web/assets/{SettingsModal-lQveNhC6.js → SettingsModal-FADlD0Da.js} +1 -1
  64. package/dist/web/assets/{TaskSwitcher-BSrmpJ2u.js → TaskSwitcher-D3k3tRpI.js} +1 -1
  65. package/dist/web/assets/{TerminalPanel-BFre9Shc.js → TerminalPanel-DBmKVVbI.js} +1 -1
  66. package/dist/web/assets/{index-DGZjm9wT.js → index-CMIW4J1Q.js} +3 -3
  67. package/dist/web/index.html +1 -1
  68. package/package.json +1 -1
  69. package/dist/chunk-3pxn6gcj.js +0 -1
  70. package/dist/chunk-4f1g8f6q.js +0 -1
  71. package/dist/chunk-4vq34v09.js +0 -5
  72. package/dist/chunk-515mkr66.js +0 -44
  73. package/dist/chunk-5c5qh3ab.js +0 -1
  74. package/dist/chunk-5vkxcjn1.js +0 -1
  75. package/dist/chunk-738a282r.js +0 -1
  76. package/dist/chunk-8m87dnk2.js +0 -1
  77. package/dist/chunk-e5yage6p.js +0 -1
  78. package/dist/chunk-hh158y4e.js +0 -6
  79. package/dist/chunk-j2tmdkmw.js +0 -1
  80. package/dist/chunk-psgt2pq7.js +0 -6
  81. package/dist/chunk-q3r0zfec.js +0 -1
  82. package/dist/chunk-rv6kca90.js +0 -1
  83. package/dist/chunk-s4enbe93.js +0 -160
  84. package/dist/chunk-ve7kp9rr.js +0 -1
  85. package/dist/chunk-xf2kjb9a.js +0 -1
@@ -0,0 +1,5 @@
1
+ import{Rf as ye,Sf as Re,Tf as K,Uf as ke}from"./chunk-jtv91ez8.js";import{Yf as C}from"./chunk-0dw58ycv.js";import{ag as ue,cg as X}from"./chunk-cm4t4cz6.js";import{fg as he}from"./chunk-asqah231.js";var Se={openrouter:{"HTTP-Referer":"https://github.com/echoVic/blade-code","X-Title":"Blade"},cerebras:{"X-Cerebras-3rd-Party-Integration":"blade"}},ne=(e)=>Se[e]||{};var De=new Set(["user-cancel","interrupt","sibling-error","timeout"]);function Y(e){return typeof e==="string"&&De.has(e)}function dt(e){if(!e.aborted)return;if(Y(e.reason))return e.reason;return"user-cancel"}function lt(e){if(Y(e))return!0;if(!(e instanceof Error))return!1;if(e.name==="AbortError")return!0;if(e instanceof DOMException&&e.name==="AbortError")return!0;if(e.message.includes("aborted"))return!0;return!1}function oe(...e){let t=e.filter(Boolean);if(t.length===0)return new AbortController().signal;if(t.length===1)return t[0];let n=AbortSignal;if(typeof n.any==="function")return n.any(t);for(let i of t)if(i.aborted)return i;let r=new AbortController,o=new Map;for(let i of t){let u=()=>{r.abort(i.reason);for(let[c,a]of o)c.removeEventListener("abort",a)};o.set(i,u)}for(let[i,u]of o)i.addEventListener("abort",u,{once:!0});return r.signal}function B(e,t,n){let r=n?.throwOnAbort??!1;if(t?.aborted){if(r)return Promise.reject(new DOMException("Aborted","AbortError"));return Promise.resolve()}return new Promise((o,i)=>{let u,c=setTimeout(()=>{if(t&&u)t.removeEventListener("abort",u);o()},e);if(t)u=()=>{if(clearTimeout(c),r)i(new DOMException("Aborted","AbortError"));else o()},t.addEventListener("abort",u,{once:!0})})}var Oe=C("Chat"),Ne={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};function z(e){if(typeof e==="string")return e;return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
2
+ `)}function Ue(e){if(!e)return{};try{let t=JSON.parse(e);return t&&typeof t==="object"&&!Array.isArray(t)?t:{}}catch{return Oe.warn("[PiAIChatService] Invalid historical tool arguments",{value:e}),{}}}function Be(e){let t=e.match(/^data:([^;,]+);base64,(.+)$/s);return t?{mimeType:t[1],data:t[2]}:void 0}async function Le(e,t){let n=Be(e);if(n)return{type:"image",...n};if(!/^https?:\/\//i.test(e))return{type:"text",text:`[Unsupported image source: ${e}]`};let r=await fetch(e,{signal:t});if(!r.ok)throw Error(`Failed to load image ${e}: HTTP ${r.status}`);return{type:"image",mimeType:r.headers.get("content-type")?.split(";")[0]??"image/png",data:Buffer.from(await r.arrayBuffer()).toString("base64")}}async function ie(e,t,n,r,o){let i=e.filter((a)=>a.role==="system").map((a)=>z(a.content)).filter(Boolean).join(`
3
+
4
+ `),u=[];for(let a of e){if(a.role==="system")continue;if(a.role==="user"){let s=t.input.includes("image"),d=typeof a.content==="string"?a.content:await Promise.all(a.content.map((f)=>f.type==="text"?Promise.resolve({type:"text",text:f.text}):s?Le(f.image_url.url,r):Promise.resolve({type:"text",text:"[Image omitted: current model does not support image input]"})));u.push({role:"user",content:d,timestamp:Date.now()});continue}if(a.role==="assistant"){let s=[];if(a.reasoningContent?.trim())s.push({type:"thinking",thinking:a.reasoningContent});let d=z(a.content);if(d)s.push({type:"text",text:d});for(let f of a.tool_calls??[]){if(!("function"in f))continue;s.push({type:"toolCall",id:f.id,name:f.function.name,arguments:Ue(f.function.arguments)})}u.push({role:"assistant",content:s,api:t.api,provider:t.provider,model:t.id,usage:Ne,stopReason:a.tool_calls?.length?"toolUse":"stop",timestamp:Date.now()});continue}u.push({role:"toolResult",toolCallId:a.tool_call_id??"",toolName:a.name??"unknown",content:[{type:"text",text:z(a.content)}],isError:!1,timestamp:Date.now()})}let c=n?.filter((a)=>!o||a.name===o).map((a)=>({name:a.name,description:a.description,parameters:a.parameters,constrainedSampling:a.constrainedSampling}));return{...i?{systemPrompt:i}:{},messages:u,...c?.length?{tools:c}:{}}}function se(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.role==="tool")continue;let o=r.role==="assistant"&&r.tool_calls?.length?r.tool_calls:void 0;if(!o){t.push(r);continue}let i=[],u=n+1;while(u<e.length&&e[u].role==="tool")i.push(e[u++]);let c=new Set(o.map((d)=>d.id)),a=i.filter((d)=>d.tool_call_id&&c.has(d.tool_call_id)),s=new Set(a.map((d)=>d.tool_call_id));if(c.size===o.length&&a.length===c.size&&s.size===c.size)t.push(r,...a);n=u-1}return t}function ae(e){return e.some((t)=>t.role==="assistant"&&Boolean(t.tool_calls?.length)&&!t.reasoningContent?.trim())}function ce(e,t){return{...e,...t.baseUrl?{baseUrl:ue(e.api,t.baseUrl)}:{},...t.maxOutputTokens?{maxTokens:t.maxOutputTokens}:{}}}function H(e){let t=e.modelCatalog??X();return{models:t.models,model:ce(t.getModel(e.provider,e.model),e)}}function de(e,t){let n=e.modelCatalog??X();return ce(n.getModel(t.provider,t.model),e)}var fe=new WeakSet;class D extends Error{budgetMs;elapsedMs;code="PROVIDER_RECOVERY_BUDGET_EXCEEDED";constructor(e,t){super(`Provider recovery budget exhausted after ${e}ms`);this.budgetMs=e;this.elapsedMs=t;this.name="ProviderRecoveryBudgetExceededError"}}var je=["gousagelimiterror","freeusagelimiterror","monthly usage limit reached","available balance","insufficient_quota","out of budget","quota exceeded","billing"],Ve=["prompt_too_long","prompt is too long","maximum context length","context length exceeded","context_length_exceeded","request too large"],We=["econnreset","econnrefused","enotfound","eai_again","etimedout","fetch failed","network error","connection error","connection refused","connection lost","other side closed","socket hang up","socket connection was closed","upstream connect","reset before headers","websocket closed","websocket error","http2 request did not get a response"];function pe(e){return(e instanceof Error?e.message:String(e)).toLowerCase()}function Ye(e){let t=pe(e);return Ve.some((n)=>t.includes(n))}function G(e){if(e!==null&&typeof e==="object")fe.add(e)}function Et(e){return e!==null&&typeof e==="object"&&fe.has(e)}function ze(e){return e!==null&&typeof e==="object"&&"code"in e?e.code:void 0}function Xe(e){if(e===null||typeof e!=="object")return;let t=e;for(let n of["status","statusCode"]){let r=t[n];if(typeof r==="number"&&Number.isInteger(r))return r}return}function He(e){let t=e.match(/^(?:error:\s*)?(\d{3})\b/),n=e.match(/\b(?:status(?:\s+code)?|http)[:\s]+(\d{3})\b/),r=Number(t?.[1]??n?.[1]);return Number.isInteger(r)?r:void 0}function O(e,t){let n=pe(e),r=ze(e);if(r==="STREAM_IDLE_TIMEOUT"||r==="PROVIDER_RECOVERY_BUDGET_EXCEEDED"||e instanceof Error&&e.name==="AbortError"||n.includes("request aborted")||n==="aborted")return{retryable:!1};if(je.some((i)=>n.includes(i))||Ye(e))return{retryable:!1};if(t?.shouldRetry==="false")return{retryable:!1,statusCode:t.statusCode};let o=t?.statusCode??Xe(e)??He(n);if(t?.shouldRetry==="true")return{retryable:!0,reason:o===429?"rate_limit":o===408||o===409?"timeout":"server_error",statusCode:o};if(o===429)return{retryable:!0,reason:"rate_limit",statusCode:o};if(o===408||o===409)return{retryable:!0,reason:"timeout",statusCode:o};if(o!==void 0&&o>=500&&o<=599)return{retryable:!0,reason:"server_error",statusCode:o};if(r==="PROVIDER_STREAM_CLOSED"||n.includes("stream closed before completion")||n.includes("ended without")||n.includes("stream ended before"))return{retryable:!0,reason:"stream_closed",statusCode:o};if(We.some((i)=>n.includes(i)))return{retryable:!0,reason:"transport",statusCode:o};if(n.includes("timeout")||n.includes("timed out")||n.includes("temporarily unavailable")||n.includes("upstream_error")||n.includes("overloaded")||n.includes("rate limit")||n.includes("too many requests")||n.includes("service unavailable")||n.includes("server error")||n.includes("internal error")||n.includes("please retry")||n.includes("try your request again"))return{retryable:!0,reason:n.includes("rate")||n.includes("too many")?"rate_limit":n.includes("timeout")||n.includes("timed out")?"timeout":"server_error",statusCode:o};return{retryable:!1,statusCode:o}}function Ge(e,t){if(!e)return;if(e.retryAfterMs!==void 0){let o=Number.parseFloat(e.retryAfterMs);if(Number.isFinite(o))return Math.max(0,o)}if(e.retryAfter===void 0)return;let n=Number.parseFloat(e.retryAfter);if(Number.isFinite(n))return Math.max(0,n*1000);let r=Date.parse(e.retryAfter);return Number.isFinite(r)?Math.max(0,r-t):void 0}function le(e,t,n={}){let r=n.now??Date.now(),o=n.maxDelayMs??60000,i=Ge(t,r);if(i!==void 0)return Math.min(Math.ceil(i),o);let u=Math.max(0,e-1),c=n.maxExponentialDelayMs??8000,a=Math.min(500*2**u,c),s=Math.max(0,Math.min(1,n.random??Math.random())),d=a*(0.75+s*0.25);return Math.min(Math.round(d),o)}function xe(e,t){let n=e.onPayload;e.onPayload=async(r,o)=>{let i=n?await n(r,o):r;return t(i===void 0?r:i,o)}}function $e(e){if(!e.reasoningEnabled)return;return e.reasoningEffort??e.reasoningLevel??"high"}function Fe(e){switch(e){case"minimal":return"MINIMAL";case"low":return"LOW";case"medium":return"MEDIUM";default:return"HIGH"}}function Ke(e,t,n,r){let o=r?void 0:$e(n);if(!o){if(t.api==="anthropic-messages")e.thinkingEnabled=!1;if(t.api==="google-generative-ai"||t.api==="google-vertex")e.thinking={enabled:!1};return}switch(t.api){case"anthropic-messages":e.thinkingEnabled=!0,e.effort=o;break;case"google-generative-ai":case"google-vertex":e.thinking={enabled:!0,level:Fe(o)};break;case"mistral-conversations":e.reasoningEffort="high";break;case"bedrock-converse-stream":case"pi-messages":e.reasoning=o;break;default:e.reasoningEffort=o}}function Je(e,t,n){if(!n)return;switch(t){case"anthropic-messages":case"bedrock-converse-stream":e.toolChoice={type:"tool",name:n};break;case"openai-completions":case"mistral-conversations":case"pi-messages":e.toolChoice={type:"function",function:{name:n}};break;case"openai-responses":case"openai-codex-responses":case"azure-openai-responses":e.toolChoice={type:"function",name:n};break;case"google-generative-ai":case"google-vertex":e.toolChoice="any";break}}function Ze(e,t,n){let r=n.serviceTier;if(!r)return;if(t.api==="openai-responses"||t.api==="openai-codex-responses"||t.api==="azure-openai-responses"){e.serviceTier=r;return}if(t.api!=="openai-completions"&&!(t.api==="anthropic-messages"&&r==="fast"))return;xe(e,(o)=>{if(!o||typeof o!=="object"||Array.isArray(o))return o;return t.api==="anthropic-messages"?{...o,speed:"fast"}:{...o,service_tier:r}})}function Qe(e,t,n){let r=n.responseVerbosity;if(!r)return;if(he(t,r),t.api==="openai-codex-responses"){e.textVerbosity=r;return}xe(e,(o)=>{if(!o||typeof o!=="object"||Array.isArray(o))return o;if(t.api==="openai-completions")return{...o,verbosity:r};let i="text"in o&&o.text&&typeof o.text==="object"&&!Array.isArray(o.text)?o.text:{};return{...o,text:{...i,verbosity:r}}})}function Me(e,t,n,r,o=!1){let i={apiKey:e.apiKey,headers:e.customHeaders,signal:n,temperature:r?.temperature??e.temperature??0,maxTokens:r?.maxOutputTokens??e.maxOutputTokens,timeoutMs:e.timeout,maxRetries:0,cacheRetention:e.enablePromptCaching?"short":"none"};if(Ke(i,t,e,o),Je(i,t.api,r?.toolChoice?.toolName),Ze(i,t,e),Qe(i,t,e),t.api==="azure-openai-responses")i.azureBaseUrl=e.baseUrl,i.azureApiVersion=e.apiVersion,i.azureDeploymentName=t.id;return i}function me(e,t){let n=t.get("x-should-retry");return{statusCode:e,...t.get("retry-after")!==null?{retryAfter:t.get("retry-after")??void 0}:{},...t.get("retry-after-ms")!==null?{retryAfterMs:t.get("retry-after-ms")??void 0}:{},...n==="true"||n==="false"?{shouldRetry:n}:{}}}var qe=new Set(["anthropic-messages","openai-completions","openai-responses","openai-codex-responses","azure-openai-responses","pi-messages"]);function be(e,t,n){let r=e.onResponse;if(e.onResponse=async(i,u)=>{let c=new Headers(i.headers);n(me(i.status,c)),await r?.(i,u)},!qe.has(t.api)||typeof globalThis.fetch!=="function")return;let o=typeof e.fetch==="function"?e.fetch:globalThis.fetch.bind(globalThis);e.fetch=async(i,u)=>{let c=await o(i,u);return n(me(c.status,c.headers)),c}}function _e(e){return{promptTokens:e.input+e.cacheRead+e.cacheWrite,completionTokens:e.output,totalTokens:e.totalTokens,costUsd:e.cost.total,...e.reasoning!==void 0?{reasoningTokens:e.reasoning}:{},...e.cacheWrite>0?{cacheCreationInputTokens:e.cacheWrite}:{},...e.cacheRead>0?{cacheReadInputTokens:e.cacheRead}:{}}}var F=300000,et=30000;class Te extends Error{timeoutMs;code="STREAM_IDLE_TIMEOUT";constructor(e){super(`Provider stream idle timeout after ${e}ms without an event`);this.timeoutMs=e;this.name="StreamIdleTimeoutError"}}class Ee extends Error{code="PROVIDER_STREAM_CLOSED";constructor(){super("Provider stream closed before completion");this.name="ProviderStreamClosedError"}}function $(e){return e.reason instanceof Error?e.reason:new DOMException("Aborted","AbortError")}function tt(e){return e.idleTimeoutMs&&e.idleTimeoutMs>0?e.idleTimeoutMs:F}function nt(e,t){if(t===0)return;let n=t!==void 0&&t>0?t:et;return Math.max(1,Math.min(n,Math.floor(e/2)))}function ot(e,t,n){if(n?.aborted)return Promise.reject($(n));return new Promise((r,o)=>{let i=!1,u=()=>{clearTimeout(d),n?.removeEventListener("abort",s)},c=(f)=>{if(i)return;i=!0,u(),r(f)},a=(f)=>{if(i)return;i=!0,u(),o(f instanceof Error?f:Error(String(f)))},s=()=>{if(n)a($(n))},d=setTimeout(()=>c({kind:"timer"}),Math.max(0,t));if(n?.addEventListener("abort",s,{once:!0}),n?.aborted){s();return}e.then((f)=>c({kind:"next",result:f}),a)})}async function*rt(e,t,n){let r=tt(t),o=nt(r,t.stallWarningMs);if(t.signal?.aborted)throw $(t.signal);let i=Date.now(),u=Promise.resolve().then(()=>e.next()),c;for(;;){let s=await ot(u,(c?r:o??r)-(Date.now()-i),t.signal);if(s.kind==="next"){if(c)yield{...c,phase:"recovered",durationMs:Math.max(c.durationMs,Date.now()-i)};return s.result}if(!c&&o!==void 0){n.stallCount++,c={phase:"detected",stallCount:n.stallCount,durationMs:o,warningAfterMs:o,timeoutMs:r,outputStarted:n.outputStarted},yield c;continue}let d=new Te(r);throw t.abort?.(d),d}}async function*Pe(e,t,n,r,o={}){let u=e.stream(t,n,r)[Symbol.asyncIterator](),c=0,a=!1,s={stallCount:0,outputStarted:!1};try{while(!0){let d=rt(u,o,s),f=await d.next();while(!f.done)yield{providerStall:f.value},f=await d.next();let x=f.value;if(x.done)throw new Ee;let l=x.value;switch(l.type){case"text_delta":s.outputStarted=!0,yield{content:l.delta};break;case"thinking_delta":s.outputStarted=!0,yield{reasoningContent:l.delta};break;case"toolcall_end":s.outputStarted=!0,yield{toolCalls:[{index:c++,id:l.toolCall.id,type:"function",function:{name:l.toolCall.name,arguments:JSON.stringify(l.toolCall.arguments)}}]};break;case"done":a=!0,yield{finishReason:l.reason,usage:_e(l.message.usage)};return;case"error":throw Error(l.error.errorMessage??`Request ${l.reason==="aborted"?"aborted":"failed"}`)}}}finally{if(!a)Promise.resolve(u.return?.()).catch(()=>{return})}}var we=C("Chat");function it(e){return Boolean(e&&e.role==="user"&&Array.isArray(e.content)&&e.content.some((t)=>t.type==="image_url"))}class J{config;models;model;constructor(e){let t=H(e);this.config={...e,maxContextTokens:t.model.contextWindow,maxOutputTokens:e.maxOutputTokens??t.model.maxTokens},this.models=t.models,this.model=t.model,we.debug("[PiAIChatService] Initialized",{provider:this.model.provider,model:this.model.id,api:this.model.api})}async chat(e,t,n,r){let o="",i="",u=[],c,a;for await(let s of this.streamChat(e,t,n,r)){o+=s.content??"",i+=s.reasoningContent??"";for(let d of s.toolCalls??[])if(d.id&&d.type==="function"&&d.function?.name)u.push(d);c=s.usage??c,a=s.finishReason??a}return{content:o,...i?{reasoningContent:i}:{},...u.length>0?{toolCalls:u}:{},usage:c,finishReason:a}}async*streamChat(e,t,n,r){let o=r?.toolChoice?.toolName;if(o&&!t?.some((p)=>p.name===o))throw Error(`Required tool is unavailable: ${o}`);let i=se(e);if(i.some((p)=>it(p))&&!this.model.input.includes("image"))throw Error(`${this.model.name} does not support image input`);let u=Boolean(o)||ae(i),c=await ie(i,this.model,t,n,o),a=r?.providerRecovery;if(a&&!ke(a.budgetMs))throw Error("Invalid bounded foreground Provider recovery budget");let s=a?.mode==="bounded_foreground"&&a.budgetMs>0?{budgetMs:a.budgetMs,startedAt:void 0}:void 0,d=s?"bounded_foreground":"standard",f=this.config.maxRetries??2,x=this.config.maxRetries??(s?ye:2),l=s!==void 0&&this.config.maxRetries===void 0,k=0,g,I=(p=Date.now())=>{if(!s)return;let _=s.startedAt===void 0?0:Math.min(s.budgetMs,Math.max(0,p-s.startedAt));return{recoveryBudgetMs:s.budgetMs,recoveryElapsedMs:_,recoveryRemainingMs:Math.max(0,s.budgetMs-_)}},P=()=>({mode:d,...I()??{}}),ge=()=>{if(s&&s.startedAt===void 0)s.startedAt=Date.now()},L=()=>{let p=I();return new D(s?.budgetMs??0,p?.recoveryElapsedMs??0)},v=()=>!l||k<x+1,Ce=(p)=>{if(!v())throw L();if(l)k++;g=void 0;let _=new AbortController,w=n?oe(n,_.signal):_.signal,b;if(s?.startedAt!==void 0){let m=I()?.recoveryRemainingMs??0;if(m<=0)throw L();let T=new D(s.budgetMs,s.budgetMs);b=setTimeout(()=>_.abort(T),m),b.unref?.()}let y=Me(this.config,p,w,r,u);be(y,p,(m)=>{g=m});let R=Pe(this.models,p,c,y,{idleTimeoutMs:this.config.streamIdleTimeout??F,signal:w,abort:(m)=>_.abort(m)});return async function*(){try{yield*R}finally{if(b)clearTimeout(b)}}()},Z=this,Q=async function*(p,_,w,b){let y,R=!1,m,T;for(let E=0;E<=w;E++){if(!v())break;try{let M=!1;for await(let h of Ce(p)){if(h.providerStall){yield h;continue}let V=l?k-1:E;if(V>0&&m&&!M)M=!0,yield{providerRetry:{phase:"recovered",attempt:V,maxRetries:x,reason:m,...T!==void 0?{statusCode:T}:{},...P()}};R=!0,_(),yield h}return}catch(M){if(y=M,Z.logIdleTimeout(M,R,p),await Z.handleAbort(n),M instanceof D){if(R)throw G(M),M;throw yield{providerRetry:{phase:"exhausted",attempt:l?Math.max(0,k-1):E,maxRetries:x,reason:m??"timeout",...T!==void 0?{statusCode:T}:{},...P(),exhaustedBy:"recovery_budget"}},M}let h=O(M,g);if(R)throw G(M),M;if(!h.retryable||!h.reason){if(E>0&&m)yield{providerRetry:{phase:"exhausted",attempt:l?Math.max(0,k-1):E,maxRetries:x,reason:m,...T!==void 0?{statusCode:T}:{},...P()}};throw M}if(m=h.reason,T=h.statusCode,E<w&&v()){ge();let ee=l?k:E+1,W=le(ee,g,s?{maxDelayMs:K,maxExponentialDelayMs:K}:void 0),ve=I(),A=s?Math.min(W,ve?.recoveryRemainingMs??W):W,U={attempt:ee,maxRetries:x,reason:h.reason,...h.statusCode!==void 0?{statusCode:h.statusCode}:{}};if(yield{providerRetry:{phase:"scheduled",...U,delayMs:A,nextRetryAt:Date.now()+A,...P()}},s){let S=A;while(S>0){let te=Math.min(S,Re);if(await B(te,n,{throwOnAbort:!0}),S-=te,(I()?.recoveryRemainingMs??0)<=0){let Ae=L();throw yield{providerRetry:{phase:"exhausted",...U,...P(),exhaustedBy:"recovery_budget"}},Ae}if(S>0)yield{providerRetry:{phase:"waiting",...U,delayMs:A,nextRetryAt:Date.now()+S,...P()}}}}else await B(A,n,{throwOnAbort:!0});yield{providerRetry:{phase:"attempt",...U,...P()}}}else yield{providerRetry:{phase:"exhausted",attempt:l?Math.max(0,k-1):E,maxRetries:x,reason:h.reason,...h.statusCode!==void 0?{statusCode:h.statusCode}:{},...P(),...s&&(b||!v())?{exhaustedBy:"attempt_limit"}:{}}}}}throw y},j,q=!1,N=this.config.fallbackModels??[],Ie=s&&N.length>0?Math.min(f,x):x;try{for await(let p of Q(this.model,()=>{q=!0},Ie,N.length===0))yield p;return}catch(p){if(j=p,q||!O(p,g).retryable)throw p}for(let[p,_]of N.entries()){if(!v())break;yield{modelFallback:!0};let w=!1;try{let b=de(this.config,_),y=p===N.length-1,R=s&&!y?Math.min(f,x):x;for await(let m of Q(b,()=>{w=!0},R,y))yield m;return}catch(b){if(j=b,w||!O(b,g).retryable)throw b}}throw j}async handleAbort(e){if(e?.aborted)await B(0,e,{throwOnAbort:!0})}logIdleTimeout(e,t,n){if(e===null||typeof e!=="object"||!("code"in e)||e.code!=="STREAM_IDLE_TIMEOUT"||!("timeoutMs"in e)||typeof e.timeoutMs!=="number")return;we.warn("[PiAIChatService] Provider stream idle timeout",{provider:n.provider,model:n.id,timeoutMs:e.timeoutMs,replayBoundaryCrossed:t})}getConfig(){return{...this.config}}updateConfig(e){let t={...this.config,...e},n=H(t);this.config={...t,maxContextTokens:n.model.contextWindow,maxOutputTokens:t.maxOutputTokens??n.model.maxTokens},this.models=n.models,this.model=n.model}}var st=C("Service");async function Wt(e){let t=e;if(t.provider){let n=ne(t.provider);if(Object.keys(n).length>0)t={...t,customHeaders:{...n,...t.customHeaders}},st.debug(`Injected ${t.provider} specific headers:`,Object.keys(n))}return at(t)}function at(e){return new J(e)}
5
+ export{dt as Hd,lt as Id,oe as Jd,Ye as Kd,Et as Ld,J as Md,Wt as Nd};
@@ -1,4 +1,4 @@
1
- import{ea as F,ga as L}from"./chunk-0m4s8r87.js";import{nc as $,pc as B,xc as Q}from"./chunk-6gcmfvfj.js";import{oe as y}from"./chunk-9g6rzbcv.js";import{Nf as V}from"./chunk-6360fg4j.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{ea as F,ga as L}from"./chunk-g7v01gjg.js";import{nc as $,pc as B,xc as Q}from"./chunk-gvx3707k.js";import{oe as y}from"./chunk-a1shhh83.js";import{Nf as V}from"./chunk-6360fg4j.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
1
  import{createRequire as a}from"node:module";var c=a(import.meta.url);
2
- export{c as ug};
2
+ export{c as Bg};
@@ -0,0 +1,2 @@
1
+ var j=600000,m=30000,p=3600000,q=12,t=15000,w=60000;function x(h){return h===0||typeof h==="number"&&Number.isSafeInteger(h)&&h>=30000&&h<=3600000}
2
+ export{j as Of,m as Pf,p as Qf,q as Rf,t as Sf,w as Tf,x as Uf};
@@ -1 +1 @@
1
- import"./chunk-4s0c6tkd.js";var d={command:"install [target]",describe:"Install Blade native build. Use [target] to specify version (stable, latest, or specific version)",builder:(b)=>{return b.positional("target",{describe:"Version to install",type:"string",default:"stable",choices:["stable","latest"]}).option("force",{type:"boolean",describe:"Force reinstall",default:!1}).example([["$0 install","Install stable version"],["$0 install latest","Install latest version"],["$0 install --force","Force reinstall stable version"]])},handler:async(b)=>{console.log(`Installing Blade ${b.target}...`);try{if(b.force)console.log("Force reinstall enabled");console.log("Downloading..."),console.log("Installing..."),console.log("Installation completed successfully")}catch(c){console.error(`Error: Installation failed: ${c instanceof Error?c.message:"未知错误"}`),process.exit(1)}}};export{d as installCommands};
1
+ import"./chunk-jtjcg93t.js";var d={command:"install [target]",describe:"Install Blade native build. Use [target] to specify version (stable, latest, or specific version)",builder:(b)=>{return b.positional("target",{describe:"Version to install",type:"string",default:"stable",choices:["stable","latest"]}).option("force",{type:"boolean",describe:"Force reinstall",default:!1}).example([["$0 install","Install stable version"],["$0 install latest","Install latest version"],["$0 install --force","Force reinstall stable version"]])},handler:async(b)=>{console.log(`Installing Blade ${b.target}...`);try{if(b.force)console.log("Force reinstall enabled");console.log("Downloading..."),console.log("Installing..."),console.log("Installation completed successfully")}catch(c){console.error(`Error: Installation failed: ${c instanceof Error?c.message:"未知错误"}`),process.exit(1)}}};export{d as installCommands};