blade-code 0.10.34 → 0.10.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blade.js +2 -2
- package/dist/chunk-09qkatb5.js +10 -0
- package/dist/{chunk-jdms602t.js → chunk-0dj2qm8a.js} +1 -1
- package/dist/{chunk-5knt529c.js → chunk-0evyrnx0.js} +2 -2
- package/dist/chunk-0m4s8r87.js +1612 -0
- package/dist/{chunk-sgyk3gq1.js → chunk-1raz6s2b.js} +2 -2
- package/dist/{chunk-64f79ce5.js → chunk-1t8ebwsp.js} +2 -2
- package/dist/{chunk-58gk92k3.js → chunk-250vpvr5.js} +1 -1
- package/dist/{chunk-pnjftj8t.js → chunk-2mvp3rqw.js} +2 -2
- package/dist/chunk-3pxn6gcj.js +1 -0
- package/dist/{chunk-b9y9mc7f.js → chunk-3rjmkaey.js} +1 -1
- package/dist/{chunk-1qj0qms6.js → chunk-4bbnytq5.js} +1 -1
- package/dist/chunk-4f1g8f6q.js +1 -0
- package/dist/{chunk-sexhm0r5.js → chunk-4s0c6tkd.js} +1 -1
- package/dist/{chunk-y9a1jwnv.js → chunk-4vq34v09.js} +2 -2
- package/dist/chunk-515mkr66.js +44 -0
- package/dist/chunk-5c5qh3ab.js +1 -0
- package/dist/{chunk-pgy1mtgw.js → chunk-5cgyevqj.js} +1 -1
- package/dist/chunk-5vkxcjn1.js +1 -0
- package/dist/chunk-5xc50n8e.js +1 -0
- package/dist/{chunk-dvf4cfye.js → chunk-6360fg4j.js} +1 -1
- package/dist/{chunk-16449n3m.js → chunk-6gcmfvfj.js} +2 -2
- package/dist/{chunk-dsxjgty6.js → chunk-6jpspf3v.js} +2 -2
- package/dist/chunk-738a282r.js +1 -0
- package/dist/{chunk-ag0z1q2q.js → chunk-7c5tnz4y.js} +1 -1
- package/dist/{chunk-vfecv6cv.js → chunk-8ft7j7aw.js} +1 -1
- package/dist/chunk-8m87dnk2.js +1 -0
- package/dist/{chunk-c23bewtt.js → chunk-93jx06kq.js} +1 -1
- package/dist/{chunk-00gwp388.js → chunk-95k17p11.js} +1 -1
- package/dist/{chunk-7a8k7ck4.js → chunk-95n8g52h.js} +1 -1
- package/dist/{chunk-v6x80gdg.js → chunk-99ywfge1.js} +1 -1
- package/dist/{chunk-3j6bsp1q.js → chunk-9g6rzbcv.js} +2 -2
- package/dist/{chunk-1ep6bcpc.js → chunk-a7pvtxvz.js} +1 -1
- package/dist/{chunk-fjbptkh2.js → chunk-acw8q8w9.js} +2 -2
- package/dist/{chunk-d90tnjst.js → chunk-atsw605q.js} +1 -1
- package/dist/{chunk-d3gx05ph.js → chunk-cc7dmst6.js} +3 -3
- package/dist/{chunk-p01t6c78.js → chunk-ck5tvxkj.js} +2 -2
- package/dist/{chunk-ysr3frmw.js → chunk-ckfc7j7m.js} +1 -1
- package/dist/chunk-cnctwxqn.js +1 -0
- package/dist/{chunk-2gca6fvf.js → chunk-e23sz81n.js} +2 -2
- package/dist/chunk-e5yage6p.js +1 -0
- package/dist/{chunk-ba2dky3s.js → chunk-ekzck3x7.js} +1 -1
- package/dist/{chunk-nq1wqpsx.js → chunk-g510tpqt.js} +1 -1
- package/dist/{chunk-fb80q06q.js → chunk-gy8esxaa.js} +2 -2
- package/dist/chunk-hh158y4e.js +6 -0
- package/dist/{chunk-t1z46fqz.js → chunk-hq18c6r9.js} +1 -1
- package/dist/{chunk-qd7r2w39.js → chunk-hq1wrf1g.js} +1 -1
- package/dist/chunk-j2tmdkmw.js +1 -0
- package/dist/{chunk-crwa61tq.js → chunk-m2w03hpc.js} +1 -1
- package/dist/{chunk-0kqp5z4v.js → chunk-m6dh31kb.js} +2 -2
- package/dist/{chunk-rjg5rq90.js → chunk-n4555gej.js} +1 -1
- package/dist/{chunk-2sdbj0zz.js → chunk-phgqzja3.js} +2 -2
- package/dist/chunk-psgt2pq7.js +6 -0
- package/dist/{chunk-fw1fm9cn.js → chunk-q15qd9x4.js} +1 -1
- package/dist/chunk-q3r0zfec.js +1 -0
- package/dist/chunk-qgez5vw6.js +2 -0
- package/dist/{chunk-5v642sh3.js → chunk-qggnvzkc.js} +2 -2
- package/dist/{chunk-7ryqs453.js → chunk-qvdcesry.js} +2 -2
- package/dist/{chunk-mr0xs5t4.js → chunk-qwrdss51.js} +1 -1
- package/dist/{chunk-h34g9v9z.js → chunk-qxvk42rf.js} +1 -1
- package/dist/{chunk-wz6atg87.js → chunk-rshbnfr8.js} +4 -4
- package/dist/chunk-rv6kca90.js +1 -0
- package/dist/{chunk-7afbvxqt.js → chunk-s4enbe93.js} +2 -2
- package/dist/chunk-thstqcg3.js +2 -0
- package/dist/{chunk-bx99mx3k.js → chunk-v11r4ahz.js} +1 -1
- package/dist/chunk-ve7kp9rr.js +1 -0
- package/dist/chunk-xf2kjb9a.js +1 -0
- package/dist/{chunk-vqqxjgf2.js → chunk-xrhtwcd0.js} +1 -1
- package/dist/chunk-y990fa4r.js +204 -0
- package/dist/{chunk-95jjpdh9.js → chunk-y9nq48st.js} +2 -2
- package/dist/{chunk-prqgpq92.js → chunk-zwt7f9ab.js} +1 -1
- package/dist/web/assets/{ChatView-B7_Um8KR.js → ChatView-Dx9j7CGg.js} +2 -2
- package/dist/web/assets/{CodeBlockHighlighter-JzE91vkT.js → CodeBlockHighlighter-CZADKR6S.js} +1 -1
- package/dist/web/assets/{FilePreview-BTbtoUBJ.js → FilePreview-BOIDa_oJ.js} +1 -1
- package/dist/web/assets/{MarkdownRenderer-IaPtOh2w.js → MarkdownRenderer-DXsfHVUX.js} +3 -3
- package/dist/web/assets/{SettingsModal-CPgWPfZ2.js → SettingsModal-lQveNhC6.js} +1 -1
- package/dist/web/assets/{TaskSwitcher-D4RZxQKp.js → TaskSwitcher-BSrmpJ2u.js} +1 -1
- package/dist/web/assets/{TerminalPanel-yWbQfbYa.js → TerminalPanel-BFre9Shc.js} +1 -1
- package/dist/web/assets/{index-BnCT8SxR.js → index-DGZjm9wT.js} +4 -4
- package/dist/web/assets/{session-events-BZao_jMQ.js → session-events-Dk20sSDo.js} +19 -19
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/chunk-1142vwqa.js +0 -6
- package/dist/chunk-2c8d4q3y.js +0 -1
- package/dist/chunk-3ctcv013.js +0 -44
- package/dist/chunk-5f956qbf.js +0 -1
- package/dist/chunk-87ge6dkk.js +0 -2
- package/dist/chunk-958rac3y.js +0 -1
- package/dist/chunk-ap5qpeh4.js +0 -1
- package/dist/chunk-c6fq52m9.js +0 -1
- package/dist/chunk-dvyv53nz.js +0 -1
- package/dist/chunk-ecsj4njh.js +0 -1
- package/dist/chunk-epyys9aw.js +0 -6
- package/dist/chunk-g0gqxn3c.js +0 -2
- package/dist/chunk-h3cvnbah.js +0 -1
- package/dist/chunk-jh6b81rb.js +0 -10
- package/dist/chunk-mxffhqe5.js +0 -1610
- package/dist/chunk-qr8j2mr6.js +0 -1
- package/dist/chunk-s1j86hhh.js +0 -204
- package/dist/chunk-s3sv04hf.js +0 -1
- package/dist/chunk-sjc7bm23.js +0 -1
- package/dist/chunk-tvrxzsna.js +0 -1
- package/dist/chunk-vhpvt5v8.js +0 -1
- package/dist/chunk-zp9p9tk6.js +0 -1
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
var
|
|
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 M(){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
|
|
4
|
-
`)}function U(e){if(!e.agentContent)return e;let t=e.agentContent;for(const n of $e(e.id,e.metadata))t=ue(t,n);return{...e,agentContent:t}}function Ne(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=M();s.thinkingContent&&(r=be(r,s.thinkingContent),r.thinkingContent=s.thinkingContent);const d=x(s.content);if(d&&(r=Ce(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 Pe(e){if(typeof e=="string"&&Object.keys(ce).includes(e))return e}function Ut(e){return ce[e]}function Bt(e){return Me[e]}const Re={flushTimeout:80};class xe{constructor(t){K(this,"config");K(this,"channels",new Map);this.config={...Re,...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 xe,De=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 we(e,t,n){n(a=>{const o={...a.pendingSubagentCompletions??{}};if(o[e]===void 0&&Object.keys(o).length>=De){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:M()};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:M()};return s(c),i(d),t(l=>({messages:l.messages.map(g=>g.id===d?{...g,agentContent:{...g.agentContent||M()}}: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"?M():void 0};c?i(r,{role:d,content:l.content,agentContent:d==="assistant"?{...c.agentContent||M()}:void 0}):o(l),d==="assistant"&&u(r)},je=(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:M()};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:ve(s.agentContent)})},qe=(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})},Oe=(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)},Ee=()=>{},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)},me=(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})},fe=(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 k;return(k=A.agentContent)==null?void 0:k.toolCalls.some(R=>R.toolCallId===d)}),l=r.find(A=>N(A.agentContent).some(k=>k.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),
|
|
6
|
-
`)})},
|
|
7
|
-
`)})},
|
|
8
|
-
`)})},
|
|
9
|
-
`)})},
|
|
10
|
-
`)})},
|
|
11
|
-
`)};if((m=(I=t().messages.find(S=>S.id===d))==null?void 0:I.agentContent)==null?void 0:m.toolCalls.some(S=>S.toolCallId===r)){u(d,r,l);return}o(d,{toolCallId:r,toolName:"MCP Task",arguments:JSON.stringify({taskId:s,serverName:e.serverName,toolName:e.toolName}),toolKind:"readonly",status:l.status,startTime:Number(e.createdAt)||Date.now(),summary:l.summary,output:l.output})},
|
|
12
|
-
`)})},z=e=>`user-shell-${e}`,
|
|
13
|
-
${r}`,metadata:{...s.metadata,userShellExecution:{...i,output:r,streamTruncated:e.streamTruncated===!0}}})},
|
|
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 Me(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=M();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"},Pe={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 Bt(e){return ce[e]}function Jt(e){return Pe[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:M()};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:M()};return s(c),i(d),t(l=>({messages:l.messages.map(g=>g.id===d?{...g,agentContent:{...g.agentContent||M()}}: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"?M():void 0};c?i(r,{role:d,content:l.content,agentContent:d==="assistant"?{...c.agentContent||M()}: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:M()};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),P=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||P,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})}P&&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===P||ie.subagentId===d),C=w>=0?O[w]:R.subtaskRef??{},E={...C,subagentId:d,childSessionId:P,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:P),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(P,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
|
+
`)})},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
|
+
`)})},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
|
+
`)})},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(`
|
|
9
|
+
`)})},He=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o}=t();if(e.sessionId!==a)return;const u=String(e.serverName),s=String(e.action),i=v(t,n,e.messageId||`mcp-instructions-${String(e.revision)}-${u}`);if(!i)return;const r=`MCP instructions ${s}: ${u}`+(e.truncated===!0?" (truncated)":"");o(i,{toolCallId:`mcp-instructions:${String(e.revision)}:${u}:${s}`,toolName:"MCP Instructions",arguments:JSON.stringify({serverName:u,action:s,reason:e.reason}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:r,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(`
|
|
10
|
+
`)})},Ge=(e,t,n)=>{var I,m;const{currentSessionId:a,appendToolCall:o,updateToolCall:u}=t();if(e.sessionId!==a)return;const s=String(e.taskId),i=String(e.status),r=`mcp-task:${s}`,d=v(t,n,e.messageId||`mcp-task-${s}`);if(!d)return;const c=`MCP task ${i}: ${s} · ${String(e.serverName)}/${String(e.toolName)}`,l={status:i==="failed"||i==="cancelled"?"error":i==="completed"?"success":"running",summary:c,output:[typeof e.statusMessage=="string"?e.statusMessage:"",e.hasResult===!0?"Result available via TaskOutput":"",typeof e.error=="string"?`Error: ${e.error}`:""].filter(Boolean).join(`
|
|
11
|
+
`)};if((m=(I=t().messages.find(S=>S.id===d))==null?void 0:I.agentContent)==null?void 0:m.toolCalls.some(S=>S.toolCallId===r)){u(d,r,l);return}o(d,{toolCallId:r,toolName:"MCP Task",arguments:JSON.stringify({taskId:s,serverName:e.serverName,toolName:e.toolName}),toolKind:"readonly",status:l.status,startTime:Number(e.createdAt)||Date.now(),summary:l.summary,output:l.output})},Qe=(e,t,n)=>{const{currentSessionId:a,appendToolCall:o}=t();if(e.sessionId!==a)return;const u=Array.isArray(e.files)?e.files.filter(d=>!!d&&typeof d=="object"&&!Array.isArray(d)):[],s=v(t,n,e.messageId||`project-rules-${Date.now()}`);if(!s)return;const i=e.blockedWrite===!0,r=`Project rules loaded: ${u.length}`+(i?" (write retry required)":"");o(s,{toolCallId:`project-rules:${u.map(d=>String(d.id)).join(",")}`,toolName:"Project Rules",arguments:JSON.stringify({triggerPaths:e.triggerPaths,blockedWrite:i}),toolKind:"readonly",status:"success",startTime:Date.now(),summary:r,output:u.map(d=>`${String(d.relativePath)} ${String(d.source)} SHA-256: ${String(d.contentSha256)}`).join(`
|
|
12
|
+
`)})},z=e=>`user-shell-${e}`,ze=(e,t,n)=>{const{currentSessionId:a,addMessage:o,messages:u,updateMessage:s}=t();if(e.sessionId!==a||typeof e.executionId!="string"||typeof e.command!="string")return;const i=z(e.executionId),r={id:i,role:"user",content:`! ${e.command}`,timestamp:Date.now(),metadata:{userShellExecution:{executionId:e.executionId,command:e.command,status:"running",output:""}}};u.some(d=>d.id===i)?s(i,r):o(r),e.auxiliary!==!0&&n({isStreaming:!0,agentPhase:"running",error:null,errorContext:null})},We=(e,t)=>{var d;const{currentSessionId:n,messages:a,updateMessage:o}=t();if(e.sessionId!==n||typeof e.executionId!="string"||typeof e.chunk!="string")return;const u=z(e.executionId),s=a.find(c=>c.id===u);if(!s)return;const i=(d=s.metadata)!=null&&d.userShellExecution&&typeof s.metadata.userShellExecution=="object"?s.metadata.userShellExecution:{},r=`${typeof i.output=="string"?i.output:""}${e.chunk}`;o(u,{content:`! ${String(i.command??"")}
|
|
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"})},
|
|
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)}))},
|
|
18
|
-
`)}]}))},
|
|
19
|
-
`)}]}))},
|
|
20
|
-
`)}]}))},
|
|
21
|
-
`)}]}))},
|
|
22
|
-
`)}]}))},mt=(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)}))},ft=(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})},It=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:e.reason==="context_limit"?"recovering_context":"compacting"})},St=(e,t,n)=>{e.sessionId===t().currentSessionId&&(t().resetContextUsage(),n({agentPhase:"running"}))},ht=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"switching_model",providerRetry:null,providerStall:null,actionStationarity:null})},yt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerRetry:e.phase==="recovered"?null:e})},Ct=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerStall:e.phase==="detected"?e:null})},bt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",actionStationarity:e.phase==="recovered"?null:e})},vt=(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)})))},At=(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)})))},Tt=(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)},kt=(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()},$t=(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=Pe(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)},Nt=(e,t,n)=>{const{currentSessionId:a}=t();if(e.sessionId===a)if(e.status==="idle")n({isStreaming:!1,isStopping:!1,agentPhase:"idle",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",providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null})},Mt=(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)}},Ie=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({pendingSteeringCount:typeof e.queued=="number"?Math.max(0,e.queued):1,pendingInputDelivery:"current_turn"})},Se=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({pendingSteeringCount:typeof e.queued=="number"?Math.max(0,e.queued):1,pendingInputDelivery:"next_turn"})},Pt=(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):we(e.childSessionId,a,n)}e.delivery==="current_turn"?Ie(e,t,n):Se(e,t,n)},Rt=(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})},xt=(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})},Dt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:e.goal??null})},wt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:null})},_t=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:e.goal??t().goal,isStreaming:!0,agentPhase:"running"})},jt=(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:Ne(o),isStreaming:!1,isStopping:!1,agentPhase:"idle",providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null,recoveredSteeringCount:0,currentAssistantMessageId:null,hasToolCalls:!1})},Ft=(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)},qt=(e,t,n)=>{ge({...e,messageId:`review-${String(e.reviewId??"active")}`,arguments:"{}"},t,n)},Ot=(e,t,n)=>{me(e,t)},Et=(e,t,n)=>{fe(e,t,n)},_={"message.created":_e,"message.delta":je,"message.complete":Fe,"structured.output":qe,"thinking.delta":Oe,"thinking.completed":Ee,"tool.start":ge,"tool.progress":me,"tool.result":fe,"mcp.catalog.changed":Ve,"mcp.content.changed":Ke,"mcp.resource.updated":Ue,"mcp.connection.changed":Be,"mcp.log":Je,"mcp.instructions.changed":Le,"mcp.task.changed":He,"project.rules.loaded":Ge,"user.shell.started":Qe,"user.shell.output":ze,"user.shell.completed":We,"token.usage":Ye,"task.updated":Xe,"subagent.start":Ze,"subagent.update":pe,"subagent.delta":et,"subagent.thinking.delta":tt,"subagent.tool.start":nt,"subagent.tool.progress":it,"subagent.tool.result":st,"subagent.mcp.catalog.changed":ot,"subagent.mcp.content.changed":at,"subagent.mcp.resource.updated":rt,"subagent.mcp.connection.changed":ut,"subagent.mcp.log":dt,"subagent.mcp.instructions.changed":lt,"subagent.mcp.task.changed":ct,"subagent.project.rules.loaded":gt,"subagent.complete":W,"subagent.completion.queued":Pt,"permission.asked":mt,"permission.timeout":ft,"turn.started":ae,"committed.turn_started":ae,"committed.turn_completed":re,"committed.turn_aborted":re,"provider.retry":yt,"provider.stall":Ct,"action.stationarity":bt,"compaction.started":It,"compaction.completed":St,"model.fallback":ht,"question.required":vt,"elicitation.required":At,"interaction.resolved":Tt,"session.completed":kt,"session.error":$t,"session.status":Nt,"run.cancelled":Mt,"steering.queued":Ie,"follow_up.queued":Se,"follow_up.started":xt,"steering.applied":Rt,"goal.updated":Dt,"goal.cleared":wt,"goal.continuation.started":_t,"session.rewound":jt,"review.tool.started":qt,"review.tool.progress":Ot,"review.tool.completed":Et,"review.completed":Ft},Vt=new Set(["message.complete","thinking.completed","session.completed","session.error","run.cancelled","committed.turn_completed","committed.turn_aborted"]),Jt=(e,t)=>n=>{const a=e().currentSessionRef,o=n.properties;if(!a||o.sessionId!==a.sessionId||o.projectPath!==a.projectPath)return;if(Vt.has(n.type)){$.drainAll();const s=_[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=_["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=_["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=_[n.type];u&&u(n.properties,e,t)};export{be as a,oe as b,M as c,Ce as d,Ne as e,Jt as f,N as g,$ as h,Pe as i,Bt as j,ve as k,j as l,Ut as t,ue as u,B as w};
|
|
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(`
|
|
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
|
+
`)}]}))},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
|
+
`)}]}))},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
|
+
`)}]}))},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
|
+
`)}]}))},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",providerRetry:null,providerStall:null,actionStationarity:null})},Ct=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerRetry:e.phase==="recovered"?null:e})},bt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",providerStall:e.phase==="detected"?e:null})},vt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({agentPhase:"running",actionStationarity:e.phase==="recovered"?null:e})},At=(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)})))},kt=(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)})))},Tt=(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)},$t=(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()},Nt=(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",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",providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null})},Pt=(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"})},Rt=(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)},xt=(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})},Dt=(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})},wt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:e.goal??null})},jt=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:null})},_t=(e,t,n)=>{e.sessionId===t().currentSessionId&&n({goal:e.goal??t().goal,isStreaming:!0,agentPhase:"running"})},Ft=(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:Me(o),isStreaming:!1,isStopping:!1,agentPhase:"idle",providerRetry:null,providerStall:null,actionStationarity:null,currentRunId:null,pendingSteeringCount:0,pendingInputDelivery:null,recoveredSteeringCount:0,currentAssistantMessageId:null,hasToolCalls:!1})},qt=(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)},Ot=(e,t,n)=>{ge({...e,messageId:`review-${String(e.reviewId??"active")}`,arguments:"{}"},t,n)},Et=(e,t,n)=>{fe(e,t)},Vt=(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":Rt,"permission.asked":ft,"permission.timeout":It,"turn.started":ae,"committed.turn_started":ae,"committed.turn_completed":re,"committed.turn_aborted":re,"provider.retry":Ct,"provider.stall":bt,"action.stationarity":vt,"compaction.started":St,"compaction.completed":ht,"model.fallback":yt,"question.required":At,"elicitation.required":kt,"interaction.resolved":Tt,"session.completed":$t,"session.error":Nt,"session.status":Mt,"run.cancelled":Pt,"steering.queued":Se,"follow_up.queued":he,"follow_up.started":Dt,"steering.applied":xt,"goal.updated":wt,"goal.cleared":jt,"goal.continuation.started":_t,"session.rewound":Ft,"review.tool.started":Ot,"review.tool.progress":Et,"review.tool.completed":Vt,"review.completed":qt},Kt=new Set(["message.complete","thinking.completed","session.completed","session.error","run.cancelled","committed.turn_completed","committed.turn_aborted"]),Lt=(e,t)=>n=>{const a=e().currentSessionRef,o=n.properties;if(!a||o.sessionId!==a.sessionId||o.projectPath!==a.projectPath)return;if(Kt.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,M as c,be as d,Me as e,Lt as f,N as g,$ as h,Re as i,Jt as j,Ae as k,_ as l,Bt as t,ue as u,B as w};
|
package/dist/web/index.html
CHANGED
|
@@ -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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-DGZjm9wT.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-
|
|
12
|
+
<link rel="modulepreload" crossorigin href="/assets/session-events-Dk20sSDo.js">
|
|
13
13
|
<link rel="stylesheet" crossorigin href="/assets/index-7zaeanZL.css">
|
|
14
14
|
</head>
|
|
15
15
|
<body>
|
package/package.json
CHANGED
package/dist/chunk-1142vwqa.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{Xc as I}from"./chunk-5v642sh3.js";import{od as E}from"./chunk-2gca6fvf.js";import{if as f,nf as y,of as T,pf as w,qf as M,tf as k,uf as N}from"./chunk-3ctcv013.js";import{vf as c}from"./chunk-1ep6bcpc.js";import{Bf as m,wf as S,yf as n}from"./chunk-c23bewtt.js";import{Gf as O}from"./chunk-dvf4cfye.js";import{Mf as h}from"./chunk-7ryqs453.js";import{promises as R}from"node:fs";import A from"node:path";var C=["systemPrompt","appendSystemPrompt","initialMessage","resumeSessionId","forkSession","allowedTools","disallowedTools","mcpConfigPaths","strictMcpConfig","model","addDirs","outputFormat","inputFormat","print","includePartialMessages","replayUserMessages","agentsConfig","settingSources"],U=new Set([...Object.keys(f),...C]),p=n.Number({exclusiveMinimum:0}),e=n.String({minLength:1}),r=n.Array(n.String()),B=n.Object({currentModelId:n.Optional(n.String()),modelProviders:n.Optional(n.Record(e,n.Object({name:e,baseUrl:e,wireApi:m(["openai-completions","anthropic-messages"]),apiKeyEnv:n.Optional(e)}))),models:n.Optional(n.Array(n.Object({id:e,displayName:n.Optional(e),provider:e,model:e,overrides:n.Optional(n.Object({baseUrl:n.Optional(n.String()),temperature:n.Optional(n.Number()),maxOutputTokens:n.Optional(p),timeout:n.Optional(p),streamIdleTimeout:n.Optional(n.Number({minimum:1000})),apiVersion:n.Optional(n.String()),customHeaders:n.Optional(n.Record(n.String(),n.String())),maxRetries:n.Optional(n.Integer({minimum:0})),enablePromptCaching:n.Optional(n.Boolean())})),fallbackModels:n.Optional(n.Array(n.Object({provider:e,model:e})))}))),temperature:n.Optional(n.Number()),maxOutputTokens:n.Optional(p),stream:n.Optional(n.Boolean()),topP:n.Optional(n.Number()),topK:n.Optional(n.Number()),timeout:n.Optional(p),codeTheme:n.Optional(n.String()),uiTheme:n.Optional(m(["light","dark","system"])),language:n.Optional(n.String()),fontSize:n.Optional(p),autoSaveSessions:n.Optional(n.Boolean()),notifyBuild:n.Optional(n.Boolean()),notifyErrors:n.Optional(n.Boolean()),notifySounds:n.Optional(n.Boolean()),privacyTelemetry:n.Optional(n.Boolean()),privacyCrash:n.Optional(n.Boolean()),debug:n.Optional(n.Union([n.Boolean(),n.String()])),mcpEnabled:n.Optional(n.Boolean()),mcpServers:n.Optional(n.Record(n.String(),n.Record(n.String(),n.Unknown()))),lspServers:n.Optional(n.Record(e,n.Object({command:e,args:n.Optional(n.Array(n.String())),extensionToLanguage:n.Record(e,e),env:n.Optional(n.Record(n.String(),n.String())),initializationOptions:n.Optional(n.Unknown()),settings:n.Optional(n.Unknown()),enabled:n.Optional(n.Boolean()),priority:n.Optional(n.Integer()),startupTimeout:n.Optional(n.Integer({minimum:100})),shutdownTimeout:n.Optional(n.Integer({minimum:100})),requestTimeout:n.Optional(n.Integer({minimum:100})),diagnosticWaitTimeout:n.Optional(n.Integer({minimum:0})),maxRestarts:n.Optional(n.Integer({minimum:0,maximum:10}))}))),permissionMode:n.Optional(n.Enum(c)),maxTurns:n.Optional(n.Integer({minimum:-1})),maxConcurrentTasks:n.Optional(n.Integer({minimum:y,maximum:T})),maxQueuedTasks:n.Optional(n.Integer({minimum:w,maximum:M})),systemPrompt:n.Optional(n.String()),appendSystemPrompt:n.Optional(n.String()),initialMessage:n.Optional(n.String()),resumeSessionId:n.Optional(n.String()),forkSession:n.Optional(n.Boolean()),allowedTools:n.Optional(n.Array(e)),disallowedTools:n.Optional(n.Array(e)),mcpConfigPaths:n.Optional(n.Array(e)),strictMcpConfig:n.Optional(n.Boolean()),model:n.Optional(e),addDirs:n.Optional(n.Array(e)),outputFormat:n.Optional(m(["text","json","stream-json","jsonl"])),inputFormat:n.Optional(m(["text","stream-json"])),print:n.Optional(n.Boolean()),includePartialMessages:n.Optional(n.Boolean()),replayUserMessages:n.Optional(n.Boolean()),agentsConfig:n.Optional(n.String()),settingSources:n.Optional(n.String()),permissions:n.Optional(n.Object({allow:n.Optional(r),ask:n.Optional(r),deny:n.Optional(r)})),env:n.Optional(n.Record(n.String(),n.String())),hooks:n.Optional(n.Record(n.String(),n.Unknown())),enabledPlugins:n.Optional(n.Record(e,n.Boolean())),pluginSourcePolicy:n.Optional(n.Object({restrictToAllowedSources:n.Optional(n.Boolean()),requireGitCommitSha:n.Optional(n.Boolean()),allowedGitHosts:n.Optional(n.Array(e)),allowedMarketplaces:n.Optional(n.Array(e)),allowedLocalRoots:n.Optional(n.Array(e))})),disableAllHooks:n.Optional(n.Boolean())}),x=[["systemPrompt","systemPrompt"],["appendSystemPrompt","appendSystemPrompt"],["initialMessage","initialMessage"],["resumeSessionId","sessionId"],["forkSession","forkSession"],["allowedTools","allowedTools"],["disallowedTools","disallowedTools"],["mcpConfigPaths","mcpConfig"],["strictMcpConfig","strictMcpConfig"],["model","model"],["addDirs","addDir"],["outputFormat","outputFormat"],["inputFormat","inputFormat"],["print","print"],["includePartialMessages","includePartialMessages"],["replayUserMessages","replayUserMessages"],["agentsConfig","agents"],["settingSources","settingSources"],["permissionMode","permissionMode"],["maxTurns","maxTurns"],["maxConcurrentTasks","maxConcurrentTasks"],["maxQueuedTasks","maxQueuedTasks"]];function d(o,i){let t;try{t=JSON.parse(o)}catch(s){let a=s instanceof Error?`: ${s.message}`:"";throw Error(`Invalid JSON provided to --settings (${i})${a}`)}if(!t||typeof t!=="object"||Array.isArray(t))throw Error("--settings must contain a JSON object");for(let s of Object.keys(t))if(!U.has(s))throw Error(`Unknown --settings field: ${s}`);let l=S(B,t);if(!l.success){let s=l.error.issues.map((a)=>`${a.path.join(".")||"settings"}: ${a.message}`).join("; ");throw Error(`Invalid --settings value: ${s}`)}return l.data}async function P(o){if(o===void 0)return;let i=o.trim();if(!i)throw Error("--settings requires a JSON object or file path");if(i.startsWith("{"))return d(i,"inline JSON");let t=A.resolve(O(),i),l;try{l=await R.readFile(t,"utf8")}catch(s){let a=s instanceof Error?`: ${s.message}`:"";throw Error(`Unable to read --settings file ${t}${a}`)}return d(l,t)}function b(o,i){if(!i)return;let t=i;for(let[l,s]of x){if(l==="permissionMode"&&o.yolo===!0)continue;if(o[s]===void 0&&t[l]!==void 0)o[s]=t[l]}}var u=h("General"),V=(o)=>{if(o.yolo){if(o.permissionMode&&o.permissionMode!=="yolo")throw Error("Cannot use both --yolo and --permission-mode with different values");o.permissionMode="yolo"}if(Array.isArray(o.allowedTools))o.allowedTools=o.allowedTools.flatMap((i)=>i.split(",").map((t)=>t.trim()).filter((t)=>t.length>0));if(Array.isArray(o.disallowedTools))o.disallowedTools=o.disallowedTools.flatMap((i)=>i.split(",").map((t)=>t.trim()).filter((t)=>t.length>0));if(Array.isArray(o.allowedTools)&&Array.isArray(o.disallowedTools)){let i=o.allowedTools.filter((t)=>o.disallowedTools.includes(t));if(i.length>0)throw Error(`Tools cannot be both allowed and disallowed: ${i.join(", ")}`)}},Y=async(o)=>{let i=await P(typeof o.settings==="string"?o.settings:void 0);if(b(o,i),typeof o.agents==="string")I(o.agents);F(o);try{let l=await k.getInstance().initialize(i),s=N(l,o);if(E().config.actions.setConfig(s),o.debug)u.info("[CLI] 配置已加载到 Store")}catch(t){u.error("[CLI] [FAIL] 配置初始化失败",t instanceof Error?t.message:t),console.error(`
|
|
2
|
-
[FAIL] 配置初始化失败
|
|
3
|
-
`),console.error("原因:",t instanceof Error?t.message:"未知错误"),console.error(`
|
|
4
|
-
请检查:`),console.error(" 1. 配置文件格式是否正确 (~/.blade/config.json)"),console.error(" 2. 是否需要运行 blade 进行首次配置"),console.error(` 3. 配置文件权限是否正确
|
|
5
|
-
`),process.exit(1)}};function F(o){if(o.continue&&o.resume)throw Error("Cannot use both --continue and --resume flags simultaneously");if(o.forkSession&&!o.continue&&!o.resume)throw Error("--fork-session requires --resume or --continue");if(o.sessionId&&(o.continue||o.resume)&&!o.forkSession)throw Error("--session-id can only be combined with --resume or --continue when --fork-session is set")}var Z=(o)=>{if(o.jsonSchema&&o.outputSchema)throw Error("--json-schema cannot be combined with --output-schema");if((o.jsonSchema||o.outputSchema)&&!o.print&&!o.headless)throw Error("--json-schema and --output-schema can only be used with --print or --headless");if(o.outputFormat&&o.outputFormat!=="text"&&!o.print&&!o.headless)throw Error("--output-format can only be used with --print or --headless");if(o.headless&&o.outputFormat&&!["text","jsonl"].includes(o.outputFormat))throw Error(`--headless only supports --output-format text|jsonl, but got "${o.outputFormat}". Use --print for json|stream-json support.`);if(o.print&&o.outputFormat&&!["text","json","stream-json"].includes(o.outputFormat))throw Error(`--print only supports --output-format text|json|stream-json, but got "${o.outputFormat}". Use --headless for jsonl support.`);if(o.inputFormat==="stream-json"&&o.print)u.warn("[WARN] Warning: stream-json input format may not work as expected with --print")};
|
|
6
|
-
export{V as Uc,Y as Vc,Z as Wc};
|
package/dist/chunk-2c8d4q3y.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ke as a,le as b,me as c,ne as d,oe as e}from"./chunk-3j6bsp1q.js";import"./chunk-t1z46fqz.js";import"./chunk-prqgpq92.js";import"./chunk-ysr3frmw.js";import"./chunk-d3gx05ph.js";import"./chunk-bx99mx3k.js";import"./chunk-3ctcv013.js";import"./chunk-1ep6bcpc.js";import"./chunk-c23bewtt.js";import"./chunk-87ge6dkk.js";import"./chunk-dvf4cfye.js";import"./chunk-7ryqs453.js";import"./chunk-pnjftj8t.js";import"./chunk-nq1wqpsx.js";import"./chunk-fb80q06q.js";import"./chunk-0kqp5z4v.js";import"./chunk-jdms602t.js";import"./chunk-95jjpdh9.js";import"./chunk-sexhm0r5.js";export{d as snapshotWorkspaceAgentResources,c as resolveWorkspaceAgentResources,e as resetWorkspaceAgentResources,a as refreshWorkspaceCommunicationStyles,b as configureInvocationPluginDirs};
|
package/dist/chunk-3ctcv013.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import{wf as En,xf as j,yf as T}from"./chunk-c23bewtt.js";import{Cf as On,Df as Zn}from"./chunk-87ge6dkk.js";import{If as L}from"./chunk-dvf4cfye.js";import{Mf as $n}from"./chunk-7ryqs453.js";import{Pf as rt,Sf as p}from"./chunk-pnjftj8t.js";import{$f as wn,_f as sn}from"./chunk-fb80q06q.js";import{dg as $}from"./chunk-0kqp5z4v.js";import{ng as Sn}from"./chunk-95jjpdh9.js";var et=/^[\x21\x23-\x5b\x5d-\x7e]+$/;function St(n){return n==="127.0.0.1"||n==="[::1]"||n.toLowerCase()==="localhost"}function B(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:"&&St(M.hostname)))throw Error(`${t} requires HTTPS; HTTP is allowed only for loopback servers`);return M}var U=async(n,t)=>{B(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 y(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(B(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 _=t.clientId?.trim();if(_&&_.length>4096)throw Error("MCP OAuth clientId exceeds 4096 characters");let e=t.scopes?.map((S)=>S.trim());if(e){if(e.length>32)throw Error("MCP OAuth supports at most 32 scopes");if(e.some((S)=>!S||S.length>128||!et.test(S)))throw Error("MCP OAuth scopes contain an invalid value");if(new Set(e).size!==e.length)throw Error("MCP OAuth scopes must not contain duplicates")}let r=t.callbackPort;if(r!==void 0&&(!Number.isInteger(r)||r<1024||r>65535))throw Error("MCP OAuth callbackPort must be between 1024 and 65535");return{enabled:!0,..._?{clientId:_}:{},...e?.length?{scopes:e}:{},...r!==void 0?{callbackPort:r}:{}}}import{randomUUID as l}from"node:crypto";import xt from"node:http";import{auth as Tn}from"@modelcontextprotocol/sdk/client/auth.js";import $t from"open";import{createHash as Et,randomUUID as mt}from"node:crypto";import{constants as D,promises as P}from"node:fs";import W from"node:path";import{Mutex as At}from"async-mutex";import Tt from"write-file-atomic";var mn=1,bt=1048576,ct=5000,ot=50,st=/^[a-f0-9]{64}$/,wt=T.Object({client_id:T.String({minLength:1,maxLength:4096})},{additionalProperties:!0}),Lt=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}),ft=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}),An=T.Object({serverUrl:T.String({format:"uri"}),clientId:T.Optional(T.String({minLength:1,maxLength:4096})),clientInformation:T.Optional(wt),tokens:T.Optional(Lt),tokenExpiresAt:T.Optional(T.Number({minimum:0})),discoveryState:T.Optional(ft),updatedAt:T.String({format:"date-time"})},{additionalProperties:!1}),rn=T.Object({version:T.Literal(mn),credentials:T.Record(T.String(),An)},{additionalProperties:!1});function q(n,t){return n instanceof Error&&"code"in n&&n.code===t}function Pt(n){if(!Number.isInteger(n)||n<=0)return!1;try{return process.kill(n,0),!0}catch(t){return q(t,"EPERM")}}function k(n){return structuredClone(n)}function en(n){if(Object.keys(n.credentials).some((t)=>!st.test(t)))throw Error("MCP OAuth credential store contains an invalid identity")}function G(n){let t=new URL(n);return t.hash="",t.toString()}function F(n,t,M=[]){return Et("sha256").update(JSON.stringify({serverUrl:G(n),clientId:t?.trim()||null,scopes:[...M].sort()})).digest("hex")}class I{static mutexes=new Map;stateRoot;tokenFilePath;mutex;constructor(n=Sn()){this.stateRoot=W.join(n,"mcp"),this.tokenFilePath=W.join(this.stateRoot,"oauth-credentials.json");let t=I.mutexes.get(this.tokenFilePath);if(!t)t=new At,I.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?k(M):null})}async updateCredential(n,t){return this.runMutation(async(M)=>{let u=M.credentials[n],_=await t(u?k(u):null);if(_)M.credentials[n]=j(An,_);else delete M.credentials[n];return _?k(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(),u=await n(M);return await this.writeStore(M),u}finally{await t()}})}async ensureStateRoot(){await P.mkdir(this.stateRoot,{recursive:!0,mode:448});let n=await P.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 P.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>bt)throw Error("MCP OAuth credential store exceeds the 1 MiB limit");let t=JSON.parse(await P.readFile(this.tokenFilePath,"utf8")),M=En(rn,t);if(!M.success)throw Error("MCP OAuth credential store has an invalid schema");return en(M.data),M.data}catch(n){if(q(n,"ENOENT"))return{version:mn,credentials:{}};throw n}}async writeStore(n){await this.ensureStateRoot();let t=j(rn,n);en(t),await Tt(this.tokenFilePath,`${JSON.stringify(t,null,2)}
|
|
2
|
-
`,{mode:384,encoding:"utf8"}),await P.chmod(this.tokenFilePath,384)}async acquireStoreLock(){await this.ensureStateRoot();let n=W.join(this.stateRoot,".oauth-credentials.lock"),t=mt(),M=Date.now()+ct;while(Date.now()<M)try{let u=await P.open(n,D.O_CREAT|D.O_EXCL|D.O_WRONLY,384);return await u.writeFile(`${JSON.stringify({version:1,pid:process.pid,token:t,createdAt:new Date().toISOString()})}
|
|
3
|
-
`,"utf8"),await u.close(),async()=>{try{if(JSON.parse(await P.readFile(n,"utf8")).token===t)await P.unlink(n)}catch(_){if(!q(_,"ENOENT"))throw _}}}catch(u){if(!q(u,"EEXIST"))throw u;await this.removeDeadLock(n),await new Promise((_)=>setTimeout(_,ot))}throw Error("MCP OAuth credential store is busy; retry the operation")}async removeDeadLock(n){let t=await P.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 P.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(!Pt(M.pid))await P.unlink(n)}}var bn="127.0.0.1",cn=7777,on="/oauth/callback",dt=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 Ln extends Error{constructor(n){super(`MCP OAuth credentials are unavailable in this runtime for server "${n}"`);this.name="McpOAuthUnavailableError"}}function Xt(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 K(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(Xt(M))}class N{serverName;config;static activeFlowIdentity;tokenStorage;serverUrl;identity;callbackUrl;openAuthorizationUrl;codeVerifierValue;activeFlow;lastError;constructor(n,t,M,u={}){this.serverName=n;this.config=M;this.serverUrl=G(t),this.identity=F(this.serverUrl,M.clientId,M.scopes),this.tokenStorage=u.tokenStorage??new I;let _=M.callbackPort??cn;this.callbackUrl=`http://${bn}:${_}${on}`,this.openAuthorizationUrl=u.openAuthorizationUrl??(async(e)=>{await $t(e,{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:`${wn()} ${sn()}`,...this.config.scopes?.length?{scope:this.config.scopes.join(" ")}:{}}}async state(){return this.activeFlow?.state??l()}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=B(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(N.activeFlowIdentity)throw Error("Another MCP OAuth authorization is already in progress");N.activeFlowIdentity=this.identity,this.lastError=void 0,this.codeVerifierValue=void 0;try{let n=await this.createFlow();if(this.activeFlow=n,await Tn(this,{serverUrl:this.serverUrl,fetchFn:U})!=="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((r,S)=>{n=r,t=S});M.catch(()=>{return});let u=l(),_=xt.createServer((r,S)=>{this.handleCallback(r,S)});_.on("clientError",(r,S)=>{S.end(`HTTP/1.1 400 Bad Request\r
|
|
17
|
-
Connection: close\r
|
|
18
|
-
\r
|
|
19
|
-
`)}),await new Promise((r,S)=>{let E=(A)=>S(A);_.once("error",E),_.listen(this.config.callbackPort??cn,bn,()=>{_.off("error",E),r()})});let e={flowId:l(),state:u,callbackUrl:this.callbackUrl,server:_,timeout:setTimeout(()=>{this.failActiveFlow(Error("MCP OAuth authorization timed out"))},dt),completion:M,resolve:n,reject:t,settled:!1};return e.timeout.unref(),e}async handleCallback(n,t){let M=this.activeFlow;if(!M){K(t,410,!1);return}try{if(n.method!=="GET"){t.setHeader("Allow","GET"),K(t,405,!1);return}let u=new URL(n.url??"/",M.callbackUrl);if(u.pathname!==on){K(t,404,!1);return}let _=u.searchParams.get("state"),e=u.searchParams.get("code");if(u.searchParams.get("error"))throw Error("MCP OAuth authorization was denied");if(!_||_!==M.state)throw Error("MCP OAuth state mismatch");if(!e)throw Error("MCP OAuth callback is missing the authorization code");if(await Tn(this,{serverUrl:this.serverUrl,authorizationCode:e,fetchFn:U})!=="AUTHORIZED")throw Error("MCP OAuth token exchange did not complete");K(t,200,!0),await this.completeActiveFlow()}catch(u){K(t,400,!1),await this.failActiveFlow(u instanceof Error?u:Error(String(u)))}}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,N.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,N.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 Y}from"node:fs";import fn from"node:os";import X from"node:path";import{Mutex as Pn}from"async-mutex";import{merge as at}from"lodash-es";import It from"write-file-atomic";var xn=$n("Service"),g={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},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}},RM=new Set(Object.entries(g).filter(([n,t])=>t.persistable).map(([n])=>n)),CM=new Set(Object.entries(g).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(([u,_])=>this.flushTarget(u,_)));else for(let[u,_]of M)this.scheduleSave(u,_)}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 u=M.scope??"local",_=this.resolveFilePath("settings",u,M.projectDir);await this.flushTargetWithModifier(_,(e)=>{let r=e.permissions??{allow:[],ask:[],deny:[]},S={allow:t==="allow"?this.dedupeArray([...r.allow||[],n]):r.allow||[],ask:r.ask||[],deny:t==="deny"?this.dedupeArray([...r.deny||[],n]):r.deny||[]};return{...e,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",u=this.resolveFilePath("settings",M,t.projectDir);await this.flushTargetWithModifier(u,(_)=>{let e={..._.enabledPlugins??{}};delete e[n];let r={..._};if(Object.keys(e).length>0)r.enabledPlugins=e;else delete r.enabledPlugins;return r})}validatePersistableFields(n){for(let t of Object.keys(n)){let M=g[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 u=new Map;for(let[_,e]of Object.entries(n)){let r=g[_];if(!r)continue;let S=t??r.defaultScope,E=this.resolveFilePath(r.target,S,M);if(!u.has(E))u.set(E,{});u.get(E)[_]=e}return u}resolveFilePath(n,t,M){let u=M??L();if(n==="config")return t==="global"?X.join(fn.homedir(),".blade","config.json"):X.join(u,".blade","config.json");switch(t){case"local":return X.join(u,".blade","settings.local.json");case"project":return X.join(u,".blade","settings.json");case"global":return X.join(fn.homedir(),".blade","settings.json");default:return X.join(u,".blade","settings.local.json")}}scheduleSave(n,t){let M=this.pendingUpdates.get(n)??{},u=this.mergePendingUpdates(M,t);this.pendingUpdates.set(n,u);let _=this.timers.get(n);if(_)clearTimeout(_);let e=setTimeout(async()=>{let r=this.pendingUpdates.get(n);if(r){this.pendingUpdates.delete(n),this.timers.delete(n);try{await this.flushTarget(n,r),this.lastSaveError=null}catch(S){let E=S instanceof Error?S:Error(String(S));this.lastSaveError=E,xn.error(`Failed to save config to ${n}:`,E.message),xn.error("Stack trace:",E.stack)}}},this.debounceDelay);this.timers.set(n,e)}mergePendingUpdates(n,t){let M={...n};for(let[u,_]of Object.entries(t)){let e=g[u];if(!e){M[u]=_;continue}switch(e.mergeStrategy){case"replace":M[u]=_;break;case"append-dedupe":this.applyAppendDedupe(M,u,_);break;case"deep-merge":this.applyDeepMerge(M,u,_);break}}return M}async flushTarget(n,t){let M=this.fileLocks.get(n);if(!M)M=new Pn,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 Pn,this.fileLocks.set(n,M);await M.runExclusive(async()=>{await Y.mkdir(X.dirname(n),{recursive:!0,mode:493});let u={};try{let e=await Y.readFile(n,"utf-8");u=JSON.parse(e)}catch{u={}}let _=t(u);await this.atomicWrite(n,_)})}async performWrite(n,t){await Y.mkdir(X.dirname(n),{recursive:!0,mode:493});let M={};try{let _=await Y.readFile(n,"utf-8");M=JSON.parse(_)}catch{M={}}let u={...M};if(typeof u.theme==="string"&&u.codeTheme===void 0)u.codeTheme=u.theme;delete u.theme;for(let[_,e]of Object.entries(t)){let r=g[_];if(!r){u[_]=e;continue}switch(r.mergeStrategy){case"replace":u[_]=e;break;case"append-dedupe":this.applyAppendDedupe(u,_,e);break;case"deep-merge":this.applyDeepMerge(u,_,e);break}}await this.atomicWrite(n,u)}applyAppendDedupe(n,t,M){if(t==="permissions"&&typeof M==="object"&&M!==null){let u=n[t]??{allow:[],ask:[],deny:[]},_=M;n[t]={allow:this.dedupeArray([...u.allow||[],..._.allow||[]]),ask:this.dedupeArray([...u.ask||[],..._.ask||[]]),deny:this.dedupeArray([...u.deny||[],..._.deny||[]])}}else if(Array.isArray(M)){let u=Array.isArray(n[t])?n[t]:[];n[t]=this.dedupeArray([...u,...M])}else n[t]=M}applyDeepMerge(n,t,M){if(typeof M==="object"&&M!==null&&!Array.isArray(M)){let u=typeof n[t]==="object"&&n[t]!==null?n[t]:{};n[t]=at({},u,M)}else n[t]=M}dedupeArray(n){return Array.from(new Set(n))}async atomicWrite(n,t){await It(n,JSON.stringify(t,null,2),{mode:384,encoding:"utf-8"})}}function BM(){return x.getInstance()}var b={currentModelId:"",models:[],modelProviders:{},temperature:0,maxOutputTokens:void 0,stream:!0,topP:0.9,topK:50,timeout:180000,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 dn=/^[A-Za-z0-9_-]{21}$/;function Xn(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((r)=>r.id)),u=Xn(n.model);if(!M.has(u))return u;let _=`${Xn(n.provider)}-${u}`.slice(0,120);if(!M.has(_))return _;let e=2;while(M.has(`${_}-${e}`))e++;return`${_}-${e}`}function an(n,t){let M=n.filter((e)=>!dn.test(e.id)).map((e)=>({id:e.id})),u=new Map;return{models:n.map((e)=>{if(!dn.test(e.id))return{...e};let{id:r,...S}=e,E=gt(S,M);return M.push({id:E}),u.set(r,E),{...e,id:E}}),currentModelId:u.get(t)??t,changed:u.size>0}}import{promises as _t}from"fs";import{merge as H}from"lodash-es";import s from"os";import m from"path";function Nn(n){let t=In(n.timeout??300000,"MCP timeout"),M=In(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 qM(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 u=n.message?.replace(/\0/g,"").trim().slice(0,1000);return{progress:n.progress,...n.total!==void 0?{total:n.total}:{},message:u||ht(n.progress,n.total)}}function In(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 ht(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 Rt}from"node:crypto";var V=["debug","info","notice","warning","error","critical","alert","emergency"],VM=64,OM=64,ZM=256,Ct=8192,Cn=16384,Bt=256,Kt=6,zt=128,gn=64,hn=64,it=128,Ht=/authorization|api[-_]?key|cookie|credential|password|secret|token/i;function Bn(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 u=t?.level??"warning";if(!Ut(u))throw Error(`MCP logging level must be one of: ${V.join(", ")}`);return{enabled:M,level:u}}function Ut(n){return typeof n==="string"&&V.includes(n)}function JM(n,t){return V.indexOf(n)>=V.indexOf(t)}function qt(n,t={}){let M=Gt(n.data),u=typeof M.value==="string"?M.value:JSON.stringify(M.value),_=Rn(u,Cn),e=_.value,r=Buffer.byteLength(e),S=Rt("sha256").update(e).digest("hex"),E=t.exposeDetails!==!1,A=E?Rn(e,Ct):{value:`[MCP log details omitted; sha256=${S}]`,truncated:!1},c=E&&n.logger?O(tn(n.logger),Bt):void 0;return{level:n.level,...c?{logger:c}:{},message:A.value||"[empty MCP log message]",projectedBytes:r,dataSha256:S,truncated:M.truncated||_.truncated||A.truncated,detailsOmitted:!E,timestamp:t.now??Date.now()}}function QM(n,t={}){return{...qt({level:"warning",logger:"blade.mcp.logging",data:`MCP log rate exceeded; dropped at least ${Math.max(1,n)} message(s)`},t),synthetic:!0}}function Gt(n){let t={nodes:0,remainingStringBytes:Cn,truncated:!1,seen:new WeakSet};return{value:nn(n,0,t),truncated:t.truncated}}function nn(n,t,M){if(M.nodes++,M.nodes>zt)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 u=tn(n),_=Math.max(0,M.remainingStringBytes),e=O(u,_),r=Buffer.byteLength(e);if(M.remainingStringBytes-=r,r<Buffer.byteLength(u))M.truncated=!0;return e}if(typeof n>"u")return"[undefined]";if(typeof n==="symbol"||typeof n==="function")return`[${typeof n}]`;if(t>=Kt)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>gn)M.truncated=!0;return n.slice(0,gn).map((e)=>nn(e,t+1,M))}let u=Object.create(null),_=Object.entries(n);if(_.length>hn)M.truncated=!0;for(let[e,r]of _.slice(0,hn)){let S=O(tn(e),it)||"[empty-key]";if(e==="_meta"||Ht.test(e))u[S]="[redacted]";else u[S]=nn(r,t+1,M)}return u}finally{M.seen.delete(n)}}function tn(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 u=M.charCodeAt(0);return(u===9||u===10||u===13||u>=32)&&u!==127}).join("")}function O(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 Rn(n,t){if(Buffer.byteLength(n)<=t)return{value:n,truncated:!1};let M=`
|
|
20
|
-
...[MCP log truncated]`;return{value:O(n,t-Buffer.byteLength(M))+M,truncated:!0}}var Kn=1024,Yt=4096,zn=2,Vt=8,Hn=65536,Ot=1048576,Un=50,qn=16000,Gn=4,Zt=100,Yn=1048576,Jt=new Set(["image/jpeg","image/png","image/gif","image/webp"]);function Jn(n){if(!n)return{enabled:!1,maxTokens:Kn,maxRequestsPerToolCall:zn,maxInputBytes:Hn};if(typeof n.enabled!=="boolean")throw Error("MCP sampling.enabled must be a boolean");return{enabled:n.enabled,maxTokens:Z(n.maxTokens??Kn,1,Yt,"MCP sampling.maxTokens"),maxRequestsPerToolCall:Z(n.maxRequestsPerToolCall??zn,1,Vt,"MCP sampling.maxRequestsPerToolCall"),maxInputBytes:Z(n.maxInputBytes??Hn,1,Ot,"MCP sampling.maxInputBytes")}}function DM(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>Un)throw Error(`MCP sampling messages must contain 1-${Un} entries`);if(n.systemPrompt!==void 0&&n.systemPrompt.length>qn)throw Error(`MCP sampling system prompt exceeds ${qn} 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>Gn||M.some((A)=>!A||A.length>Zt||A.includes("\x00")))throw Error(`MCP sampling stop sequences must contain at most ${Gn} non-empty bounded values`);let u=[],_=0,e=0,r=0,S=[];if(n.systemPrompt)_+=Buffer.byteLength(n.systemPrompt,"utf8"),u.push({role:"system",content:n.systemPrompt}),S.push(`System: ${Vn(n.systemPrompt)}`);for(let A of n.messages){let c=Array.isArray(A.content)?A.content:[A.content],f=[],w=[];for(let o of c){if(o.type==="text"){_+=Buffer.byteLength(o.text,"utf8"),f.push({type:"text",text:o.text}),w.push(Vn(o.text));continue}if(o.type==="image"){if(A.role!=="user")throw Error("MCP sampling images are only supported in user messages");if(!Jt.has(o.mimeType))throw Error(`Unsupported MCP sampling image type: ${o.mimeType}`);let C=Qt(o.data);e+=C,r++,f.push({type:"image_url",image_url:{url:`data:${o.mimeType};base64,${o.data}`}}),w.push(`[${o.mimeType} image, ${C} bytes]`);continue}throw Error(`Unsupported MCP sampling content type: ${o.type}`)}if(f.length===0)throw Error("MCP sampling message has no supported content");u.push({role:A.role,content:f.length===1&&f[0]?.type==="text"?f[0].text:f}),S.push(`${A.role==="user"?"User":"Assistant"}: ${w.join(" ")}`)}if(_+e>t.maxInputBytes)throw Error(`MCP sampling input exceeds ${t.maxInputBytes} bytes`);if(r>On||e>Zn)throw Error("MCP sampling image input exceeds the shared attachment budget");let E=Z(n.maxTokens,1,Number.MAX_SAFE_INTEGER,"MCP sampling maxTokens");return{messages:u,maxTokens:Math.min(E,t.maxTokens),...n.temperature!==void 0?{temperature:n.temperature}:{},stopSequences:[...M],preview:S.join(`
|
|
21
|
-
`).slice(0,8000)}}function WM(n,t,M){if(n.toolCalls?.length)throw Error("Model returned tools for basic MCP sampling");let u=n.content,_=n.finishReason==="length"||n.finishReason==="max_tokens"?"maxTokens":"endTurn",e=-1;for(let r of M.stopSequences){let S=u.indexOf(r);if(S>=0&&(e===-1||S<e))e=S}if(e>=0)u=u.slice(0,e),_="stopSequence";if(Buffer.byteLength(u,"utf8")>Yn)throw Error(`MCP sampling response exceeds ${Yn} bytes`);return{model:t,role:"assistant",content:{type:"text",text:u},stopReason:_}}function Z(n,t,M,u){if(!Number.isSafeInteger(n)||n<t||n>M)throw Error(`${u} must be an integer between ${t} and ${M}`);return n}function Qt(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 Vn(n){return n.replace(/\s+/g," ").trim().slice(0,1000)}var jM=256,FM=1e4,lM=86400000;var pt=/[\p{Cf}\p{Co}\p{Cn}]/u;function pn(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=a(n.defaultTtlMs??600000,1e4,86400000,"MCP tasks.defaultTtlMs"),M=a(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:a(n.pollIntervalMs??500,100,1e4,"MCP tasks.pollIntervalMs"),maxTasksPerSession:a(n.maxTasksPerSession??32,1,32,"MCP tasks.maxTasksPerSession"),maxLifetimeMs:M}}function vM(n,t){return a(n??t.defaultTtlMs,1e4,Math.min(86400000,t.maxLifetimeMs),"MCP task ttl")}function nu(n,t,M){let u=Dt(n.taskId,"task ID",512),_=Qn(n.createdAt,"createdAt"),e=Qn(n.lastUpdatedAt,"lastUpdatedAt");if(Date.parse(e)<Date.parse(_))throw Error("MCP task lastUpdatedAt precedes createdAt");if(M&&(u!==M.taskId||_!==M.createdAt))throw Error("MCP task identity changed across connection generation");let r=n.ttl===null?null:a(n.ttl,0,86400000,"MCP task ttl"),S=n.pollInterval===void 0?t.pollIntervalMs:a(n.pollInterval,0,Number.MAX_SAFE_INTEGER,"MCP task pollInterval"),E=Math.min(1e4,Math.max(100,S)),A=n.statusMessage?yt(n.statusMessage,u):void 0;return{taskId:u,status:n.status,createdAt:_,lastUpdatedAt:e,ttl:r,pollIntervalMs:E,...A?{statusMessage:A}:{}}}function tu(n){return["completed","failed","cancelled"].includes(n)}function Mu(n){let t=n instanceof Error?n.message:String(n);return yn(Mn(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 yt(n,t){return yn(Mn(n.replaceAll(t,"[redacted-task-id]")),1024)}function Mn(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!pt.test(t)}).join("").trim()}function Qn(n,t){let M=Date.parse(n);if(!Number.isFinite(M))throw Error(`MCP task ${t} is invalid`);return new Date(M).toISOString()}function Dt(n,t,M){if(!n||Buffer.byteLength(n)>M||Mn(n)!==n)throw Error(`MCP ${t} is invalid`);return n}function a(n,t,M,u){if(!Number.isSafeInteger(n)||n<t||n>M)throw Error(`${u} must be an integer between ${t} and ${M}`);return n}function yn(n,t){let M=Buffer.from(n);if(M.length<=t)return n;let u=M.subarray(0,t).toString("utf8");while(Buffer.byteLength(u)>t)u=u.slice(0,-1);return u}var Wt={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 un(n){let t=n.toLowerCase().trim();return Wt[t]??n}var kt=/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,127}$/,jt=/^\.[A-Za-z0-9_+-]{1,32}$/;function J(n){return n!==null&&typeof n==="object"&&!Array.isArray(n)}function h(n,t,M,u,_){if(n===void 0)return _;if(!Number.isInteger(n)||Number(n)<M||Number(n)>u)throw Error(`${t} must be an integer between ${M} and ${u}`);return Number(n)}function Dn(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 Ft(n,t){if(n===void 0)return{};if(!J(n))throw Error(`${t} must be an object`);let M={};for(let[u,_]of Object.entries(n)){if(!u||typeof _!=="string"||_.includes("\x00"))throw Error(`${t} must contain non-empty string values`);M[u]=_}return M}function d(n){if(n===void 0)return{};if(!J(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[u,_]of t){if(!kt.test(u))throw Error(`Invalid LSP server name: ${u}`);if(!J(_))throw Error(`lspServers.${u} must be an object`);let e=new Set(["command","args","extensionToLanguage","env","initializationOptions","settings","enabled","priority","startupTimeout","shutdownTimeout","requestTimeout","diagnosticWaitTimeout","maxRestarts"]),r=Object.keys(_).filter((w)=>!e.has(w));if(r.length>0)throw Error(`Unknown LSP server field: ${u}.${r[0]}`);if(typeof _.command!=="string"||!_.command.trim()||_.command.includes("\x00")||_.command.includes(`
|
|
22
|
-
`))throw Error(`lspServers.${u}.command must be a non-empty command`);if(_.args!==void 0&&!Array.isArray(_.args))throw Error(`lspServers.${u}.args must be an array`);let S=(_.args??[]).map((w,o)=>{if(typeof w!=="string"||w.includes("\x00"))throw Error(`lspServers.${u}.args.${o} must be a string`);return w});if(S.length>128)throw Error(`lspServers.${u}.args exceeds the 128-item limit`);if(!J(_.extensionToLanguage))throw Error(`lspServers.${u}.extensionToLanguage must be an object`);let E=Object.entries(_.extensionToLanguage);if(E.length===0||E.length>64)throw Error(`lspServers.${u}.extensionToLanguage must contain 1-64 entries`);let A={};for(let[w,o]of E){let C=w.startsWith(".")?w.toLowerCase():`.${w.toLowerCase()}`;if(!jt.test(C)||typeof o!=="string"||!o.trim())throw Error(`Invalid lspServers.${u}.extensionToLanguage entry: ${w}`);A[C]=o.trim()}if(_.enabled!==void 0&&typeof _.enabled!=="boolean")throw Error(`lspServers.${u}.enabled must be a boolean`);let c=Dn(_.initializationOptions,`lspServers.${u}.initializationOptions`),f=Dn(_.settings,`lspServers.${u}.settings`);M[u]={command:_.command.trim(),...S.length>0?{args:S}:{},extensionToLanguage:A,..._.env!==void 0?{env:Ft(_.env,`lspServers.${u}.env`)}:{},...c!==void 0?{initializationOptions:c}:{},...f!==void 0?{settings:f}:{},..._.enabled!==void 0?{enabled:_.enabled}:{},priority:h(_.priority,`lspServers.${u}.priority`,-1000,1000,0),startupTimeout:h(_.startupTimeout,`lspServers.${u}.startupTimeout`,100,60000,1e4),shutdownTimeout:h(_.shutdownTimeout,`lspServers.${u}.shutdownTimeout`,100,1e4,2000),requestTimeout:h(_.requestTimeout,`lspServers.${u}.requestTimeout`,100,60000,1e4),diagnosticWaitTimeout:h(_.diagnosticWaitTimeout,`lspServers.${u}.diagnosticWaitTimeout`,0,5000,750),maxRestarts:h(_.maxRestarts,`lspServers.${u}.maxRestarts`,0,10,3)}}return M}function Wn(n){return Number.isInteger(n)&&(n===-1||n>=0)}function kn(){return"-1 (unlimited), 0 (disabled), or any positive integer"}import jn from"node:path";var Fn=/^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$|^[a-z0-9]$/,lt=/^(?:\*\.)?[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/;function z(n){let t=[];for(let[M,u]of Object.entries(n)){if(!Fn.test(M))throw Error(`Invalid plugin name in enabledPlugins: ${M}`);if(typeof u!=="boolean")throw Error(`Invalid enabledPlugins value for ${M}`);t.push([M,u])}return Object.fromEntries(t)}function _n(n,t,M){if(!Array.isArray(n))throw Error(`${t} must be an array`);return[...new Set(n.map((u,_)=>{if(typeof u!=="string"||!u.trim())throw Error(`${t}[${_}] must be a non-empty string`);return M(u.trim())}))].sort()}function i(n){let t=new Set(["restrictToAllowedSources","requireGitCommitSha","allowedGitHosts","allowedMarketplaces","allowedLocalRoots"]),M=Object.keys(n).filter((_)=>!t.has(_));if(M.length>0)throw Error(`Unknown pluginSourcePolicy fields: ${M.join(", ")}`);let u={};for(let _ of["restrictToAllowedSources","requireGitCommitSha"]){if(n[_]===void 0)continue;if(typeof n[_]!=="boolean")throw Error(`pluginSourcePolicy.${_} must be boolean`);u[_]=n[_]}if(n.allowedGitHosts!==void 0)u.allowedGitHosts=_n(n.allowedGitHosts,"pluginSourcePolicy.allowedGitHosts",(_)=>{let e=_.toLowerCase();if(!lt.test(e))throw Error(`Invalid plugin Git host pattern: ${_}`);return e});if(n.allowedMarketplaces!==void 0)u.allowedMarketplaces=_n(n.allowedMarketplaces,"pluginSourcePolicy.allowedMarketplaces",(_)=>{if(!Fn.test(_))throw Error(`Invalid allowed Marketplace name: ${_}`);return _});if(n.allowedLocalRoots!==void 0)u.allowedLocalRoots=_n(n.allowedLocalRoots,"pluginSourcePolicy.allowedLocalRoots",(_)=>{if(!jn.isAbsolute(_))throw Error(`Plugin local allowlist root must be absolute: ${_}`);return jn.resolve(_)});return u}function Q(n){let t=[];for(let[M,u]of Object.entries(n)){if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(M))throw Error(`Invalid environment variable name: ${M}`);if(typeof u!=="string"||u.includes("\x00"))throw Error(`Invalid environment variable value: ${M}`);t.push([M,u])}return Object.fromEntries(t)}var ln=1,vn=64,nt=1,tt=1e4;function Mt(n){return Number.isInteger(n)&&n>=1&&n<=64}function ut(n){return Number.isInteger(n)&&n>=1&&n<=1e4}class R{static instance=null;runtimePermissionOverrides;lastAdditionalSettings;constructor(){}static getInstance(){if(!R.instance)R.instance=new R;return R.instance}static resetInstance(){R.instance=null}async initialize(n){try{this.lastAdditionalSettings=n,this.runtimePermissionOverrides=n?.permissions;let M=(await $.getInstance().getStatus(L())).state==="trusted",u=await this.loadConfigFiles(M),_=await this.loadSettingsFiles(M),e={...u,..._,enabledPlugins:{...u.enabledPlugins||{},..._.enabledPlugins||{}}};if(n)e=this.mergeSettings(e,n);let r=this.normalizeConfig(e),S={...b,...r};if(S.enabledPlugins=z(S.enabledPlugins),S.lspServers=d(S.lspServers),S.pluginSourcePolicy={...b.pluginSourcePolicy,...i(S.pluginSourcePolicy)},this.resolveEnvInterpolation(S),process.env.BLADE_MODEL&&S.models?.length>0){let E=un(process.env.BLADE_MODEL),A=S.models.find((c)=>c.id===E||c.model===E||c.id===process.env.BLADE_MODEL||c.model===process.env.BLADE_MODEL);if(A)S.currentModelId=A.id}if(process.env.BLADE_DEBUG)S.debug=process.env.BLADE_DEBUG==="1"||process.env.BLADE_DEBUG==="true"||process.env.BLADE_DEBUG;if(p().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),p().configureModelProviders({},[]),b}}async reload(){return this.initialize(this.lastAdditionalSettings)}async loadConfigFiles(n){let t=m.join(s.homedir(),".blade","config.json"),M=m.join(L(),".blade","config.json"),u={},_=await this.loadJsonFile(t),e=_?await this.migrateLegacyUserConfig(_):null;if(e)u={...u,...e};let r=await this.loadJsonFile(M);if(r&&n){let S={...u.mcpServers||{},...r.mcpServers||{}},E={...u.lspServers||{},...r.lspServers||{}},A={...u.modelProviders||{},...r.modelProviders||{}},c={...u.enabledPlugins||{},...r.enabledPlugins||{}};if(u={...u,...r},Object.keys(S).length>0)u.mcpServers=S;if(Object.keys(E).length>0)u.lspServers=d(E);if(Object.keys(A).length>0)u.modelProviders=A;if(Object.keys(c).length>0)u.enabledPlugins=z(c)}else if(r?.hooks)u.hooks=r.hooks;return u}async migrateLegacyUserConfig(n){let t=n,M={...n},u={};if(M.codeTheme===void 0&&typeof t.theme==="string")M.codeTheme=t.theme,u.codeTheme=t.theme;if(Array.isArray(M.models)){let _=an(M.models,M.currentModelId??"");if(_.changed)M.models=_.models,M.currentModelId=_.currentModelId,u.models=_.models,u.currentModelId=_.currentModelId}if(delete M.theme,Object.keys(u).length>0)try{await x.getInstance().save(u,{scope:"global",immediate:!0})}catch{console.warn("[ConfigManager] Could not persist legacy config migration")}return M}async loadSettingsFiles(n){let t=m.join(s.homedir(),".blade","settings.json"),M=m.join(L(),".blade","settings.json"),u=m.join(L(),".blade","settings.local.json"),_={},e=await this.loadJsonFile(t);if(e)_=this.mergeSettings(_,e);let r=await this.loadJsonFile(M);if(r&&n)_=this.mergeSettings(_,r);else if(r?.hooks)_=this.mergeSettings(_,{hooks:r.hooks});let S=await this.loadJsonFile(u);if(S&&n)_=this.mergeSettings(_,S);else if(S?.hooks)_=this.mergeSettings(_,{hooks:S.hooks});return _}async loadWorkspacePermissions(n,t){let M={allow:[...t.allow],ask:[...t.ask],deny:[...t.deny]};if(m.resolve(n)!==m.resolve(L())){let _=await this.loadWorkspacePermissionOverrides(L(),{includeUntrusted:!0}),e=await this.loadJsonFile(m.join(s.homedir(),".blade","settings.json")),r={allow:Array.from(new Set([...b.permissions.allow,...e?.permissions?.allow||[],...this.runtimePermissionOverrides?.allow||[]])),ask:Array.from(new Set([...b.permissions.ask,...e?.permissions?.ask||[],...this.runtimePermissionOverrides?.ask||[]])),deny:Array.from(new Set([...b.permissions.deny,...e?.permissions?.deny||[],...this.runtimePermissionOverrides?.deny||[]]))};for(let S of["allow","ask","deny"]){let E=new Set(_[S].filter((A)=>!r[S].includes(A)));M[S]=M[S].filter((A)=>!E.has(A))}}let u=await this.loadWorkspacePermissionOverrides(n);for(let _ of["allow","ask","deny"])M[_]=Array.from(new Set([...M[_],...u[_]]));return M}async loadWorkspaceMcpServers(n,t){if(m.resolve(n)===m.resolve(L()))return{...t};let M=await $.getInstance().getStatus(n),u=M.state==="trusted",_=M.projectPath,e={},r=async(E)=>{let A=await this.loadJsonFile(E);if(A?.mcpServers)e={...e,...A.mcpServers}};if(await r(m.join(s.homedir(),".blade","config.json")),await r(m.join(s.homedir(),".blade","settings.json")),u)await r(m.join(_,".blade","config.json")),await r(m.join(_,".blade","settings.json")),await r(m.join(_,".blade","settings.local.json"));if(this.lastAdditionalSettings?.mcpServers)e={...e,...this.lastAdditionalSettings.mcpServers};let S={mcpServers:e};return this.resolveEnvInterpolation(S),S.mcpServers}async loadWorkspaceLspServers(n,t){if(m.resolve(n)===m.resolve(L()))return d(t);let M=await $.getInstance().getStatus(n),u={},_=async(r)=>{let S=await this.loadJsonFile(r);if(S?.lspServers)u={...u,...d(S.lspServers)}};if(await _(m.join(s.homedir(),".blade","config.json")),await _(m.join(s.homedir(),".blade","settings.json")),M.state==="trusted")for(let r of["config.json","settings.json","settings.local.json"])await _(m.join(M.projectPath,".blade",r));if(this.lastAdditionalSettings?.lspServers)u={...u,...d(this.lastAdditionalSettings.lspServers)};let e={lspServers:u};return this.resolveEnvInterpolation(e),d(e.lspServers)}async loadWorkspaceModelConfig(n,t){if(m.resolve(n)===m.resolve(L()))return{currentModelId:t.currentModelId,models:t.models.map((r)=>structuredClone(r)),modelProviders:structuredClone(t.modelProviders),temperature:t.temperature,...t.maxOutputTokens!==void 0?{maxOutputTokens:t.maxOutputTokens}:{},timeout:t.timeout};let M=await $.getInstance().getStatus(n),u=M.projectPath,_={currentModelId:b.currentModelId,models:b.models.map((r)=>structuredClone(r)),modelProviders:structuredClone(b.modelProviders),temperature:b.temperature,...b.maxOutputTokens!==void 0?{maxOutputTokens:b.maxOutputTokens}:{},timeout:b.timeout},e=(r)=>{if(!r)return;if(r.modelProviders)_.modelProviders={..._.modelProviders,...structuredClone(r.modelProviders)};if(r.models)_.models=r.models.map((S)=>structuredClone(S));if(r.currentModelId!==void 0)_.currentModelId=r.currentModelId;if(r.temperature!==void 0)_.temperature=r.temperature;if(r.maxOutputTokens!==void 0)_.maxOutputTokens=r.maxOutputTokens;if(r.timeout!==void 0)_.timeout=r.timeout};if(e(await this.loadJsonFile(m.join(s.homedir(),".blade","config.json"))),e(await this.loadJsonFile(m.join(s.homedir(),".blade","settings.json"))),M.state==="trusted")e(await this.loadJsonFile(m.join(u,".blade","config.json"))),e(await this.loadJsonFile(m.join(u,".blade","settings.json"))),e(await this.loadJsonFile(m.join(u,".blade","settings.local.json")));if(e(this.lastAdditionalSettings),_=this.normalizeConfig(_),this.resolveEnvInterpolation(_),process.env.BLADE_MODEL&&_.models.length>0){let r=process.env.BLADE_MODEL,S=un(r),E=_.models.find((A)=>A.id===S||A.model===S||A.id===r||A.model===r);if(E)_.currentModelId=E.id}if(!_.models.some((r)=>r.id===_.currentModelId))_.currentModelId=_.models[0]?.id??"";return _}async loadWorkspaceRuntimeSettings(n,t){if(m.resolve(n)===m.resolve(L()))return{env:Q(t.env),disableAllHooks:t.disableAllHooks,maxTurns:t.maxTurns,permissionMode:t.permissionMode};let M=await $.getInstance().getStatus(n),u=M.projectPath,_={env:{},disableAllHooks:b.disableAllHooks,maxTurns:b.maxTurns,permissionMode:b.permissionMode},e=(E,A)=>{if(!E)return;if(A.allowExecutionSettings){if(E.env)_.env={..._.env,...Q(E.env)};if(E.maxTurns!==void 0)_.maxTurns=E.maxTurns;if(E.permissionMode!==void 0)_.permissionMode=E.permissionMode;if(E.disableAllHooks!==void 0)_.disableAllHooks=E.disableAllHooks}else if(E.disableAllHooks===!0)_.disableAllHooks=!0};e(await this.loadJsonFile(m.join(s.homedir(),".blade","config.json")),{allowExecutionSettings:!0}),e(await this.loadJsonFile(m.join(s.homedir(),".blade","settings.json")),{allowExecutionSettings:!0});let r=await Promise.all([this.loadJsonFile(m.join(u,".blade","config.json")),this.loadJsonFile(m.join(u,".blade","settings.json")),this.loadJsonFile(m.join(u,".blade","settings.local.json"))]);for(let E of r)e(E,{allowExecutionSettings:M.state==="trusted"});e(this.lastAdditionalSettings,{allowExecutionSettings:!0});let S={env:_.env};return this.resolveEnvInterpolation(S),_.env=Q(S.env),_}async loadWorkspacePluginSettings(n){return(await this.loadWorkspacePluginSettingsResolution(n)).effective}async loadWorkspacePluginSettingsResolution(n){let t=await $.getInstance().getStatus(n),M={},u={},_=(e,r,S)=>{if(!e?.enabledPlugins)return;let E=z(e.enabledPlugins);for(let[A,c]of Object.entries(E)){if(!S&&c!==!1)continue;let f=u[A];M[A]=c,u[A]={effective:c,effectiveScope:r,layers:{...f?.layers??{},[r]:c}}}};_(await this.loadJsonFile(m.join(s.homedir(),".blade","config.json")),"global",!0),_(await this.loadJsonFile(m.join(s.homedir(),".blade","settings.json")),"global",!0);for(let e of["config.json","settings.json"])_(await this.loadJsonFile(m.join(t.projectPath,".blade",e)),"project",t.state==="trusted");return _(await this.loadJsonFile(m.join(t.projectPath,".blade","settings.local.json")),"local",t.state==="trusted"),_(this.lastAdditionalSettings,"invocation",!0),{effective:M,settings:u,workspaceTrusted:t.state==="trusted"}}async loadWorkspacePluginSourcePolicy(n){let t=await $.getInstance().getStatus(n),M={...b.pluginSourcePolicy,allowedGitHosts:[...b.pluginSourcePolicy.allowedGitHosts],allowedMarketplaces:[...b.pluginSourcePolicy.allowedMarketplaces],allowedLocalRoots:[...b.pluginSourcePolicy.allowedLocalRoots]},u=(r)=>{if(!r?.pluginSourcePolicy)return;Object.assign(M,i(r.pluginSourcePolicy))},_=(r,S)=>{if(!S)return r;if(r.length===0&&!M.restrictToAllowedSources)return S;let E=new Set(S);return r.filter((A)=>E.has(A))},e=(r)=>{if(!r?.pluginSourcePolicy)return;let S=i(r.pluginSourcePolicy);M.allowedGitHosts=_(M.allowedGitHosts,S.allowedGitHosts),M.allowedMarketplaces=_(M.allowedMarketplaces,S.allowedMarketplaces),M.allowedLocalRoots=_(M.allowedLocalRoots,S.allowedLocalRoots),M.restrictToAllowedSources=M.restrictToAllowedSources||S.restrictToAllowedSources===!0,M.requireGitCommitSha=M.requireGitCommitSha||S.requireGitCommitSha===!0};u(await this.loadJsonFile(m.join(s.homedir(),".blade","config.json"))),u(await this.loadJsonFile(m.join(s.homedir(),".blade","settings.json")));for(let r of["config.json","settings.json","settings.local.json"])e(await this.loadJsonFile(m.join(t.projectPath,".blade",r)));if(e(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(m.resolve(n)===m.resolve(L())&&M.includeBaseForCurrentWorkspace!==!1)return H({},t);let u=H({},b.hooks),_=[m.join(s.homedir(),".blade","settings.json"),m.join(n,".blade","settings.json"),m.join(n,".blade","settings.local.json")];for(let e of _){let r=await this.loadJsonFile(e);if(r?.hooks)u=H({},u,r.hooks)}return u}async loadWorkspacePermissionOverrides(n,t={}){let M={allow:[],ask:[],deny:[]},u=(await $.getInstance().getStatus(n)).state==="trusted",_=[...u||t.includeUntrusted?[m.join(n,".blade","settings.json")]:[],...u||t.includeUntrusted?[m.join(n,".blade","settings.local.json")]:[]];for(let e of _){let r=await this.loadJsonFile(e);if(!r?.permissions)continue;for(let S of["allow","ask","deny"])M[S]=Array.from(new Set([...M[S],...r.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=H({},M.hooks,t.hooks);if(t.enabledPlugins)M.enabledPlugins={...n.enabledPlugins||{},...z(t.enabledPlugins)};if(t.pluginSourcePolicy)M.pluginSourcePolicy={...n.pluginSourcePolicy??b.pluginSourcePolicy,...i(t.pluginSourcePolicy)};if(t.env)M.env=H({},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=(_)=>{if(typeof _==="string")return _.replace(t,(e,r,S,E)=>{return process.env[r]||E||e});if(Array.isArray(_))return _.map(M);if(typeof _==="object"&&_!==null){let e=_;for(let[r,S]of Object.entries(e))e[r]=M(S);return e}return _},u=n;for(let[_,e]of Object.entries(u))u[_]=M(e)}async loadJsonFile(n){try{if(await this.fileExists(n)){let t=await _t.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 _t.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=(_)=>_.trim().replace(/^`|`$/g,""),u=(_)=>{for(let[e,r]of Object.entries(_))if(typeof r==="string")_[e]=M(r);else if(Array.isArray(r))r.forEach((S,E)=>{if(typeof S==="string")r[E]=M(S);else if(typeof S==="object"&&S!==null)u(S)});else if(typeof r==="object"&&r!==null)u(r)};return u(t),t}validateConfig(n,t=p()){let M=[];try{n.lspServers=d(n.lspServers)}catch(u){M.push(u instanceof Error?u.message:"Invalid LSP server configuration")}for(let[u,_]of Object.entries(n.mcpServers||{}))try{Nn(_),_.oauth=y(_);let e=Bn(_);if(_.logging!==void 0)_.logging=e;if(_.sampling)_.sampling=Jn(_.sampling);if(_.tasks)_.tasks=pn(_.tasks)}catch(e){M.push(`MCP server "${u}": ${e instanceof Error?e.message:"invalid sampling policy"}`)}for(let[u,_]of Object.entries(n.modelProviders||{}))if(M.push(...rt(u,_)),t.isReservedProviderId(u))M.push(`modelProviders.${u}: built-in provider ids cannot be overridden`);if(M.length===0)try{t.configureModelProviders(n.modelProviders||{},n.models)}catch(u){M.push(u instanceof Error?u.message:"Failed to configure custom model providers")}if(!n.models||n.models.length===0)M.push("没有可用的模型配置");if(!Wn(n.maxTurns))M.push(`maxTurns 必须是 ${kn()}`);if(!Mt(n.maxConcurrentTasks))M.push(`maxConcurrentTasks 必须是 ${ln}-${vn} 之间的整数`);if(!ut(n.maxQueuedTasks))M.push(`maxQueuedTasks 必须是 ${nt}-${tt} 之间的整数`);if(n.models&&n.models.length>0){if(!n.currentModelId)M.push("未设置当前模型 ID");else if(!n.models.find((_)=>_.id===n.currentModelId))M.push(`当前模型 ID "${n.currentModelId}" 在 models 列表中不存在`);for(let u of n.models){let _=`模型 "${u.displayName||u.id}"`,e=["name","apiKey","baseUrl","maxContextTokens","maxOutputTokens","supportsThinking","thinkingBudget","thinkingMode"].filter((S)=>(S in u));if(e.length>0)M.push(`${_}: 不再支持旧字段 ${e.join(", ")};请重新配置模型`);if(!u.model)M.push(`${_}: model 字段必填`);if(!u.provider)M.push(`${_}: provider 字段必填`);if(u.overrides?.baseUrl&&!u.overrides.baseUrl.startsWith("http"))M.push(`${_}: overrides.baseUrl "${u.overrides.baseUrl}" 不是有效的 HTTP URL`);let r=u.overrides?.streamIdleTimeout;if(r!==void 0&&(!Number.isFinite(r)||r<1000))M.push(`${_}: overrides.streamIdleTimeout 必须至少为 1000ms`);try{t.getModel(u.provider,u.model)}catch{M.push(`${_}: 内置 catalog 中不存在 ${u.provider}/${u.model}`)}}}if(M.length>0)throw Error(`配置验证失败:
|
|
23
|
-
${M.map((u)=>` - ${u}`).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 Uu(n,t={}){let M={...n};if(t.debug!==void 0)M.debug=t.debug===""?!0:t.debug;if(t.model){if(!n.models.some((_)=>_.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{U as He,y as Ie,I as Je,v as Ke,Ln as Le,N as Me,Nn as Ne,qM as Oe,V as Pe,VM as Qe,OM as Re,ZM as Se,Bn as Te,Ut as Ue,JM as Ve,qt as We,QM as Xe,Jn as Ye,DM as Ze,WM as _e,jM as $e,FM as af,lM as bf,pn as cf,vM as df,nu as ef,tu as ff,Mu as gf,BM as hf,b as if,d as jf,gt as kf,i as lf,Q as mf,ln as nf,vn as of,nt as pf,tt as qf,Mt as rf,ut as sf,R as tf,Uu as uf};
|
package/dist/chunk-5f956qbf.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$f as c,Zf as a,_f as b,ag as d,bg as e,cg as f}from"./chunk-fb80q06q.js";import"./chunk-sexhm0r5.js";export{b as getVersion,c as getPackageName,a as getPackageInfo,e as getFormattedVersion,d as getDescription,f as getCopyright};
|
package/dist/chunk-87ge6dkk.js
DELETED
package/dist/chunk-958rac3y.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as a,g as i,h as l,i as m}from"./chunk-wz6atg87.js";import"./chunk-h34g9v9z.js";import"./chunk-1qj0qms6.js";import"./chunk-7a8k7ck4.js";import"./chunk-fw1fm9cn.js";import"./chunk-mxffhqe5.js";import"./chunk-ag0z1q2q.js";import"./chunk-00gwp388.js";import"./chunk-s1j86hhh.js";import"./chunk-pgy1mtgw.js";import"./chunk-16449n3m.js";import"./chunk-g0gqxn3c.js";import"./chunk-2sdbj0zz.js";import{Zc as n}from"./chunk-p01t6c78.js";import"./chunk-5knt529c.js";import{td as s}from"./chunk-2gca6fvf.js";import"./chunk-v508x7cg.js";import"./chunk-d90tnjst.js";import"./chunk-y9a1jwnv.js";import"./chunk-dsxjgty6.js";import"./chunk-b9y9mc7f.js";import"./chunk-fjbptkh2.js";import"./chunk-3j6bsp1q.js";import"./chunk-t1z46fqz.js";import"./chunk-prqgpq92.js";import"./chunk-ysr3frmw.js";import"./chunk-d3gx05ph.js";import"./chunk-bx99mx3k.js";import"./chunk-3ctcv013.js";import"./chunk-1ep6bcpc.js";import"./chunk-c23bewtt.js";import"./chunk-87ge6dkk.js";import"./chunk-dvf4cfye.js";import"./chunk-7ryqs453.js";import"./chunk-pnjftj8t.js";import"./chunk-nq1wqpsx.js";import"./chunk-fb80q06q.js";import"./chunk-0kqp5z4v.js";import"./chunk-jdms602t.js";import"./chunk-95jjpdh9.js";import"./chunk-sexhm0r5.js";import v from"chalk";var C={command:"serve",describe:"Start a headless Blade server (no browser)",builder:a,handler:async(p)=>{let r=i(p);if(await s(),!process.env.BLADE_SERVER_PASSWORD)console.log(v.yellow("Warning: BLADE_SERVER_PASSWORD is not set; server is unsecured."));let e=await m.listenAsync(r);if(console.log(`Blade server listening on http://${e.hostname}:${e.port}`),r.hostname==="0.0.0.0"){let o=l();for(let g of o)console.log(` Network: http://${g}:${e.port}`)}let t,c=new Promise((o)=>{t=o}),d=n(async()=>{await e.stop(),t()});try{await c}finally{d(),await e.stop()}}};export{C as serveCommand};
|
package/dist/chunk-ap5qpeh4.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Kc as a,Lc as b,Mc as c,Nc as d,Oc as e,Pc as f,Qc as g,Rc as h}from"./chunk-2sdbj0zz.js";import"./chunk-7ryqs453.js";import"./chunk-95jjpdh9.js";import"./chunk-sexhm0r5.js";export{d as syncSession,e as syncAll,h as searchProjectionText,c as resetProjectionDbCache,f as removeSessionFromProjection,g as rebuildProjectionIndex,b as getProjectionDb,a as getIndexDbPath};
|
package/dist/chunk-c6fq52m9.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Md as a,Nd as b,Od as c}from"./chunk-dsxjgty6.js";import"./chunk-b9y9mc7f.js";import"./chunk-pnjftj8t.js";import"./chunk-nq1wqpsx.js";import"./chunk-95jjpdh9.js";import"./chunk-sexhm0r5.js";export{b as resolveModelConfig,c as getModelDisplayName,a as getModelApiKeyEnvironmentVariable};
|
package/dist/chunk-dvyv53nz.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$a as b,_a as a,bb as c,fb as d,gb as e,hb as f,ib as g,jb as h,kb as i,lb as j,mb as k,rb as l,sb as m,tb as n,ub as o,wb as p,xb as q,yb as r}from"./chunk-s1j86hhh.js";import"./chunk-pgy1mtgw.js";import"./chunk-16449n3m.js";import"./chunk-g0gqxn3c.js";import"./chunk-2sdbj0zz.js";import"./chunk-d90tnjst.js";import"./chunk-y9a1jwnv.js";import"./chunk-b9y9mc7f.js";import"./chunk-t1z46fqz.js";import"./chunk-prqgpq92.js";import"./chunk-d3gx05ph.js";import"./chunk-bx99mx3k.js";import"./chunk-1ep6bcpc.js";import"./chunk-c23bewtt.js";import"./chunk-87ge6dkk.js";import"./chunk-dvf4cfye.js";import"./chunk-7ryqs453.js";import"./chunk-pnjftj8t.js";import"./chunk-nq1wqpsx.js";import"./chunk-fb80q06q.js";import"./chunk-jdms602t.js";import"./chunk-95jjpdh9.js";import"./chunk-sexhm0r5.js";export{g as saveUserMessage,i as saveToolUse,j as saveToolResult,k as saveCompaction,h as saveAssistantMessage,d as isRootSystemPrompt,m as handleTaskListUpdate,n as handleSkillActivation,o as extractModelSwitch,r as executeLoopGenerator,f as drainLoop,c as checkStopHook,a as checkOutputRecovery,b as checkIncompleteIntent,q as checkAndCompactInLoop,p as applyToolDomainEffects,l as StreamingToolExecutor,e as ConversationState};
|
package/dist/chunk-ecsj4njh.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ad as n,Bd as o,Cd as p,Dd as q,nd as a,od as b,pd as c,qd as d,rd as e,sd as f,td as g,ud as h,vd as i,wd as j,xd as k,yd as l,zd as m}from"./chunk-2gca6fvf.js";import"./chunk-v508x7cg.js";import"./chunk-d90tnjst.js";import"./chunk-3ctcv013.js";import"./chunk-1ep6bcpc.js";import"./chunk-c23bewtt.js";import"./chunk-87ge6dkk.js";import"./chunk-dvf4cfye.js";import"./chunk-7ryqs453.js";import"./chunk-pnjftj8t.js";import"./chunk-nq1wqpsx.js";import"./chunk-fb80q06q.js";import"./chunk-0kqp5z4v.js";import"./chunk-jdms602t.js";import"./chunk-95jjpdh9.js";import"./chunk-sexhm0r5.js";export{a as vanillaStore,c as sessionActions,l as getThinkingModeEnabled,b as getState,n as getServiceTier,o as getResponseVerbosity,m as getReasoningEffort,j as getModelById,e as getMessages,k as getMcpServers,i as getCurrentModel,f as getConfig,p as getCommunicationStyle,h as getAllModels,g as ensureStoreInitialized,q as configActions,d as appActions};
|