blade-code 0.10.39 → 0.10.41

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 (102) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-zwt7f9ab.js → chunk-01jt0mpr.js} +1 -1
  3. package/dist/{chunk-r1wyfnk8.js → chunk-0hqsdbkr.js} +1 -1
  4. package/dist/chunk-1j2sf8mc.js +1 -0
  5. package/dist/chunk-1kwm2m6t.js +1 -0
  6. package/dist/{chunk-kah7p2zm.js → chunk-22h5kh4z.js} +1 -1
  7. package/dist/{chunk-kth1ra8z.js → chunk-27w2k6t7.js} +7 -7
  8. package/dist/{chunk-shxg223c.js → chunk-2bm55evt.js} +2 -2
  9. package/dist/{chunk-gkc69333.js → chunk-358zaryv.js} +2 -2
  10. package/dist/{chunk-qggnvzkc.js → chunk-3p32k12g.js} +1 -1
  11. package/dist/chunk-4ekrbk2w.js +2 -0
  12. package/dist/{chunk-9s2c9awb.js → chunk-4mdy9d43.js} +1 -1
  13. package/dist/{chunk-nh43dgpd.js → chunk-5sbewyjn.js} +2 -2
  14. package/dist/chunk-5w8edqbt.js +1 -0
  15. package/dist/{chunk-fjcmx039.js → chunk-5ygv33qe.js} +2 -2
  16. package/dist/{chunk-56vs8ewy.js → chunk-5zf8204m.js} +1 -1
  17. package/dist/chunk-62jaf7ej.js +22 -0
  18. package/dist/chunk-6a3c496e.js +1 -0
  19. package/dist/{chunk-sd8ptaz2.js → chunk-6dma8han.js} +2 -2
  20. package/dist/chunk-6fe9kq17.js +1 -0
  21. package/dist/{chunk-7ptkstyx.js → chunk-8xfzbv9v.js} +1 -1
  22. package/dist/{chunk-29abk8tj.js → chunk-9neq5xrb.js} +2 -2
  23. package/dist/{chunk-b5g5mfq1.js → chunk-adgx9vd7.js} +57 -57
  24. package/dist/chunk-asnzpfzh.js +10 -0
  25. package/dist/chunk-atdeg922.js +2 -0
  26. package/dist/{chunk-93jx06kq.js → chunk-b5b8fb9y.js} +1 -1
  27. package/dist/{chunk-5ajyr2am.js → chunk-bdxaz350.js} +1 -1
  28. package/dist/{chunk-22pmyhp9.js → chunk-bw7fgs2n.js} +1 -1
  29. package/dist/{chunk-b1pz71cr.js → chunk-ck8sw2zp.js} +1 -1
  30. package/dist/chunk-d61673v7.js +5 -0
  31. package/dist/{chunk-59v0kdc9.js → chunk-djr17h80.js} +45 -45
  32. package/dist/{chunk-qp6k78yb.js → chunk-dp9xzsja.js} +1 -1
  33. package/dist/{chunk-79gk29st.js → chunk-eg5sz4bw.js} +1 -1
  34. package/dist/{chunk-ckfc7j7m.js → chunk-ens8nsge.js} +1 -1
  35. package/dist/{chunk-f3xwk6be.js → chunk-f4bx2n1y.js} +3 -3
  36. package/dist/chunk-f7y4m3y0.js +1 -0
  37. package/dist/chunk-fnz5g9ac.js +1 -0
  38. package/dist/{chunk-3rjmkaey.js → chunk-fxw1q5j5.js} +1 -1
  39. package/dist/{chunk-byekf2bq.js → chunk-fz55cnws.js} +2 -2
  40. package/dist/{chunk-6360fg4j.js → chunk-g9re8v25.js} +1 -1
  41. package/dist/{chunk-a7pvtxvz.js → chunk-gbbnjzy8.js} +1 -1
  42. package/dist/{chunk-4yxavv7j.js → chunk-hjkdc185.js} +1 -1
  43. package/dist/chunk-kjn0yaqw.js +1 -0
  44. package/dist/chunk-m883e8d4.js +1 -0
  45. package/dist/chunk-mx5s93np.js +6 -0
  46. package/dist/{chunk-hq18c6r9.js → chunk-n0ebpwxd.js} +1 -1
  47. package/dist/chunk-nhzdkxnx.js +2 -0
  48. package/dist/{chunk-zg6drp32.js → chunk-npgt73cg.js} +1 -1
  49. package/dist/{chunk-ksd1532x.js → chunk-nsawkccy.js} +1 -1
  50. package/dist/chunk-p54vmne8.js +1 -0
  51. package/dist/{chunk-g9a3ht1x.js → chunk-q87nwpsb.js} +1 -1
  52. package/dist/chunk-qy9qkvwe.js +1 -0
  53. package/dist/chunk-s8f8amvg.js +1 -0
  54. package/dist/{chunk-n52vvqfj.js → chunk-sfbprf9r.js} +1 -1
  55. package/dist/{chunk-xvgfbahj.js → chunk-t80e2bms.js} +1 -1
  56. package/dist/{chunk-v11r4ahz.js → chunk-tsskar00.js} +1 -1
  57. package/dist/{chunk-kbmw1can.js → chunk-v80xem15.js} +1 -1
  58. package/dist/chunk-w07gb3h0.js +6 -0
  59. package/dist/{chunk-m6mp65n0.js → chunk-w1vcjwbx.js} +4 -4
  60. package/dist/{chunk-tdqz02hf.js → chunk-wk0vpgwk.js} +234 -234
  61. package/dist/{chunk-mjcgy285.js → chunk-wvc6bx0t.js} +1 -1
  62. package/dist/{chunk-e09g9a7d.js → chunk-x04xb9g3.js} +1 -1
  63. package/dist/chunk-x5s68axq.js +44 -0
  64. package/dist/{chunk-a14dy6yc.js → chunk-xs7w13na.js} +1 -1
  65. package/dist/{chunk-0evyrnx0.js → chunk-y30kw6gj.js} +1 -1
  66. package/dist/{chunk-4eg9qnxt.js → chunk-yhw0pvyt.js} +2 -2
  67. package/dist/{chunk-xs8v8nhj.js → chunk-yxwargqc.js} +1 -1
  68. package/dist/chunk-z15h0370.js +1 -0
  69. package/dist/{chunk-aesdm7cg.js → chunk-zracmha2.js} +1 -1
  70. package/dist/web/assets/{ChatView-BY2JoPwW.js → ChatView-BP89vdT_.js} +9 -9
  71. package/dist/web/assets/{CodeBlockHighlighter-BIeXOc6N.js → CodeBlockHighlighter-UnjC3KVk.js} +1 -1
  72. package/dist/web/assets/{FilePreview-CLfqslxP.js → FilePreview-D0BiZowf.js} +1 -1
  73. package/dist/web/assets/{MarkdownRenderer-D-iAfBPN.js → MarkdownRenderer-CPu_rkPT.js} +3 -3
  74. package/dist/web/assets/{SettingsModal-D9SfF3HV.js → SettingsModal-CM9pcJas.js} +1 -1
  75. package/dist/web/assets/{TaskSwitcher-CKYCrKc2.js → TaskSwitcher-BOCm7kPO.js} +1 -1
  76. package/dist/web/assets/{TerminalPanel-Bj4qKgM6.js → TerminalPanel-CUZ4slSS.js} +1 -1
  77. package/dist/web/assets/{index-Dwm-v3BV.js → index-CthLsVgC.js} +7 -7
  78. package/dist/web/assets/{session-events-Yagzv-3E.js → session-events-109FkhOM.js} +5 -5
  79. package/dist/web/index.html +2 -2
  80. package/package.json +1 -1
  81. package/dist/chunk-1kbn1ypd.js +0 -1
  82. package/dist/chunk-3m0c6znc.js +0 -44
  83. package/dist/chunk-6yd3j5v5.js +0 -2
  84. package/dist/chunk-7b68psjh.js +0 -1
  85. package/dist/chunk-83mfrs3p.js +0 -5
  86. package/dist/chunk-99n3w3tg.js +0 -1
  87. package/dist/chunk-9q7v4ad9.js +0 -1
  88. package/dist/chunk-a51m3ysp.js +0 -1
  89. package/dist/chunk-bvdk0hb2.js +0 -2
  90. package/dist/chunk-bzymtpc8.js +0 -22
  91. package/dist/chunk-ekfxm6g8.js +0 -1
  92. package/dist/chunk-g2m6y08q.js +0 -1
  93. package/dist/chunk-gq29vpef.js +0 -6
  94. package/dist/chunk-gsx7sw92.js +0 -6
  95. package/dist/chunk-gvkb3mrd.js +0 -1
  96. package/dist/chunk-jc498kjk.js +0 -10
  97. package/dist/chunk-m88j03bm.js +0 -1
  98. package/dist/chunk-p2t4gj7w.js +0 -1
  99. package/dist/chunk-skxst3ya.js +0 -1
  100. package/dist/chunk-thstqcg3.js +0 -2
  101. package/dist/chunk-ya6xazne.js +0 -1
  102. package/dist/chunk-zjzz2mh9.js +0 -1
@@ -1,8 +1,8 @@
1
1
  var ye=Object.defineProperty;var Ce=(e,t,n)=>t in e?ye(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var K=(e,t,n)=>Ce(e,typeof t!="symbol"?t+"":t,n);function P(){return{timeline:[],textBefore:"",toolCalls:[],textAfter:"",thinkingContent:"",tasks:[],subagent:null,subagents:[],confirmation:null,question:null,elicitation:null}}function N(e){return e?e.subagents&&e.subagents.length>0?e.subagents:e.subagent?[e.subagent]:[]:[]}function B(e,t,n){const a=(n?t.find(o=>o.id===n||o.sessionId===n):void 0)??t[t.length-1]??null;return{...e,subagents:t,subagent:a}}function ue(e,t){const n=[...N(e)];let a=n.findIndex(s=>s.id===t.id||!!(s.sessionId&&t.sessionId&&s.sessionId===t.sessionId));if(a===-1&&t.sessionId&&(a=n.findIndex(s=>!s.sessionId&&s.status==="running"&&s.type===t.type&&s.description===t.description)),a===-1)return n.push(t),B(e,n,t.id);const o=n[a],u={...o,...t,id:o.id};return n[a]=u,B(e,n,u.id)}function H(e,t){return`${t}-${e.length}`}function be(e,t){if(!t)return e;const n=[..._(e)],a=n[n.length-1];return(a==null?void 0:a.type)==="text"?n[n.length-1]={...a,content:a.content+t}:n.push({id:H(n,"text"),type:"text",content:t}),{...e,timeline:n}}function ve(e,t){if(!t)return e;const n=[..._(e)],a=n[n.length-1];return(a==null?void 0:a.type)==="thinking"?n[n.length-1]={...a,content:a.content+t}:n.push({id:H(n,"thinking"),type:"thinking",content:t}),{...e,timeline:n}}function oe(e,t){const n=e.toolCalls.some(s=>s.toolCallId===t.toolCallId),a=n?e.toolCalls:[...e.toolCalls,t];if(n)return{...e,toolCalls:a};const o=[..._(e)],u=o[o.length-1];return(u==null?void 0:u.type)==="tool_group"?o[o.length-1]={...u,toolCallIds:[...u.toolCallIds,t.toolCallId]}:o.push({id:H(o,"tool_group"),type:"tool_group",toolCallIds:[t.toolCallId]}),{...e,timeline:o,toolCalls:a}}function _(e){if(e.timeline&&e.timeline.length>0)return e.timeline;const t=[];return e.thinkingContent&&t.push({id:"legacy-thinking",type:"thinking",content:e.thinkingContent}),e.textBefore&&t.push({id:"legacy-text-before",type:"text",content:e.textBefore}),e.toolCalls.length>0&&t.push({id:"legacy-tool-group",type:"tool_group",toolCallIds:e.toolCalls.map(n=>n.toolCallId)}),e.textAfter&&t.push({id:"legacy-text-after",type:"text",content:e.textAfter}),t}function Ae(e){return _(e).filter(t=>t.type==="text").map(t=>t.content).filter(Boolean).join(`
2
2
 
3
- `)}const ke=2166136261,Te=16777619;function J(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)?`[${e.map(t=>J(t)).join(",")}]`:typeof e=="object"?`{${Object.entries(e).sort(([n],[a])=>n.localeCompare(a)).map(([n,a])=>`${JSON.stringify(n)}:${J(a)}`).join(",")}}`:JSON.stringify(e)}function de(e){let t=ke>>>0;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,Te);return(t>>>0).toString(16)}function le(e){return typeof e=="string"?e:J(e??{})}function G(e){return e==="completed"?"completed":e==="failed"||e==="cancelled"?"failed":"running"}function L({explicitId:e,messageId:t,toolName:n,argumentsValue:a,toolKind:o,output:u}){if(e)return e;const s=[t||"unknown-message",n||"Unknown",le(a),o||"",u||""].join("|");return`tool-${de(s)}`}function F({explicitId:e,sessionId:t,messageId:n,agentType:a,description:o,summary:u}){if(e)return e;if(t)return t;const s=[n||"unknown-message",a||"subagent",o||"",u||""].join("|");return`subagent-${de(s)}`}const $e=(e,t)=>{if(!t||typeof t!="object")return null;const n=G(t.status),a=typeof t.summary=="string"?t.summary:void 0;return{id:F({explicitId:typeof t.subagentId=="string"?t.subagentId:void 0,sessionId:t.childSessionId,messageId:e,agentType:t.agentType,description:t.description,summary:t.summary}),type:t.agentType||"subagent",description:t.description||t.summary||"",status:n,startTime:Date.now(),sessionId:t.childSessionId,resumedFrom:t.resumedFrom,rootAgentId:t.rootAgentId,resumeDepth:typeof t.resumeDepth=="number"?t.resumeDepth:void 0,verificationVerdict:t.verificationVerdict==="pass"||t.verificationVerdict==="fail"||t.verificationVerdict==="partial"?t.verificationVerdict:void 0,output:n==="running"?void 0:a}},Ne=(e,t)=>!t||typeof t!="object"?[]:(Array.isArray(t.subtaskRefs)?t.subtaskRefs:t.subtaskRef&&typeof t.subtaskRef=="object"?[t.subtaskRef]:[]).map(a=>$e(e,a)).filter(a=>a!==null);function x(e){return typeof e=="string"?e:e.filter(t=>t.type==="text").map(t=>t.text).join(`
4
- `)}function U(e){if(!e.agentContent)return e;let t=e.agentContent;for(const n of Ne(e.id,e.metadata))t=ue(t,n);return{...e,agentContent:t}}function Pe(e){var a,o,u;const t=[];let n=null;for(const s of e)if(s.role!=="system"){if(s.role==="user")n&&(t.push(U(n)),n=null),t.push({id:s.id,role:s.role,content:s.content,timestamp:s.timestamp||Date.now(),metadata:s.metadata});else if(s.role==="assistant"){n&&t.push(U(n));const i=s.metadata;let r=P();s.thinkingContent&&(r=ve(r,s.thinkingContent),r.thinkingContent=s.thinkingContent);const d=x(s.content);if(d&&(r=be(r,d),r.textBefore=d),s.tool_calls&&Array.isArray(s.tool_calls))for(const c of s.tool_calls){const l=((a=c.function)==null?void 0:a.name)||"Unknown",g=le((o=c.function)==null?void 0:o.arguments);if(l==="Task"){let m={};try{m=JSON.parse(g)}catch{}const S=typeof m.subagent_type=="string"?m.subagent_type:"subagent",y=typeof m.description=="string"?m.description:S;r=ue(r,{id:F({explicitId:c.id,sessionId:typeof m.subagent_session_id=="string"?m.subagent_session_id:void 0,messageId:s.id,agentType:S,description:y}),type:S,description:y,status:"running",startTime:Date.now(),sessionId:typeof m.subagent_session_id=="string"?m.subagent_session_id:void 0,resumedFrom:typeof m.resume_from=="string"?m.resume_from:typeof m.resume=="string"?m.resume:void 0});continue}const I={toolCallId:L({explicitId:c.id,messageId:s.id,toolName:l,argumentsValue:(u=c.function)==null?void 0:u.arguments}),toolName:l,arguments:g,status:"running",startTime:Date.now()};r=oe(r,I)}n={id:s.id,role:"assistant",content:x(s.content),timestamp:s.timestamp||Date.now(),metadata:i,agentContent:r}}else if(s.role==="tool"&&n&&n.agentContent){const i=s,r=s.metadata,d=i.tool_call_id||(r==null?void 0:r.toolCallId),c=i.name||(r==null?void 0:r.toolName)||"Tool",l=r!=null&&r.metadata&&typeof r.metadata=="object"&&!Array.isArray(r.metadata)?r.metadata:r,g=r!=null&&r.independentVerification&&typeof r.independentVerification=="object"&&!Array.isArray(r.independentVerification)?r.independentVerification:void 0,I=(r==null?void 0:r.status)==="failed"||(r==null?void 0:r.status)==="error"||typeof(r==null?void 0:r.error)=="string"&&r.error.length>0,m=N(n.agentContent),S=m.findIndex(h=>h.id===d);if(S>=0){const h=m[S],f=typeof(l==null?void 0:l.subagentStatus)=="string"?G(l.subagentStatus):I?"failed":"completed";m[S]={...h,sessionId:typeof(l==null?void 0:l.subagentSessionId)=="string"?l.subagentSessionId:h.sessionId,type:typeof(l==null?void 0:l.subagentType)=="string"?l.subagentType:h.type,status:f,resumedFrom:typeof(l==null?void 0:l.subagentResumedFrom)=="string"?l.subagentResumedFrom:h.resumedFrom,rootAgentId:typeof(l==null?void 0:l.subagentRootId)=="string"?l.subagentRootId:h.rootAgentId,resumeDepth:typeof(l==null?void 0:l.subagentResumeDepth)=="number"?l.subagentResumeDepth:h.resumeDepth,verificationVerdict:(l==null?void 0:l.verificationVerdict)==="pass"||(l==null?void 0:l.verificationVerdict)==="fail"||(l==null?void 0:l.verificationVerdict)==="partial"?l.verificationVerdict:(g==null?void 0:g.verificationVerdict)==="pass"||(g==null?void 0:g.verificationVerdict)==="fail"||(g==null?void 0:g.verificationVerdict)==="partial"?g.verificationVerdict:h.verificationVerdict,output:typeof(l==null?void 0:l.subagentSummary)=="string"?l.subagentSummary:x(s.content)||h.output},n.agentContent=B(n.agentContent,m,h.id);continue}const y=n.agentContent.toolCalls.find(h=>h.toolCallId===d);y?(y.output=x(s.content),y.status=I?"error":"success",y.metadata=l,y.summary=typeof(l==null?void 0:l.summary)=="string"?l.summary:y.summary,(!y.toolName||y.toolName==="Unknown")&&(y.toolName=c)):n.agentContent=oe(n.agentContent,{toolCallId:L({explicitId:d,messageId:n.id,toolName:c,output:x(s.content)}),toolName:c,output:x(s.content),status:I?"error":"success",startTime:Date.now(),metadata:l,summary:typeof(l==null?void 0:l.summary)=="string"?l.summary:void 0})}}return n&&t.push(U(n)),t}const ce={authentication:"task.failure.authentication",permission:"task.failure.permission",rate_limit:"task.failure.rateLimit",timeout:"task.failure.timeout",network:"task.failure.network",model_unavailable:"task.failure.modelUnavailable",context_limit:"task.failure.contextLimit",unsupported_input:"task.failure.unsupportedInput",runtime:"task.failure.runtime"},Me={authentication:!1,permission:!1,rate_limit:!0,timeout:!0,network:!0,model_unavailable:!0,context_limit:!1,unsupported_input:!1,runtime:!0};function Re(e){if(typeof e=="string"&&Object.keys(ce).includes(e))return e}function Jt(e){return ce[e]}function Lt(e){return Me[e]}const xe={flushTimeout:80};class De{constructor(t){K(this,"config");K(this,"channels",new Map);this.config={...xe,...t}}append(t,n,a){let o=this.channels.get(t);o||(o={buffer:"",timer:null,flushFn:null},this.channels.set(t,o)),o.buffer+=n,o.flushFn=a,o.timer||(o.timer=setTimeout(()=>{this.flushChannel(t)},this.config.flushTimeout))}flushChannel(t){const n=this.channels.get(t);if(!n||!n.buffer)return;const a=n.buffer,o=n.flushFn;n.buffer="",n.timer&&(clearTimeout(n.timer),n.timer=null),o==null||o(a)}drainAll(){for(const[t]of this.channels)this.flushChannel(t);this.channels.clear()}drainAllExcept(t){for(const[n]of this.channels)n!==t&&this.flushChannel(n);for(const[n,a]of this.channels)n!==t&&!a.buffer&&this.channels.delete(n)}reset(){for(const[,t]of this.channels)t.timer&&clearTimeout(t.timer);this.channels.clear()}}const $=new De,we=100,b=(e,t,n)=>{if(t)for(const a of e){const o=N(a.agentContent).find(u=>u.id===t||u.sessionId===t);if(o)return{messageId:a.id,subagent:o}}if(n){const a=e.find(s=>s.id===n),o=N(a==null?void 0:a.agentContent),u=o.find(s=>s.status==="running")??o[o.length-1];if(u)return{messageId:n,subagent:u}}for(const a of[...e].reverse()){const o=N(a.agentContent),u=o.find(s=>s.status==="running")??o[o.length-1];if(u)return{messageId:a.id,subagent:u}}};function je(e,t,n){n(a=>{const o={...a.pendingSubagentCompletions??{}};if(o[e]===void 0&&Object.keys(o).length>=we){const u=Object.keys(o)[0];u&&delete o[u]}return o[e]={...t},{pendingSubagentCompletions:o}})}function Q(e,t,n){var u;if(!e)return;const a=(u=t().pendingSubagentCompletions)==null?void 0:u[e];!a||!b(t().messages,e,t().currentAssistantMessageId)||(W({...a,subagentSessionId:e,success:a.status==="completed"},t),n(s=>{const i={...s.pendingSubagentCompletions??{}};return delete i[e],{pendingSubagentCompletions:i}}))}const v=(e,t,n,a=!1)=>{const{currentAssistantMessageId:o,messages:u,addMessage:s,startAgentResponse:i}=e();if(n&&a){const l=u.find(I=>I.id===n&&I.role==="assistant");if(l)return i(l.id),l.id;const g={id:n,role:"assistant",content:"",timestamp:Date.now(),agentContent:P()};return s(g),i(n),n}if(o&&!o.startsWith("call_")&&u.some(l=>l.id===o&&l.role==="assistant"))return o;if(n){const l=u.find(g=>g.id===n&&g.role==="assistant");if(l)return i(l.id),l.id}const r=u[u.length-1];if((r==null?void 0:r.role)==="assistant")return r.id;const d=n||`assistant-${Date.now()}`,c={id:d,role:"assistant",content:"",timestamp:Date.now(),agentContent:P()};return s(c),i(d),t(l=>({messages:l.messages.map(g=>g.id===d?{...g,agentContent:{...g.agentContent||P()}}:g)})),d},_e=(e,t,n)=>{const{currentSessionId:a,addMessage:o,startAgentResponse:u,messages:s,updateMessage:i}=t();if(e.sessionId!==a)return;const r=e.messageId,d=e.role||"assistant",c=s.find(g=>g.id===r),l={id:r,role:d,content:e.content||"",timestamp:Date.now(),agentContent:d==="assistant"?P():void 0};c?i(r,{role:d,content:l.content,agentContent:d==="assistant"?{...c.agentContent||P()}:void 0}):o(l),d==="assistant"&&u(r)},Fe=(e,t,n)=>{const{currentSessionId:a,appendDelta:o,currentAssistantMessageId:u,hasToolCalls:s,addMessage:i,startAgentResponse:r}=t();if(e.sessionId!==a)return;const d=e.messageId,c=e.delta;if(!u){const g={id:d,role:"assistant",content:"",timestamp:Date.now(),agentContent:P()};i(g),r(d),t().appendDelta(d,c,"before");return}o(u,c,s?"after":"before")},qe=(e,t)=>{const{currentSessionId:n,updateMessage:a,messages:o}=t();if(e.sessionId!==n)return;const u=e.messageId,s=o.find(i=>i.id===u);s!=null&&s.agentContent&&a(u,{content:Ae(s.agentContent)})},Oe=(e,t,n)=>{var r;const{currentSessionId:a}=t();if(e.sessionId!==a)return;const o=e.output;if(!o||typeof o!="object"||Array.isArray(o))return;const u=v(t,n,e.messageId);if(!u)return;const s=t().messages.find(d=>d.id===u);if(!s)return;const i=JSON.stringify(o,null,2);t().updateMessage(u,{content:i,metadata:{...s.metadata,structuredOutput:{output:o,schemaDigest:e.schemaDigest}},agentContent:s.agentContent?{...s.agentContent,textBefore:"",textAfter:"",timeline:(r=s.agentContent.timeline)==null?void 0:r.filter(d=>d.type!=="text")}:void 0})},Ee=(e,t,n)=>{const{currentSessionId:a,appendThinking:o}=t();if(e.sessionId!==a)return;const u=v(t,n,e.messageId);u&&o(u,e.delta)},Ve=()=>{},ge=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o,setHasToolCalls:u,setSubagent:s}=t();if(e.sessionId!==a)return;const i=v(t,n,e.messageId||e.toolCallId,typeof e.messageId=="string");if(!i)return;u(!0);const r=e.toolName||"Unknown",d=e.arguments;let c,l="",g,I;if(r==="Task")try{const S=JSON.parse(d);c=S.subagent_type,l=S.description||S.query||c||"",g=S.subagent_session_id,I=S.resume_from||S.resume}catch{}if(c){s(i,{id:F({explicitId:e.toolCallId,sessionId:g,messageId:i,agentType:c,description:l}),type:c,description:l,status:"running",startTime:Date.now(),sessionId:g,resumedFrom:I,output:"",thinking:""}),Q(g,t,n);return}const m={toolCallId:L({explicitId:e.toolCallId,messageId:i,toolName:r,argumentsValue:d,toolKind:e.toolKind}),toolName:r,arguments:d,toolKind:e.toolKind,status:"running",startTime:Date.now()};o(i,m)};function me(e){if(!e||typeof e!="object"||Array.isArray(e))return;const t=e;if(!(t.kind!=="readonly"&&t.kind!=="write"&&t.kind!=="execute")&&!(t.scope!=="global"&&t.scope!=="session")&&!(!Number.isSafeInteger(t.queuePosition)||t.queuePosition<=0||!Number.isSafeInteger(t.inFlight)||t.inFlight<0||!Number.isSafeInteger(t.limit)||t.limit<=0))return{kind:t.kind,scope:t.scope,queuePosition:t.queuePosition,inFlight:t.inFlight,limit:t.limit}}const fe=(e,t)=>{const{currentSessionId:n,updateToolCall:a,messages:o}=t();if(e.sessionId!==n)return;const u=e.toolCallId;if(!u)return;const s=o.find(i=>{var r;return(r=i.agentContent)==null?void 0:r.toolCalls.some(d=>d.toolCallId===u)});s&&a(s.id,u,{summary:e.message,progress:typeof e.progress=="number"?e.progress:void 0,progressTotal:typeof e.total=="number"?e.total:void 0,progressMessage:e.message,admission:me(e.admission)})},Ie=(e,t,n)=>{var se;const{currentSessionId:a,appendToolCall:o,setHasToolCalls:u,updateToolCall:s,updateSubagent:i,messages:r}=t();if(e.sessionId!==a)return;const d=e.toolCallId;if(!d)return;const c=r.find(A=>{var T;return(T=A.agentContent)==null?void 0:T.toolCalls.some(R=>R.toolCallId===d)}),l=r.find(A=>N(A.agentContent).some(T=>T.id===d)),g=(c==null?void 0:c.id)||(l==null?void 0:l.id)||v(t,n,e.messageId,!0);if(!g)return;const I=typeof e.output=="string"?e.output:"",m=e.success===!0||e.status==="completed",S=e.summary||(I&&I.trim()?I.trim().split(`
5
- `)[0].slice(0,120):m?"执行成功":"执行失败"),y=(se=c==null?void 0:c.agentContent)==null?void 0:se.toolCalls.find(A=>A.toolCallId===d),h=typeof e.toolName=="string"?e.toolName:(y==null?void 0:y.toolName)??"Unknown",f=e.metadata;c?s(g,d,{status:m?"success":"error",summary:S,output:I,metadata:f}):l||(u(!0),o(g,{toolCallId:d,toolName:h,status:m?"success":"error",summary:S,output:I,startTime:Date.now(),metadata:f}));const q=t().messages.find(A=>A.id===g),k=N(q==null?void 0:q.agentContent).find(A=>A.id===d),M=f&&typeof f.subagentSessionId=="string"?f.subagentSessionId:void 0,D=f&&typeof f.subagentStatus=="string"?f.subagentStatus:void 0,X=f&&typeof f.subagentType=="string"?f.subagentType:void 0,Z=f&&typeof f.subagentSummary=="string"?f.subagentSummary:void 0,p=f&&typeof f.subagentResumedFrom=="string"?f.subagentResumedFrom:void 0,ee=f&&typeof f.subagentRootId=="string"?f.subagentRootId:void 0,te=f&&typeof f.subagentResumeDepth=="number"?f.subagentResumeDepth:void 0,ne=(f==null?void 0:f.verificationVerdict)==="pass"||(f==null?void 0:f.verificationVerdict)==="fail"||(f==null?void 0:f.verificationVerdict)==="partial"?f.verificationVerdict:void 0;if(k){const A=D?G(D):e.success?"completed":"failed",T=k.status!=="running"&&A==="running";i(g,k.id,{sessionId:k.sessionId||M,type:X||k.type,status:T?k.status:A,resumedFrom:p||k.resumedFrom,rootAgentId:ee||k.rootAgentId,resumeDepth:te??k.resumeDepth,verificationVerdict:ne??k.verificationVerdict,output:T?k.output:Z||k.output})}M&&D&&n(A=>({messages:A.messages.map(T=>{if(T.id!==g)return T;const R=T.metadata??{},O=Array.isArray(R.subtaskRefs)?R.subtaskRefs:[],w=O.findIndex(ie=>ie.childSessionId===M||ie.subagentId===d),C=w>=0?O[w]:R.subtaskRef??{},E={...C,subagentId:d,childSessionId:M,agentType:X||(typeof(C==null?void 0:C.agentType)=="string"?C.agentType:"subagent"),status:D,summary:Z||(typeof(C==null?void 0:C.summary)=="string"?C.summary:""),resumedFrom:p||(typeof(C==null?void 0:C.resumedFrom)=="string"?C.resumedFrom:void 0),rootAgentId:ee||(typeof(C==null?void 0:C.rootAgentId)=="string"?C.rootAgentId:M),resumeDepth:te??(typeof(C==null?void 0:C.resumeDepth)=="number"?C.resumeDepth:0),verificationVerdict:ne||(typeof(C==null?void 0:C.verificationVerdict)=="string"?C.verificationVerdict:void 0)},V=[...O];return w>=0?V[w]=E:V.push(E),{...T,metadata:{...R,subtaskRef:E,subtaskRefs:V}}})})),Q(M,t,n)},Ke=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o}=t();if(e.sessionId!==a)return;const u=v(t,n,e.messageId||`mcp-catalog-${String(e.revision)}`);if(!u)return;const s=Array.isArray(e.added)?e.added.map(String):[],i=Array.isArray(e.removed)?e.removed.map(String):[],r=Array.isArray(e.updated)?e.updated.map(String):[],d=`MCP catalog r${String(e.revision)}: +${s.length} -${i.length} ~${r.length}`;o(u,{toolCallId:`mcp-catalog:${String(e.revision)}`,toolName:"MCP Catalog",arguments:JSON.stringify({serverName:e.serverName,added:s,removed:i,updated:r}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:d,output:[s.length>0?`Added: ${s.join(", ")}`:"",i.length>0?`Removed: ${i.join(", ")}`:"",r.length>0?`Updated: ${r.join(", ")}`:""].filter(Boolean).join(`
3
+ `)}const ke=2166136261,Te=16777619;function J(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)?`[${e.map(t=>J(t)).join(",")}]`:typeof e=="object"?`{${Object.entries(e).sort(([n],[a])=>n.localeCompare(a)).map(([n,a])=>`${JSON.stringify(n)}:${J(a)}`).join(",")}}`:JSON.stringify(e)}function de(e){let t=ke>>>0;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,Te);return(t>>>0).toString(16)}function le(e){return typeof e=="string"?e:J(e??{})}function G(e){return e==="completed"?"completed":e==="failed"||e==="cancelled"?"failed":"running"}function L({explicitId:e,messageId:t,toolName:n,argumentsValue:a,toolKind:o,output:u}){if(e)return e;const s=[t||"unknown-message",n||"Unknown",le(a),o||"",u||""].join("|");return`tool-${de(s)}`}function q({explicitId:e,sessionId:t,messageId:n,agentType:a,description:o,summary:u}){if(e)return e;if(t)return t;const s=[n||"unknown-message",a||"subagent",o||"",u||""].join("|");return`subagent-${de(s)}`}const $e=(e,t)=>{if(!t||typeof t!="object")return null;const n=G(t.status),a=typeof t.summary=="string"?t.summary:void 0;return{id:q({explicitId:typeof t.subagentId=="string"?t.subagentId:void 0,sessionId:t.childSessionId,messageId:e,agentType:t.agentType,description:t.description,summary:t.summary}),type:t.agentType||"subagent",description:t.description||t.summary||"",status:n,startTime:Date.now(),sessionId:t.childSessionId,resumedFrom:t.resumedFrom,rootAgentId:t.rootAgentId,resumeDepth:typeof t.resumeDepth=="number"?t.resumeDepth:void 0,verificationVerdict:t.verificationVerdict==="pass"||t.verificationVerdict==="fail"||t.verificationVerdict==="partial"?t.verificationVerdict:void 0,output:n==="running"?void 0:a}},Ne=(e,t)=>!t||typeof t!="object"?[]:(Array.isArray(t.subtaskRefs)?t.subtaskRefs:t.subtaskRef&&typeof t.subtaskRef=="object"?[t.subtaskRef]:[]).map(a=>$e(e,a)).filter(a=>a!==null);function x(e){return typeof e=="string"?e:e.filter(t=>t.type==="text").map(t=>t.text).join(`
4
+ `)}function U(e){if(!e.agentContent)return e;let t=e.agentContent;for(const n of Ne(e.id,e.metadata))t=ue(t,n);return{...e,agentContent:t}}function Pe(e){var a,o,u;const t=[];let n=null;for(const s of e)if(s.role!=="system"){if(s.role==="user")n&&(t.push(U(n)),n=null),t.push({id:s.id,role:s.role,content:s.content,timestamp:s.timestamp||Date.now(),metadata:s.metadata});else if(s.role==="assistant"){n&&t.push(U(n));const i=s.metadata;let r=P();s.thinkingContent&&(r=ve(r,s.thinkingContent),r.thinkingContent=s.thinkingContent);const d=x(s.content);if(d&&(r=be(r,d),r.textBefore=d),s.tool_calls&&Array.isArray(s.tool_calls))for(const c of s.tool_calls){const l=((a=c.function)==null?void 0:a.name)||"Unknown",g=le((o=c.function)==null?void 0:o.arguments);if(l==="Task"){let m={};try{m=JSON.parse(g)}catch{}const S=typeof m.subagent_type=="string"?m.subagent_type:"subagent",y=typeof m.description=="string"?m.description:S;r=ue(r,{id:q({explicitId:c.id,sessionId:typeof m.subagent_session_id=="string"?m.subagent_session_id:void 0,messageId:s.id,agentType:S,description:y}),type:S,description:y,status:"running",startTime:Date.now(),sessionId:typeof m.subagent_session_id=="string"?m.subagent_session_id:void 0,resumedFrom:typeof m.resume_from=="string"?m.resume_from:typeof m.resume=="string"?m.resume:void 0});continue}const I={toolCallId:L({explicitId:c.id,messageId:s.id,toolName:l,argumentsValue:(u=c.function)==null?void 0:u.arguments}),toolName:l,arguments:g,status:"running",startTime:Date.now()};r=oe(r,I)}n={id:s.id,role:"assistant",content:x(s.content),timestamp:s.timestamp||Date.now(),metadata:i,agentContent:r}}else if(s.role==="tool"&&n&&n.agentContent){const i=s,r=s.metadata,d=i.tool_call_id||(r==null?void 0:r.toolCallId),c=i.name||(r==null?void 0:r.toolName)||"Tool",l=r!=null&&r.metadata&&typeof r.metadata=="object"&&!Array.isArray(r.metadata)?r.metadata:r,g=r!=null&&r.independentVerification&&typeof r.independentVerification=="object"&&!Array.isArray(r.independentVerification)?r.independentVerification:void 0,I=(r==null?void 0:r.status)==="failed"||(r==null?void 0:r.status)==="error"||typeof(r==null?void 0:r.error)=="string"&&r.error.length>0,m=N(n.agentContent),S=m.findIndex(h=>h.id===d);if(S>=0){const h=m[S],f=typeof(l==null?void 0:l.subagentStatus)=="string"?G(l.subagentStatus):I?"failed":"completed";m[S]={...h,sessionId:typeof(l==null?void 0:l.subagentSessionId)=="string"?l.subagentSessionId:h.sessionId,type:typeof(l==null?void 0:l.subagentType)=="string"?l.subagentType:h.type,status:f,resumedFrom:typeof(l==null?void 0:l.subagentResumedFrom)=="string"?l.subagentResumedFrom:h.resumedFrom,rootAgentId:typeof(l==null?void 0:l.subagentRootId)=="string"?l.subagentRootId:h.rootAgentId,resumeDepth:typeof(l==null?void 0:l.subagentResumeDepth)=="number"?l.subagentResumeDepth:h.resumeDepth,verificationVerdict:(l==null?void 0:l.verificationVerdict)==="pass"||(l==null?void 0:l.verificationVerdict)==="fail"||(l==null?void 0:l.verificationVerdict)==="partial"?l.verificationVerdict:(g==null?void 0:g.verificationVerdict)==="pass"||(g==null?void 0:g.verificationVerdict)==="fail"||(g==null?void 0:g.verificationVerdict)==="partial"?g.verificationVerdict:h.verificationVerdict,output:typeof(l==null?void 0:l.subagentSummary)=="string"?l.subagentSummary:x(s.content)||h.output},n.agentContent=B(n.agentContent,m,h.id);continue}const y=n.agentContent.toolCalls.find(h=>h.toolCallId===d);y?(y.output=x(s.content),y.status=I?"error":"success",y.metadata=l,y.summary=typeof(l==null?void 0:l.summary)=="string"?l.summary:y.summary,(!y.toolName||y.toolName==="Unknown")&&(y.toolName=c)):n.agentContent=oe(n.agentContent,{toolCallId:L({explicitId:d,messageId:n.id,toolName:c,output:x(s.content)}),toolName:c,output:x(s.content),status:I?"error":"success",startTime:Date.now(),metadata:l,summary:typeof(l==null?void 0:l.summary)=="string"?l.summary:void 0})}}return n&&t.push(U(n)),t}const ce={authentication:"task.failure.authentication",permission:"task.failure.permission",rate_limit:"task.failure.rateLimit",timeout:"task.failure.timeout",network:"task.failure.network",model_unavailable:"task.failure.modelUnavailable",context_limit:"task.failure.contextLimit",unsupported_input:"task.failure.unsupportedInput",runtime:"task.failure.runtime"},Me={authentication:!1,permission:!1,rate_limit:!0,timeout:!0,network:!0,model_unavailable:!0,context_limit:!1,unsupported_input:!1,runtime:!0};function Re(e){if(typeof e=="string"&&Object.keys(ce).includes(e))return e}function Lt(e){return ce[e]}function Ht(e){return Me[e]}const xe={flushTimeout:80};class De{constructor(t){K(this,"config");K(this,"channels",new Map);this.config={...xe,...t}}append(t,n,a){let o=this.channels.get(t);o||(o={buffer:"",timer:null,flushFn:null},this.channels.set(t,o)),o.buffer+=n,o.flushFn=a,o.timer||(o.timer=setTimeout(()=>{this.flushChannel(t)},this.config.flushTimeout))}flushChannel(t){const n=this.channels.get(t);if(!n||!n.buffer)return;const a=n.buffer,o=n.flushFn;n.buffer="",n.timer&&(clearTimeout(n.timer),n.timer=null),o==null||o(a)}drainAll(){for(const[t]of this.channels)this.flushChannel(t);this.channels.clear()}drainAllExcept(t){for(const[n]of this.channels)n!==t&&this.flushChannel(n);for(const[n,a]of this.channels)n!==t&&!a.buffer&&this.channels.delete(n)}reset(){for(const[,t]of this.channels)t.timer&&clearTimeout(t.timer);this.channels.clear()}}const $=new De,we=100,b=(e,t,n)=>{if(t)for(const a of e){const o=N(a.agentContent).find(u=>u.id===t||u.sessionId===t);if(o)return{messageId:a.id,subagent:o}}if(n){const a=e.find(s=>s.id===n),o=N(a==null?void 0:a.agentContent),u=o.find(s=>s.status==="running")??o[o.length-1];if(u)return{messageId:n,subagent:u}}for(const a of[...e].reverse()){const o=N(a.agentContent),u=o.find(s=>s.status==="running")??o[o.length-1];if(u)return{messageId:a.id,subagent:u}}};function je(e,t,n){n(a=>{const o={...a.pendingSubagentCompletions??{}};if(o[e]===void 0&&Object.keys(o).length>=we){const u=Object.keys(o)[0];u&&delete o[u]}return o[e]={...t},{pendingSubagentCompletions:o}})}function Q(e,t,n){var u;if(!e)return;const a=(u=t().pendingSubagentCompletions)==null?void 0:u[e];!a||!b(t().messages,e,t().currentAssistantMessageId)||(W({...a,subagentSessionId:e,success:a.status==="completed"},t),n(s=>{const i={...s.pendingSubagentCompletions??{}};return delete i[e],{pendingSubagentCompletions:i}}))}const v=(e,t,n,a=!1)=>{const{currentAssistantMessageId:o,messages:u,addMessage:s,startAgentResponse:i}=e();if(n&&a){const l=u.find(I=>I.id===n&&I.role==="assistant");if(l)return i(l.id),l.id;const g={id:n,role:"assistant",content:"",timestamp:Date.now(),agentContent:P()};return s(g),i(n),n}if(o&&!o.startsWith("call_")&&u.some(l=>l.id===o&&l.role==="assistant"))return o;if(n){const l=u.find(g=>g.id===n&&g.role==="assistant");if(l)return i(l.id),l.id}const r=u[u.length-1];if((r==null?void 0:r.role)==="assistant")return r.id;const d=n||`assistant-${Date.now()}`,c={id:d,role:"assistant",content:"",timestamp:Date.now(),agentContent:P()};return s(c),i(d),t(l=>({messages:l.messages.map(g=>g.id===d?{...g,agentContent:{...g.agentContent||P()}}:g)})),d},_e=(e,t,n)=>{const{currentSessionId:a,addMessage:o,startAgentResponse:u,messages:s,updateMessage:i}=t();if(e.sessionId!==a)return;const r=e.messageId,d=e.role||"assistant",c=s.find(g=>g.id===r),l={id:r,role:d,content:e.content||"",timestamp:Date.now(),agentContent:d==="assistant"?P():void 0};c?i(r,{role:d,content:l.content,agentContent:d==="assistant"?{...c.agentContent||P()}:void 0}):o(l),d==="assistant"&&u(r)},qe=(e,t,n)=>{const{currentSessionId:a,appendDelta:o,currentAssistantMessageId:u,hasToolCalls:s,addMessage:i,startAgentResponse:r}=t();if(e.sessionId!==a)return;const d=e.messageId,c=e.delta;if(!u){const g={id:d,role:"assistant",content:"",timestamp:Date.now(),agentContent:P()};i(g),r(d),t().appendDelta(d,c,"before");return}o(u,c,s?"after":"before")},Fe=(e,t)=>{const{currentSessionId:n,updateMessage:a,messages:o}=t();if(e.sessionId!==n)return;const u=e.messageId,s=o.find(i=>i.id===u);s!=null&&s.agentContent&&a(u,{content:Ae(s.agentContent)})},Oe=(e,t,n)=>{var r;const{currentSessionId:a}=t();if(e.sessionId!==a)return;const o=e.output;if(!o||typeof o!="object"||Array.isArray(o))return;const u=v(t,n,e.messageId);if(!u)return;const s=t().messages.find(d=>d.id===u);if(!s)return;const i=JSON.stringify(o,null,2);t().updateMessage(u,{content:i,metadata:{...s.metadata,structuredOutput:{output:o,schemaDigest:e.schemaDigest}},agentContent:s.agentContent?{...s.agentContent,textBefore:"",textAfter:"",timeline:(r=s.agentContent.timeline)==null?void 0:r.filter(d=>d.type!=="text")}:void 0})},Ee=(e,t,n)=>{const{currentSessionId:a,appendThinking:o}=t();if(e.sessionId!==a)return;const u=v(t,n,e.messageId);u&&o(u,e.delta)},Ve=()=>{},ge=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o,setHasToolCalls:u,setSubagent:s}=t();if(e.sessionId!==a)return;const i=v(t,n,e.messageId||e.toolCallId,typeof e.messageId=="string");if(!i)return;u(!0);const r=e.toolName||"Unknown",d=e.arguments;let c,l="",g,I;if(r==="Task")try{const S=JSON.parse(d);c=S.subagent_type,l=S.description||S.query||c||"",g=S.subagent_session_id,I=S.resume_from||S.resume}catch{}if(c){s(i,{id:q({explicitId:e.toolCallId,sessionId:g,messageId:i,agentType:c,description:l}),type:c,description:l,status:"running",startTime:Date.now(),sessionId:g,resumedFrom:I,output:"",thinking:""}),Q(g,t,n);return}const m={toolCallId:L({explicitId:e.toolCallId,messageId:i,toolName:r,argumentsValue:d,toolKind:e.toolKind}),toolName:r,arguments:d,toolKind:e.toolKind,status:"running",startTime:Date.now()};o(i,m)};function me(e){if(!e||typeof e!="object"||Array.isArray(e))return;const t=e;if(!(t.kind!=="readonly"&&t.kind!=="write"&&t.kind!=="execute")&&!(t.scope!=="global"&&t.scope!=="session")&&!(!Number.isSafeInteger(t.queuePosition)||t.queuePosition<=0||!Number.isSafeInteger(t.inFlight)||t.inFlight<0||!Number.isSafeInteger(t.limit)||t.limit<=0))return{kind:t.kind,scope:t.scope,queuePosition:t.queuePosition,inFlight:t.inFlight,limit:t.limit}}const fe=(e,t)=>{const{currentSessionId:n,updateToolCall:a,messages:o}=t();if(e.sessionId!==n)return;const u=e.toolCallId;if(!u)return;const s=o.find(i=>{var r;return(r=i.agentContent)==null?void 0:r.toolCalls.some(d=>d.toolCallId===u)});s&&a(s.id,u,{summary:e.message,progress:typeof e.progress=="number"?e.progress:void 0,progressTotal:typeof e.total=="number"?e.total:void 0,progressMessage:e.message,admission:me(e.admission)})},Ie=(e,t,n)=>{var se;const{currentSessionId:a,appendToolCall:o,setHasToolCalls:u,updateToolCall:s,updateSubagent:i,messages:r}=t();if(e.sessionId!==a)return;const d=e.toolCallId;if(!d)return;const c=r.find(A=>{var T;return(T=A.agentContent)==null?void 0:T.toolCalls.some(R=>R.toolCallId===d)}),l=r.find(A=>N(A.agentContent).some(T=>T.id===d)),g=(c==null?void 0:c.id)||(l==null?void 0:l.id)||v(t,n,e.messageId,!0);if(!g)return;const I=typeof e.output=="string"?e.output:"",m=e.success===!0||e.status==="completed",S=e.summary||(I&&I.trim()?I.trim().split(`
5
+ `)[0].slice(0,120):m?"执行成功":"执行失败"),y=(se=c==null?void 0:c.agentContent)==null?void 0:se.toolCalls.find(A=>A.toolCallId===d),h=typeof e.toolName=="string"?e.toolName:(y==null?void 0:y.toolName)??"Unknown",f=e.metadata;c?s(g,d,{status:m?"success":"error",summary:S,output:I,metadata:f}):l||(u(!0),o(g,{toolCallId:d,toolName:h,status:m?"success":"error",summary:S,output:I,startTime:Date.now(),metadata:f}));const F=t().messages.find(A=>A.id===g),k=N(F==null?void 0:F.agentContent).find(A=>A.id===d),M=f&&typeof f.subagentSessionId=="string"?f.subagentSessionId:void 0,D=f&&typeof f.subagentStatus=="string"?f.subagentStatus:void 0,X=f&&typeof f.subagentType=="string"?f.subagentType:void 0,Z=f&&typeof f.subagentSummary=="string"?f.subagentSummary:void 0,p=f&&typeof f.subagentResumedFrom=="string"?f.subagentResumedFrom:void 0,ee=f&&typeof f.subagentRootId=="string"?f.subagentRootId:void 0,te=f&&typeof f.subagentResumeDepth=="number"?f.subagentResumeDepth:void 0,ne=(f==null?void 0:f.verificationVerdict)==="pass"||(f==null?void 0:f.verificationVerdict)==="fail"||(f==null?void 0:f.verificationVerdict)==="partial"?f.verificationVerdict:void 0;if(k){const A=D?G(D):e.success?"completed":"failed",T=k.status!=="running"&&A==="running";i(g,k.id,{sessionId:k.sessionId||M,type:X||k.type,status:T?k.status:A,resumedFrom:p||k.resumedFrom,rootAgentId:ee||k.rootAgentId,resumeDepth:te??k.resumeDepth,verificationVerdict:ne??k.verificationVerdict,output:T?k.output:Z||k.output})}M&&D&&n(A=>({messages:A.messages.map(T=>{if(T.id!==g)return T;const R=T.metadata??{},O=Array.isArray(R.subtaskRefs)?R.subtaskRefs:[],w=O.findIndex(ie=>ie.childSessionId===M||ie.subagentId===d),C=w>=0?O[w]:R.subtaskRef??{},E={...C,subagentId:d,childSessionId:M,agentType:X||(typeof(C==null?void 0:C.agentType)=="string"?C.agentType:"subagent"),status:D,summary:Z||(typeof(C==null?void 0:C.summary)=="string"?C.summary:""),resumedFrom:p||(typeof(C==null?void 0:C.resumedFrom)=="string"?C.resumedFrom:void 0),rootAgentId:ee||(typeof(C==null?void 0:C.rootAgentId)=="string"?C.rootAgentId:M),resumeDepth:te??(typeof(C==null?void 0:C.resumeDepth)=="number"?C.resumeDepth:0),verificationVerdict:ne||(typeof(C==null?void 0:C.verificationVerdict)=="string"?C.verificationVerdict:void 0)},V=[...O];return w>=0?V[w]=E:V.push(E),{...T,metadata:{...R,subtaskRef:E,subtaskRefs:V}}})})),Q(M,t,n)},Ke=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o}=t();if(e.sessionId!==a)return;const u=v(t,n,e.messageId||`mcp-catalog-${String(e.revision)}`);if(!u)return;const s=Array.isArray(e.added)?e.added.map(String):[],i=Array.isArray(e.removed)?e.removed.map(String):[],r=Array.isArray(e.updated)?e.updated.map(String):[],d=`MCP catalog r${String(e.revision)}: +${s.length} -${i.length} ~${r.length}`;o(u,{toolCallId:`mcp-catalog:${String(e.revision)}`,toolName:"MCP Catalog",arguments:JSON.stringify({serverName:e.serverName,added:s,removed:i,updated:r}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:d,output:[s.length>0?`Added: ${s.join(", ")}`:"",i.length>0?`Removed: ${i.join(", ")}`:"",r.length>0?`Updated: ${r.join(", ")}`:""].filter(Boolean).join(`
6
6
  `)})},Ue=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o}=t();if(e.sessionId!==a)return;const u=v(t,n,e.messageId||`mcp-content-${String(e.revision)}`);if(!u)return;const s=Array.isArray(e.added)?e.added.map(String):[],i=Array.isArray(e.removed)?e.removed.map(String):[],r=Array.isArray(e.updated)?e.updated.map(String):[],d=`MCP ${String(e.contentKind)} r${String(e.revision)}: +${s.length} -${i.length} ~${r.length}`;o(u,{toolCallId:`mcp-content:${String(e.revision)}`,toolName:"MCP Content",arguments:JSON.stringify({serverName:e.serverName,contentKind:e.contentKind,added:s,removed:i,updated:r}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:d,output:[s.length>0?`Added: ${s.join(", ")}`:"",i.length>0?`Removed: ${i.join(", ")}`:"",r.length>0?`Updated: ${r.join(", ")}`:""].filter(Boolean).join(`
7
7
  `)})},Be=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o}=t();if(e.sessionId!==a)return;const u=v(t,n,e.messageId||`mcp-resource-${String(e.revision)}`);u&&o(u,{toolCallId:`mcp-resource:${String(e.revision)}`,toolName:"MCP Resource",arguments:JSON.stringify({serverName:e.serverName,uri:e.uri}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:`MCP resource updated: ${String(e.uri)}`,output:`${String(e.serverName)} · revision ${String(e.revision)}`})},Je=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o}=t();if(e.sessionId!==a)return;const u=v(t,n,e.messageId||`mcp-connection-${String(e.revision)}`);if(!u)return;const s=String(e.phase),i=`MCP ${String(e.serverName)} ${s}`+(s==="reconnecting"?` (${String(e.attempt)}/${String(e.maxAttempts)})`:"");o(u,{toolCallId:`mcp-connection:${String(e.revision)}`,toolName:"MCP Connection",arguments:JSON.stringify({serverName:e.serverName,phase:s,reason:e.reason,attempt:e.attempt,maxAttempts:e.maxAttempts}),toolKind:"readonly",status:s==="failed"?"error":"success",startTime:Date.now(),summary:i,output:[`Reason: ${String(e.reason)}`,e.error?`Error: ${String(e.error)}`:""].filter(Boolean).join(`
8
8
  `)})},Le=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o}=t();if(e.sessionId!==a)return;const u=v(t,n,e.messageId||`mcp-log-${String(e.revision)}`);if(!u)return;const s=String(e.level),i=typeof e.logger=="string"?e.logger:void 0,r=`MCP ${s} · ${String(e.serverName)}`+(i?` · ${i}`:"");o(u,{toolCallId:`mcp-log:${String(e.revision)}`,toolName:"MCP Log",arguments:JSON.stringify({serverName:e.serverName,level:s,logger:i}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:r,output:[String(e.message),`SHA-256: ${String(e.dataSha256)}`,e.truncated===!0?"Truncated":"",e.detailsOmitted===!0?"Details omitted by runtime policy":""].filter(Boolean).join(`
@@ -13,10 +13,10 @@ var ye=Object.defineProperty;var Ce=(e,t,n)=>t in e?ye(e,t,{enumerable:!0,config
13
13
  ${r}`,metadata:{...s.metadata,userShellExecution:{...i,output:r,streamTruncated:e.streamTruncated===!0}}})},Ye=(e,t,n)=>{const{currentSessionId:a,messages:o,addMessage:u,updateMessage:s}=t();if(e.sessionId!==a||typeof e.executionId!="string"||!e.record||typeof e.record!="object"||Array.isArray(e.record))return;const i=e.record,r=typeof i.command=="string"?i.command:"",d=typeof i.stdout=="string"?i.stdout:"",c=typeof i.stderr=="string"?i.stderr:"",l=[d,c?`stderr:
14
14
  ${c}`:""].filter(Boolean).join(`
15
15
  `),g=z(e.executionId),I={role:"user",content:[`! ${r}`,l||"(no output)"].join(`
16
- `),metadata:{userShellCommand:i}};o.some(m=>m.id===g)?s(g,I):u({id:g,...I,timestamp:Date.now()}),e.auxiliary!==!0&&n({isStreaming:!1,isStopping:!1,agentPhase:"idle"}),(e.delivery==="current_turn"||e.delivery==="next_turn")&&n({pendingSteeringCount:typeof e.queued=="number"?Math.max(0,e.queued):0,pendingInputDelivery:e.delivery==="current_turn"?"current_turn":"next_turn"})},Xe=(e,t)=>{const{currentSessionId:n,updateTokenUsage:a,setMaxContextTokens:o}=t();e.sessionId===n&&(a({inputTokens:e.inputTokens,outputTokens:e.outputTokens,totalTokens:e.totalTokens,cacheReadTokens:e.cacheReadTokens??0,cacheWriteTokens:e.cacheWriteTokens??0,costUsd:e.costUsd}),e.maxContextTokens&&o(e.maxContextTokens,!1))},Ze=(e,t)=>{const{currentSessionId:n,setTasks:a,currentAssistantMessageId:o}=t();if(e.sessionId!==n||!o)return;const u=e.tasks||[];a(o,u)},pe=(e,t,n)=>{const{currentSessionId:a,setSubagent:o,currentAssistantMessageId:u}=t();if(e.sessionId!==a||!u)return;const s={id:F({explicitId:e.subagentId,sessionId:e.subagentSessionId,messageId:u,agentType:e.type,description:e.description}),type:e.type||"unknown",description:e.description||"",status:"running",startTime:Date.now(),sessionId:e.subagentSessionId,resumedFrom:e.resumedFrom,rootAgentId:e.rootAgentId,resumeDepth:typeof e.resumeDepth=="number"?e.resumeDepth:void 0};o(u,s),Q(s.sessionId,t,n)},et=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.subagentSessionId,i=b(o,s,a);i&&u(i.messageId,i.subagent.id,{sessionId:i.subagent.sessionId||s,currentTool:e.toolName})},tt=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.delta;if(!s)return;const i=e.subagentSessionId,r=b(o,i,a);r&&u(r.messageId,r.subagent.id,d=>({sessionId:d.sessionId||i,output:(d.output||"")+s}))},nt=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.delta;if(!s)return;const i=e.subagentSessionId,r=b(o,i,a);r&&u(r.messageId,r.subagent.id,d=>({sessionId:d.sessionId||i,thinking:(d.thinking||"")+s}))},W=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.subagentSessionId,i=b(o,s,a);if(!i)return;const r=e.status==="completed"?"completed":e.status==="failed"||e.status==="cancelled"?"failed":e.success?"completed":"failed";u(i.messageId,i.subagent.id,{sessionId:i.subagent.sessionId||s,type:typeof e.type=="string"?e.type:i.subagent.type,description:typeof e.description=="string"?e.description:i.subagent.description,status:r,currentTool:void 0,output:typeof e.summary=="string"?e.summary:i.subagent.output,resumedFrom:typeof e.resumedFrom=="string"?e.resumedFrom:i.subagent.resumedFrom,rootAgentId:typeof e.rootAgentId=="string"?e.rootAgentId:i.subagent.rootAgentId,resumeDepth:typeof e.resumeDepth=="number"?e.resumeDepth:i.subagent.resumeDepth,verificationVerdict:e.verificationVerdict==="pass"||e.verificationVerdict==="fail"||e.verificationVerdict==="partial"?e.verificationVerdict:i.subagent.verificationVerdict})},st=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.toolCallId,i=e.toolName;if(!s||!i)return;const r=e.subagentSessionId,d=b(o,r,a);if(!d)return;const c={toolCallId:s,toolName:i,arguments:e.arguments,toolKind:e.toolKind,status:"running",startTime:Date.now()};u(d.messageId,d.subagent.id,l=>{const g=l.toolCalls||[];return{sessionId:l.sessionId||r,currentTool:i,toolCalls:g.some(I=>I.toolCallId===s)?g:[...g,c]}})},it=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.toolCallId;if(!s)return;const i=e.toolName,r=e.subagentSessionId,d=b(o,r,a);if(!d)return;const c=e.output,l=e.success===!0,g=l?"success":"error",I=e.summary||(c&&c.trim()?c.trim().split(`
16
+ `),metadata:{userShellCommand:i}};o.some(m=>m.id===g)?s(g,I):u({id:g,...I,timestamp:Date.now()}),e.auxiliary!==!0&&n({isStreaming:!1,isStopping:!1,agentPhase:"idle"}),(e.delivery==="current_turn"||e.delivery==="next_turn")&&n({pendingSteeringCount:typeof e.queued=="number"?Math.max(0,e.queued):0,pendingInputDelivery:e.delivery==="current_turn"?"current_turn":"next_turn"})},Xe=(e,t)=>{const{currentSessionId:n,updateTokenUsage:a,setMaxContextTokens:o}=t();e.sessionId===n&&(a({inputTokens:e.inputTokens,outputTokens:e.outputTokens,totalTokens:e.totalTokens,cacheReadTokens:e.cacheReadTokens??0,cacheWriteTokens:e.cacheWriteTokens??0,costUsd:e.costUsd}),e.maxContextTokens&&o(e.maxContextTokens,!1))},Ze=(e,t)=>{const{currentSessionId:n,setTasks:a,currentAssistantMessageId:o}=t();if(e.sessionId!==n||!o)return;const u=e.tasks||[];a(o,u)},pe=(e,t,n)=>{const{currentSessionId:a,setSubagent:o,currentAssistantMessageId:u}=t();if(e.sessionId!==a||!u)return;const s={id:q({explicitId:e.subagentId,sessionId:e.subagentSessionId,messageId:u,agentType:e.type,description:e.description}),type:e.type||"unknown",description:e.description||"",status:"running",startTime:Date.now(),sessionId:e.subagentSessionId,resumedFrom:e.resumedFrom,rootAgentId:e.rootAgentId,resumeDepth:typeof e.resumeDepth=="number"?e.resumeDepth:void 0};o(u,s),Q(s.sessionId,t,n)},et=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.subagentSessionId,i=b(o,s,a);i&&u(i.messageId,i.subagent.id,{sessionId:i.subagent.sessionId||s,currentTool:e.toolName})},tt=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.delta;if(!s)return;const i=e.subagentSessionId,r=b(o,i,a);r&&u(r.messageId,r.subagent.id,d=>({sessionId:d.sessionId||i,output:(d.output||"")+s}))},nt=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.delta;if(!s)return;const i=e.subagentSessionId,r=b(o,i,a);r&&u(r.messageId,r.subagent.id,d=>({sessionId:d.sessionId||i,thinking:(d.thinking||"")+s}))},W=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.subagentSessionId,i=b(o,s,a);if(!i)return;const r=e.status==="completed"?"completed":e.status==="failed"||e.status==="cancelled"?"failed":e.success?"completed":"failed";u(i.messageId,i.subagent.id,{sessionId:i.subagent.sessionId||s,type:typeof e.type=="string"?e.type:i.subagent.type,description:typeof e.description=="string"?e.description:i.subagent.description,status:r,currentTool:void 0,output:typeof e.summary=="string"?e.summary:i.subagent.output,resumedFrom:typeof e.resumedFrom=="string"?e.resumedFrom:i.subagent.resumedFrom,rootAgentId:typeof e.rootAgentId=="string"?e.rootAgentId:i.subagent.rootAgentId,resumeDepth:typeof e.resumeDepth=="number"?e.resumeDepth:i.subagent.resumeDepth,verificationVerdict:e.verificationVerdict==="pass"||e.verificationVerdict==="fail"||e.verificationVerdict==="partial"?e.verificationVerdict:i.subagent.verificationVerdict})},st=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.toolCallId,i=e.toolName;if(!s||!i)return;const r=e.subagentSessionId,d=b(o,r,a);if(!d)return;const c={toolCallId:s,toolName:i,arguments:e.arguments,toolKind:e.toolKind,status:"running",startTime:Date.now()};u(d.messageId,d.subagent.id,l=>{const g=l.toolCalls||[];return{sessionId:l.sessionId||r,currentTool:i,toolCalls:g.some(I=>I.toolCallId===s)?g:[...g,c]}})},it=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.toolCallId;if(!s)return;const i=e.toolName,r=e.subagentSessionId,d=b(o,r,a);if(!d)return;const c=e.output,l=e.success===!0,g=l?"success":"error",I=e.summary||(c&&c.trim()?c.trim().split(`
17
17
  `)[0].slice(0,120):l?"执行成功":"执行失败");u(d.messageId,d.subagent.id,m=>({sessionId:m.sessionId||r,currentTool:m.currentTool===i?void 0:m.currentTool,toolCalls:(m.toolCalls||[]).map(S=>S.toolCallId===s?{...S,status:g,summary:I,output:c,metadata:e.metadata}:S)}))},ot=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=e.toolCallId;if(!s)return;const i=b(o,e.subagentSessionId,a);i&&u(i.messageId,i.subagent.id,r=>({toolCalls:(r.toolCalls||[]).map(d=>d.toolCallId===s?{...d,summary:e.message,progress:typeof e.progress=="number"?e.progress:void 0,progressTotal:typeof e.total=="number"?e.total:void 0,progressMessage:e.message,admission:me(e.admission)}:d)}))},at=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=b(o,e.subagentSessionId,a);if(!s)return;const i=Array.isArray(e.added)?e.added.map(String):[],r=Array.isArray(e.removed)?e.removed.map(String):[],d=Array.isArray(e.updated)?e.updated.map(String):[],c=`mcp-catalog:${String(e.revision)}`;u(s.messageId,s.subagent.id,l=>({toolCalls:[...(l.toolCalls||[]).filter(g=>g.toolCallId!==c),{toolCallId:c,toolName:"MCP Catalog",arguments:JSON.stringify({serverName:e.serverName,added:i,removed:r,updated:d}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:`MCP catalog r${String(e.revision)}: +${i.length} -${r.length} ~${d.length}`,output:[i.length>0?`Added: ${i.join(", ")}`:"",r.length>0?`Removed: ${r.join(", ")}`:"",d.length>0?`Updated: ${d.join(", ")}`:""].filter(Boolean).join(`
18
18
  `)}]}))},rt=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=b(o,e.subagentSessionId,a);if(!s)return;const i=Array.isArray(e.added)?e.added.map(String):[],r=Array.isArray(e.removed)?e.removed.map(String):[],d=Array.isArray(e.updated)?e.updated.map(String):[],c=`mcp-content:${String(e.revision)}`;u(s.messageId,s.subagent.id,l=>({toolCalls:[...(l.toolCalls||[]).filter(g=>g.toolCallId!==c),{toolCallId:c,toolName:"MCP Content",arguments:JSON.stringify({serverName:e.serverName,contentKind:e.contentKind,added:i,removed:r,updated:d}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:`MCP ${String(e.contentKind)} r${String(e.revision)}: +${i.length} -${r.length} ~${d.length}`}]}))},ut=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=b(o,e.subagentSessionId,a);if(!s)return;const i=`mcp-resource:${String(e.revision)}`;u(s.messageId,s.subagent.id,r=>({toolCalls:[...(r.toolCalls||[]).filter(d=>d.toolCallId!==i),{toolCallId:i,toolName:"MCP Resource",arguments:JSON.stringify({serverName:e.serverName,uri:e.uri}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:`MCP resource updated: ${String(e.uri)}`}]}))},dt=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=b(o,e.subagentSessionId,a);if(!s)return;const i=String(e.phase),r=`mcp-connection:${String(e.revision)}`;u(s.messageId,s.subagent.id,d=>({toolCalls:[...(d.toolCalls||[]).filter(c=>c.toolCallId!==r),{toolCallId:r,toolName:"MCP Connection",arguments:JSON.stringify({serverName:e.serverName,phase:i,reason:e.reason,attempt:e.attempt,maxAttempts:e.maxAttempts}),toolKind:"readonly",status:i==="failed"?"error":"success",startTime:Date.now(),summary:`MCP ${String(e.serverName)} ${i}`+(i==="reconnecting"?` (${String(e.attempt)}/${String(e.maxAttempts)})`:""),output:e.error?`Error: ${String(e.error)}`:void 0}]}))},lt=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=b(o,e.subagentSessionId,a);if(!s)return;const i=String(e.level),r=typeof e.logger=="string"?e.logger:void 0,d=`mcp-log:${String(e.revision)}`;u(s.messageId,s.subagent.id,c=>({toolCalls:[...(c.toolCalls||[]).filter(l=>l.toolCallId!==d),{toolCallId:d,toolName:"MCP Log",arguments:JSON.stringify({serverName:e.serverName,level:i,logger:r}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:`MCP ${i} · ${String(e.serverName)}`+(r?` · ${r}`:""),output:[String(e.message),`SHA-256: ${String(e.dataSha256)}`,e.truncated===!0?"Truncated":"",e.detailsOmitted===!0?"Details omitted by runtime policy":""].filter(Boolean).join(`
19
19
  `)}]}))},ct=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=b(o,e.subagentSessionId,a);if(!s)return;const i=String(e.serverName),r=String(e.action),d=`mcp-instructions:${String(e.revision)}:${i}:${r}`;u(s.messageId,s.subagent.id,c=>({toolCalls:[...(c.toolCalls||[]).filter(l=>l.toolCallId!==d),{toolCallId:d,toolName:"MCP Instructions",arguments:JSON.stringify({serverName:i,action:r,reason:e.reason}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:`MCP instructions ${r}: ${i}`+(e.truncated===!0?" (truncated)":""),output:[typeof e.text=="string"?e.text:"",e.sha256?`SHA-256: ${String(e.sha256)}`:"",e.detailsOmitted===!0?"Details omitted by runtime policy":""].filter(Boolean).join(`
20
20
  `)}]}))},gt=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=b(o,e.subagentSessionId,a);if(!s)return;const i=String(e.taskId),r=String(e.status),d=`mcp-task:${i}`;u(s.messageId,s.subagent.id,c=>({toolCalls:[...(c.toolCalls||[]).filter(l=>l.toolCallId!==d),{toolCallId:d,toolName:"MCP Task",arguments:JSON.stringify({taskId:i,serverName:e.serverName,toolName:e.toolName}),toolKind:"readonly",status:r==="failed"||r==="cancelled"?"error":r==="completed"?"success":"running",startTime:Number(e.createdAt)||Date.now(),summary:`MCP task ${r}: ${i} · ${String(e.serverName)}/${String(e.toolName)}`,output:[typeof e.statusMessage=="string"?e.statusMessage:"",e.hasResult===!0?"Result available via TaskOutput":"",typeof e.error=="string"?`Error: ${e.error}`:""].filter(Boolean).join(`
21
21
  `)}]}))},mt=(e,t)=>{const{currentSessionId:n,currentAssistantMessageId:a,messages:o,updateSubagent:u}=t();if(e.sessionId!==n)return;const s=b(o,e.subagentSessionId,a);if(!s)return;const i=Array.isArray(e.files)?e.files.filter(d=>!!d&&typeof d=="object"&&!Array.isArray(d)):[],r=`project-rules:${i.map(d=>String(d.id)).join(",")}`;u(s.messageId,s.subagent.id,d=>({toolCalls:[...(d.toolCalls||[]).filter(c=>c.toolCallId!==r),{toolCallId:r,toolName:"Project Rules",arguments:JSON.stringify({triggerPaths:e.triggerPaths,blockedWrite:e.blockedWrite}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:`Project rules loaded: ${i.length}`,output:i.map(c=>`${String(c.relativePath)} ${String(c.source)} SHA-256: ${String(c.contentSha256)}`).join(`
22
- `)}]}))},ft=(e,t,n)=>{const{currentSessionId:a,setConfirmation:o}=t();if(e.sessionId!==a)return;const u=e.requestId||"",s=v(t,n,u?`assistant-permission-${u}`:void 0);if(!s)return;const i=e.details,r=e.toolName||(i==null?void 0:i.toolName)||"Tool";o(s,{toolCallId:u,toolName:r,description:e.description,diff:(i==null?void 0:i.details)||(i==null?void 0:i.diff)||"",allowRemember:(i==null?void 0:i.type)!=="mcpSampling",status:"pending"}),n(d=>({agentPhase:"waiting_permission",isStreaming:!0,sessions:d.sessions.map(c=>c.sessionId===e.sessionId&&c.projectPath===e.projectPath?{...c,pendingInteraction:{type:"permission",requestId:u}}:c)}))},It=(e,t,n)=>{var I,m;const{currentSessionId:a,currentSessionRef:o,messages:u,setConfirmation:s,setElicitation:i}=t();if(e.sessionId!==a)return;const r=e.requestId,d=u.find(S=>{var y,h;return((h=(y=S.agentContent)==null?void 0:y.confirmation)==null?void 0:h.toolCallId)===r}),c=(I=d==null?void 0:d.agentContent)==null?void 0:I.confirmation;d&&(c==null?void 0:c.status)==="pending"&&s(d.id,{...c,status:"denied"});const l=u.find(S=>{var y,h;return((h=(y=S.agentContent)==null?void 0:y.elicitation)==null?void 0:h.toolCallId)===r}),g=(m=l==null?void 0:l.agentContent)==null?void 0:m.elicitation;l&&(g==null?void 0:g.status)==="pending"&&i(l.id,{...g,status:"cancelled"}),n({agentPhase:"running",error:"Permission request timed out",errorContext:{kind:"interaction",...o?{sessionRef:o}:{}}})},ae=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",isStreaming:!0})},St=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:e.reason==="context_limit"?"recovering_context":"compacting"})},ht=(e,t,n)=>{e.sessionId===t().currentSessionId&&(t().resetContextUsage(),n({agentPhase:"running"}))},yt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"switching_model",providerCircuit:null,providerRetry:null,providerStall:null,actionStationarity:null})},Ct=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerCircuit:e.phase==="closed"?null:e})},bt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerRetry:e.phase==="recovered"?null:e})},vt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerStall:e.phase==="detected"?e:null})},At=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",actionStationarity:e.phase==="recovered"?null:e})},kt=(e,t,n)=>{const{currentSessionId:a,setQuestion:o}=t();if(e.sessionId!==a)return;const u=e.requestId||e.toolCallId||"",s=v(t,n,u?`assistant-question-${u}`:void 0);s&&(o(s,{toolCallId:u,questions:e.questions,status:"pending"}),n(i=>({agentPhase:"waiting_permission",isStreaming:!0,sessions:i.sessions.map(r=>r.sessionId===e.sessionId&&r.projectPath===e.projectPath?{...r,pendingInteraction:{type:"question",requestId:u}}:r)})))},Tt=(e,t,n)=>{const{currentSessionId:a,setElicitation:o}=t();if(e.sessionId!==a)return;const u=e.requestId||e.toolCallId||"",s=v(t,n,u?`assistant-elicitation-${u}`:void 0),i=e.elicitation;!s||!i||(o(s,{toolCallId:u,details:i,status:"pending"}),n(r=>({agentPhase:"waiting_permission",isStreaming:!0,sessions:r.sessions.map(d=>d.sessionId===e.sessionId&&d.projectPath===e.projectPath?{...d,pendingInteraction:{type:"elicitation",requestId:u}}:d)})))},$t=(e,t,n)=>{const{currentSessionId:a}=t();if(e.sessionId!==a)return;const o=e.requestId;n(u=>({agentPhase:"running",sessions:u.sessions.map(s=>{var i;return s.sessionId===e.sessionId&&s.projectPath===e.projectPath&&((i=s.pendingInteraction)==null?void 0:i.requestId)===o?{...s,pendingInteraction:void 0}:s})}))},Y=(e,t)=>{const n=t().currentSessionRef;n&&e.sessionId===n.sessionId&&e.projectPath===n.projectPath&&t().resyncSessionMessages(n)},Nt=(e,t)=>{const{currentSessionId:n,currentSessionRef:a,endAgentResponse:o}=t();e.sessionId!==n||!a||e.projectPath!==a.projectPath||(o(),Y(e,t))},re=(e,t)=>{const n=t().currentSessionRef;!n||e.sessionId!==n.sessionId||e.projectPath!==n.projectPath||t().endAgentResponse()},Pt=(e,t,n)=>{const{currentSessionId:a,currentSessionRef:o,endAgentResponse:u}=t();if(e.sessionId!==a)return;const s=e.taskFailure&&typeof e.taskFailure=="object"&&!Array.isArray(e.taskFailure)?e.taskFailure:void 0,i=Re(s==null?void 0:s.code);n({agentPhase:"error",error:e.error||"An error occurred",errorContext:{kind:"execution",...o?{sessionRef:o}:{},...i?{failureCode:i}:{}}}),u(),Y(e,t)},Mt=(e,t,n)=>{const{currentSessionId:a}=t();if(e.sessionId===a)if(e.status==="idle")n({isStreaming:!1,isStopping:!1,agentPhase:"idle",providerCircuit:null,providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null,recoveredSteeringCount:0});else if(e.status==="queued"||e.status==="running"||e.status==="waiting_permission"){const o=typeof e.queued=="number"?Math.max(0,e.queued):0;n({isStreaming:!0,agentPhase:e.status==="waiting_permission"?"waiting_permission":"running",currentRunId:typeof e.runId=="string"?e.runId:t().currentRunId,pendingSteeringCount:o,pendingInputDelivery:o>0&&(e.pendingInputDelivery==="current_turn"||e.pendingInputDelivery==="next_turn")?e.pendingInputDelivery:null,recoveredSteeringCount:typeof e.recovered=="number"?Math.max(0,e.recovered):t().recoveredSteeringCount})}else e.status==="error"&&n({isStreaming:!1,isStopping:!1,agentPhase:"error",providerCircuit:null,providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null})},Rt=(e,t,n)=>{const{currentSessionId:a,endAgentResponse:o,messages:u,updateSubagent:s}=t();if(e.sessionId===a){n(i=>({isStreaming:!1,agentPhase:"idle",messages:i.messages.map(r=>{var c;const d=(c=r.agentContent)==null?void 0:c.elicitation;return(d==null?void 0:d.status)!=="pending"||!r.agentContent?r:{...r,agentContent:{...r.agentContent,elicitation:{...d,status:"cancelled"}}}})}));for(const i of u)for(const r of N(i.agentContent))r.status==="running"&&s(i.id,r.id,{status:"failed"});o(),Y(e,t)}},Se=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({pendingSteeringCount:typeof e.queued=="number"?Math.max(0,e.queued):1,pendingInputDelivery:"current_turn"})},he=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({pendingSteeringCount:typeof e.queued=="number"?Math.max(0,e.queued):1,pendingInputDelivery:"next_turn"})},xt=(e,t,n)=>{if(typeof e.childSessionId=="string"){const a={...e,subagentSessionId:e.childSessionId,success:e.status==="completed"};b(t().messages,e.childSessionId,t().currentAssistantMessageId)?W(a,t):je(e.childSessionId,a,n)}e.delivery==="current_turn"?Se(e,t,n):he(e,t,n)},Dt=(e,t,n)=>{if(e.sessionId!==t().currentSessionId)return;const a=typeof e.queued=="number"?Math.max(0,e.queued):0;n({pendingSteeringCount:a,pendingInputDelivery:a>0?t().pendingInputDelivery:null,recoveredSteeringCount:typeof e.recovered=="number"?Math.max(0,e.recovered):t().recoveredSteeringCount})},wt=(e,t,n)=>{if(e.sessionId!==t().currentSessionId)return;const a=typeof e.queued=="number"?Math.max(0,e.queued):0;n({agentPhase:"running",pendingSteeringCount:a,pendingInputDelivery:a>0?"current_turn":null,recoveredSteeringCount:typeof e.recovered=="number"?Math.max(0,e.recovered):t().recoveredSteeringCount})},jt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:e.goal??null})},_t=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:null})},Ft=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:e.goal??t().goal,isStreaming:!0,agentPhase:"running"})},qt=(e,t,n)=>{if(e.sessionId!==t().currentSessionId||!Array.isArray(e.messages))return;const a=Date.now(),o=e.messages.flatMap((u,s)=>{if(typeof u!="object"||u===null)return[];const i=u;return!["user","assistant","system","tool"].includes(String(i.role))||!Array.isArray(i.content)&&typeof i.content!="string"?[]:[{id:`rewind-${s}-${a}`,role:i.role,content:i.content,timestamp:a+s,metadata:typeof i.metadata=="object"&&i.metadata!==null?i.metadata:void 0,thinkingContent:typeof i.thinkingContent=="string"?i.thinkingContent:typeof i.reasoningContent=="string"?i.reasoningContent:void 0,tool_call_id:typeof i.tool_call_id=="string"?i.tool_call_id:void 0,name:typeof i.name=="string"?i.name:void 0,tool_calls:i.tool_calls}]});n({messages:Pe(o),isStreaming:!1,isStopping:!1,agentPhase:"idle",providerCircuit:null,providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null,recoveredSteeringCount:0,currentAssistantMessageId:null,hasToolCalls:!1})},Ot=(e,t,n)=>{const a=t().currentSessionRef;if(!a||e.sessionId!==a.sessionId||e.projectPath!==a.projectPath)return;const o=e.status,u=o==="completed"||o==="stale"?"completed":o==="aborted"?"cancelled":o==="interrupted"?"interrupted":"failed";n(s=>({sessions:s.sessions.map(i=>i.sessionId===a.sessionId&&i.projectPath===a.projectPath?{...i,taskStatus:u,taskStatusReason:void 0,taskFailure:void 0,taskCompletedAt:new Date().toISOString()}:i)})),t().selectSession(a)},Et=(e,t,n)=>{ge({...e,messageId:`review-${String(e.reviewId??"active")}`,arguments:"{}"},t,n)},Vt=(e,t,n)=>{fe(e,t)},Kt=(e,t,n)=>{Ie(e,t,n)},j={"message.created":_e,"message.delta":Fe,"message.complete":qe,"structured.output":Oe,"thinking.delta":Ee,"thinking.completed":Ve,"tool.start":ge,"tool.progress":fe,"tool.result":Ie,"mcp.catalog.changed":Ke,"mcp.content.changed":Ue,"mcp.resource.updated":Be,"mcp.connection.changed":Je,"mcp.log":Le,"mcp.instructions.changed":He,"mcp.task.changed":Ge,"project.rules.loaded":Qe,"user.shell.started":ze,"user.shell.output":We,"user.shell.completed":Ye,"token.usage":Xe,"task.updated":Ze,"subagent.start":pe,"subagent.update":et,"subagent.delta":tt,"subagent.thinking.delta":nt,"subagent.tool.start":st,"subagent.tool.progress":ot,"subagent.tool.result":it,"subagent.mcp.catalog.changed":at,"subagent.mcp.content.changed":rt,"subagent.mcp.resource.updated":ut,"subagent.mcp.connection.changed":dt,"subagent.mcp.log":lt,"subagent.mcp.instructions.changed":ct,"subagent.mcp.task.changed":gt,"subagent.project.rules.loaded":mt,"subagent.complete":W,"subagent.completion.queued":xt,"permission.asked":ft,"permission.timeout":It,"turn.started":ae,"committed.turn_started":ae,"committed.turn_completed":re,"committed.turn_aborted":re,"provider.circuit":Ct,"provider.retry":bt,"provider.stall":vt,"action.stationarity":At,"compaction.started":St,"compaction.completed":ht,"model.fallback":yt,"question.required":kt,"elicitation.required":Tt,"interaction.resolved":$t,"session.completed":Nt,"session.error":Pt,"session.status":Mt,"run.cancelled":Rt,"steering.queued":Se,"follow_up.queued":he,"follow_up.started":wt,"steering.applied":Dt,"goal.updated":jt,"goal.cleared":_t,"goal.continuation.started":Ft,"session.rewound":qt,"review.tool.started":Et,"review.tool.progress":Vt,"review.tool.completed":Kt,"review.completed":Ot},Ut=new Set(["message.complete","thinking.completed","session.completed","session.error","run.cancelled","committed.turn_completed","committed.turn_aborted"]),Ht=(e,t)=>n=>{const a=e().currentSessionRef,o=n.properties;if(!a||o.sessionId!==a.sessionId||o.projectPath!==a.projectPath)return;if(Ut.has(n.type)){$.drainAll();const s=j[n.type];s&&s(n.properties,e,t);return}if(n.type==="tool.start"&&$.drainAll(),n.type==="message.delta"){const{currentSessionId:s,currentAssistantMessageId:i,hasToolCalls:r}=e();if(o.sessionId!==s)return;const d=o.messageId||i,c=o.delta;if(!i){const I=j["message.delta"];I&&I(o,e,t);return}const l=r?"after":"before",g=`content:${d}:${l}`;$.drainAllExcept(g),$.append(g,c,I=>{const{appendDelta:m}=e();d&&m(d,I,l)});return}if(n.type==="thinking.delta"){const{currentSessionId:s,currentAssistantMessageId:i}=e();if(o.sessionId!==s)return;if(!i){const l=j["thinking.delta"];l&&l(o,e,t);return}const r=o.delta,d=o.messageId||i,c=`thinking:${d}`;$.drainAllExcept(c),$.append(c,r,l=>{const{appendThinking:g}=e();d&&g(d,l)});return}if(n.type==="subagent.delta"){const{currentSessionId:s}=e();if(o.sessionId!==s)return;const i=o.delta;if(!i)return;const r=o.subagentSessionId||"",d=`subagent:${r}`,{currentAssistantMessageId:c,messages:l}=e(),g=b(l,r||void 0,c);$.append(d,i,I=>{const{currentAssistantMessageId:m,messages:S,updateSubagent:y}=e(),h=g||b(S,r||void 0,m);h&&y(h.messageId,h.subagent.id,f=>({sessionId:f.sessionId||r,output:(f.output||"")+I}))});return}if(n.type==="subagent.thinking.delta"){const{currentSessionId:s}=e();if(o.sessionId!==s)return;const i=o.delta;if(!i)return;const r=o.subagentSessionId||"",d=`subagent-thinking:${r}`,{currentAssistantMessageId:c,messages:l}=e(),g=b(l,r||void 0,c);$.append(d,i,I=>{const{currentAssistantMessageId:m,messages:S,updateSubagent:y}=e(),h=g||b(S,r||void 0,m);h&&y(h.messageId,h.subagent.id,f=>({sessionId:f.sessionId||r,thinking:(f.thinking||"")+I}))});return}const u=j[n.type];u&&u(n.properties,e,t)};export{ve as a,oe as b,P as c,be as d,Pe as e,Ht as f,N as g,$ as h,Re as i,Lt as j,Ae as k,_ as l,Jt as t,ue as u,B as w};
22
+ `)}]}))},ft=(e,t,n)=>{const{currentSessionId:a,setConfirmation:o}=t();if(e.sessionId!==a)return;const u=e.requestId||"",s=v(t,n,u?`assistant-permission-${u}`:void 0);if(!s)return;const i=e.details,r=e.toolName||(i==null?void 0:i.toolName)||"Tool";o(s,{toolCallId:u,toolName:r,description:e.description,diff:(i==null?void 0:i.details)||(i==null?void 0:i.diff)||"",allowRemember:(i==null?void 0:i.type)!=="mcpSampling",status:"pending"}),n(d=>({agentPhase:"waiting_permission",isStreaming:!0,sessions:d.sessions.map(c=>c.sessionId===e.sessionId&&c.projectPath===e.projectPath?{...c,pendingInteraction:{type:"permission",requestId:u}}:c)}))},It=(e,t,n)=>{var I,m;const{currentSessionId:a,currentSessionRef:o,messages:u,setConfirmation:s,setElicitation:i}=t();if(e.sessionId!==a)return;const r=e.requestId,d=u.find(S=>{var y,h;return((h=(y=S.agentContent)==null?void 0:y.confirmation)==null?void 0:h.toolCallId)===r}),c=(I=d==null?void 0:d.agentContent)==null?void 0:I.confirmation;d&&(c==null?void 0:c.status)==="pending"&&s(d.id,{...c,status:"denied"});const l=u.find(S=>{var y,h;return((h=(y=S.agentContent)==null?void 0:y.elicitation)==null?void 0:h.toolCallId)===r}),g=(m=l==null?void 0:l.agentContent)==null?void 0:m.elicitation;l&&(g==null?void 0:g.status)==="pending"&&i(l.id,{...g,status:"cancelled"}),n({agentPhase:"running",error:"Permission request timed out",errorContext:{kind:"interaction",...o?{sessionRef:o}:{}}})},ae=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",isStreaming:!0})},St=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:e.reason==="context_limit"?"recovering_context":"compacting"})},ht=(e,t,n)=>{e.sessionId===t().currentSessionId&&(t().resetContextUsage(),n({agentPhase:"running"}))},yt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"switching_model",providerAdmission:null,providerCircuit:null,providerRetry:null,providerStall:null,actionStationarity:null})},Ct=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerAdmission:e.phase==="queued"?e:null})},bt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerCircuit:e.phase==="closed"?null:e})},vt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerRetry:e.phase==="recovered"?null:e})},At=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerStall:e.phase==="detected"?e:null})},kt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",actionStationarity:e.phase==="recovered"?null:e})},Tt=(e,t,n)=>{const{currentSessionId:a,setQuestion:o}=t();if(e.sessionId!==a)return;const u=e.requestId||e.toolCallId||"",s=v(t,n,u?`assistant-question-${u}`:void 0);s&&(o(s,{toolCallId:u,questions:e.questions,status:"pending"}),n(i=>({agentPhase:"waiting_permission",isStreaming:!0,sessions:i.sessions.map(r=>r.sessionId===e.sessionId&&r.projectPath===e.projectPath?{...r,pendingInteraction:{type:"question",requestId:u}}:r)})))},$t=(e,t,n)=>{const{currentSessionId:a,setElicitation:o}=t();if(e.sessionId!==a)return;const u=e.requestId||e.toolCallId||"",s=v(t,n,u?`assistant-elicitation-${u}`:void 0),i=e.elicitation;!s||!i||(o(s,{toolCallId:u,details:i,status:"pending"}),n(r=>({agentPhase:"waiting_permission",isStreaming:!0,sessions:r.sessions.map(d=>d.sessionId===e.sessionId&&d.projectPath===e.projectPath?{...d,pendingInteraction:{type:"elicitation",requestId:u}}:d)})))},Nt=(e,t,n)=>{const{currentSessionId:a}=t();if(e.sessionId!==a)return;const o=e.requestId;n(u=>({agentPhase:"running",sessions:u.sessions.map(s=>{var i;return s.sessionId===e.sessionId&&s.projectPath===e.projectPath&&((i=s.pendingInteraction)==null?void 0:i.requestId)===o?{...s,pendingInteraction:void 0}:s})}))},Y=(e,t)=>{const n=t().currentSessionRef;n&&e.sessionId===n.sessionId&&e.projectPath===n.projectPath&&t().resyncSessionMessages(n)},Pt=(e,t)=>{const{currentSessionId:n,currentSessionRef:a,endAgentResponse:o}=t();e.sessionId!==n||!a||e.projectPath!==a.projectPath||(o(),Y(e,t))},re=(e,t)=>{const n=t().currentSessionRef;!n||e.sessionId!==n.sessionId||e.projectPath!==n.projectPath||t().endAgentResponse()},Mt=(e,t,n)=>{const{currentSessionId:a,currentSessionRef:o,endAgentResponse:u}=t();if(e.sessionId!==a)return;const s=e.taskFailure&&typeof e.taskFailure=="object"&&!Array.isArray(e.taskFailure)?e.taskFailure:void 0,i=Re(s==null?void 0:s.code);n({agentPhase:"error",error:e.error||"An error occurred",errorContext:{kind:"execution",...o?{sessionRef:o}:{},...i?{failureCode:i}:{}}}),u(),Y(e,t)},Rt=(e,t,n)=>{const{currentSessionId:a}=t();if(e.sessionId===a)if(e.status==="idle")n({isStreaming:!1,isStopping:!1,agentPhase:"idle",providerAdmission:null,providerCircuit:null,providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null,recoveredSteeringCount:0});else if(e.status==="queued"||e.status==="running"||e.status==="waiting_permission"){const o=typeof e.queued=="number"?Math.max(0,e.queued):0;n({isStreaming:!0,agentPhase:e.status==="waiting_permission"?"waiting_permission":"running",currentRunId:typeof e.runId=="string"?e.runId:t().currentRunId,pendingSteeringCount:o,pendingInputDelivery:o>0&&(e.pendingInputDelivery==="current_turn"||e.pendingInputDelivery==="next_turn")?e.pendingInputDelivery:null,recoveredSteeringCount:typeof e.recovered=="number"?Math.max(0,e.recovered):t().recoveredSteeringCount})}else e.status==="error"&&n({isStreaming:!1,isStopping:!1,agentPhase:"error",providerAdmission:null,providerCircuit:null,providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null})},xt=(e,t,n)=>{const{currentSessionId:a,endAgentResponse:o,messages:u,updateSubagent:s}=t();if(e.sessionId===a){n(i=>({isStreaming:!1,agentPhase:"idle",messages:i.messages.map(r=>{var c;const d=(c=r.agentContent)==null?void 0:c.elicitation;return(d==null?void 0:d.status)!=="pending"||!r.agentContent?r:{...r,agentContent:{...r.agentContent,elicitation:{...d,status:"cancelled"}}}})}));for(const i of u)for(const r of N(i.agentContent))r.status==="running"&&s(i.id,r.id,{status:"failed"});o(),Y(e,t)}},Se=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({pendingSteeringCount:typeof e.queued=="number"?Math.max(0,e.queued):1,pendingInputDelivery:"current_turn"})},he=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({pendingSteeringCount:typeof e.queued=="number"?Math.max(0,e.queued):1,pendingInputDelivery:"next_turn"})},Dt=(e,t,n)=>{if(typeof e.childSessionId=="string"){const a={...e,subagentSessionId:e.childSessionId,success:e.status==="completed"};b(t().messages,e.childSessionId,t().currentAssistantMessageId)?W(a,t):je(e.childSessionId,a,n)}e.delivery==="current_turn"?Se(e,t,n):he(e,t,n)},wt=(e,t,n)=>{if(e.sessionId!==t().currentSessionId)return;const a=typeof e.queued=="number"?Math.max(0,e.queued):0;n({pendingSteeringCount:a,pendingInputDelivery:a>0?t().pendingInputDelivery:null,recoveredSteeringCount:typeof e.recovered=="number"?Math.max(0,e.recovered):t().recoveredSteeringCount})},jt=(e,t,n)=>{if(e.sessionId!==t().currentSessionId)return;const a=typeof e.queued=="number"?Math.max(0,e.queued):0;n({agentPhase:"running",pendingSteeringCount:a,pendingInputDelivery:a>0?"current_turn":null,recoveredSteeringCount:typeof e.recovered=="number"?Math.max(0,e.recovered):t().recoveredSteeringCount})},_t=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:e.goal??null})},qt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:null})},Ft=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:e.goal??t().goal,isStreaming:!0,agentPhase:"running"})},Ot=(e,t,n)=>{if(e.sessionId!==t().currentSessionId||!Array.isArray(e.messages))return;const a=Date.now(),o=e.messages.flatMap((u,s)=>{if(typeof u!="object"||u===null)return[];const i=u;return!["user","assistant","system","tool"].includes(String(i.role))||!Array.isArray(i.content)&&typeof i.content!="string"?[]:[{id:`rewind-${s}-${a}`,role:i.role,content:i.content,timestamp:a+s,metadata:typeof i.metadata=="object"&&i.metadata!==null?i.metadata:void 0,thinkingContent:typeof i.thinkingContent=="string"?i.thinkingContent:typeof i.reasoningContent=="string"?i.reasoningContent:void 0,tool_call_id:typeof i.tool_call_id=="string"?i.tool_call_id:void 0,name:typeof i.name=="string"?i.name:void 0,tool_calls:i.tool_calls}]});n({messages:Pe(o),isStreaming:!1,isStopping:!1,agentPhase:"idle",providerAdmission:null,providerCircuit:null,providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null,recoveredSteeringCount:0,currentAssistantMessageId:null,hasToolCalls:!1})},Et=(e,t,n)=>{const a=t().currentSessionRef;if(!a||e.sessionId!==a.sessionId||e.projectPath!==a.projectPath)return;const o=e.status,u=o==="completed"||o==="stale"?"completed":o==="aborted"?"cancelled":o==="interrupted"?"interrupted":"failed";n(s=>({sessions:s.sessions.map(i=>i.sessionId===a.sessionId&&i.projectPath===a.projectPath?{...i,taskStatus:u,taskStatusReason:void 0,taskFailure:void 0,taskCompletedAt:new Date().toISOString()}:i)})),t().selectSession(a)},Vt=(e,t,n)=>{ge({...e,messageId:`review-${String(e.reviewId??"active")}`,arguments:"{}"},t,n)},Kt=(e,t,n)=>{fe(e,t)},Ut=(e,t,n)=>{Ie(e,t,n)},j={"message.created":_e,"message.delta":qe,"message.complete":Fe,"structured.output":Oe,"thinking.delta":Ee,"thinking.completed":Ve,"tool.start":ge,"tool.progress":fe,"tool.result":Ie,"mcp.catalog.changed":Ke,"mcp.content.changed":Ue,"mcp.resource.updated":Be,"mcp.connection.changed":Je,"mcp.log":Le,"mcp.instructions.changed":He,"mcp.task.changed":Ge,"project.rules.loaded":Qe,"user.shell.started":ze,"user.shell.output":We,"user.shell.completed":Ye,"token.usage":Xe,"task.updated":Ze,"subagent.start":pe,"subagent.update":et,"subagent.delta":tt,"subagent.thinking.delta":nt,"subagent.tool.start":st,"subagent.tool.progress":ot,"subagent.tool.result":it,"subagent.mcp.catalog.changed":at,"subagent.mcp.content.changed":rt,"subagent.mcp.resource.updated":ut,"subagent.mcp.connection.changed":dt,"subagent.mcp.log":lt,"subagent.mcp.instructions.changed":ct,"subagent.mcp.task.changed":gt,"subagent.project.rules.loaded":mt,"subagent.complete":W,"subagent.completion.queued":Dt,"permission.asked":ft,"permission.timeout":It,"turn.started":ae,"committed.turn_started":ae,"committed.turn_completed":re,"committed.turn_aborted":re,"provider.admission":Ct,"provider.circuit":bt,"provider.retry":vt,"provider.stall":At,"action.stationarity":kt,"compaction.started":St,"compaction.completed":ht,"model.fallback":yt,"question.required":Tt,"elicitation.required":$t,"interaction.resolved":Nt,"session.completed":Pt,"session.error":Mt,"session.status":Rt,"run.cancelled":xt,"steering.queued":Se,"follow_up.queued":he,"follow_up.started":jt,"steering.applied":wt,"goal.updated":_t,"goal.cleared":qt,"goal.continuation.started":Ft,"session.rewound":Ot,"review.tool.started":Vt,"review.tool.progress":Kt,"review.tool.completed":Ut,"review.completed":Et},Bt=new Set(["message.complete","thinking.completed","session.completed","session.error","run.cancelled","committed.turn_completed","committed.turn_aborted"]),Gt=(e,t)=>n=>{const a=e().currentSessionRef,o=n.properties;if(!a||o.sessionId!==a.sessionId||o.projectPath!==a.projectPath)return;if(Bt.has(n.type)){$.drainAll();const s=j[n.type];s&&s(n.properties,e,t);return}if(n.type==="tool.start"&&$.drainAll(),n.type==="message.delta"){const{currentSessionId:s,currentAssistantMessageId:i,hasToolCalls:r}=e();if(o.sessionId!==s)return;const d=o.messageId||i,c=o.delta;if(!i){const I=j["message.delta"];I&&I(o,e,t);return}const l=r?"after":"before",g=`content:${d}:${l}`;$.drainAllExcept(g),$.append(g,c,I=>{const{appendDelta:m}=e();d&&m(d,I,l)});return}if(n.type==="thinking.delta"){const{currentSessionId:s,currentAssistantMessageId:i}=e();if(o.sessionId!==s)return;if(!i){const l=j["thinking.delta"];l&&l(o,e,t);return}const r=o.delta,d=o.messageId||i,c=`thinking:${d}`;$.drainAllExcept(c),$.append(c,r,l=>{const{appendThinking:g}=e();d&&g(d,l)});return}if(n.type==="subagent.delta"){const{currentSessionId:s}=e();if(o.sessionId!==s)return;const i=o.delta;if(!i)return;const r=o.subagentSessionId||"",d=`subagent:${r}`,{currentAssistantMessageId:c,messages:l}=e(),g=b(l,r||void 0,c);$.append(d,i,I=>{const{currentAssistantMessageId:m,messages:S,updateSubagent:y}=e(),h=g||b(S,r||void 0,m);h&&y(h.messageId,h.subagent.id,f=>({sessionId:f.sessionId||r,output:(f.output||"")+I}))});return}if(n.type==="subagent.thinking.delta"){const{currentSessionId:s}=e();if(o.sessionId!==s)return;const i=o.delta;if(!i)return;const r=o.subagentSessionId||"",d=`subagent-thinking:${r}`,{currentAssistantMessageId:c,messages:l}=e(),g=b(l,r||void 0,c);$.append(d,i,I=>{const{currentAssistantMessageId:m,messages:S,updateSubagent:y}=e(),h=g||b(S,r||void 0,m);h&&y(h.messageId,h.subagent.id,f=>({sessionId:f.sessionId||r,thinking:(f.thinking||"")+I}))});return}const u=j[n.type];u&&u(n.properties,e,t)};export{ve as a,oe as b,P as c,be as d,Pe as e,Gt as f,N as g,$ as h,Re as i,Ht as j,Ae as k,_ as l,Lt as t,ue as u,B as w};
@@ -5,11 +5,11 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>BladeCode</title>
8
- <script type="module" crossorigin src="/assets/index-Dwm-v3BV.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-CthLsVgC.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-DG5dkZ_t.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/vendor-radix-DXRuAJHH.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/vendor-icons-ICv1v-tf.js">
12
- <link rel="modulepreload" crossorigin href="/assets/session-events-Yagzv-3E.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/session-events-109FkhOM.js">
13
13
  <link rel="stylesheet" crossorigin href="/assets/index-7zaeanZL.css">
14
14
  </head>
15
15
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blade-code",
3
- "version": "0.10.39",
3
+ "version": "0.10.41",
4
4
  "private": false,
5
5
  "description": "🗡️ Blade Code - 智能代码助手命令行工具",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- import{Nd as a}from"./chunk-83mfrs3p.js";import"./chunk-bvdk0hb2.js";import"./chunk-byekf2bq.js";import"./chunk-fjcmx039.js";import"./chunk-e09g9a7d.js";import"./chunk-29abk8tj.js";import"./chunk-kah7p2zm.js";export{a as createChatServiceAsync};
@@ -1,44 +0,0 @@
1
- import{Bf as En,Cf as j,Df as T}from"./chunk-93jx06kq.js";import{Hf as Qn,If as kn}from"./chunk-thstqcg3.js";import{Nf as L}from"./chunk-6360fg4j.js";import{Of as Cn,Pf as ot,Qf as ct,Uf as At,Vf as In,Wf as bt,Xf as wt,Yf as Lt}from"./chunk-bvdk0hb2.js";import{ag as dn}from"./chunk-byekf2bq.js";import{dg as Tt,gg as J}from"./chunk-fjcmx039.js";import{og as wn,pg as Ln}from"./chunk-gkc69333.js";import{tg as a}from"./chunk-nh43dgpd.js";import{Dg as mn}from"./chunk-29abk8tj.js";var Pt=/^[\x21\x23-\x5b\x5d-\x7e]+$/;function ft(n){return n==="127.0.0.1"||n==="[::1]"||n.toLowerCase()==="localhost"}function z(n,t="MCP OAuth URL"){let M=new URL(n);if(M.username||M.password)throw Error(`${t} must not contain credentials`);if(M.protocol!=="https:"&&!(M.protocol==="http:"&&ft(M.hostname)))throw Error(`${t} requires HTTPS; HTTP is allowed only for loopback servers`);return M}var q=async(n,t)=>{z(n,"MCP OAuth request URL");let M=await fetch(n,{...t,redirect:"manual"});if(M.status>=300&&M.status<400)throw await M.body?.cancel(),Error("MCP OAuth network requests must not follow redirects");return M};function O(n){let t=n.oauth;if(!t)return;let M=t;for(let S of["clientSecret","authorizationUrl","tokenUrl","redirectUri"])if(M[S]!==void 0)throw Error(`MCP OAuth "${S}" is not supported; use standards-based discovery`);if(t.enabled!==!0)return{enabled:!1};if(n.type!=="http"&&n.type!=="sse")throw Error("MCP OAuth is supported only for HTTP and SSE transports");if(!n.url)throw Error("MCP OAuth requires an MCP server URL");if(z(n.url,"MCP OAuth server URL"),Object.keys(n.headers??{}).find((S)=>S.toLowerCase()==="authorization"))throw Error("MCP OAuth cannot be combined with a configured Authorization header");let e=t.clientId?.trim();if(e&&e.length>4096)throw Error("MCP OAuth clientId exceeds 4096 characters");let _=t.scopes?.map((S)=>S.trim());if(_){if(_.length>32)throw Error("MCP OAuth supports at most 32 scopes");if(_.some((S)=>!S||S.length>128||!Pt.test(S)))throw Error("MCP OAuth scopes contain an invalid value");if(new Set(_).size!==_.length)throw Error("MCP OAuth scopes must not contain duplicates")}let u=t.callbackPort;if(u!==void 0&&(!Number.isInteger(u)||u<1024||u>65535))throw Error("MCP OAuth callbackPort must be between 1024 and 65535");return{enabled:!0,...e?{clientId:e}:{},..._?.length?{scopes:_}:{},...u!==void 0?{callbackPort:u}:{}}}import{randomUUID as F}from"node:crypto";import Rt from"node:http";import{auth as on}from"@modelcontextprotocol/sdk/client/auth.js";import Bt from"open";import{createHash as xt,randomUUID as at}from"node:crypto";import{constants as Q,promises as f}from"node:fs";import k from"node:path";import{Mutex as dt}from"async-mutex";import it from"write-file-atomic";var sn=1,$t=1048576,gt=5000,Xt=50,Ct=/^[a-f0-9]{64}$/,It=T.Object({client_id:T.String({minLength:1,maxLength:4096})},{additionalProperties:!0}),Nt=T.Object({access_token:T.String({minLength:1,maxLength:65536}),token_type:T.String({minLength:1,maxLength:64}),expires_in:T.Optional(T.Number({minimum:0})),refresh_token:T.Optional(T.String({minLength:1,maxLength:65536})),scope:T.Optional(T.String({maxLength:16384})),id_token:T.Optional(T.String({minLength:1,maxLength:262144}))},{additionalProperties:!1}),ht=T.Unsafe({type:"object",properties:{authorizationServerUrl:T.String({format:"uri"}),resourceMetadataUrl:T.Optional(T.String({format:"uri"})),resourceMetadata:T.Optional(T.Unknown()),authorizationServerMetadata:T.Optional(T.Unknown())},required:["authorizationServerUrl"],additionalProperties:!1}),Tn=T.Object({serverUrl:T.String({format:"uri"}),clientId:T.Optional(T.String({minLength:1,maxLength:4096})),clientInformation:T.Optional(It),tokens:T.Optional(Nt),tokenExpiresAt:T.Optional(T.Number({minimum:0})),discoveryState:T.Optional(ht),updatedAt:T.String({format:"date-time"})},{additionalProperties:!1}),_n=T.Object({version:T.Literal(sn),credentials:T.Record(T.String(),Tn)},{additionalProperties:!1});function H(n,t){return n instanceof Error&&"code"in n&&n.code===t}function zt(n){if(!Number.isInteger(n)||n<=0)return!1;try{return process.kill(n,0),!0}catch(t){return H(t,"EPERM")}}function D(n){return structuredClone(n)}function Sn(n){if(Object.keys(n.credentials).some((t)=>!Ct.test(t)))throw Error("MCP OAuth credential store contains an invalid identity")}function U(n){let t=new URL(n);return t.hash="",t.toString()}function l(n,t,M=[]){return xt("sha256").update(JSON.stringify({serverUrl:U(n),clientId:t?.trim()||null,scopes:[...M].sort()})).digest("hex")}class g{static mutexes=new Map;stateRoot;tokenFilePath;mutex;constructor(n=mn()){this.stateRoot=k.join(n,"mcp"),this.tokenFilePath=k.join(this.stateRoot,"oauth-credentials.json");let t=g.mutexes.get(this.tokenFilePath);if(!t)t=new dt,g.mutexes.set(this.tokenFilePath,t);this.mutex=t}async getCredential(n){return this.mutex.runExclusive(async()=>{let M=(await this.readStore()).credentials[n];return M?D(M):null})}async updateCredential(n,t){return this.runMutation(async(M)=>{let r=M.credentials[n],e=await t(r?D(r):null);if(e)M.credentials[n]=j(Tn,e);else delete M.credentials[n];return e?D(M.credentials[n]):null})}async deleteCredential(n){await this.updateCredential(n,()=>null)}async listCredentialIds(){return this.mutex.runExclusive(async()=>Object.keys((await this.readStore()).credentials).sort())}async runMutation(n){return this.mutex.runExclusive(async()=>{let t=await this.acquireStoreLock();try{let M=await this.readStore(),r=await n(M);return await this.writeStore(M),r}finally{await t()}})}async ensureStateRoot(){await f.mkdir(this.stateRoot,{recursive:!0,mode:448});let n=await f.lstat(this.stateRoot);if(!n.isDirectory()||n.isSymbolicLink())throw Error("MCP OAuth credential root must be a regular directory");if(process.getuid&&n.uid!==process.getuid())throw Error("MCP OAuth credential root must be owned by the current user");if((n.mode&63)!==0)throw Error("MCP OAuth credential root permissions must not allow group access")}async readStore(){try{let n=await f.lstat(this.tokenFilePath);if(!n.isFile()||n.isSymbolicLink())throw Error("MCP OAuth credential store must be a regular file");if(process.getuid&&n.uid!==process.getuid())throw Error("MCP OAuth credential store must be owned by the current user");if((n.mode&511)!==384)throw Error("MCP OAuth credential store permissions must be 0600");if(n.size>$t)throw Error("MCP OAuth credential store exceeds the 1 MiB limit");let t=JSON.parse(await f.readFile(this.tokenFilePath,"utf8")),M=En(_n,t);if(!M.success)throw Error("MCP OAuth credential store has an invalid schema");return Sn(M.data),M.data}catch(n){if(H(n,"ENOENT"))return{version:sn,credentials:{}};throw n}}async writeStore(n){await this.ensureStateRoot();let t=j(_n,n);Sn(t),await it(this.tokenFilePath,`${JSON.stringify(t,null,2)}
2
- `,{mode:384,encoding:"utf8"}),await f.chmod(this.tokenFilePath,384)}async acquireStoreLock(){await this.ensureStateRoot();let n=k.join(this.stateRoot,".oauth-credentials.lock"),t=at(),M=Date.now()+gt;while(Date.now()<M)try{let r=await f.open(n,Q.O_CREAT|Q.O_EXCL|Q.O_WRONLY,384);return await r.writeFile(`${JSON.stringify({version:1,pid:process.pid,token:t,createdAt:new Date().toISOString()})}
3
- `,"utf8"),await r.close(),async()=>{try{if(JSON.parse(await f.readFile(n,"utf8")).token===t)await f.unlink(n)}catch(e){if(!H(e,"ENOENT"))throw e}}}catch(r){if(!H(r,"EEXIST"))throw r;await this.removeDeadLock(n),await new Promise((e)=>setTimeout(e,Xt))}throw Error("MCP OAuth credential store is busy; retry the operation")}async removeDeadLock(n){let t=await f.lstat(n);if(!t.isFile()||t.isSymbolicLink())throw Error("MCP OAuth credential lock must be a regular file");if(process.getuid&&t.uid!==process.getuid()||(t.mode&511)!==384)throw Error("MCP OAuth credential lock ownership or permissions are invalid");let M=JSON.parse(await f.readFile(n,"utf8"));if(typeof M.pid!=="number"||!Number.isInteger(M.pid)||M.pid<=0)throw Error("MCP OAuth credential lock owner is invalid");if(!zt(M.pid))await f.unlink(n)}}var cn="127.0.0.1",An=7777,bn="/oauth/callback",Kt=300000;class v extends Error{constructor(n){super(`MCP server "${n}" requires OAuth authorization; run "blade mcp login ${n}" or use the Web MCP panel`);this.name="McpOAuthAuthorizationRequiredError"}}class Pn extends Error{constructor(n){super(`MCP OAuth credentials are unavailable in this runtime for server "${n}"`);this.name="McpOAuthUnavailableError"}}function pt(n){let t=n?"Authentication complete":"Authentication failed";return`<!doctype html>
4
- <html lang="en">
5
- <head>
6
- <meta charset="utf-8">
7
- <meta name="viewport" content="width=device-width,initial-scale=1">
8
- <title>${t}</title>
9
- </head>
10
- <body>
11
- <main>
12
- <h1>${t}</h1>
13
- <p>${n?"You can close this window and return to Blade.":"Return to Blade and retry the OAuth login."}</p>
14
- </main>
15
- </body>
16
- </html>`}function R(n,t,M){n.writeHead(t,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","Content-Security-Policy":"default-src 'none'; style-src 'unsafe-inline'","X-Content-Type-Options":"nosniff","Referrer-Policy":"no-referrer"}),n.end(pt(M))}class X{serverName;config;static activeFlowIdentity;tokenStorage;serverUrl;identity;callbackUrl;openAuthorizationUrl;codeVerifierValue;activeFlow;lastError;constructor(n,t,M,r={}){this.serverName=n;this.config=M;this.serverUrl=U(t),this.identity=l(this.serverUrl,M.clientId,M.scopes),this.tokenStorage=r.tokenStorage??new g;let e=M.callbackPort??An;this.callbackUrl=`http://${cn}:${e}${bn}`,this.openAuthorizationUrl=r.openAuthorizationUrl??(async(_)=>{await Bt(_,{wait:!1})})}get redirectUrl(){return this.callbackUrl}get clientMetadata(){return{redirect_uris:[this.callbackUrl],token_endpoint_auth_method:"none",grant_types:["authorization_code","refresh_token"],response_types:["code"],client_name:`${Ln()} ${wn()}`,...this.config.scopes?.length?{scope:this.config.scopes.join(" ")}:{}}}async state(){return this.activeFlow?.state??F()}async clientInformation(){if(this.config.clientId)return{client_id:this.config.clientId};return(await this.readCredential())?.clientInformation}async saveClientInformation(n){await this.updateCredential((t)=>({...this.baseCredential(t),clientInformation:n}))}async tokens(){let n=await this.readCredential();if(!n?.tokens)return;if(n.tokenExpiresAt!==void 0&&n.tokenExpiresAt<=Date.now()&&!n.tokens.refresh_token)return;return structuredClone(n.tokens)}async saveTokens(n){let t=n.expires_in===void 0?void 0:Date.now()+n.expires_in*1000;await this.updateCredential((M)=>({...this.baseCredential(M),tokens:structuredClone(n),...t===void 0?{}:{tokenExpiresAt:t}})),this.lastError=void 0}async redirectToAuthorization(n){let t=this.activeFlow;if(!t)throw new v(this.serverName);t.authorizationUrl=z(n,"MCP OAuth authorization URL").toString()}async saveCodeVerifier(n){this.codeVerifierValue=n}async codeVerifier(){if(!this.codeVerifierValue)throw Error("MCP OAuth PKCE verifier is unavailable");return this.codeVerifierValue}async saveDiscoveryState(n){await this.updateCredential((t)=>({...this.baseCredential(t),discoveryState:structuredClone(n)}))}async discoveryState(){let n=(await this.readCredential())?.discoveryState;return n?structuredClone(n):void 0}async invalidateCredentials(n){if(n==="verifier"){this.codeVerifierValue=void 0;return}if(n==="all"){await this.tokenStorage.deleteCredential(this.identity),this.codeVerifierValue=void 0;return}await this.updateCredential((t)=>{if(!t)return null;let M={...t};if(n==="client")delete M.clientInformation,delete M.tokens,delete M.tokenExpiresAt;else if(n==="tokens")delete M.tokens,delete M.tokenExpiresAt;else if(n==="discovery")delete M.discoveryState;return{...M,updatedAt:new Date().toISOString()}})}async getStatus(){if(this.activeFlow)return"authorizing";if(this.lastError)return"error";return await this.hasUsableCredentials()?"authenticated":"unauthenticated"}async hasUsableCredentials(){let n=await this.readCredential();if(!n?.tokens?.access_token)return!1;if(n.tokenExpiresAt===void 0||n.tokenExpiresAt>Date.now())return!0;return Boolean(n.tokens.refresh_token)}async beginAuthorization(){if(this.activeFlow)return this.toHandle(this.activeFlow);if(await this.hasUsableCredentials())throw Error(`MCP server "${this.serverName}" already has OAuth credentials`);if(X.activeFlowIdentity)throw Error("Another MCP OAuth authorization is already in progress");X.activeFlowIdentity=this.identity,this.lastError=void 0,this.codeVerifierValue=void 0;try{let n=await this.createFlow();if(this.activeFlow=n,await on(this,{serverUrl:this.serverUrl,fetchFn:q})!=="REDIRECT"||!n.authorizationUrl)throw Error("MCP OAuth server did not start an authorization redirect");return this.toHandle(n)}catch(n){let t=n instanceof Error?n:Error(String(n));throw await this.failActiveFlow(t),t}}async openAuthorization(){let n=await this.beginAuthorization();return await this.openAuthorizationUrl(n.authorizationUrl),n}async logout(){if(this.activeFlow)await this.failActiveFlow(Error("MCP OAuth authorization cancelled"));await this.tokenStorage.deleteCredential(this.identity),this.codeVerifierValue=void 0,this.lastError=void 0}async dispose(){if(this.activeFlow)await this.failActiveFlow(Error("MCP OAuth authorization cancelled"))}async createFlow(){let n,t,M=new Promise((u,S)=>{n=u,t=S});M.catch(()=>{return});let r=F(),e=Rt.createServer((u,S)=>{this.handleCallback(u,S)});e.on("clientError",(u,S)=>{S.end(`HTTP/1.1 400 Bad Request\r
17
- Connection: close\r
18
- \r
19
- `)}),await new Promise((u,S)=>{let m=(s)=>S(s);e.once("error",m),e.listen(this.config.callbackPort??An,cn,()=>{e.off("error",m),u()})});let _={flowId:F(),state:r,callbackUrl:this.callbackUrl,server:e,timeout:setTimeout(()=>{this.failActiveFlow(Error("MCP OAuth authorization timed out"))},Kt),completion:M,resolve:n,reject:t,settled:!1};return _.timeout.unref(),_}async handleCallback(n,t){let M=this.activeFlow;if(!M){R(t,410,!1);return}try{if(n.method!=="GET"){t.setHeader("Allow","GET"),R(t,405,!1);return}let r=new URL(n.url??"/",M.callbackUrl);if(r.pathname!==bn){R(t,404,!1);return}let e=r.searchParams.get("state"),_=r.searchParams.get("code");if(r.searchParams.get("error"))throw Error("MCP OAuth authorization was denied");if(!e||e!==M.state)throw Error("MCP OAuth state mismatch");if(!_)throw Error("MCP OAuth callback is missing the authorization code");if(await on(this,{serverUrl:this.serverUrl,authorizationCode:_,fetchFn:q})!=="AUTHORIZED")throw Error("MCP OAuth token exchange did not complete");R(t,200,!0),await this.completeActiveFlow()}catch(r){R(t,400,!1),await this.failActiveFlow(r instanceof Error?r:Error(String(r)))}}async completeActiveFlow(){let n=this.activeFlow;if(!n||n.settled)return;n.settled=!0,clearTimeout(n.timeout),await new Promise((t)=>n.server.close(()=>t())),this.activeFlow=void 0,X.activeFlowIdentity=void 0,this.codeVerifierValue=void 0,this.lastError=void 0,n.resolve()}async failActiveFlow(n){let t=this.activeFlow;if(this.lastError=n,this.codeVerifierValue=void 0,X.activeFlowIdentity=void 0,!t||t.settled){this.activeFlow=void 0;return}t.settled=!0,clearTimeout(t.timeout),await new Promise((M)=>t.server.close(()=>M())),this.activeFlow=void 0,t.reject(n)}toHandle(n){if(!n.authorizationUrl)throw Error("MCP OAuth authorization URL is unavailable");return{flowId:n.flowId,authorizationUrl:n.authorizationUrl,callbackUrl:n.callbackUrl,completion:n.completion}}readCredential(){return this.tokenStorage.getCredential(this.identity)}updateCredential(n){return this.tokenStorage.updateCredential(this.identity,n)}baseCredential(n){return{...n??{},serverUrl:this.serverUrl,...this.config.clientId?{clientId:this.config.clientId}:{},updatedAt:new Date().toISOString()}}}import{promises as G}from"node:fs";import fn from"node:os";import i from"node:path";import{Mutex as xn}from"async-mutex";import{merge as qt}from"lodash-es";import Ht from"write-file-atomic";var an=dn("Service"),C={models:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},modelProviders:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},currentModelId:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},temperature:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},maxOutputTokens:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},timeout:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},bashForegroundHandoffMs:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},providerForegroundRecoveryMs:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},providerCircuitBreakerOpenMs:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},codeTheme:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},uiTheme:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},language:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},debug:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},fontSize:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},autoSaveSessions:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},notifyBuild:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},notifyErrors:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},notifySounds:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},privacyTelemetry:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},privacyCrash:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},communicationStyle:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},permissionMode:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},permissions:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},hooks:{target:"settings",defaultScope:"local",mergeStrategy:"deep-merge",persistable:!0},enabledPlugins:{target:"settings",defaultScope:"local",mergeStrategy:"deep-merge",persistable:!0},pluginSourcePolicy:{target:"settings",defaultScope:"global",mergeStrategy:"replace",persistable:!0},env:{target:"settings",defaultScope:"local",mergeStrategy:"deep-merge",persistable:!0},disableAllHooks:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},maxTurns:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},maxConcurrentTasks:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},maxQueuedTasks:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!0},mcpServers:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},lspServers:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!0},stream:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},topP:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},topK:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},mcpEnabled:{target:"config",defaultScope:"global",mergeStrategy:"replace",persistable:!1},systemPrompt:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},appendSystemPrompt:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},initialMessage:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},resumeSessionId:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},forkSession:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},allowedTools:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},disallowedTools:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},mcpConfigPaths:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},strictMcpConfig:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},addDirs:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},outputFormat:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},inputFormat:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},print:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},includePartialMessages:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},replayUserMessages:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},agentsConfig:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1},settingSources:{target:"settings",defaultScope:"local",mergeStrategy:"replace",persistable:!1}},VM=new Set(Object.entries(C).filter(([n,t])=>t.persistable).map(([n])=>n)),yM=new Set(Object.entries(C).filter(([n,t])=>!t.persistable).map(([n])=>n));class x{static instance=null;pendingUpdates=new Map;timers=new Map;fileLocks=new Map;lastSaveError=null;debounceDelay=300;constructor(){}static getInstance(){if(!x.instance)x.instance=new x;return x.instance}static resetInstance(){if(x.instance)for(let n of x.instance.timers.values())clearTimeout(n);x.instance=null}async save(n,t={}){this.validatePersistableFields(n);let M=this.groupUpdatesByTarget(n,t.scope,t.projectDir);if(t.immediate)await Promise.all(Array.from(M.entries()).map(([r,e])=>this.flushTarget(r,e)));else for(let[r,e]of M)this.scheduleSave(r,e)}async flush(){for(let t of this.timers.values())clearTimeout(t);this.timers.clear();let n=Array.from(this.pendingUpdates.entries()).map(([t,M])=>this.flushTarget(t,M));this.pendingUpdates.clear(),await Promise.all(n)}getLastSaveError(){return this.lastSaveError}clearLastSaveError(){this.lastSaveError=null}async appendPermissionRule(n,t={}){await this.appendPermissionRuleForDecision(n,"allow",t)}async appendPermissionDenyRule(n,t={}){await this.appendPermissionRuleForDecision(n,"deny",t)}async appendPermissionRuleForDecision(n,t,M){let r=M.scope??"local",e=this.resolveFilePath("settings",r,M.projectDir);await this.flushTargetWithModifier(e,(_)=>{let u=_.permissions??{allow:[],ask:[],deny:[]},S={allow:t==="allow"?this.dedupeArray([...u.allow||[],n]):u.allow||[],ask:u.ask||[],deny:t==="deny"?this.dedupeArray([...u.deny||[],n]):u.deny||[]};return{..._,permissions:S}})}async appendLocalPermissionRule(n,t={}){await this.appendPermissionRule(n,{...t,scope:"local"})}async appendLocalPermissionDenyRule(n,t={}){await this.appendPermissionDenyRule(n,{...t,scope:"local"})}async removePluginSetting(n,t={}){let M=t.scope??"local",r=this.resolveFilePath("settings",M,t.projectDir);await this.flushTargetWithModifier(r,(e)=>{let _={...e.enabledPlugins??{}};delete _[n];let u={...e};if(Object.keys(_).length>0)u.enabledPlugins=_;else delete u.enabledPlugins;return u})}validatePersistableFields(n){for(let t of Object.keys(n)){let M=C[t];if(!M)throw Error(`Unknown config field: ${t}`);if(!M.persistable)throw Error(`Field "${t}" is non-persistable and cannot be saved to config files. Non-persistable fields are runtime-only and only valid for the current session.`)}}groupUpdatesByTarget(n,t,M){let r=new Map;for(let[e,_]of Object.entries(n)){let u=C[e];if(!u)continue;let S=t??u.defaultScope,m=this.resolveFilePath(u.target,S,M);if(!r.has(m))r.set(m,{});r.get(m)[e]=_}return r}resolveFilePath(n,t,M){let r=M??L();if(n==="config")return t==="global"?i.join(fn.homedir(),".blade","config.json"):i.join(r,".blade","config.json");switch(t){case"local":return i.join(r,".blade","settings.local.json");case"project":return i.join(r,".blade","settings.json");case"global":return i.join(fn.homedir(),".blade","settings.json");default:return i.join(r,".blade","settings.local.json")}}scheduleSave(n,t){let M=this.pendingUpdates.get(n)??{},r=this.mergePendingUpdates(M,t);this.pendingUpdates.set(n,r);let e=this.timers.get(n);if(e)clearTimeout(e);let _=setTimeout(async()=>{let u=this.pendingUpdates.get(n);if(u){this.pendingUpdates.delete(n),this.timers.delete(n);try{await this.flushTarget(n,u),this.lastSaveError=null}catch(S){let m=S instanceof Error?S:Error(String(S));this.lastSaveError=m,an.error(`Failed to save config to ${n}:`,m.message),an.error("Stack trace:",m.stack)}}},this.debounceDelay);this.timers.set(n,_)}mergePendingUpdates(n,t){let M={...n};for(let[r,e]of Object.entries(t)){let _=C[r];if(!_){M[r]=e;continue}switch(_.mergeStrategy){case"replace":M[r]=e;break;case"append-dedupe":this.applyAppendDedupe(M,r,e);break;case"deep-merge":this.applyDeepMerge(M,r,e);break}}return M}async flushTarget(n,t){let M=this.fileLocks.get(n);if(!M)M=new xn,this.fileLocks.set(n,M);await M.runExclusive(async()=>{await this.performWrite(n,t)})}async flushTargetWithModifier(n,t){let M=this.fileLocks.get(n);if(!M)M=new xn,this.fileLocks.set(n,M);await M.runExclusive(async()=>{await G.mkdir(i.dirname(n),{recursive:!0,mode:493});let r={};try{let _=await G.readFile(n,"utf-8");r=JSON.parse(_)}catch{r={}}let e=t(r);await this.atomicWrite(n,e)})}async performWrite(n,t){await G.mkdir(i.dirname(n),{recursive:!0,mode:493});let M={};try{let e=await G.readFile(n,"utf-8");M=JSON.parse(e)}catch{M={}}let r={...M};if(typeof r.theme==="string"&&r.codeTheme===void 0)r.codeTheme=r.theme;delete r.theme;for(let[e,_]of Object.entries(t)){let u=C[e];if(!u){r[e]=_;continue}switch(u.mergeStrategy){case"replace":r[e]=_;break;case"append-dedupe":this.applyAppendDedupe(r,e,_);break;case"deep-merge":this.applyDeepMerge(r,e,_);break}}await this.atomicWrite(n,r)}applyAppendDedupe(n,t,M){if(t==="permissions"&&typeof M==="object"&&M!==null){let r=n[t]??{allow:[],ask:[],deny:[]},e=M;n[t]={allow:this.dedupeArray([...r.allow||[],...e.allow||[]]),ask:this.dedupeArray([...r.ask||[],...e.ask||[]]),deny:this.dedupeArray([...r.deny||[],...e.deny||[]])}}else if(Array.isArray(M)){let r=Array.isArray(n[t])?n[t]:[];n[t]=this.dedupeArray([...r,...M])}else n[t]=M}applyDeepMerge(n,t,M){if(typeof M==="object"&&M!==null&&!Array.isArray(M)){let r=typeof n[t]==="object"&&n[t]!==null?n[t]:{};n[t]=qt({},r,M)}else n[t]=M}dedupeArray(n){return Array.from(new Set(n))}async atomicWrite(n,t){await Ht(n,JSON.stringify(t,null,2),{mode:384,encoding:"utf-8"})}}function ZM(){return x.getInstance()}var $n=15000,gn=1000,Xn=300000;function nn(n){return n===0||typeof n==="number"&&Number.isSafeInteger(n)&&n>=1000&&n<=300000}function JM(n,t=15000){return nn(n)?n:t}var o={currentModelId:"",models:[],modelProviders:{},temperature:0,maxOutputTokens:void 0,stream:!0,topP:0.9,topK:50,timeout:180000,bashForegroundHandoffMs:$n,providerForegroundRecoveryMs:Cn,providerCircuitBreakerOpenMs:In,codeTheme:"dracula",uiTheme:"system",language:"zh-CN",fontSize:14,autoSaveSessions:!0,notifyBuild:!0,notifyErrors:!1,notifySounds:!1,privacyTelemetry:!1,privacyCrash:!0,debug:!1,mcpEnabled:!1,mcpServers:{},lspServers:{},permissions:{allow:["Bash(pwd)","Bash(which *)","Bash(whoami)","Bash(hostname)","Bash(uname *)","Bash(date)","Bash(echo *)","Bash(ls *)","Bash(tree *)","Bash(git status)","Bash(git status -*)","Bash(git log *)","Bash(git diff *)","Bash(git show *)","Bash(git branch -* *)","Bash(git branch)","Bash(git tag -l *)","Bash(git tag --list *)","Bash(git stash list *)","Bash(git stash show *)","Bash(git rev-parse *)","Bash(git describe *)","Bash(git blame *)","Bash(git ls-files *)","Bash(git config --get *)","Bash(git config --list *)","Bash(git shortlog *)","Bash(git merge-base *)","Bash(git cat-file *)","Bash(git for-each-ref *)","Bash(git grep *)","Bash(git worktree list *)","Bash(git reflog show *)","Bash(git reflog)","Bash(git rev-list *)","Bash(git ls-remote *)","Bash(git remote -v)","Bash(git remote --verbose)","Bash(git remote)","Bash(gh pr view *)","Bash(gh pr list *)","Bash(gh pr diff *)","Bash(gh pr checks *)","Bash(gh pr status *)","Bash(gh issue view *)","Bash(gh issue list *)","Bash(gh issue status *)","Bash(gh run list *)","Bash(gh run view *)","Bash(gh repo view *)","Bash(gh auth status)","Bash(npm list *)","Bash(bun pm ls *)","Bash(npm view *)","Bash(npm outdated *)","Bash(pnpm list *)","Bash(yarn list *)","Bash(pip list *)","Bash(pip show *)"],ask:["Bash(curl *)","Bash(wget *)","Bash(aria2c *)","Bash(axel *)","Bash(rm -rf *)","Bash(rm -r *)","Bash(rm --recursive *)","Bash(nc *)","Bash(netcat *)","Bash(telnet *)","Bash(ncat *)"],deny:["Read(./.env)","Read(./.env.*)","Bash(rm -rf /)","Bash(rm -rf /*)","Bash(sudo *)","Bash(chmod 777 *)","Bash(bash *)","Bash(sh *)","Bash(zsh *)","Bash(fish *)","Bash(dash *)","Bash(eval *)","Bash(source *)","Bash(mkfs *)","Bash(fdisk *)","Bash(dd *)","Bash(format *)","Bash(parted *)","Bash(open http*)","Bash(open https*)","Bash(xdg-open http*)","Bash(xdg-open https*)"]},permissionMode:"default",hooks:{enabled:!1,defaultTimeout:60,timeoutBehavior:"ignore",failureBehavior:"ignore",maxConcurrentHooks:5,PreToolUse:[],PostToolUse:[],PostToolUseFailure:[],PermissionRequest:[],Elicitation:[],ElicitationResult:[],UserPromptSubmit:[],SessionStart:[],SessionEnd:[],Stop:[],SubagentStop:[],Notification:[],Compaction:[]},enabledPlugins:{},pluginSourcePolicy:{restrictToAllowedSources:!1,requireGitCommitSha:!1,allowedGitHosts:[],allowedMarketplaces:[],allowedLocalRoots:[]},env:{},disableAllHooks:!1,maxTurns:-1,maxConcurrentTasks:3,maxQueuedTasks:100};var Nn=/^[A-Za-z0-9_-]{21}$/;function hn(n){return n.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^[._-]+|[._-]+$/g,"").slice(0,80)||"model"}function Gt(n,t){let M=new Set(t.map((u)=>u.id)),r=hn(n.model);if(!M.has(r))return r;let e=`${hn(n.provider)}-${r}`.slice(0,120);if(!M.has(e))return e;let _=2;while(M.has(`${e}-${_}`))_++;return`${e}-${_}`}function zn(n,t){let M=n.filter((_)=>!Nn.test(_.id)).map((_)=>({id:_.id})),r=new Map;return{models:n.map((_)=>{if(!Nn.test(_.id))return{..._};let{id:u,...S}=_,m=Gt(S,M);return M.push({id:m}),r.set(u,m),{..._,id:m}}),currentModelId:r.get(t)??t,changed:r.size>0}}import{promises as st}from"fs";import{merge as p}from"lodash-es";import b from"os";import E from"path";function Bn(n){let t=Rn(n.timeout??300000,"MCP timeout"),M=Rn(n.idleTimeout??Math.min(60000,t),"MCP idleTimeout");if(M>t)throw Error("MCP idleTimeout must not exceed timeout");return{totalTimeoutMs:t,idleTimeoutMs:M,maxProgressEvents:128}}function nr(n,t,M){if(t.count>=M.maxProgressEvents)return;if(!Number.isFinite(n.progress)||n.progress<0)return;if(n.total!==void 0&&(!Number.isFinite(n.total)||n.total<=0))return;if(t.lastProgress!==void 0&&n.progress<t.lastProgress)return;t.count++,t.lastProgress=n.progress;let r=n.message?.replace(/\0/g,"").trim().slice(0,1000);return{progress:n.progress,...n.total!==void 0?{total:n.total}:{},message:r||Yt(n.progress,n.total)}}function Rn(n,t){if(!Number.isSafeInteger(n)||n<1000||n>1800000)throw Error(`${t} must be an integer between 1000 and 1800000 milliseconds`);return n}function Yt(n,t){if(t!==void 0)return`MCP progress ${Math.max(0,Math.min(100,n/t*100)).toFixed(0)}%`;return`MCP progress ${n}`}import{createHash as Vt}from"node:crypto";var Y=["debug","info","notice","warning","error","critical","alert","emergency"],rr=64,er=64,ur=256,yt=8192,Hn=16384,Zt=256,Wt=6,Jt=128,Kn=64,pn=64,Ot=128,Qt=/authorization|api[-_]?key|cookie|credential|password|secret|token/i;function Un(n){let t=n.logging;if(t!==void 0&&(t===null||typeof t!=="object"||Array.isArray(t)))throw Error("MCP logging configuration must be an object");let M=t?.enabled??!0;if(typeof M!=="boolean")throw Error("MCP logging enabled must be a boolean");let r=t?.level??"warning";if(!kt(r))throw Error(`MCP logging level must be one of: ${Y.join(", ")}`);return{enabled:M,level:r}}function kt(n){return typeof n==="string"&&Y.includes(n)}function _r(n,t){return Y.indexOf(n)>=Y.indexOf(t)}function Dt(n,t={}){let M=jt(n.data),r=typeof M.value==="string"?M.value:JSON.stringify(M.value),e=qn(r,Hn),_=e.value,u=Buffer.byteLength(_),S=Vt("sha256").update(_).digest("hex"),m=t.exposeDetails!==!1,s=m?qn(_,yt):{value:`[MCP log details omitted; sha256=${S}]`,truncated:!1},c=m&&n.logger?V(Mn(n.logger),Zt):void 0;return{level:n.level,...c?{logger:c}:{},message:s.value||"[empty MCP log message]",projectedBytes:u,dataSha256:S,truncated:M.truncated||e.truncated||s.truncated,detailsOmitted:!m,timestamp:t.now??Date.now()}}function Sr(n,t={}){return{...Dt({level:"warning",logger:"blade.mcp.logging",data:`MCP log rate exceeded; dropped at least ${Math.max(1,n)} message(s)`},t),synthetic:!0}}function jt(n){let t={nodes:0,remainingStringBytes:Hn,truncated:!1,seen:new WeakSet};return{value:tn(n,0,t),truncated:t.truncated}}function tn(n,t,M){if(M.nodes++,M.nodes>Jt)return M.truncated=!0,"[node limit reached]";if(n===null||typeof n==="boolean")return n;if(typeof n==="number")return Number.isFinite(n)?n:String(n);if(typeof n==="bigint")return n.toString();if(typeof n==="string"){let r=Mn(n),e=Math.max(0,M.remainingStringBytes),_=V(r,e),u=Buffer.byteLength(_);if(M.remainingStringBytes-=u,u<Buffer.byteLength(r))M.truncated=!0;return _}if(typeof n>"u")return"[undefined]";if(typeof n==="symbol"||typeof n==="function")return`[${typeof n}]`;if(t>=Wt)return M.truncated=!0,"[depth limit reached]";if(M.seen.has(n))return M.truncated=!0,"[circular]";M.seen.add(n);try{if(Array.isArray(n)){if(n.length>Kn)M.truncated=!0;return n.slice(0,Kn).map((_)=>tn(_,t+1,M))}let r=Object.create(null),e=Object.entries(n);if(e.length>pn)M.truncated=!0;for(let[_,u]of e.slice(0,pn)){let S=V(Mn(_),Ot)||"[empty-key]";if(_==="_meta"||Qt.test(_))r[S]="[redacted]";else r[S]=tn(u,t+1,M)}return r}finally{M.seen.delete(n)}}function Mn(n){return[...n.replace(/\bhttps?:\/\/[^\s"'`]+/gi,"[redacted-url]").replace(/\bBearer\s+\S+/gi,"Bearer [redacted]").replace(/\bsk-[A-Za-z0-9_-]{8,}\b/g,"[redacted]")].filter((M)=>{let r=M.charCodeAt(0);return(r===9||r===10||r===13||r>=32)&&r!==127}).join("")}function V(n,t){if(t<=0)return"";if(Buffer.byteLength(n)<=t)return n;let M=Buffer.from(n).subarray(0,t).toString("utf8");while(Buffer.byteLength(M)>t)M=M.slice(0,-1);return M}function qn(n,t){if(Buffer.byteLength(n)<=t)return{value:n,truncated:!1};let M=`
20
- ...[MCP log truncated]`;return{value:V(n,t-Buffer.byteLength(M))+M,truncated:!0}}var Gn=1024,lt=4096,Yn=2,Ft=8,Vn=65536,vt=1048576,yn=50,Zn=16000,Wn=4,nM=100,Jn=1048576,tM=new Set(["image/jpeg","image/png","image/gif","image/webp"]);function Dn(n){if(!n)return{enabled:!1,maxTokens:Gn,maxRequestsPerToolCall:Yn,maxInputBytes:Vn};if(typeof n.enabled!=="boolean")throw Error("MCP sampling.enabled must be a boolean");return{enabled:n.enabled,maxTokens:y(n.maxTokens??Gn,1,lt,"MCP sampling.maxTokens"),maxRequestsPerToolCall:y(n.maxRequestsPerToolCall??Yn,1,Ft,"MCP sampling.maxRequestsPerToolCall"),maxInputBytes:y(n.maxInputBytes??Vn,1,vt,"MCP sampling.maxInputBytes")}}function sr(n,t){if(!t.enabled)throw Error("MCP sampling is disabled");if(n.task)throw Error("Task-based MCP sampling is not supported");if(n.tools?.length)throw Error("MCP sampling tools were not negotiated");if(n.includeContext&&n.includeContext!=="none")throw Error("MCP sampling server context was not negotiated");if(n.messages.length===0||n.messages.length>yn)throw Error(`MCP sampling messages must contain 1-${yn} entries`);if(n.systemPrompt!==void 0&&n.systemPrompt.length>Zn)throw Error(`MCP sampling system prompt exceeds ${Zn} characters`);if(n.temperature!==void 0&&(!Number.isFinite(n.temperature)||n.temperature<0||n.temperature>2))throw Error("MCP sampling temperature must be between 0 and 2");let M=n.stopSequences??[];if(M.length>Wn||M.some((s)=>!s||s.length>nM||s.includes("\x00")))throw Error(`MCP sampling stop sequences must contain at most ${Wn} non-empty bounded values`);let r=[],e=0,_=0,u=0,S=[];if(n.systemPrompt)e+=Buffer.byteLength(n.systemPrompt,"utf8"),r.push({role:"system",content:n.systemPrompt}),S.push(`System: ${On(n.systemPrompt)}`);for(let s of n.messages){let c=Array.isArray(s.content)?s.content:[s.content],P=[],w=[];for(let A of c){if(A.type==="text"){e+=Buffer.byteLength(A.text,"utf8"),P.push({type:"text",text:A.text}),w.push(On(A.text));continue}if(A.type==="image"){if(s.role!=="user")throw Error("MCP sampling images are only supported in user messages");if(!tM.has(A.mimeType))throw Error(`Unsupported MCP sampling image type: ${A.mimeType}`);let h=MM(A.data);_+=h,u++,P.push({type:"image_url",image_url:{url:`data:${A.mimeType};base64,${A.data}`}}),w.push(`[${A.mimeType} image, ${h} bytes]`);continue}throw Error(`Unsupported MCP sampling content type: ${A.type}`)}if(P.length===0)throw Error("MCP sampling message has no supported content");r.push({role:s.role,content:P.length===1&&P[0]?.type==="text"?P[0].text:P}),S.push(`${s.role==="user"?"User":"Assistant"}: ${w.join(" ")}`)}if(e+_>t.maxInputBytes)throw Error(`MCP sampling input exceeds ${t.maxInputBytes} bytes`);if(u>Qn||_>kn)throw Error("MCP sampling image input exceeds the shared attachment budget");let m=y(n.maxTokens,1,Number.MAX_SAFE_INTEGER,"MCP sampling maxTokens");return{messages:r,maxTokens:Math.min(m,t.maxTokens),...n.temperature!==void 0?{temperature:n.temperature}:{},stopSequences:[...M],preview:S.join(`
21
- `).slice(0,8000)}}function Tr(n,t,M){if(n.toolCalls?.length)throw Error("Model returned tools for basic MCP sampling");let r=n.content,e=n.finishReason==="length"||n.finishReason==="max_tokens"?"maxTokens":"endTurn",_=-1;for(let u of M.stopSequences){let S=r.indexOf(u);if(S>=0&&(_===-1||S<_))_=S}if(_>=0)r=r.slice(0,_),e="stopSequence";if(Buffer.byteLength(r,"utf8")>Jn)throw Error(`MCP sampling response exceeds ${Jn} bytes`);return{model:t,role:"assistant",content:{type:"text",text:r},stopReason:e}}function y(n,t,M,r){if(!Number.isSafeInteger(n)||n<t||n>M)throw Error(`${r} must be an integer between ${t} and ${M}`);return n}function MM(n){if(!n||n.length%4!==0||!/^[A-Za-z0-9+/]*={0,2}$/.test(n))throw Error("MCP sampling image contains invalid base64 data");return Buffer.from(n,"base64").byteLength}function On(n){return n.replace(/\s+/g," ").trim().slice(0,1000)}var cr=256,Ar=1e4,br=86400000;var rM=/[\p{Cf}\p{Co}\p{Cn}]/u;function ln(n){if(!n)return{enabled:!1,defaultTtlMs:600000,pollIntervalMs:500,maxTasksPerSession:32,maxLifetimeMs:1800000};if(typeof n.enabled!=="boolean")throw Error("MCP tasks.enabled must be a boolean");let t=$(n.defaultTtlMs??600000,1e4,86400000,"MCP tasks.defaultTtlMs"),M=$(n.maxLifetimeMs??1800000,1e4,86400000,"MCP tasks.maxLifetimeMs");if(t>M)throw Error("MCP tasks.defaultTtlMs must not exceed tasks.maxLifetimeMs");return{enabled:n.enabled,defaultTtlMs:t,pollIntervalMs:$(n.pollIntervalMs??500,100,1e4,"MCP tasks.pollIntervalMs"),maxTasksPerSession:$(n.maxTasksPerSession??32,1,32,"MCP tasks.maxTasksPerSession"),maxLifetimeMs:M}}function wr(n,t){return $(n??t.defaultTtlMs,1e4,Math.min(86400000,t.maxLifetimeMs),"MCP task ttl")}function Lr(n,t,M){let r=uM(n.taskId,"task ID",512),e=jn(n.createdAt,"createdAt"),_=jn(n.lastUpdatedAt,"lastUpdatedAt");if(Date.parse(_)<Date.parse(e))throw Error("MCP task lastUpdatedAt precedes createdAt");if(M&&(r!==M.taskId||e!==M.createdAt))throw Error("MCP task identity changed across connection generation");let u=n.ttl===null?null:$(n.ttl,0,86400000,"MCP task ttl"),S=n.pollInterval===void 0?t.pollIntervalMs:$(n.pollInterval,0,Number.MAX_SAFE_INTEGER,"MCP task pollInterval"),m=Math.min(1e4,Math.max(100,S)),s=n.statusMessage?eM(n.statusMessage,r):void 0;return{taskId:r,status:n.status,createdAt:e,lastUpdatedAt:_,ttl:u,pollIntervalMs:m,...s?{statusMessage:s}:{}}}function Pr(n){return["completed","failed","cancelled"].includes(n)}function fr(n){let t=n instanceof Error?n.message:String(n);return Fn(rn(t.replace(/\bhttps?:\/\/[^\s"'`]+/gi,"[redacted-url]").replace(/\bBearer\s+\S+/gi,"Bearer [redacted]").replace(/\bsk-[A-Za-z0-9_-]{8,}\b/g,"[redacted]")),1024)}function eM(n,t){return Fn(rn(n.replaceAll(t,"[redacted-task-id]")),1024)}function rn(n){return[...n.normalize("NFKC")].filter((t)=>{let M=t.codePointAt(0)??0;if(M===0||M>=1&&M<=8||M===11||M===12||M>=14&&M<=31||M===127)return!1;return!rM.test(t)}).join("").trim()}function jn(n,t){let M=Date.parse(n);if(!Number.isFinite(M))throw Error(`MCP task ${t} is invalid`);return new Date(M).toISOString()}function uM(n,t,M){if(!n||Buffer.byteLength(n)>M||rn(n)!==n)throw Error(`MCP ${t} is invalid`);return n}function $(n,t,M,r){if(!Number.isSafeInteger(n)||n<t||n>M)throw Error(`${r} must be an integer between ${t} and ${M}`);return n}function Fn(n,t){let M=Buffer.from(n);if(M.length<=t)return n;let r=M.subarray(0,t).toString("utf8");while(Buffer.byteLength(r)>t)r=r.slice(0,-1);return r}var _M={sonnet:"claude-sonnet-4-20250514",opus:"claude-opus-4-20250514",haiku:"claude-3-5-haiku-20241022",claude:"claude-sonnet-4-20250514",gpt4o:"gpt-4o",gpt4:"gpt-4o",o1:"o1",o3:"o3","o4-mini":"o4-mini",deepseek:"deepseek-chat","deepseek-v3":"deepseek-chat","deepseek-r1":"deepseek-reasoner","deepseek-v4":"deepseek-v4-0324",gemini:"gemini-2.5-pro",flash:"gemini-2.5-flash",qwen:"qwen3-235b-a22b","qwen-max":"qwen-max","qwen-plus":"qwen-plus"};function en(n){let t=n.toLowerCase().trim();return _M[t]??n}var SM=/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$/,mM=/^\.[A-Za-z0-9_+-]{1,32}$/;function Z(n){return n!==null&&typeof n==="object"&&!Array.isArray(n)}function I(n,t,M,r,e){if(n===void 0)return e;if(!Number.isInteger(n)||Number(n)<M||Number(n)>r)throw Error(`${t} must be an integer between ${M} and ${r}`);return Number(n)}function vn(n,t){if(n===void 0)return;let M;try{M=JSON.stringify(n)}catch{throw Error(`${t} must be JSON serializable`)}if(M===void 0||Buffer.byteLength(M)>262144)throw Error(`${t} exceeds the 256 KiB limit`);return structuredClone(n)}function EM(n,t){if(n===void 0)return{};if(!Z(n))throw Error(`${t} must be an object`);let M={};for(let[r,e]of Object.entries(n)){if(!r||typeof e!=="string"||e.includes("\x00"))throw Error(`${t} must contain non-empty string values`);M[r]=e}return M}function d(n){if(n===void 0)return{};if(!Z(n))throw Error("lspServers must be an object");let t=Object.entries(n);if(t.length>32)throw Error("lspServers exceeds the 32-server limit");let M={};for(let[r,e]of t){if(!SM.test(r))throw Error(`Invalid LSP server name: ${r}`);if(!Z(e))throw Error(`lspServers.${r} must be an object`);let _=new Set(["command","args","extensionToLanguage","env","initializationOptions","settings","enabled","priority","startupTimeout","shutdownTimeout","requestTimeout","diagnosticWaitTimeout","maxRestarts"]),u=Object.keys(e).filter((w)=>!_.has(w));if(u.length>0)throw Error(`Unknown LSP server field: ${r}.${u[0]}`);if(typeof e.command!=="string"||!e.command.trim()||e.command.includes("\x00")||e.command.includes(`
22
- `))throw Error(`lspServers.${r}.command must be a non-empty command`);if(e.args!==void 0&&!Array.isArray(e.args))throw Error(`lspServers.${r}.args must be an array`);let S=(e.args??[]).map((w,A)=>{if(typeof w!=="string"||w.includes("\x00"))throw Error(`lspServers.${r}.args.${A} must be a string`);return w});if(S.length>128)throw Error(`lspServers.${r}.args exceeds the 128-item limit`);if(!Z(e.extensionToLanguage))throw Error(`lspServers.${r}.extensionToLanguage must be an object`);let m=Object.entries(e.extensionToLanguage);if(m.length===0||m.length>64)throw Error(`lspServers.${r}.extensionToLanguage must contain 1-64 entries`);let s={};for(let[w,A]of m){let h=w.startsWith(".")?w.toLowerCase():`.${w.toLowerCase()}`;if(!mM.test(h)||typeof A!=="string"||!A.trim())throw Error(`Invalid lspServers.${r}.extensionToLanguage entry: ${w}`);s[h]=A.trim()}if(e.enabled!==void 0&&typeof e.enabled!=="boolean")throw Error(`lspServers.${r}.enabled must be a boolean`);let c=vn(e.initializationOptions,`lspServers.${r}.initializationOptions`),P=vn(e.settings,`lspServers.${r}.settings`);M[r]={command:e.command.trim(),...S.length>0?{args:S}:{},extensionToLanguage:s,...e.env!==void 0?{env:EM(e.env,`lspServers.${r}.env`)}:{},...c!==void 0?{initializationOptions:c}:{},...P!==void 0?{settings:P}:{},...e.enabled!==void 0?{enabled:e.enabled}:{},priority:I(e.priority,`lspServers.${r}.priority`,-1000,1000,0),startupTimeout:I(e.startupTimeout,`lspServers.${r}.startupTimeout`,100,60000,1e4),shutdownTimeout:I(e.shutdownTimeout,`lspServers.${r}.shutdownTimeout`,100,1e4,2000),requestTimeout:I(e.requestTimeout,`lspServers.${r}.requestTimeout`,100,60000,1e4),diagnosticWaitTimeout:I(e.diagnosticWaitTimeout,`lspServers.${r}.diagnosticWaitTimeout`,0,5000,750),maxRestarts:I(e.maxRestarts,`lspServers.${r}.maxRestarts`,0,10,3)}}return M}function nt(n){return Number.isInteger(n)&&(n===-1||n>=0)}function tt(){return"-1 (unlimited), 0 (disabled), or any positive integer"}import Mt from"node:path";var rt=/^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$|^[a-z0-9]$/,sM=/^(?:\*\.)?[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/;function B(n){let t=[];for(let[M,r]of Object.entries(n)){if(!rt.test(M))throw Error(`Invalid plugin name in enabledPlugins: ${M}`);if(typeof r!=="boolean")throw Error(`Invalid enabledPlugins value for ${M}`);t.push([M,r])}return Object.fromEntries(t)}function un(n,t,M){if(!Array.isArray(n))throw Error(`${t} must be an array`);return[...new Set(n.map((r,e)=>{if(typeof r!=="string"||!r.trim())throw Error(`${t}[${e}] must be a non-empty string`);return M(r.trim())}))].sort()}function K(n){let t=new Set(["restrictToAllowedSources","requireGitCommitSha","allowedGitHosts","allowedMarketplaces","allowedLocalRoots"]),M=Object.keys(n).filter((e)=>!t.has(e));if(M.length>0)throw Error(`Unknown pluginSourcePolicy fields: ${M.join(", ")}`);let r={};for(let e of["restrictToAllowedSources","requireGitCommitSha"]){if(n[e]===void 0)continue;if(typeof n[e]!=="boolean")throw Error(`pluginSourcePolicy.${e} must be boolean`);r[e]=n[e]}if(n.allowedGitHosts!==void 0)r.allowedGitHosts=un(n.allowedGitHosts,"pluginSourcePolicy.allowedGitHosts",(e)=>{let _=e.toLowerCase();if(!sM.test(_))throw Error(`Invalid plugin Git host pattern: ${e}`);return _});if(n.allowedMarketplaces!==void 0)r.allowedMarketplaces=un(n.allowedMarketplaces,"pluginSourcePolicy.allowedMarketplaces",(e)=>{if(!rt.test(e))throw Error(`Invalid allowed Marketplace name: ${e}`);return e});if(n.allowedLocalRoots!==void 0)r.allowedLocalRoots=un(n.allowedLocalRoots,"pluginSourcePolicy.allowedLocalRoots",(e)=>{if(!Mt.isAbsolute(e))throw Error(`Plugin local allowlist root must be absolute: ${e}`);return Mt.resolve(e)});return r}function W(n){let t=[];for(let[M,r]of Object.entries(n)){if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(M))throw Error(`Invalid environment variable name: ${M}`);if(typeof r!=="string"||r.includes("\x00"))throw Error(`Invalid environment variable value: ${M}`);t.push([M,r])}return Object.fromEntries(t)}var et=1,ut=64,_t=1,St=1e4;function mt(n){return Number.isInteger(n)&&n>=1&&n<=64}function Et(n){return Number.isInteger(n)&&n>=1&&n<=1e4}class N{static instance=null;runtimePermissionOverrides;lastAdditionalSettings;constructor(){}static getInstance(){if(!N.instance)N.instance=new N;return N.instance}static resetInstance(){N.instance=null}async initialize(n){try{this.lastAdditionalSettings=n,this.runtimePermissionOverrides=n?.permissions;let M=(await a.getInstance().getStatus(L())).state==="trusted",r=await this.loadConfigFiles(M),e=await this.loadSettingsFiles(M),_={...r,...e,enabledPlugins:{...r.enabledPlugins||{},...e.enabledPlugins||{}}};if(n)_=this.mergeSettings(_,n);let u=this.normalizeConfig(_),S={...o,...u};if(S.enabledPlugins=B(S.enabledPlugins),S.lspServers=d(S.lspServers),S.pluginSourcePolicy={...o.pluginSourcePolicy,...K(S.pluginSourcePolicy)},this.resolveEnvInterpolation(S),process.env.BLADE_MODEL&&S.models?.length>0){let m=en(process.env.BLADE_MODEL),s=S.models.find((c)=>c.id===m||c.model===m||c.id===process.env.BLADE_MODEL||c.model===process.env.BLADE_MODEL);if(s)S.currentModelId=s.id}if(process.env.BLADE_DEBUG)S.debug=process.env.BLADE_DEBUG==="1"||process.env.BLADE_DEBUG==="true"||process.env.BLADE_DEBUG;if(J().configureModelProviders(S.modelProviders,S.models),S.models.length>0)this.validateConfig(S);if(S.debug)console.log("[ConfigManager] Configuration loaded successfully");return S}catch(t){return console.error("[ConfigManager] Failed to initialize:",t),J().configureModelProviders({},[]),o}}async reload(){return this.initialize(this.lastAdditionalSettings)}async loadConfigFiles(n){let t=E.join(b.homedir(),".blade","config.json"),M=E.join(L(),".blade","config.json"),r={},e=await this.loadJsonFile(t),_=e?await this.migrateLegacyUserConfig(e):null;if(_)r={...r,..._};let u=await this.loadJsonFile(M);if(u&&n){let S={...r.mcpServers||{},...u.mcpServers||{}},m={...r.lspServers||{},...u.lspServers||{}},s={...r.modelProviders||{},...u.modelProviders||{}},c={...r.enabledPlugins||{},...u.enabledPlugins||{}};if(r={...r,...u},Object.keys(S).length>0)r.mcpServers=S;if(Object.keys(m).length>0)r.lspServers=d(m);if(Object.keys(s).length>0)r.modelProviders=s;if(Object.keys(c).length>0)r.enabledPlugins=B(c)}else if(u?.hooks)r.hooks=u.hooks;return r}async migrateLegacyUserConfig(n){let t=n,M={...n},r={};if(M.codeTheme===void 0&&typeof t.theme==="string")M.codeTheme=t.theme,r.codeTheme=t.theme;if(Array.isArray(M.models)){let e=zn(M.models,M.currentModelId??"");if(e.changed)M.models=e.models,M.currentModelId=e.currentModelId,r.models=e.models,r.currentModelId=e.currentModelId}if(delete M.theme,Object.keys(r).length>0)try{await x.getInstance().save(r,{scope:"global",immediate:!0})}catch{console.warn("[ConfigManager] Could not persist legacy config migration")}return M}async loadSettingsFiles(n){let t=E.join(b.homedir(),".blade","settings.json"),M=E.join(L(),".blade","settings.json"),r=E.join(L(),".blade","settings.local.json"),e={},_=await this.loadJsonFile(t);if(_)e=this.mergeSettings(e,_);let u=await this.loadJsonFile(M);if(u&&n)e=this.mergeSettings(e,u);else if(u?.hooks)e=this.mergeSettings(e,{hooks:u.hooks});let S=await this.loadJsonFile(r);if(S&&n)e=this.mergeSettings(e,S);else if(S?.hooks)e=this.mergeSettings(e,{hooks:S.hooks});return e}async loadWorkspacePermissions(n,t){let M={allow:[...t.allow],ask:[...t.ask],deny:[...t.deny]};if(E.resolve(n)!==E.resolve(L())){let e=await this.loadWorkspacePermissionOverrides(L(),{includeUntrusted:!0}),_=await this.loadJsonFile(E.join(b.homedir(),".blade","settings.json")),u={allow:Array.from(new Set([...o.permissions.allow,..._?.permissions?.allow||[],...this.runtimePermissionOverrides?.allow||[]])),ask:Array.from(new Set([...o.permissions.ask,..._?.permissions?.ask||[],...this.runtimePermissionOverrides?.ask||[]])),deny:Array.from(new Set([...o.permissions.deny,..._?.permissions?.deny||[],...this.runtimePermissionOverrides?.deny||[]]))};for(let S of["allow","ask","deny"]){let m=new Set(e[S].filter((s)=>!u[S].includes(s)));M[S]=M[S].filter((s)=>!m.has(s))}}let r=await this.loadWorkspacePermissionOverrides(n);for(let e of["allow","ask","deny"])M[e]=Array.from(new Set([...M[e],...r[e]]));return M}async loadWorkspaceMcpServers(n,t){if(E.resolve(n)===E.resolve(L()))return{...t};let M=await a.getInstance().getStatus(n),r=M.state==="trusted",e=M.projectPath,_={},u=async(m)=>{let s=await this.loadJsonFile(m);if(s?.mcpServers)_={..._,...s.mcpServers}};if(await u(E.join(b.homedir(),".blade","config.json")),await u(E.join(b.homedir(),".blade","settings.json")),r)await u(E.join(e,".blade","config.json")),await u(E.join(e,".blade","settings.json")),await u(E.join(e,".blade","settings.local.json"));if(this.lastAdditionalSettings?.mcpServers)_={..._,...this.lastAdditionalSettings.mcpServers};let S={mcpServers:_};return this.resolveEnvInterpolation(S),S.mcpServers}async loadWorkspaceLspServers(n,t){if(E.resolve(n)===E.resolve(L()))return d(t);let M=await a.getInstance().getStatus(n),r={},e=async(u)=>{let S=await this.loadJsonFile(u);if(S?.lspServers)r={...r,...d(S.lspServers)}};if(await e(E.join(b.homedir(),".blade","config.json")),await e(E.join(b.homedir(),".blade","settings.json")),M.state==="trusted")for(let u of["config.json","settings.json","settings.local.json"])await e(E.join(M.projectPath,".blade",u));if(this.lastAdditionalSettings?.lspServers)r={...r,...d(this.lastAdditionalSettings.lspServers)};let _={lspServers:r};return this.resolveEnvInterpolation(_),d(_.lspServers)}async loadWorkspaceModelConfig(n,t){if(E.resolve(n)===E.resolve(L()))return{currentModelId:t.currentModelId,models:t.models.map((u)=>structuredClone(u)),modelProviders:structuredClone(t.modelProviders),temperature:t.temperature,...t.maxOutputTokens!==void 0?{maxOutputTokens:t.maxOutputTokens}:{},timeout:t.timeout,...t.providerCircuitBreakerOpenMs!==void 0?{providerCircuitBreakerOpenMs:t.providerCircuitBreakerOpenMs}:{}};let M=await a.getInstance().getStatus(n),r=M.projectPath,e={currentModelId:o.currentModelId,models:o.models.map((u)=>structuredClone(u)),modelProviders:structuredClone(o.modelProviders),temperature:o.temperature,...o.maxOutputTokens!==void 0?{maxOutputTokens:o.maxOutputTokens}:{},timeout:o.timeout,...o.providerCircuitBreakerOpenMs!==void 0?{providerCircuitBreakerOpenMs:o.providerCircuitBreakerOpenMs}:{}},_=(u)=>{if(!u)return;if(u.modelProviders)e.modelProviders={...e.modelProviders,...structuredClone(u.modelProviders)};if(u.models)e.models=u.models.map((S)=>structuredClone(S));if(u.currentModelId!==void 0)e.currentModelId=u.currentModelId;if(u.temperature!==void 0)e.temperature=u.temperature;if(u.maxOutputTokens!==void 0)e.maxOutputTokens=u.maxOutputTokens;if(u.timeout!==void 0)e.timeout=u.timeout;if(u.providerCircuitBreakerOpenMs!==void 0)e.providerCircuitBreakerOpenMs=u.providerCircuitBreakerOpenMs};if(_(await this.loadJsonFile(E.join(b.homedir(),".blade","config.json"))),_(await this.loadJsonFile(E.join(b.homedir(),".blade","settings.json"))),M.state==="trusted")_(await this.loadJsonFile(E.join(r,".blade","config.json"))),_(await this.loadJsonFile(E.join(r,".blade","settings.json"))),_(await this.loadJsonFile(E.join(r,".blade","settings.local.json")));if(_(this.lastAdditionalSettings),e=this.normalizeConfig(e),this.resolveEnvInterpolation(e),process.env.BLADE_MODEL&&e.models.length>0){let u=process.env.BLADE_MODEL,S=en(u),m=e.models.find((s)=>s.id===S||s.model===S||s.id===u||s.model===u);if(m)e.currentModelId=m.id}if(!e.models.some((u)=>u.id===e.currentModelId))e.currentModelId=e.models[0]?.id??"";return e}async loadWorkspaceRuntimeSettings(n,t){if(E.resolve(n)===E.resolve(L()))return{env:W(t.env),disableAllHooks:t.disableAllHooks,maxTurns:t.maxTurns,permissionMode:t.permissionMode};let M=await a.getInstance().getStatus(n),r=M.projectPath,e={env:{},disableAllHooks:o.disableAllHooks,maxTurns:o.maxTurns,permissionMode:o.permissionMode},_=(m,s)=>{if(!m)return;if(s.allowExecutionSettings){if(m.env)e.env={...e.env,...W(m.env)};if(m.maxTurns!==void 0)e.maxTurns=m.maxTurns;if(m.permissionMode!==void 0)e.permissionMode=m.permissionMode;if(m.disableAllHooks!==void 0)e.disableAllHooks=m.disableAllHooks}else if(m.disableAllHooks===!0)e.disableAllHooks=!0};_(await this.loadJsonFile(E.join(b.homedir(),".blade","config.json")),{allowExecutionSettings:!0}),_(await this.loadJsonFile(E.join(b.homedir(),".blade","settings.json")),{allowExecutionSettings:!0});let u=await Promise.all([this.loadJsonFile(E.join(r,".blade","config.json")),this.loadJsonFile(E.join(r,".blade","settings.json")),this.loadJsonFile(E.join(r,".blade","settings.local.json"))]);for(let m of u)_(m,{allowExecutionSettings:M.state==="trusted"});_(this.lastAdditionalSettings,{allowExecutionSettings:!0});let S={env:e.env};return this.resolveEnvInterpolation(S),e.env=W(S.env),e}async loadWorkspacePluginSettings(n){return(await this.loadWorkspacePluginSettingsResolution(n)).effective}async loadWorkspacePluginSettingsResolution(n){let t=await a.getInstance().getStatus(n),M={},r={},e=(_,u,S)=>{if(!_?.enabledPlugins)return;let m=B(_.enabledPlugins);for(let[s,c]of Object.entries(m)){if(!S&&c!==!1)continue;let P=r[s];M[s]=c,r[s]={effective:c,effectiveScope:u,layers:{...P?.layers??{},[u]:c}}}};e(await this.loadJsonFile(E.join(b.homedir(),".blade","config.json")),"global",!0),e(await this.loadJsonFile(E.join(b.homedir(),".blade","settings.json")),"global",!0);for(let _ of["config.json","settings.json"])e(await this.loadJsonFile(E.join(t.projectPath,".blade",_)),"project",t.state==="trusted");return e(await this.loadJsonFile(E.join(t.projectPath,".blade","settings.local.json")),"local",t.state==="trusted"),e(this.lastAdditionalSettings,"invocation",!0),{effective:M,settings:r,workspaceTrusted:t.state==="trusted"}}async loadWorkspacePluginSourcePolicy(n){let t=await a.getInstance().getStatus(n),M={...o.pluginSourcePolicy,allowedGitHosts:[...o.pluginSourcePolicy.allowedGitHosts],allowedMarketplaces:[...o.pluginSourcePolicy.allowedMarketplaces],allowedLocalRoots:[...o.pluginSourcePolicy.allowedLocalRoots]},r=(u)=>{if(!u?.pluginSourcePolicy)return;Object.assign(M,K(u.pluginSourcePolicy))},e=(u,S)=>{if(!S)return u;if(u.length===0&&!M.restrictToAllowedSources)return S;let m=new Set(S);return u.filter((s)=>m.has(s))},_=(u)=>{if(!u?.pluginSourcePolicy)return;let S=K(u.pluginSourcePolicy);M.allowedGitHosts=e(M.allowedGitHosts,S.allowedGitHosts),M.allowedMarketplaces=e(M.allowedMarketplaces,S.allowedMarketplaces),M.allowedLocalRoots=e(M.allowedLocalRoots,S.allowedLocalRoots),M.restrictToAllowedSources=M.restrictToAllowedSources||S.restrictToAllowedSources===!0,M.requireGitCommitSha=M.requireGitCommitSha||S.requireGitCommitSha===!0};r(await this.loadJsonFile(E.join(b.homedir(),".blade","config.json"))),r(await this.loadJsonFile(E.join(b.homedir(),".blade","settings.json")));for(let u of["config.json","settings.json","settings.local.json"])_(await this.loadJsonFile(E.join(t.projectPath,".blade",u)));if(_(this.lastAdditionalSettings),process.env.BLADE_PLUGIN_REQUIRE_SHA==="1"||process.env.BLADE_PLUGIN_REQUIRE_SHA==="true")M.requireGitCommitSha=!0;return M}async loadWorkspaceHooks(n,t,M={}){if(E.resolve(n)===E.resolve(L())&&M.includeBaseForCurrentWorkspace!==!1)return p({},t);let r=p({},o.hooks),e=[E.join(b.homedir(),".blade","settings.json"),E.join(n,".blade","settings.json"),E.join(n,".blade","settings.local.json")];for(let _ of e){let u=await this.loadJsonFile(_);if(u?.hooks)r=p({},r,u.hooks)}return r}async loadWorkspacePermissionOverrides(n,t={}){let M={allow:[],ask:[],deny:[]},r=(await a.getInstance().getStatus(n)).state==="trusted",e=[...r||t.includeUntrusted?[E.join(n,".blade","settings.json")]:[],...r||t.includeUntrusted?[E.join(n,".blade","settings.local.json")]:[]];for(let _ of e){let u=await this.loadJsonFile(_);if(!u?.permissions)continue;for(let S of["allow","ask","deny"])M[S]=Array.from(new Set([...M[S],...u.permissions[S]||[]]))}return M}mergeSettings(n,t){let M={...JSON.parse(JSON.stringify(n)),...JSON.parse(JSON.stringify(t))};if(t.permissions)M.permissions={allow:Array.from(new Set([...n.permissions?.allow||[],...t.permissions.allow||[]])),ask:Array.from(new Set([...n.permissions?.ask||[],...t.permissions.ask||[]])),deny:Array.from(new Set([...n.permissions?.deny||[],...t.permissions.deny||[]]))};if(t.hooks)M.hooks=p({},M.hooks,t.hooks);if(t.enabledPlugins)M.enabledPlugins={...n.enabledPlugins||{},...B(t.enabledPlugins)};if(t.pluginSourcePolicy)M.pluginSourcePolicy={...n.pluginSourcePolicy??o.pluginSourcePolicy,...K(t.pluginSourcePolicy)};if(t.env)M.env=p({},M.env,t.env);if(t.mcpServers)M.mcpServers={...M.mcpServers||{},...t.mcpServers};if(t.lspServers)M.lspServers={...M.lspServers||{},...d(t.lspServers)};if(t.disableAllHooks!==void 0)M.disableAllHooks=t.disableAllHooks;if(t.permissionMode!==void 0)M.permissionMode=t.permissionMode;if(t.maxTurns!==void 0)M.maxTurns=t.maxTurns;return M}resolveEnvInterpolation(n){let t=/\$\{?([A-Z_][A-Z0-9_]*)(:-([^}]+))?\}?/g,M=(e)=>{if(typeof e==="string")return e.replace(t,(_,u,S,m)=>{return process.env[u]||m||_});if(Array.isArray(e))return e.map(M);if(typeof e==="object"&&e!==null){let _=e;for(let[u,S]of Object.entries(_))_[u]=M(S);return _}return e},r=n;for(let[e,_]of Object.entries(r))r[e]=M(_)}async loadJsonFile(n){try{if(await this.fileExists(n)){let t=await st.readFile(n,"utf-8");return JSON.parse(t)}}catch(t){console.warn(`[ConfigManager] Failed to load ${n}:`,t)}return null}async fileExists(n){try{return await st.access(n),!0}catch{return!1}}normalizeConfig(n){let t=JSON.parse(JSON.stringify(n));if(t.codeTheme===void 0&&typeof t.theme==="string")t.codeTheme=t.theme;delete t.theme;let M=(e)=>e.trim().replace(/^`|`$/g,""),r=(e)=>{for(let[_,u]of Object.entries(e))if(typeof u==="string")e[_]=M(u);else if(Array.isArray(u))u.forEach((S,m)=>{if(typeof S==="string")u[m]=M(S);else if(typeof S==="object"&&S!==null)r(S)});else if(typeof u==="object"&&u!==null)r(u)};return r(t),t}validateConfig(n,t=J()){let M=[];try{n.lspServers=d(n.lspServers)}catch(r){M.push(r instanceof Error?r.message:"Invalid LSP server configuration")}for(let[r,e]of Object.entries(n.mcpServers||{}))try{Bn(e),e.oauth=O(e);let _=Un(e);if(e.logging!==void 0)e.logging=_;if(e.sampling)e.sampling=Dn(e.sampling);if(e.tasks)e.tasks=ln(e.tasks)}catch(_){M.push(`MCP server "${r}": ${_ instanceof Error?_.message:"invalid sampling policy"}`)}for(let[r,e]of Object.entries(n.modelProviders||{}))if(M.push(...Tt(r,e)),t.isReservedProviderId(r))M.push(`modelProviders.${r}: built-in provider ids cannot be overridden`);if(M.length===0)try{t.configureModelProviders(n.modelProviders||{},n.models)}catch(r){M.push(r instanceof Error?r.message:"Failed to configure custom model providers")}if(!n.models||n.models.length===0)M.push("没有可用的模型配置");if(!nt(n.maxTurns))M.push(`maxTurns 必须是 ${tt()}`);if(!mt(n.maxConcurrentTasks))M.push(`maxConcurrentTasks 必须是 ${et}-${ut} 之间的整数`);if(!Et(n.maxQueuedTasks))M.push(`maxQueuedTasks 必须是 ${_t}-${St} 之间的整数`);if(n.bashForegroundHandoffMs!==void 0&&!nn(n.bashForegroundHandoffMs))M.push("bashForegroundHandoffMs 必须是 0,或 "+`${gn}-${Xn} 之间的整数`);if(n.providerForegroundRecoveryMs!==void 0&&!At(n.providerForegroundRecoveryMs))M.push("providerForegroundRecoveryMs 必须是 0,或 "+`${ot}-${ct} 之间的整数`);if(n.providerCircuitBreakerOpenMs!==void 0&&!Lt(n.providerCircuitBreakerOpenMs))M.push("providerCircuitBreakerOpenMs 必须是 0,或 "+`${bt}-${wt} 之间的整数`);if(n.models&&n.models.length>0){if(!n.currentModelId)M.push("未设置当前模型 ID");else if(!n.models.find((e)=>e.id===n.currentModelId))M.push(`当前模型 ID "${n.currentModelId}" 在 models 列表中不存在`);for(let r of n.models){let e=`模型 "${r.displayName||r.id}"`,_=["name","apiKey","baseUrl","maxContextTokens","maxOutputTokens","supportsThinking","thinkingBudget","thinkingMode"].filter((S)=>(S in r));if(_.length>0)M.push(`${e}: 不再支持旧字段 ${_.join(", ")};请重新配置模型`);if(!r.model)M.push(`${e}: model 字段必填`);if(!r.provider)M.push(`${e}: provider 字段必填`);if(r.overrides?.baseUrl&&!r.overrides.baseUrl.startsWith("http"))M.push(`${e}: overrides.baseUrl "${r.overrides.baseUrl}" 不是有效的 HTTP URL`);let u=r.overrides?.streamIdleTimeout;if(u!==void 0&&(!Number.isFinite(u)||u<1000))M.push(`${e}: overrides.streamIdleTimeout 必须至少为 1000ms`);try{t.getModel(r.provider,r.model)}catch{M.push(`${e}: 内置 catalog 中不存在 ${r.provider}/${r.model}`)}}}if(M.length>0)throw Error(`配置验证失败:
23
- ${M.map((r)=>` - ${r}`).join(`
24
- `)}
25
-
26
- `+`请通过以下方式之一提供配置:
27
- `+` 1. 首次启动: 运行 blade,系统会自动引导配置
28
- `+` 2. 添加模型: blade 后输入 /model add
29
- `+` 3. 初始化向导: 输入 /init
30
-
31
- `+`配置文件示例 (~/.blade/config.json):
32
- `+`{
33
- "currentModelId": "model-id-123",
34
- "models": [
35
- {
36
- "id": "model-id-123",
37
- `+` "displayName": "默认模型",
38
- `+` "provider": "deepseek",
39
- "model": "deepseek-v4-pro"
40
- }
41
- ]
42
- }
43
- `)}}function Me(n,t={}){let M={...n};if(t.debug!==void 0)M.debug=t.debug===""?!0:t.debug;if(t.model){if(!n.models.some((e)=>e.id===t.model))throw Error(`模型配置未找到: ${t.model}`);M.currentModelId=t.model}if(t.yolo===!0)M.permissionMode="yolo";else if(t.permissionMode!==void 0)M.permissionMode=t.permissionMode;if(t.maxTurns!==void 0)M.maxTurns=t.maxTurns;if(t.maxConcurrentTasks!==void 0)M.maxConcurrentTasks=t.maxConcurrentTasks;if(t.maxQueuedTasks!==void 0)M.maxQueuedTasks=t.maxQueuedTasks;return M.systemPrompt=t.systemPrompt,M.appendSystemPrompt=t.appendSystemPrompt,M.model=t.model,M.resumeSessionId=t.sessionId,M.forkSession=t.forkSession,M.allowedTools=t.allowedTools,M.disallowedTools=t.disallowedTools,M.mcpConfigPaths=t.mcpConfig,M.strictMcpConfig=t.strictMcpConfig,M.addDirs=t.addDir,M.outputFormat=t.outputFormat,M.inputFormat=t.inputFormat,M.print=t.print,M.includePartialMessages=t.includePartialMessages,M.replayUserMessages=t.replayUserMessages,M.agentsConfig=t.agents,M.settingSources=t.settingSources,M}
44
- export{q as Je,O as Ke,g as Le,v as Me,Pn as Ne,X as Oe,Bn as Pe,nr as Qe,Y as Re,rr as Se,er as Te,ur as Ue,Un as Ve,kt as We,_r as Xe,Dt as Ye,Sr as Ze,Dn as _e,sr as $e,Tr as af,cr as bf,Ar as cf,br as df,ln as ef,wr as ff,Lr as gf,Pr as hf,fr as if,ZM as jf,gn as kf,Xn as lf,JM as mf,o as nf,d as of,Gt as pf,K as qf,W as rf,et as sf,ut as tf,_t as uf,St as vf,mt as wf,Et as xf,N as yf,Me as zf};
@@ -1,2 +0,0 @@
1
- import{Sd as B}from"./chunk-3rjmkaey.js";import{gg as Y}from"./chunk-fjcmx039.js";import{jg as Z,mg as $}from"./chunk-e09g9a7d.js";import{createHash as D}from"node:crypto";var F="fast-mode-2026-02-01";function H(q,z,W){if(z.api!=="anthropic-messages"||W.providerValue!=="fast")return q;let G={...q},J=Object.keys(G).find((w)=>w.toLowerCase()==="anthropic-beta")??"anthropic-beta",L=new Set((G[J]??"").split(",").map((w)=>w.trim()).filter(Boolean));return L.add(F),G[J]=[...L].join(","),G}function K(q){return`BLADE_MODEL_API_KEY_${D("sha256").update(q).digest("hex").slice(0,32).toUpperCase()}`}function O(q,z,W,G=Y(),J="auto",L="auto"){let w=G.resolveConfig(q),Q=B(w,W),U=$(w,J),X=Z(w,L),x=q.overrides;return{config:q,model:w,displayName:q.displayName??w.name,chat:{provider:q.provider,model:q.model,apiKey:process.env[K(q.id)]??process.env.BLADE_API_KEY,baseUrl:process.env.BLADE_BASE_URL??x?.baseUrl,temperature:x?.temperature??z.temperature,maxContextTokens:w.contextWindow,maxOutputTokens:x?.maxOutputTokens,timeout:x?.timeout??z.timeout,streamIdleTimeout:x?.streamIdleTimeout,reasoningEnabled:Q.effective!=="off",...Q.effective==="off"?{}:{reasoningEffort:Q.effective},...U.providerValue?{serviceTier:U.providerValue}:{},...X.providerValue?{responseVerbosity:X.providerValue}:{},fallbackModels:q.fallbackModels,enablePromptCaching:x?.enablePromptCaching,customHeaders:H(x?.customHeaders,w,U),apiVersion:x?.apiVersion,maxRetries:x?.maxRetries,providerCircuitBreakerOpenMs:z.providerCircuitBreakerOpenMs,modelCatalog:G},reasoning:Q,serviceTier:U,responseVerbosity:X}}function E(q,z=Y()){try{return q.displayName??z.getModel(q.provider,q.model).name}catch{return q.displayName??q.model}}
2
- export{K as Od,O as Pd,E as Qd};
@@ -1 +0,0 @@
1
- import{rc as a,sc as b,tc as c,uc as d,vc as e,wc as f,xc as g}from"./chunk-aesdm7cg.js";import"./chunk-qgez5vw6.js";import"./chunk-5ajyr2am.js";import"./chunk-3rjmkaey.js";import"./chunk-zwt7f9ab.js";import"./chunk-v11r4ahz.js";import"./chunk-thstqcg3.js";import"./chunk-6360fg4j.js";import"./chunk-byekf2bq.js";import"./chunk-e09g9a7d.js";import"./chunk-gkc69333.js";import"./chunk-29abk8tj.js";import"./chunk-kah7p2zm.js";export{b as __setSessionSnapshotIOForTesting,c as __resetSessionSnapshotIOForTesting,g as SessionService,d as SessionMissingCreationError,e as SessionArchivedError,f as SessionArchiveConflictError,a as STALE_EMPTY_SESSION_AGE_MS};
@@ -1,5 +0,0 @@
1
- import{Rf as et,Sf as Ee,Tf as Pe,Uf as tt,Vf as fe,Xf as xe}from"./chunk-bvdk0hb2.js";import{ag as V}from"./chunk-byekf2bq.js";import{eg as Ue,gg as oe}from"./chunk-fjcmx039.js";import{jg as Je}from"./chunk-e09g9a7d.js";var _t={openrouter:{"HTTP-Referer":"https://github.com/echoVic/blade-code","X-Title":"Blade"},cerebras:{"X-Cerebras-3rd-Party-Integration":"blade"}},le=(e)=>_t[e]||{};var Mt=new Set(["user-cancel","interrupt","sibling-error","timeout"]);function te(e){return typeof e==="string"&&Mt.has(e)}function yt(e){if(!e.aborted)return;if(te(e.reason))return e.reason;return"user-cancel"}function nn(e){if(te(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 Ie(...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 f of t)if(f.aborted)return f;let u=new AbortController,o=new Map;for(let f of t){let p=()=>{u.abort(f.reason);for(let[_,h]of o)_.removeEventListener("abort",h)};o.set(f,p)}for(let[f,p]of o)f.addEventListener("abort",p,{once:!0});return u.signal}function K(e,t,n){let u=n?.throwOnAbort??!1;if(t?.aborted){if(u)return Promise.reject(new DOMException("Aborted","AbortError"));return Promise.resolve()}return new Promise((o,f)=>{let p,_=setTimeout(()=>{if(t&&p)t.removeEventListener("abort",p);o()},e);if(t)p=()=>{if(clearTimeout(_),u)f(new DOMException("Aborted","AbortError"));else o()},t.addEventListener("abort",p,{once:!0})})}var Et=V("Chat"),Pt={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};function ne(e){if(typeof e==="string")return e;return e.filter((t)=>t.type==="text").map((t)=>t.text).join(`
2
- `)}function bt(e){if(!e)return{};try{let t=JSON.parse(e);return t&&typeof t==="object"&&!Array.isArray(t)?t:{}}catch{return Et.warn("[PiAIChatService] Invalid historical tool arguments",{value:e}),{}}}function st(e){let t=e.match(/^data:([^;,]+);base64,(.+)$/s);return t?{mimeType:t[1],data:t[2]}:void 0}async function ct(e,t){let n=st(e);if(n)return{type:"image",...n};if(!/^https?:\/\//i.test(e))return{type:"text",text:`[Unsupported image source: ${e}]`};let u=await fetch(e,{signal:t});if(!u.ok)throw Error(`Failed to load image ${e}: HTTP ${u.status}`);return{type:"image",mimeType:u.headers.get("content-type")?.split(";")[0]??"image/png",data:Buffer.from(await u.arrayBuffer()).toString("base64")}}async function Oe(e,t,n,u,o){let f=e.filter((h)=>h.role==="system").map((h)=>ne(h.content)).filter(Boolean).join(`
3
-
4
- `),p=[];for(let h of e){if(h.role==="system")continue;if(h.role==="user"){let x=t.input.includes("image"),M=typeof h.content==="string"?h.content:await Promise.all(h.content.map((P)=>P.type==="text"?Promise.resolve({type:"text",text:P.text}):x?ct(P.image_url.url,u):Promise.resolve({type:"text",text:"[Image omitted: current model does not support image input]"})));p.push({role:"user",content:M,timestamp:Date.now()});continue}if(h.role==="assistant"){let x=[];if(h.reasoningContent?.trim())x.push({type:"thinking",thinking:h.reasoningContent});let M=ne(h.content);if(M)x.push({type:"text",text:M});for(let P of h.tool_calls??[]){if(!("function"in P))continue;x.push({type:"toolCall",id:P.id,name:P.function.name,arguments:bt(P.function.arguments)})}p.push({role:"assistant",content:x,api:t.api,provider:t.provider,model:t.id,usage:Pt,stopReason:h.tool_calls?.length?"toolUse":"stop",timestamp:Date.now()});continue}p.push({role:"toolResult",toolCallId:h.tool_call_id??"",toolName:h.name??"unknown",content:[{type:"text",text:ne(h.content)}],isError:!1,timestamp:Date.now()})}let _=n?.filter((h)=>!o||h.name===o).map((h)=>({name:h.name,description:h.description,parameters:h.parameters,constrainedSampling:h.constrainedSampling}));return{...f?{systemPrompt:f}:{},messages:p,..._?.length?{tools:_}:{}}}function De(e){let t=[];for(let n=0;n<e.length;n++){let u=e[n];if(u.role==="tool")continue;let o=u.role==="assistant"&&u.tool_calls?.length?u.tool_calls:void 0;if(!o){t.push(u);continue}let f=[],p=n+1;while(p<e.length&&e[p].role==="tool")f.push(e[p++]);let _=new Set(o.map((M)=>M.id)),h=f.filter((M)=>M.tool_call_id&&_.has(M.tool_call_id)),x=new Set(h.map((M)=>M.tool_call_id));if(_.size===o.length&&h.length===_.size&&x.size===_.size)t.push(u,...h);n=p-1}return t}function ke(e){return e.some((t)=>t.role==="assistant"&&Boolean(t.tool_calls?.length)&&!t.reasoningContent?.trim())}function je(e,t){return{...e,...t.baseUrl?{baseUrl:Ue(e.api,t.baseUrl)}:{},...t.maxOutputTokens?{maxTokens:t.maxOutputTokens}:{}}}function ue(e){let t=e.modelCatalog??oe();return{models:t.models,model:je(t.getModel(e.provider,e.model),e)}}function Ne(e,t){let n=e.modelCatalog??oe();return je(n.getModel(t.provider,t.model),e)}import{createHmac as mt,randomBytes as Tt}from"node:crypto";var at=60000,Ct=4,Rt=0.8;var F=300000,de=600000;var Be=128,Ve=256,At=1800000,Ye=50;class Z extends Error{circuit;code="PROVIDER_CIRCUIT_OPEN";constructor(e){super(`Provider circuit open; retry after ${e.retryAfterMs??0}ms`);this.circuit=e;this.name="ProviderCircuitOpenError"}}function he(e){return e instanceof Z||e!==null&&typeof e==="object"&&"code"in e&&e.code==="PROVIDER_CIRCUIT_OPEN"}function Y(e,t){return e!==void 0&&Number.isSafeInteger(e)&&e>0?e:t}function gt(e,t){return e!==void 0&&Number.isFinite(e)&&e>0&&e<=1?e:t}function lt(e){try{let t=new URL(e);if(t.hash="",t.hostname=t.hostname.toLowerCase(),t.searchParams.sort(),t.pathname!=="/")t.pathname=t.pathname.replace(/\/+$/,"");return t.toString()}catch{return e.trim().replace(/\/+$/,"")}}function It(e){if(!e)return[];return Object.entries(e).map(([t,n])=>[t.trim().toLowerCase(),n.trim()]).sort(([t],[n])=>t.localeCompare(n))}function St(e,t){let n=JSON.stringify([e.provider.trim(),String(e.api).trim(),lt(e.baseUrl),e.model.trim(),e.serviceTier?.trim()??"",e.apiVersion?.trim()??"",e.apiKey??"",It(e.customHeaders),e.openDurationMs]);return mt("sha256",Buffer.from(t)).update(n).digest("hex")}function J(e){let t=0;for(let n of e)if(n.failure)t++;return t}function we(e){return e!==void 0&&Number.isInteger(e)&&e>=100&&e<=599?e:void 0}function ze(e){if(e===void 0||!Number.isFinite(e)||e<0)return;return Math.min(Math.ceil(e),xe)}class We{#e=new Map;#o=new WeakMap;#p;#n;#u;#t;constructor(e={}){this.#p=e.processSecret?new Uint8Array(e.processSecret):Tt(32),this.#n=e.now??(()=>performance.now()),this.#u=e.wallNow??e.now??Date.now,this.#t={maxEntries:Math.min(Y(e.maxEntries,Be),Be),maxWindowEntries:Math.min(Y(e.maxWindowEntries,Ve),Ve),windowMs:Y(e.windowMs,at),minSamples:Y(e.minSamples,Ct),errorRateThreshold:gt(e.errorRateThreshold,Rt),idleTtlMs:Y(e.idleTtlMs,At)}}get size(){return this.#e.size}get(e){if(e.openDurationMs===0)return this.#f();let t=this.#n();this.#R(t);let n=St(e,this.#p),u=this.#e.get(n);if(u)return u.lastTouchedAt=t,this.#_(u,e.probeLeaseMs);if(this.#e.size>=this.#t.maxEntries)this.#A();if(this.#e.size>=this.#t.maxEntries)return this.#f();let o={key:n,state:"closed",samples:[],generation:0,nextAttemptId:1,nextProbeLeaseId:1,configuredOpenDurationMs:e.openDurationMs,effectiveOpenDurationMs:e.openDurationMs,lastTouchedAt:t,detached:!1};return this.#e.set(n,o),this.#_(o,e.probeLeaseMs)}#_(e,t){let n=this,u=Math.max(F,Math.min(Y(t,F),de));return{check:()=>n.#c(e,u),recordSuccess:(o)=>n.#d(o,"success"),recordFailure:(o,f)=>n.#d(o,"failure",f),recordNeutral:(o)=>n.#d(o,"neutral"),abandon:(o)=>n.#b(o),snapshot:()=>n.#C(e)}}#f(){let e=this;return{check:()=>{let t=Object.freeze({kind:"noop"});return e.#o.set(t,{generation:0,attemptId:0,kind:"noop",settled:!1}),{allowed:!0,probe:!1,token:t}},recordSuccess:(t)=>e.#x(t),recordFailure:(t)=>e.#x(t),recordNeutral:(t)=>e.#x(t),abandon:(t)=>e.#b(t),snapshot:()=>({state:"closed",sampleCount:0,failureCount:0,noop:!0,detached:!1})}}#x(e){let t=this.#o.get(e);if(t?.kind==="noop")t.settled=!0;return}#c(e,t){let n=this.#n();if(e.detached)return this.#f().check();if(e.lastTouchedAt=n,this.#h(e,n),e.state==="closed")return this.#M(e,"regular");if(e.state==="open"){let o=e.nextProbeAt??n;if(n<o)return this.#E(e,o-n);e.state="half_open",e.generation++,e.probeLeaseId=void 0,e.probeLeaseExpiresAt=void 0}if(e.probeLeaseId===void 0||e.probeLeaseExpiresAt!==void 0&&n>=e.probeLeaseExpiresAt)return this.#m(e,n,t);let u=Math.max(1,(e.probeLeaseExpiresAt??n+Ye)-n);return this.#E(e,Math.min(Ye,u))}#M(e,t,n){let u=Object.freeze({kind:t});return this.#o.set(u,{entry:e,generation:e.generation,attemptId:e.nextAttemptId++,kind:t,...n!==void 0?{probeLeaseId:n}:{},settled:!1}),{allowed:!0,probe:t==="probe",token:u}}#m(e,t,n){let u=e.nextProbeLeaseId++;e.probeLeaseId=u,e.probeLeaseExpiresAt=t+n,e.lastTouchedAt=t;let o=this.#M(e,"probe",u),f=e.lastFailure??{reason:"server_error"};return{...o,reason:f.reason,...f.statusCode!==void 0?{statusCode:f.statusCode}:{},openDurationMs:e.effectiveOpenDurationMs,sampleCount:e.samples.length,failureCount:J(e.samples)}}#E(e,t){let n=e.lastFailure??{reason:"server_error"};return{allowed:!1,state:e.state==="open"?"open":"half_open",reason:n.reason,...n.statusCode!==void 0?{statusCode:n.statusCode}:{},retryAfterMs:Math.max(0,Math.ceil(t)),nextProbeAt:this.#u()+Math.max(0,Math.ceil(t)),openDurationMs:e.effectiveOpenDurationMs,sampleCount:e.samples.length,failureCount:J(e.samples)}}#d(e,t,n){let u=this.#o.get(e);if(!u||u.settled)return;if(u.settled=!0,u.kind==="noop"||!u.entry)return;let o=u.entry;if(o.detached||u.generation!==o.generation||u.kind==="regular"&&o.state!=="closed"||u.kind==="probe"&&(o.state!=="half_open"||u.probeLeaseId!==o.probeLeaseId))return;let f=this.#n();if(o.lastTouchedAt=f,u.kind==="probe"){if(t==="failure"&&n)return this.#P(o,n,f,"reopened");return this.#T(o)}if(t==="neutral")return;if(this.#a(o,t==="failure",f),t!=="failure"||!n)return;let p=J(o.samples),_=o.samples.length===0?0:p/o.samples.length;if(o.samples.length>=this.#t.minSamples&&_>=this.#t.errorRateThreshold)return this.#P(o,n,f,"opened");return}#P(e,t,n,u){let o={reason:t.reason,...we(t.statusCode)!==void 0?{statusCode:we(t.statusCode)}:{},...ze(t.retryAfterMs)!==void 0?{retryAfterMs:ze(t.retryAfterMs)}:{}},f=o.retryAfterMs??0,p=Math.max(e.configuredOpenDurationMs,f);return e.state="open",e.generation++,e.probeLeaseId=void 0,e.probeLeaseExpiresAt=void 0,e.effectiveOpenDurationMs=p,e.nextProbeAt=n+p,e.lastFailure=o,{phase:u,reason:o.reason,...o.statusCode!==void 0?{statusCode:o.statusCode}:{},retryAfterMs:p,nextProbeAt:this.#u()+p,openDurationMs:p,sampleCount:e.samples.length,failureCount:J(e.samples)}}#T(e){let t=e.lastFailure??{reason:"server_error"};return e.state="closed",e.generation++,e.samples=[],e.probeLeaseId=void 0,e.probeLeaseExpiresAt=void 0,e.nextProbeAt=void 0,e.effectiveOpenDurationMs=e.configuredOpenDurationMs,{phase:"closed",reason:t.reason,...t.statusCode!==void 0?{statusCode:t.statusCode}:{},openDurationMs:e.effectiveOpenDurationMs,sampleCount:0,failureCount:0}}#b(e){let t=this.#o.get(e);if(!t||t.settled)return!1;if(t.settled=!0,t.kind==="noop")return!0;let n=t.entry;if(!n||n.detached||t.kind!=="probe"||t.generation!==n.generation||t.probeLeaseId!==n.probeLeaseId)return!1;return n.probeLeaseId=void 0,n.probeLeaseExpiresAt=void 0,n.lastTouchedAt=this.#n(),!0}#a(e,t,n){if(this.#h(e,n),e.samples.length>=this.#t.maxWindowEntries)e.samples.shift();e.samples.push({at:n,failure:t})}#h(e,t){let n=t-this.#t.windowMs,u=0;while(u<e.samples.length&&e.samples[u].at<n)u++;if(u>0)e.samples.splice(0,u)}#C(e){if(!e.detached)this.#h(e,this.#n());return{state:e.state,sampleCount:e.samples.length,failureCount:J(e.samples),...e.nextProbeAt!==void 0?{nextProbeAt:e.nextProbeAt}:{},noop:!1,detached:e.detached}}#R(e){for(let[t,n]of this.#e)if(n.state==="closed"&&e-n.lastTouchedAt>this.#t.idleTtlMs)this.#s(t,n)}#A(){let e;for(let t of this.#e.values())if(t.state==="closed"&&(!e||t.lastTouchedAt<e.lastTouchedAt))e=t;if(e)this.#s(e.key,e)}#s(e,t){t.detached=!0,this.#e.delete(e)}}var re;function Xe(){return re??=new We,re}var Ge=new WeakSet;class Q 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 Ot=["gousagelimiterror","freeusagelimiterror","monthly usage limit reached","available balance","insufficient_quota","out of budget","quota exceeded","billing"],Dt=["prompt_too_long","prompt is too long","maximum context length","context length exceeded","context_length_exceeded","request too large"],kt=["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 $e(e){return(e instanceof Error?e.message:String(e)).toLowerCase()}function Ut(e){let t=$e(e);return Dt.some((n)=>t.includes(n))}function pe(e){if(e!==null&&typeof e==="object")Ge.add(e)}function cn(e){return e!==null&&typeof e==="object"&&Ge.has(e)}function jt(e){return e!==null&&typeof e==="object"&&"code"in e?e.code:void 0}function Nt(e){if(e===null||typeof e!=="object")return;let t=e;for(let n of["status","statusCode"]){let u=t[n];if(typeof u==="number"&&Number.isInteger(u))return u}return}function Bt(e){let t=e.match(/^(?:error:\s*)?(\d{3})\b/),n=e.match(/\b(?:status(?:\s+code)?|http)[:\s]+(\d{3})\b/),u=Number(t?.[1]??n?.[1]);return Number.isInteger(u)?u:void 0}function w(e,t){let n=$e(e),u=jt(e);if(u==="STREAM_IDLE_TIMEOUT"||u==="PROVIDER_RECOVERY_BUDGET_EXCEEDED"||e instanceof Error&&e.name==="AbortError"||n.includes("request aborted")||n==="aborted")return{retryable:!1};if(Ot.some((f)=>n.includes(f))||Ut(e))return{retryable:!1};if(t?.shouldRetry==="false")return{retryable:!1,statusCode:t.statusCode};let o=t?.statusCode??Nt(e)??Bt(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(u==="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(kt.some((f)=>n.includes(f)))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 _e(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 u=Date.parse(e.retryAfter);return Number.isFinite(u)?Math.max(0,u-t):void 0}function He(e,t,n={}){let u=n.now??Date.now(),o=n.maxDelayMs??60000,f=_e(t,u);if(f!==void 0)return Math.min(Math.ceil(f),o);let p=Math.max(0,e-1),_=n.maxExponentialDelayMs??8000,h=Math.min(500*2**p,_),x=Math.max(0,Math.min(1,n.random??Math.random())),M=h*(0.75+x*0.25);return Math.min(Math.round(M),o)}function Ze(e,t){let n=e.onPayload;e.onPayload=async(u,o)=>{let f=n?await n(u,o):u;return t(f===void 0?u:f,o)}}function Vt(e){if(!e.reasoningEnabled)return;return e.reasoningEffort??e.reasoningLevel??"high"}function Yt(e){switch(e){case"minimal":return"MINIMAL";case"low":return"LOW";case"medium":return"MEDIUM";default:return"HIGH"}}function wt(e,t,n,u){let o=u?void 0:Vt(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:Yt(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 zt(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 rt(e,t,n){let u=n.serviceTier;if(!u)return;if(t.api==="openai-responses"||t.api==="openai-codex-responses"||t.api==="azure-openai-responses"){e.serviceTier=u;return}if(t.api!=="openai-completions"&&!(t.api==="anthropic-messages"&&u==="fast"))return;Ze(e,(o)=>{if(!o||typeof o!=="object"||Array.isArray(o))return o;return t.api==="anthropic-messages"?{...o,speed:"fast"}:{...o,service_tier:u}})}function Wt(e,t,n){let u=n.responseVerbosity;if(!u)return;if(Je(t,u),t.api==="openai-codex-responses"){e.textVerbosity=u;return}Ze(e,(o)=>{if(!o||typeof o!=="object"||Array.isArray(o))return o;if(t.api==="openai-completions")return{...o,verbosity:u};let f="text"in o&&o.text&&typeof o.text==="object"&&!Array.isArray(o.text)?o.text:{};return{...o,text:{...f,verbosity:u}}})}function Qe(e,t,n,u,o=!1){let f={apiKey:e.apiKey,headers:e.customHeaders,signal:n,temperature:u?.temperature??e.temperature??0,maxTokens:u?.maxOutputTokens??e.maxOutputTokens,timeoutMs:e.timeout,maxRetries:0,cacheRetention:e.enablePromptCaching?"short":"none"};if(wt(f,t,e,o),zt(f,t.api,u?.toolChoice?.toolName),rt(f,t,e),Wt(f,t,e),t.api==="azure-openai-responses")f.azureBaseUrl=e.baseUrl,f.azureApiVersion=e.apiVersion,f.azureDeploymentName=t.id;return f}function Ke(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 Xt=new Set(["anthropic-messages","openai-completions","openai-responses","openai-codex-responses","azure-openai-responses","pi-messages"]);function Le(e,t,n){let u=e.onResponse;if(e.onResponse=async(f,p)=>{let _=new Headers(f.headers);n(Ke(f.status,_)),await u?.(f,p)},!Xt.has(t.api)||typeof globalThis.fetch!=="function")return;let o=typeof e.fetch==="function"?e.fetch:globalThis.fetch.bind(globalThis);e.fetch=async(f,p)=>{let _=await o(f,p);return n(Ke(_.status,_.headers)),_}}function ie(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 v=300000,Gt=30000;class qe 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 Fe extends Error{code="PROVIDER_STREAM_CLOSED";constructor(){super("Provider stream closed before completion");this.name="ProviderStreamClosedError"}}function Me(e){return e.reason instanceof Error?e.reason:new DOMException("Aborted","AbortError")}function $t(e){return e.idleTimeoutMs&&e.idleTimeoutMs>0?e.idleTimeoutMs:v}function Ht(e,t){if(t===0)return;let n=t!==void 0&&t>0?t:Gt;return Math.max(1,Math.min(n,Math.floor(e/2)))}function Kt(e,t,n){if(n?.aborted)return Promise.reject(Me(n));return new Promise((u,o)=>{let f=!1,p=()=>{clearTimeout(M),n?.removeEventListener("abort",x)},_=(P)=>{if(f)return;f=!0,p(),u(P)},h=(P)=>{if(f)return;f=!0,p(),o(P instanceof Error?P:Error(String(P)))},x=()=>{if(n)h(Me(n))},M=setTimeout(()=>_({kind:"timer"}),Math.max(0,t));if(n?.addEventListener("abort",x,{once:!0}),n?.aborted){x();return}e.then((P)=>_({kind:"next",result:P}),h)})}async function*Jt(e,t,n){let u=$t(t),o=Ht(u,t.stallWarningMs);if(t.signal?.aborted)throw Me(t.signal);let f=Date.now(),p=Promise.resolve().then(()=>e.next()),_;for(;;){let x=await Kt(p,(_?u:o??u)-(Date.now()-f),t.signal);if(x.kind==="next"){if(_)yield{..._,phase:"recovered",durationMs:Math.max(_.durationMs,Date.now()-f)};return x.result}if(!_&&o!==void 0){n.stallCount++,_={phase:"detected",stallCount:n.stallCount,durationMs:o,warningAfterMs:o,timeoutMs:u,outputStarted:n.outputStarted},yield _;continue}let M=new qe(u);throw t.abort?.(M),M}}async function*ve(e,t,n,u,o={}){let p=e.stream(t,n,u)[Symbol.asyncIterator](),_=0,h=!1,x={stallCount:0,outputStarted:!1};try{while(!0){let M=Jt(p,o,x),P=await M.next();while(!P.done)yield{providerStall:P.value},P=await M.next();let C=P.value;if(C.done)throw new Fe;let s=C.value;switch(s.type){case"text_delta":x.outputStarted=!0,yield{content:s.delta};break;case"thinking_delta":x.outputStarted=!0,yield{reasoningContent:s.delta};break;case"toolcall_end":x.outputStarted=!0,yield{toolCalls:[{index:_++,id:s.toolCall.id,type:"function",function:{name:s.toolCall.name,arguments:JSON.stringify(s.toolCall.arguments)}}]};break;case"done":h=!0,yield{finishReason:s.reason,usage:ie(s.message.usage)};return;case"error":throw Error(s.error.errorMessage??`Request ${s.reason==="aborted"?"aborted":"failed"}`)}}}finally{if(!h)Promise.resolve(p.return?.()).catch(()=>{return})}}var ye=V("Chat");function Zt(e){return Boolean(e&&e.role==="user"&&Array.isArray(e.content)&&e.content.some((t)=>t.type==="image_url"))}function Qt(e,t){let n=w(e,t);if(!n.retryable||!n.reason)return;let u=n.statusCode;switch(n.reason){case"rate_limit":if(u!==429)return;break;case"server_error":if(u===void 0||u<500||u>599)return;break;case"transport":case"stream_closed":break;case"timeout":return}let o=_e(t,Date.now());return{reason:n.reason,...u!==void 0?{statusCode:u}:{},...o!==void 0?{retryAfterMs:o}:{}}}function Lt(e){return e!==null&&typeof e==="object"&&"code"in e&&e.code==="STREAM_IDLE_TIMEOUT"}class be{config;models;model;constructor(e){let t=ue(e);this.config={...e,maxContextTokens:t.model.contextWindow,maxOutputTokens:e.maxOutputTokens??t.model.maxTokens},this.models=t.models,this.model=t.model,ye.debug("[PiAIChatService] Initialized",{provider:this.model.provider,model:this.model.id,api:this.model.api})}async chat(e,t,n,u){let o="",f="",p=[],_,h;for await(let x of this.streamChat(e,t,n,u)){o+=x.content??"",f+=x.reasoningContent??"";for(let M of x.toolCalls??[])if(M.id&&M.type==="function"&&M.function?.name)p.push(M);_=x.usage??_,h=x.finishReason??h}return{content:o,...f?{reasoningContent:f}:{},...p.length>0?{toolCalls:p}:{},usage:_,finishReason:h}}async*streamChat(e,t,n,u){let o=u?.toolChoice?.toolName;if(o&&!t?.some((d)=>d.name===o))throw Error(`Required tool is unavailable: ${o}`);let f=De(e);if(f.some((d)=>Zt(d))&&!this.model.input.includes("image"))throw Error(`${this.model.name} does not support image input`);let p=Boolean(o)||ke(f),_=await Oe(f,this.model,t,n,o),h=u?.providerRecovery;if(h&&!tt(h.budgetMs))throw Error("Invalid bounded foreground Provider recovery budget");let x=h?.mode==="bounded_foreground"&&h.budgetMs>0?{budgetMs:h.budgetMs,startedAt:void 0}:void 0,M=x?"bounded_foreground":"standard",P=this.config.maxRetries??2,C=this.config.maxRetries??(x?et:2),s=x!==void 0&&this.config.maxRetries===void 0,O=0,k,nt=this.config.providerCircuitRegistry??Xe(),se=this.config.providerCircuitBreakerOpenMs??fe,ot=Math.max(F,Math.min(this.config.streamIdleTimeout??v,de)),ut=(d)=>nt.get({provider:d.provider,api:d.api,baseUrl:d.baseUrl??this.config.baseUrl??"",model:d.id,serviceTier:this.config.serviceTier,apiVersion:this.config.apiVersion,apiKey:this.config.apiKey,customHeaders:this.config.customHeaders,openDurationMs:se,probeLeaseMs:ot}),A=(d=Date.now())=>{if(!x)return;let b=x.startedAt===void 0?0:Math.min(x.budgetMs,Math.max(0,d-x.startedAt));return{recoveryBudgetMs:x.budgetMs,recoveryElapsedMs:b,recoveryRemainingMs:Math.max(0,x.budgetMs-b)}},D=()=>({mode:M,...A()??{}}),ce=()=>{if(x&&x.startedAt===void 0)x.startedAt=Date.now()},z=()=>{let d=A();return new Q(x?.budgetMs??0,d?.recoveryElapsedMs??0)},r=()=>!s||O<C+1,ft=(d)=>{if(!r())throw z();if(s)O++;k=void 0;let b=new AbortController,g=n?Ie(n,b.signal):b.signal,a;if(x?.startedAt!==void 0){let m=A()?.recoveryRemainingMs??0;if(m<=0)throw z();let S=new Q(x.budgetMs,x.budgetMs);a=setTimeout(()=>b.abort(S),m),a.unref?.()}let U=Qe(this.config,d,g,u,p);Le(U,d,(m)=>{k=m});let j=ve(this.models,d,_,U,{idleTimeoutMs:this.config.streamIdleTimeout??v,signal:g,abort:(m)=>b.abort(m)});return async function*(){try{yield*j}finally{if(a)clearTimeout(a)}}()},me=this,B=(d)=>({phase:d.phase,reason:d.reason,...d.statusCode!==void 0?{statusCode:d.statusCode}:{},...d.retryAfterMs!==void 0?{retryAfterMs:d.retryAfterMs}:{},...d.nextProbeAt!==void 0?{nextProbeAt:d.nextProbeAt}:{},openDurationMs:d.openDurationMs,sampleCount:d.sampleCount,failureCount:d.failureCount,...A()?{recoveryRemainingMs:A()?.recoveryRemainingMs}:{}}),Te=(d,b)=>({phase:d,reason:b.reason,...b.statusCode!==void 0?{statusCode:b.statusCode}:{},retryAfterMs:b.retryAfterMs,...b.nextProbeAt!==void 0?{nextProbeAt:b.nextProbeAt}:{},openDurationMs:b.openDurationMs,sampleCount:b.sampleCount,failureCount:b.failureCount,...A()?{recoveryRemainingMs:A()?.recoveryRemainingMs}:{}}),xt=(d)=>({phase:"probe",reason:d.reason??"server_error",...d.statusCode!==void 0?{statusCode:d.statusCode}:{},openDurationMs:d.openDurationMs??se,...d.sampleCount!==void 0?{sampleCount:d.sampleCount}:{},...d.failureCount!==void 0?{failureCount:d.failureCount}:{},...A()?{recoveryRemainingMs:A()?.recoveryRemainingMs}:{}}),ae=(d,b,g)=>({providerRetry:{phase:"exhausted",attempt:d,maxRetries:C,reason:b,...g!==void 0?{statusCode:g}:{},...D(),exhaustedBy:"recovery_budget"}}),Ce=async function*(d,b,g,a){let U,j=!1,m,S,N=ut(d);for(let l=0;l<=g;l++){if(!r())break;let R=N.check();while(!R.allowed){if(m=R.reason,S=R.statusCode,!x||!a){let E=Te("rejected",R);throw yield{providerCircuit:E},new Z(E)}ce();let c=A()?.recoveryRemainingMs??0;if(c<=0){let E=z();throw yield ae(s?Math.max(0,O-1):l,R.reason,R.statusCode),E}yield{providerCircuit:Te("waiting",R)};let I=Math.min(Math.max(1,R.retryAfterMs),Ee,c);if(await K(I,n,{throwOnAbort:!0}),(A()?.recoveryRemainingMs??0)<=0){let E=z();throw yield ae(s?Math.max(0,O-1):l,R.reason,R.statusCode),E}R=N.check()}let W=R.token;if(R.probe)yield{providerCircuit:xt(R)};try{let T=!1,c=!1;for await(let I of ft(d)){if(I.providerStall){yield I;continue}let E=s?O-1:l;if(E>0&&m&&!T)T=!0,yield{providerRetry:{phase:"recovered",attempt:E,maxRetries:C,reason:m,...S!==void 0?{statusCode:S}:{},...D()}};if(!c){c=!0;let X=N.recordSuccess(W);if(X)yield{providerCircuit:B(X)}}j=!0,b(),yield I}if(!c){let I=N.recordSuccess(W);if(I)yield{providerCircuit:B(I)}}return}catch(T){if(U=T,me.logIdleTimeout(T,j,d),await me.handleAbort(n),T instanceof Q){if(j)throw pe(T),T;throw yield{providerRetry:{phase:"exhausted",attempt:s?Math.max(0,O-1):l,maxRetries:C,reason:m??"timeout",...S!==void 0?{statusCode:S}:{},...D(),exhaustedBy:"recovery_budget"}},T}let c=w(T,k);if(j)throw pe(T),T;let I=Qt(T,k),E=I?N.recordFailure(W,I):k&&!Lt(T)?N.recordNeutral(W):void 0;if(E)yield{providerCircuit:B(E)};if(!c.retryable||!c.reason){if(l>0&&m)yield{providerRetry:{phase:"exhausted",attempt:s?Math.max(0,O-1):l,maxRetries:C,reason:m,...S!==void 0?{statusCode:S}:{},...D()}};throw T}m=c.reason,S=c.statusCode;let X=l<g&&r();if(E&&E.phase!=="closed"&&X&&(!x||!a)){let G={...B(E),phase:"rejected"};throw yield{providerCircuit:G},new Z(G)}if(X){ce();let G=s?O:l+1,ht=He(G,k,x?{maxDelayMs:Pe,maxExponentialDelayMs:Pe}:void 0),Ae=E&&E.phase!=="closed"?E.retryAfterMs??0:0;if(x&&Ae>0&&E)yield{providerCircuit:{...B(E),phase:"waiting"}};let pt=A(),ee=Math.max(ht,Ae),$=x?Math.min(ee,pt?.recoveryRemainingMs??ee):ee,i={attempt:G,maxRetries:C,reason:c.reason,...c.statusCode!==void 0?{statusCode:c.statusCode}:{}};if(yield{providerRetry:{phase:"scheduled",...i,delayMs:$,nextRetryAt:Date.now()+$,...D()}},x){let H=$;while(H>0){let ge=Math.min(H,Ee);if(await K(ge,n,{throwOnAbort:!0}),H-=ge,(A()?.recoveryRemainingMs??0)<=0){let q=z();throw yield{providerRetry:{phase:"exhausted",...i,...D(),exhaustedBy:"recovery_budget"}},q}if(H>0){if(E&&E.phase!=="closed"&&E.nextProbeAt!==void 0){let q=Math.max(0,E.nextProbeAt-Date.now());if(q>0)yield{providerCircuit:{...B(E),phase:"waiting",retryAfterMs:q}}}yield{providerRetry:{phase:"waiting",...i,delayMs:$,nextRetryAt:Date.now()+H,...D()}}}}}else await K($,n,{throwOnAbort:!0});yield{providerRetry:{phase:"attempt",...i,...D()}}}else yield{providerRetry:{phase:"exhausted",attempt:s?Math.max(0,O-1):l,maxRetries:C,reason:c.reason,...c.statusCode!==void 0?{statusCode:c.statusCode}:{},...D(),...x&&(a||!r())?{exhaustedBy:"attempt_limit"}:{}}}}finally{N.abandon(W)}}throw U},y,Re=!1,L=this.config.fallbackModels??[],dt=x&&L.length>0?Math.min(P,C):C;try{for await(let d of Ce(this.model,()=>{Re=!0},dt,L.length===0))yield d;return}catch(d){if(y=d,Re||!he(d)&&!w(d,k).retryable)throw d}for(let[d,b]of L.entries()){if(!r())break;yield{modelFallback:!0};let g=!1;try{let a=Ne(this.config,b),U=d===L.length-1,j=x&&!U?Math.min(P,C):C;for await(let m of Ce(a,()=>{g=!0},j,U))yield m;return}catch(a){if(y=a,g||!he(a)&&!w(a,k).retryable)throw a}}throw y}async handleAbort(e){if(e?.aborted)await K(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;ye.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=ue(t);this.config={...t,maxContextTokens:n.model.contextWindow,maxOutputTokens:t.maxOutputTokens??n.model.maxTokens},this.models=n.models,this.model=n.model}}var it=V("Service");async function zn(e){let t=e;if(t.provider){let n=le(t.provider);if(Object.keys(n).length>0)t={...t,customHeaders:{...n,...t.customHeaders}},it.debug(`Injected ${t.provider} specific headers:`,Object.keys(n))}return qt(t)}function qt(e){return new be(e)}
5
- export{yt as Hd,nn as Id,Ie as Jd,Ut as Kd,cn as Ld,be as Md,zn as Nd};
@@ -1 +0,0 @@
1
- import{ng as a,og as b,pg as c,qg as d,rg as e,sg as f}from"./chunk-gkc69333.js";import"./chunk-kah7p2zm.js";export{b as getVersion,c as getPackageName,a as getPackageInfo,e as getFormattedVersion,d as getDescription,f as getCopyright};
@@ -1 +0,0 @@
1
- import{Wc as a,Xc as b,Yc as c}from"./chunk-gq29vpef.js";import"./chunk-qggnvzkc.js";import"./chunk-kth1ra8z.js";import"./chunk-v508x7cg.js";import"./chunk-atsw605q.js";import"./chunk-ckfc7j7m.js";import"./chunk-3m0c6znc.js";import"./chunk-a7pvtxvz.js";import"./chunk-93jx06kq.js";import"./chunk-thstqcg3.js";import"./chunk-6360fg4j.js";import"./chunk-bvdk0hb2.js";import"./chunk-byekf2bq.js";import"./chunk-fjcmx039.js";import"./chunk-e09g9a7d.js";import"./chunk-gkc69333.js";import"./chunk-nh43dgpd.js";import"./chunk-zg6drp32.js";import"./chunk-29abk8tj.js";import"./chunk-kah7p2zm.js";export{a as validatePermissions,c as validateOutput,b as loadConfiguration};
@@ -1 +0,0 @@
1
- import{Od as a,Pd as b,Qd as c}from"./chunk-6yd3j5v5.js";import"./chunk-3rjmkaey.js";import"./chunk-fjcmx039.js";import"./chunk-e09g9a7d.js";import"./chunk-29abk8tj.js";import"./chunk-kah7p2zm.js";export{b as resolveModelConfig,c as getModelDisplayName,a as getModelApiKeyEnvironmentVariable};
@@ -1,2 +0,0 @@
1
- var n=600000,I=30000,R=3600000,r=12,t=15000,C=60000;function E(_){return _===0||typeof _==="number"&&Number.isSafeInteger(_)&&_>=30000&&_<=3600000}var P=1e4,o=1000,M=300000;function i(_){return _===0||typeof _==="number"&&Number.isSafeInteger(_)&&_>=1000&&_<=300000}
2
- export{n as Of,I as Pf,R as Qf,r as Rf,t as Sf,C as Tf,E as Uf,P as Vf,o as Wf,M as Xf,i as Yf};