@dahawa/hawa-code 1.36.1 → 1.36.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +454 -454
- package/hands.js +3 -3
- package/package.json +1 -1
package/hands.js
CHANGED
|
@@ -752,7 +752,7 @@ data: ${JSON.stringify($)}
|
|
|
752
752
|
[Search queries used: ${r.groundingMetadata.webSearchQueries.join(", ")}]`}));let i={id:`msg_${Math.random().toString(36).slice(2)}`,type:"message",role:"assistant",model:t.modelVersion||"gemini",content:n,stop_reason:r.finishReason?r.finishReason==="STOP"&&n.some(o=>o.type==="tool_use")?"tool_use":this.mapGeminiFinishReason(r.finishReason):"end_turn",stop_sequence:null,usage:{input_tokens:t.usageMetadata?.promptTokenCount||0,output_tokens:t.usageMetadata?.candidatesTokenCount||0}};return this.logger&&this.logger.debug({result:i},"Conversion complete, final Anthropic response"),i}catch{throw zMr(`Provider error: ${JSON.stringify(t)}`,500,"provider_error")}}mapGeminiFinishReason(t){switch(t){case"STOP":return"end_turn";case"MAX_TOKENS":return"max_tokens";case"SAFETY":case"RECITATION":return"stop_sequence";default:return"end_turn"}}},ZEe=new JEe;var Elt=ie(mlt(),1);function fA(e){return e?typeof e.entries=="function"?Object.fromEntries(e.entries()):{...e}:{}}function glt(e){let t=String(e?.["x-thinking-level"]??"medium").toLowerCase();return["off","low","medium","high"].includes(t)?t:"medium"}function ozr(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t}}function szr(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t,summary:"auto"}}function azr(e,t="chat"){let r={request:{},response:{},openai:{request:{},response:{}}};return r.request.model=e.request.body.model,r.request.messages=e.request.body.messages,r.request.system=e.request.body.system,r.response.content=e.response.body.content,t==="responses"?(r.openai.request.model=e.openai.request.body.model,r.openai.request.input=e.openai.request.body.input,r.openai.response.output=e.openai.response.body?.output):(r.openai.request.model=e.openai.request.body.model,r.openai.request.messages=e.openai.request.body.messages,r.openai.response.choices=e.openai.response.body.choices),r}function eU(e,t,r){cG(t,e),dG(t,azr(e,r),r)}function dR(e){let t=[],r=e.getReader(),n,i=new Promise(u=>n=u),o=!1,s=()=>{o||(o=!0,n(Buffer.concat(t).toString("utf8")))};return{stream:new ReadableStream({async pull(u){try{let{done:l,value:c}=await r.read();if(l){u.close(),s();return}t.push(c),u.enqueue(c)}catch(l){u.error(l),s()}},cancel(u){r.cancel(u).catch(()=>{}),s()}}),done:i}}function tU(e){let t=new Headers(e);return t.delete("content-encoding"),t.delete("content-length"),t.delete("transfer-encoding"),t}function vCe(e,t,r,n,i){let o;try{o={type:"error",error:{type:"api_error",message:JSON.parse(i).error?.message??`${e}: ${n}`,code:`${t}_${r}_ERROR`}}}catch{o={type:"error",error:{type:"api_error",message:`${e}: ${n}`,code:`${t}_${r}_ERROR`}}}return new Response(JSON.stringify(o),{status:r,statusText:n,headers:{"Content-Type":"application/json"}})}var hlt=["/v1/messages"];function DCe(e){let t;try{typeof e=="string"?t=new ST(e):e instanceof ST?t=e:t=new ST(e.url)}catch{return""}let r=t.pathname;for(let n of hlt){let i=r.indexOf(n);if(i!==-1)return t.origin+r.slice(0,i)}return t.origin}function SK(e,t){let r=typeof e=="string"?e:e instanceof ST?e.toString():e.url,n;try{n=new ST(r).pathname}catch{return!1}return hlt.some(i=>n.includes(i))&&(t.method==="POST"||t.method==="post")}function uzr(e){return async(t,r)=>{if(!SK(t,r))return e(t,r);let n=JSON.parse(r.body),i=await TV.transformRequestOut(n),o=DCe(t)+"/chat/completions",s=fA(r.headers),a=s.authorization??s.Authorization??"";ozr(i,glt(s));let u=await e(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a},body:JSON.stringify(i)});if(!u.ok){let _=await u.text();return le(`OpenAI Chat Completions API error: ${u.status}`,{url:o,errorResponse:_}),vCe("OpenAI Chat Completions API error","OPENROUTER",u.status,u.statusText,_)}let l=n.stream===!0,c=s["x-agent-id"],f={request:{url:o,method:r.method,headers:s,body:n},response:{status:u.status,statusText:u.statusText,headers:fA(u.headers)},openai:{request:{body:i},response:{}}};if(!l){let _=await u.text(),C=new Response(_,{status:u.status,statusText:u.statusText,headers:tU(u.headers)}),S=await TV.transformResponseIn(C,n),T=await S.text();try{eU({...f,openai:{...f.openai,response:{body:JSON.parse(_)}},response:{...f.response,body:JSON.parse(T)}},c)}catch(x){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u975E\u6D41\u5F0F):",x)}return new Response(T,{status:S.status,statusText:S.statusText,headers:S.headers})}let A=dR(u.body),m=new Response(A.stream,{status:u.status,statusText:u.statusText,headers:tU(u.headers)}),g=await TV.transformResponseIn(m,n),E=dR(g.body);return Promise.all([A.done,E.done]).then(async([_,C])=>{try{eU({...f,openai:{...f.openai,response:{body:await qXe(_)}},response:{...f.response,body:await YL(C)}},c)}catch(S){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u6D41\u5F0F):"+S?.stack)}}).catch(_=>le("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Chat):"+_)),new Response(E.stream,{status:g.status,statusText:g.statusText,headers:g.headers})}}function lzr(e){return async(t,r)=>{if(!SK(t,r))return e(t,r);let n=JSON.parse(r.body),i=await vV.transformRequestOut(n),o=fA(r.headers);szr(i,glt(o));let s=JSON.stringify(i),u=DCe(t)+"/responses",l=o.authorization??o.Authorization??"";if(!l)return new Response(JSON.stringify({type:"error",error:{type:"api_error",message:"Missing Authorization header",code:"RESPONSES_AUTH_MISSING"}}),{status:401,headers:{"Content-Type":"application/json"}});let c=await e(u,{method:"POST",headers:{"Content-Type":"application/json",Authorization:l,"x-api-key":l.replace(/^Bearer\s+/i,"").trim()},body:s});if(!c.ok){let S=await c.text();return le(`OpenAI Responses API error: ${c.status} ${c.statusText}`,{url:u,status:c.status,errorResponse:S}),vCe("OpenAI Responses API error","RESPONSES",c.status,c.statusText,S)}let f=n.stream===!0,A=o["x-agent-id"],m={request:{url:u,method:r.method,headers:o,body:n},response:{status:c.status,statusText:c.statusText,headers:fA(c.headers)},openai:{request:{body:i},response:{}}};if(!f){let S=await c.text(),T=new Response(S,{status:c.status,statusText:c.statusText,headers:tU(c.headers)}),x=await vV.transformResponseIn(T,n),O=await x.text();try{eU({...m,openai:{...m.openai,response:{body:JSON.parse(S)}},response:{...m.response,body:JSON.parse(O)}},A,"responses")}catch(q){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u975E\u6D41\u5F0F):",q)}return new Response(O,{status:x.status,statusText:x.statusText,headers:x.headers})}let g=dR(c.body),E=new Response(g.stream,{status:c.status,statusText:c.statusText,headers:tU(c.headers)}),_=await vV.transformResponseIn(E,n),C=dR(_.body);return Promise.all([g.done,C.done]).then(async([S,T])=>{try{eU({...m,openai:{...m.openai,response:{body:await HXe(S)}},response:{...m.response,body:await YL(T)}},A,"responses")}catch(x){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u6D41\u5F0F):"+x?.stack)}}).catch(S=>le("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Responses):"+S)),new Response(C.stream,{status:_.status,statusText:_.statusText,headers:_.headers})}}function czr(e){return async(t,r)=>{if(!SK(t,r))return e(t,r);let n=JSON.parse(r.body),i=fA(r.headers),o=await ZEe.transformRequestOut(n),s=JSON.stringify(o),a=DCe(t)+`/models/${n.model}:streamGenerateContent?alt=sse`,u=i.authorization??i.Authorization??"",l;try{l=await e(a,{method:"POST",headers:{"Content-Type":"application/json","x-goog-api-key":String(u).replace(/^Bearer\s+/i,"").trim()},body:s})}catch(C){throw le("gemini request error:",C),C}if(!l.ok){let C=await l.text();return le(`Gemini API error response: ${l.status} ${l.statusText}`,{url:a,status:l.status,errorResponse:C}),vCe("Gemini API error","Gemini",l.status,l.statusText,C)}let c=n.stream===!0,f=i["x-agent-id"],A={request:{url:a,method:r.method,headers:fA(r.headers),body:n},response:{status:l.status,statusText:l.statusText,headers:fA(l.headers)},openai:{request:{body:o},response:{}}},m=dR(l.body),g=new Response(m.stream,{status:l.status,statusText:l.statusText,headers:tU(l.headers)}),E=await ZEe.transformResponseIn(g),_=dR(E.body);return Promise.all([m.done,_.done]).then(async([C,S])=>{try{let T=c?GXe(C):JSON.parse(C),x=c?await YL(S):JSON.parse(S);eU({...A,openai:{...A.openai,response:{body:T}},response:{...A.response,body:x}},f)}catch(T){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Gemini):"+T?.stack)}}).catch(C=>le("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Gemini):"+C)),new Response(_.stream,{status:E.status,statusText:E.statusText,headers:E.headers})}}function dzr(e){return async(t,r)=>{if(!SK(t,r))return e(t,r);let n=r.body;if(r.body)try{let f=JSON.parse(r.body);n=JSON.stringify(f)}catch{}let i=fA(r.headers);["1","true"].includes(String(process.env.HAWA_CODE_X_API_KEY_DISABLED??"").toLowerCase())&&(delete i["x-api-key"],delete i["X-API-Key"]),["1","true"].includes(String(process.env.HAWA_CODE_AUTH_DISABLED??"").toLowerCase())&&(delete i.authorization,delete i.Authorization),delete i["content-length"];let a=await e(t,{method:r.method,headers:i,body:n});if(!a.ok){let f=await a.text();le(`API error response: ${a.status} ${a.statusText}`,{url:typeof t=="string"?t:t instanceof ST?t.toString():t.url,status:a.status,errorResponse:f});let A;try{let m=JSON.parse(f);A={type:"error",error:{type:"api_error",message:m.error?.message||m.message||`API error: ${a.statusText}`,code:m.error?.code||m.code||`API_${a.status}_ERROR`}},m.error?.details&&(A.error.details=m.error.details)}catch{A={type:"error",error:{type:"api_error",message:`API error: ${a.statusText}`,code:`API_${a.status}_ERROR`}}}return new Response(JSON.stringify(A),{status:a.status,statusText:a.statusText,headers:{"Content-Type":"application/json"}})}let u=a.clone(),l=!(Object.hasOwn(JSON.parse(n),"stream")&&!JSON.parse(n).stream),c={request:{url:typeof t=="string"?t:t instanceof ST?t.toString():t.url,method:r.method,headers:fA(r.headers),body:JSON.parse(n)},response:{status:a.status,statusText:a.statusText,headers:fA(a.headers)}};return(async()=>{if(l){let m=await a.text();c.response.body=await YL(m)}else c.response.body=await a.json();let A=fA(r.headers)["x-agent-id"];cG(A,c),dG(A,{request:c.request.body.messages,response:c.response.body.content})})().catch(f=>le(`\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF:
|
|
753
753
|
Stack trace: `+f.stack)),new Response(u.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var TCe=null,Alt=!1;function fzr(){if(Alt)return TCe;Alt=!0;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(TCe=new Elt.ProxyAgent({uri:e}),qt(`[proxy] using proxy: ${e}`)),TCe}function pzr(){let e=fzr();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function IK(e){let t=e||process.env.API_TYPE,r=pzr();switch(t){case"openai":return uzr(r);case"openai-responses":return lzr(r);case"gemini":return czr(r);default:return dzr(r)}}var hzr=ie(Ce(),1);function _lt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=mzr(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function mzr(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||Azr(t)?0:gzr(t)?2:1}function Azr(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function gzr(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}function pA(e){if(e<6e4)return`${(e/1e3).toFixed(1)}s`;let t=Math.floor(e/36e5),r=Math.floor(e%36e5/6e4),n=(e%6e4/1e3).toFixed(1);return t>0?`${t}h ${r}m ${n}s`:r>0?`${r}m ${n}s`:`${n}s`}function eC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}Ue();_d();var S0={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0};function TK(e,t){S0.totalCost+=e,S0.totalAPIDuration+=t}function vK(e,t){S0.inputTokens+=e,S0.outputTokens+=t,Ci.emit("token:change",{inputTokens:S0.inputTokens,outputTokens:S0.outputTokens})}function Ezr(){return Date.now()-S0.startTime}function _zr(e){return`$${e>.5?yzr(e,100).toFixed(2):e.toFixed(4)}`}function ylt(){return _r.grey(`Total cost: ${_zr(S0.totalCost)}
|
|
754
754
|
Total duration (API): ${pA(S0.totalAPIDuration)}
|
|
755
|
-
Total duration (wall): ${pA(Ezr())}`)}function yzr(e,t){return Math.round(e*t)/t}Ue();He();He();var wCe="1.36.
|
|
755
|
+
Total duration (wall): ${pA(Ezr())}`)}function yzr(e,t){return Math.round(e*t)/t}Ue();He();He();var wCe="1.36.3";globalThis.MACRO={VERSION:wCe,PACKAGE_URL:`@dahawa/${Ao}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var DK=process.env.HAWA_CODE_USER_AGENT||`${Ao}/${wCe} (${process.env.USER_TYPE})`;import{randomUUID as Ek}from"crypto";var bzr=()=>[],Czr=()=>{};function xK(){return bzr}function blt(){return Czr}Ue();ir();Br();Ue();He();import{existsSync as D0,readdirSync as $Vr,statSync as zVr}from"fs";import{join as nC,relative as YVr}from"path";import{homedir as Ydt}from"os";import{platform as jVr}from"process";import{readFile as iC}from"fs/promises";Br();I0();kr();import{join as Dzr,sep as xzr}from"path";function qp(){if(!Hp())return!1;try{let e=yr();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Tf(){return(Dzr(Fe(),".hcode","team-memory")+xzr).normalize("NFC")}function NCe(e){let t=e.normalize("NFC"),r=Tf();return t.startsWith(r)}var jdt=ie(HK(),1);qi();var qdt=ie(HK(),1);Br();He();Ue();od();import{readFile as Udt}from"fs/promises";import{existsSync as VCe,readdirSync as UVr,statSync as HVr}from"fs";import{join as WCe,relative as Gdt}from"path";import{homedir as qVr}from"os";function Hdt(e){try{let t=(0,qdt.default)(e),r=t.data.paths,n=[];return typeof r=="string"?n=r.split(",").map(i=>i.trim()).filter(Boolean):Array.isArray(r)&&(n=r.filter(i=>typeof i=="string")),{paths:n,content:t.content.trim()}}catch(t){return we(t),{paths:[],content:e.trim()}}}function GVr(e,t){return t.length===0?!0:t.some(r=>{try{return Xu(e,r,{matchBase:!0,dot:!0})}catch(n){return we(n),!1}})}function KCe(e){let t=[];try{if(!VCe(e))return t;let r=UVr(e);for(let n of r){let i=WCe(e,n),o=HVr(i);o.isDirectory()?t.push(...KCe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){we(r)}return t}async function $dt(){let e=[];try{let t=WCe(qVr(),dn,"rules");if(VCe(t)){let r=KCe(t);for(let n of r)try{let i=await Udt(n,"utf-8"),{paths:o,content:s}=Hdt(i);o.length>0&&e.push({filePath:n,content:s,paths:o,isProjectRule:!1})}catch(i){we(i)}}}catch(t){we(t)}try{let t=WCe(Fe(),dn,"rules");if(VCe(t)){let r=KCe(t);for(let n of r)try{let i=await Udt(n,"utf-8"),{paths:o,content:s}=Hdt(i);o.length>0&&e.push({filePath:Gdt(Fe(),n),content:s,paths:o,isProjectRule:!0})}catch(i){we(i)}}}catch(t){we(t)}return e}function zdt(e,t){e=aY(e);let r=aY(Fe()),n=e.startsWith(r)?Gdt(r,e):e;return t.filter(i=>GVr(n,i.paths))}var VVr=`# hawaCodeMd
|
|
756
756
|
Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written.`;function WVr(e="default"){let r=Ye.getSessionContext(e).getData("matchedPathRules");return!r||r.length===0?"":r.map(i=>{let o=i.isProjectRule?"project instructions, checked into the codebase":"user's private global instructions for all projects";return`Contents of ${i.filePath} (${o}):
|
|
757
757
|
|
|
758
758
|
${i.content}`}).join(`
|
|
@@ -1015,7 +1015,7 @@ try {
|
|
|
1015
1015
|
`],{encoding:"utf8",maxBuffer:SAt,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function $Zr(){try{let e=HU("where",["pwsh.exe"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().split(/\r?\n/)[0];if(e)return e}catch{}return"powershell.exe"}var zZr="[Image pasted]";function DAt(e){return function(t){return(new Map(e).get(t)??(()=>{}))(t)}}function wAt({value:e,onChange:t,onSubmit:r,onExit:n,onExitMessage:i,onMessage:o,onHistoryUp:s,onHistoryDown:a,onHistoryReset:u,mask:l="",multiline:c=!1,cursorChar:f,invert:A,columns:m,onImagePaste:g,disableCursorMovementForUpDownKeys:E=!1,externalOffset:_,onOffsetChange:C}){let S=_,T=C,x=UU.fromText(e,m,S),[O,q]=(0,xAt.useState)(null);function $(){O&&(clearTimeout(O),q(null),o?.(!1))}let H=qT(ce=>{$(),i?.(ce,"Ctrl-C")},()=>n?.(),()=>{e&&(t(""),u?.())}),L=qT(ce=>{$(),o?.(!!e&&ce,"Press Escape again to clear")},()=>{e&&t("")});function Y(){return UU.fromText("",m,0)}let z=qT(ce=>i?.(ce,"Ctrl-D"),()=>n?.());function fe(){return $(),x.text===""?(z(),x):x.del()}function me(){if(l)return x;let ce=vAt();return ce===null?(TAt()&&(o?.(!0,IAt),$(),q(setTimeout(()=>{o?.(!1)},4e3))),x):(g?.(ce),x.insert(zZr))}let M=DAt([["a",()=>x.startOfLine()],["b",()=>x.left()],["c",H],["d",fe],["e",()=>x.endOfLine()],["f",()=>x.right()],["h",()=>($(),x.backspace())],["k",()=>x.deleteToLineEnd()],["l",()=>Y()],["n",()=>ee()],["p",()=>ae()],["u",()=>x.deleteToLineStart()],["v",me],["w",()=>x.deleteWordBefore()],["o",me]]),ue=DAt([["b",()=>x.prevWord()],["f",()=>x.nextWord()],["d",()=>x.deleteWordAfter()]]);function Ae(ce){if(c&&x.offset>0&&x.text[x.offset-1]==="\\")return x.backspace().insert(`
|
|
1016
1016
|
`);if(ce.meta)return x.insert(`
|
|
1017
1017
|
`);r?.(e)}function ae(){if(E)return s?.(),x;let ce=x.up();return ce.equals(x)&&s?.(),ce}function ee(){if(E)return a?.(),x;let ce=x.down();return ce.equals(x)&&a?.(),ce}function ve(ce,Ge){if(Ge.tab)return;if(Ge.backspace||Ge.delete||ce==="\b"||ce==="\x7F"||ce==="\b"){let K=x.backspace();x.equals(K)||(T(K.offset),x.text!==K.text&&t(K.text));return}if(!Ge.ctrl&&!Ge.meta&&ce.length>1){let K=x.insert(ce);x.equals(K)||(T(K.offset),x.text!==K.text&&t(K.text));return}let Ee=Se(Ge)(ce);Ee&&(x.equals(Ee)||(T(Ee.offset),x.text!==Ee.text&&t(Ee.text)))}function Se(ce){if(ce.backspace||ce.delete)return $(),()=>x.backspace();switch(!0){case ce.escape:return L;case(ce.leftArrow&&(ce.ctrl||ce.meta||"fn"in ce&&ce.fn)):return()=>x.prevWord();case(ce.rightArrow&&(ce.ctrl||ce.meta||"fn"in ce&&ce.fn)):return()=>x.nextWord();case ce.ctrl:return M;case("home"in ce&&ce.home):return()=>x.startOfLine();case("end"in ce&&ce.end):return()=>x.endOfLine();case ce.pageDown:return()=>x.endOfLine();case ce.pageUp:return()=>x.startOfLine();case ce.meta:return ue;case ce.return:return()=>Ae(ce);case ce.upArrow:return ae;case ce.downArrow:return ee;case ce.leftArrow:return()=>x.left();case ce.rightArrow:return()=>x.right()}return function(Ge){switch(!0){case(Ge=="\x1B[H"||Ge=="\x1B[1~"):return x.startOfLine();case(Ge=="\x1B[F"||Ge=="\x1B[4~"):return x.endOfLine();case(Ge==="\b"||Ge==="\x7F"||Ge==="\b"):return $(),x.backspace();default:return x.insert(Ge.replace(/\r/g,`
|
|
1018
|
-
`))}}}return{onInput:ve,renderedValue:x.render(f,l,A),offset:S,setOffset:T}}function qU({value:e,placeholder:t="",focus:r=!0,mask:n,multiline:i=!1,highlightPastedText:o=!1,showCursor:s=!0,onChange:a,onSubmit:u,onExit:l,onHistoryUp:c,onHistoryDown:f,onExitMessage:A,onMessage:m,onHistoryReset:g,columns:E,onImagePaste:_,onPaste:C,isDimmed:S=!1,disableCursorMovementForUpDownKeys:T=!1,cursorOffset:x,onChangeCursorOffset:O}){let{onInput:q,renderedValue:$}=wAt({value:e,onChange:a,onSubmit:u,onExit:l,onExitMessage:A,onMessage:m,onHistoryReset:g,onHistoryUp:c,onHistoryDown:f,focus:r,mask:n,multiline:i,cursorChar:s?" ":"",highlightPastedText:o,invert:ue=>_r.bgHex("#ffffff").hex("#000000")(ue),themeText:ue=>_r.hex(ye().text)(ue),columns:E,onImagePaste:_,disableCursorMovementForUpDownKeys:T,externalOffset:x,onOffsetChange:O}),[H,L]=sSe.default.useState({chunks:[],timeoutId:null}),Y=ue=>(ue&&clearTimeout(ue),setTimeout(()=>{L(({chunks:Ae})=>{let ae=Ae.join("");return Promise.resolve().then(()=>C(ae)),{chunks:[],timeoutId:null}})},100));dr((ue,Ae)=>{if(C&&(ue.length>10||H.timeoutId)){L(({chunks:ae,timeoutId:ee})=>({chunks:[...ae,ue],timeoutId:Y(ee)}));return}q(ue,Ae)},{isActive:r});let fe=t?_r.hex(ye().secondaryText)(t):void 0,me=ue=>_r.bgHex("#ffffff").hex("#000000")(ue);s&&r&&(fe=t.length>0?me(t[0])+_r.hex(ye().secondaryText)(t.slice(1)):me(" "));let M=e.length==0&&t;return sSe.default.createElement(v,{wrap:"truncate-end",dimColor:S},M?fe:$)}var aSe=ie(Ce(),1),GU=ie(Ce(),1);fU();_d();qi();UT();kr();var BAt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function jT(){let e=[...BAt,...[...BAt].reverse()],[t,r]=(0,GU.useState)(0);return(0,GU.useEffect)(()=>{let n=setInterval(()=>{r(i=>(i+1)%e.length)},120);return()=>clearInterval(n)},[e.length]),aSe.createElement(N,{flexWrap:"nowrap",height:1,width:2},aSe.createElement(v,{color:ye().claude},e[t]))}qi();function lC(){return Ye.getSessionContext().window_size?{...Ye.getSessionContext().window_size}:{columns:process.stdout.columns||80,rows:process.stdout.rows||24}}He();import{homedir as ZU}from"os";import{join as VR}from"path";import{existsSync as XU,mkdirSync as _ht,appendFileSync as Eht,readFileSync as yht,constants as qtn,writeFileSync as Gtn,unlinkSync as bht,statSync as $tn}from"fs";import{platform as Cht}from"process";Ue();import{accessSync as ztn}from"fs";Ue();var oyi=ie(xSe(),1);var Htn="1.36.
|
|
1018
|
+
`))}}}return{onInput:ve,renderedValue:x.render(f,l,A),offset:S,setOffset:T}}function qU({value:e,placeholder:t="",focus:r=!0,mask:n,multiline:i=!1,highlightPastedText:o=!1,showCursor:s=!0,onChange:a,onSubmit:u,onExit:l,onHistoryUp:c,onHistoryDown:f,onExitMessage:A,onMessage:m,onHistoryReset:g,columns:E,onImagePaste:_,onPaste:C,isDimmed:S=!1,disableCursorMovementForUpDownKeys:T=!1,cursorOffset:x,onChangeCursorOffset:O}){let{onInput:q,renderedValue:$}=wAt({value:e,onChange:a,onSubmit:u,onExit:l,onExitMessage:A,onMessage:m,onHistoryReset:g,onHistoryUp:c,onHistoryDown:f,focus:r,mask:n,multiline:i,cursorChar:s?" ":"",highlightPastedText:o,invert:ue=>_r.bgHex("#ffffff").hex("#000000")(ue),themeText:ue=>_r.hex(ye().text)(ue),columns:E,onImagePaste:_,disableCursorMovementForUpDownKeys:T,externalOffset:x,onOffsetChange:O}),[H,L]=sSe.default.useState({chunks:[],timeoutId:null}),Y=ue=>(ue&&clearTimeout(ue),setTimeout(()=>{L(({chunks:Ae})=>{let ae=Ae.join("");return Promise.resolve().then(()=>C(ae)),{chunks:[],timeoutId:null}})},100));dr((ue,Ae)=>{if(C&&(ue.length>10||H.timeoutId)){L(({chunks:ae,timeoutId:ee})=>({chunks:[...ae,ue],timeoutId:Y(ee)}));return}q(ue,Ae)},{isActive:r});let fe=t?_r.hex(ye().secondaryText)(t):void 0,me=ue=>_r.bgHex("#ffffff").hex("#000000")(ue);s&&r&&(fe=t.length>0?me(t[0])+_r.hex(ye().secondaryText)(t.slice(1)):me(" "));let M=e.length==0&&t;return sSe.default.createElement(v,{wrap:"truncate-end",dimColor:S},M?fe:$)}var aSe=ie(Ce(),1),GU=ie(Ce(),1);fU();_d();qi();UT();kr();var BAt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function jT(){let e=[...BAt,...[...BAt].reverse()],[t,r]=(0,GU.useState)(0);return(0,GU.useEffect)(()=>{let n=setInterval(()=>{r(i=>(i+1)%e.length)},120);return()=>clearInterval(n)},[e.length]),aSe.createElement(N,{flexWrap:"nowrap",height:1,width:2},aSe.createElement(v,{color:ye().claude},e[t]))}qi();function lC(){return Ye.getSessionContext().window_size?{...Ye.getSessionContext().window_size}:{columns:process.stdout.columns||80,rows:process.stdout.rows||24}}He();import{homedir as ZU}from"os";import{join as VR}from"path";import{existsSync as XU,mkdirSync as _ht,appendFileSync as Eht,readFileSync as yht,constants as qtn,writeFileSync as Gtn,unlinkSync as bht,statSync as $tn}from"fs";import{platform as Cht}from"process";Ue();import{accessSync as ztn}from"fs";Ue();var oyi=ie(xSe(),1);var Htn="1.36.3",JU={VERSION:Htn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};He();var WT=VR(vI,".update.lock"),Ytn=300*1e3;function Sht(){try{if(XU(vI)||_ht(vI,{recursive:!0}),XU(WT)){let e=$tn(WT);if(Date.now()-e.mtimeMs<Ytn)return!1;try{bht(WT)}catch(r){return we(`Failed to remove stale lock file: ${r}`),!1}}return Gtn(WT,`${process.pid}`,"utf8"),!0}catch(e){return we(`Failed to acquire lock: ${e}`),!1}}function Iht(){try{XU(WT)&&yht(WT,"utf8")===`${process.pid}`&&bht(WT)}catch(e){we(`Failed to release lock: ${e}`)}}async function wSe(){try{let e=await Wn("npm -g config get prefix");if(e.code!==0)return we("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{ztn(t,qtn.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(we("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return we(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function Tht(e){if(!Sht())throw dt("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:JU.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{XU(e)||_ht(e,{recursive:!0});let t=await Wn(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
|
|
1019
1019
|
# npm global path
|
|
1020
1020
|
export PATH="${e}/bin:$PATH"
|
|
1021
1021
|
`;if(Cht==="win32"){let n=await Wn(`setx PATH "${process.env.PATH};${e}"`);if(n.code!==0)throw new Error(`Failed to update PATH on Windows: ${n.stderr}`)}else{let n=[VR(ZU(),".bashrc"),VR(ZU(),".bash_profile"),VR(ZU(),".zshrc"),VR(ZU(),".config","fish","config.fish")];for(let i of n)if(XU(i))try{if(!yht(i,"utf8").includes(e)){if(i.includes("fish")){let s=`
|
|
@@ -1424,7 +1424,7 @@ ${o}
|
|
|
1424
1424
|
- Task IDs can be found using the /tasks command
|
|
1425
1425
|
- Works for both shell tasks (IDs starting with 's') and agent tasks (IDs starting with 'a')
|
|
1426
1426
|
- For shell tasks, sends SIGTERM first, then SIGKILL if needed
|
|
1427
|
-
- For agent tasks, marks the task as failed and triggers completion handlers`;mA();SI();PB();var Mbn=Le(()=>V.strictObject({task_id:V.string().describe("The ID of the background task to stop")})),L9={name:DOt,async description(){return xOt},async prompt(){return wOt},isReadOnly(){return!1},isConcurrencySafe(){return!1},get inputSchema(){return Mbn()},userFacingName(){return"Stop Task"},async isEnabled(){return!0},needsPermissions(){return!1},async validateInput({task_id:e}){return!e||e.trim().length===0?{result:!1,message:"task_id is required and cannot be empty"}:{result:!0}},renderToolUseMessage({task_id:e}){return`Stop task: ${e}`},renderToolUseRejectedMessage(){return wte.createElement(v,{color:"red"},"\xA0\xA0\u23BF \xA0 Task stop operation was rejected")},renderToolResultMessage(e){let{stopped:t,task_id:r,message:n}=e;return t?wte.createElement(v,{color:"green"},"\xA0\xA0\u23BF \xA0",n):wte.createElement(v,{color:"red"},"\xA0\xA0\u23BF \xA0",n)},renderResultForAssistant({stopped:e,task_id:t,message:r,task_type:n}){return`Task ${t} (${n}) stop operation: ${r}`},async*call(e,{abortController:t}){let{task_id:r}=e;if(t.signal.aborted){let n={message:"Operation cancelled",task_id:r,stopped:!1,task_type:"unknown"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(n),data:n};return}try{let n=r.startsWith("a"),i=r.startsWith("s");if(n){let o=pc.stopTask(r),s={message:o.reason,task_id:r,stopped:o.success,task_type:"agent"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(s),data:s}}else if(i){let o=r.startsWith("sp")?yp.stop(r):uu.stop(r),s={message:o?`Successfully stopped shell task: ${r}`:`Failed to stop shell task: ${r}`,task_id:r,stopped:o,task_type:"shell"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(s),data:s}}else{let o={message:`Unknown task type for ID: ${r}. Task IDs should start with 'a' (agent) or 's' (shell).`,task_id:r,stopped:!1,task_type:"unknown"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(o),data:o}}}catch(n){let o={message:`Error stopping task: ${n instanceof Error?n.message:String(n)}`,task_id:r,stopped:!1,task_type:"unknown"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(o),data:o}}}};var BOt=`${rt}/hands`,Bte="hawa/handsData",NOt=[iQ()?um:Mi,zC,YC,JC,ZC,VC,Sh,F9,Q9,L9],ROt=[um,Mi,zC,YC,JC,ZC,VC,Sh,F9,Q9,L9];var Nte=null;function Fbn(e,t){Nte={name:e,client:t},_O.cache.clear?.(),yO.cache.clear?.(),Bn.clear()}function Qbn(){_O.cache.clear?.(),yO.cache.clear?.(),Bn.clear()}function OOt(e){let t=sd(),r=QQ(),n=tn();if(t.mcpServers?.[e])return{...t.mcpServers[e],scope:"project"};if(r?.[e])return{...r[e],scope:"mcprc"};if(n.mcpServers?.[e])return{...n.mcpServers[e],scope:"global"}}async function kOt(e,t,r=!1,n=null){if(t.type==="sse"||t.type==="http"){let i=new _Z(t.url,t.headers,e);return await i.connectD(r,n),i}else{let i=t.type==="sse"?new cZ(new URL(t.url)):new rZ({command:t.command,args:t.args,env:{...process.env,...t.env},stderr:"pipe"}),o=new sC({name:`${rt}`,version:"0.1.0"},{capabilities:{}}),s=t.timeout??5e3,a=o.connect(i),u=new Promise((l,c)=>{let f=setTimeout(()=>{c(new Error(`Connection to MCP server "${e}" timed out after ${s}ms`))},s);a.then(()=>clearTimeout(f),()=>clearTimeout(f))});return await Promise.race([a,u]),t.type==="stdio"&&i.stderr?.on("data",l=>{let c=l.toString().trim();c&&Hy(e,`Server stderr: ${c}`)}),o}}function ZNe(e){let t=sd();return t.approvedMcprcServers?.includes(e)?"approved":t.rejectedMcprcServers?.includes(e)?"rejected":"pending"}var Lbn=async(e,t=!1,r=null)=>{ZNe(e)==="rejected"&&BKe(e);let i=OOt(e);if(!i)return{name:e,type:"failed"};try{let o=await kOt(e,i,t,r),s=await _O(),a={name:e,client:o,type:"connected"},u=s.findIndex(l=>l.name===e);return u!==-1?s[u]=a:s.push(a),yO.cache.clear?.(),a}catch{return{name:e,type:"failed"}}},Pbn=()=>(Qbn(),_O()),_O=Le(async()=>{if(process.env.CI)return[];let e=tn().mcpServers??{},t=QQ(),r=sd().mcpServers??{},n=jq(t,(l,c)=>ZNe(c)==="approved"),i=jq(t,(l,c)=>ZNe(c)==="rejected"),o=Object.keys(i).map(l=>({name:l,type:"disabled"})),s={...C1t,...e,...n,...r},a=await Promise.all(Object.entries(s).map(async([l,c])=>{try{let f=await kOt(l,c);return dt("tengu_mcp_server_connection_succeeded",{}),{name:l,client:f,type:"connected"}}catch(f){return f instanceof Ca?{name:l,type:"oauth"}:(dt("tengu_mcp_server_connection_failed",{}),Hy(l,`Connection failed: ${f instanceof Error?f.message:String(f)}`),{name:l,type:"failed"})}})),u=Nte?[{name:Nte.name,client:Nte.client,type:"connected"}]:[];return[...a,...u,...o]});async function MOt(e,t,r){let n=await _O();return(await Promise.allSettled(n.map(async o=>{if(o.type!=="connected")return null;try{return(await o.client.getServerCapabilities())?.[r]?{client:o,result:await o.client.request(e,t)}:null}catch(s){return o.type==="connected"&&Hy(o.name,`Failed to request '${e.method}': ${s instanceof Error?s.message:String(s)}`),null}}))).filter(o=>o.status==="fulfilled").map(o=>o.value).filter(o=>o!==null)}function Rte(e){return e.replaceAll(".","-")}async function Ote(e){return(await yO()).filter(n=>n.name.startsWith(`mcp_${e}_`))}function Ubn(e){try{return e.client.getServerVersion?.()?.name===BOt}catch{return!1}}var Hbn=new Map(ROt.map(e=>[e.name,e]));function qbn(e,t,r){return{...CIe,name:"mcp_"+Rte(e.name)+"_"+Rte(t.name),async description(){return t.description??""},userFacingName(){return"H-"+r.userFacingName()},async prompt(){return t.description??""},isMcp(){return!0},async isEnabled(){return!0},renderToolResultMessage:r.renderToolResultMessage,inputSchema:cl(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let{data:i,resultForAssistant:o}=await zbn({client:e,tool:t.name,args:n});yield{type:"result",data:i,resultForAssistant:o}}}}function Gbn(e,t){return{...CIe,name:"mcp_"+Rte(e.name)+"_"+Rte(t.name),async description(){return t.description??""},async prompt(){return t.description??""},isMcp(){return!0},inputSchema:cl(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(r){let n=await $bn({client:e,tool:t.name,args:r});yield{type:"result",data:{},resultForAssistant:n}},userFacingName(){return`${e.name.length>10?`...${e.name.slice(-10)}`:e.name}:${t.name}`}}}var yO=Le(async()=>{let t=(await MOt({method:"tools/list"},BM,"tools")).flatMap(({client:r,result:{tools:n}})=>{let i=Ubn(r);return n.map(o=>{if(i){let s=Hbn.get(o.name);if(s)return qbn(r,o,s)}return Gbn(r,o)})});return fZ.batchUpdateMcpTools(t),t});async function $bn({client:{client:e,name:t},tool:r,args:n}){let i=await e.callTool({name:r,arguments:n},Mm);return(await y1t(i,r,t)).content}async function zbn({client:{client:e},tool:t,args:r}){let n=await e.callTool({name:t,arguments:r},Mm),i=n?._meta?.[Bte],o=Array.isArray(n?.content)?n.content.filter(u=>u?.type==="text"&&typeof u.text=="string").map(u=>u.text).join(""):"",s=typeof i?.resultForAssistant=="string"?i.resultForAssistant:o;return{data:i&&"data"in i?i.data:s,resultForAssistant:s}}var FOt=Le(async()=>(await MOt({method:"prompts/list"},wM,"prompts")).flatMap(({client:t,result:r})=>r.prompts?.map(n=>{let i=Object.values(n.arguments??{}).map(o=>o.name);return{type:"prompt",name:"mcp__"+t.name+"__"+n.name,description:()=>n.description??"",isEnabled:!0,isHidden:!1,progressMessage:"running",userFacingName(){return`${t.name}:${n.name} (MCP)`},argNames:i,async getPromptForCommand(o){let s=o.split(" ");return await Ybn({name:n.name,client:t},Ffe(i,s))}}})));Bn.add(FOt);Bn.getMCPCommands=FOt;Bn.getMcpServer=OOt;Bn.getClients=_O;Bn.reloadClients=Pbn;Bn.reconnect=Lbn;Bn.registerIDEClient=Fbn;async function Ybn({name:e,client:t},r){try{return(await t.client.getPrompt({name:e,arguments:r})).messages.map(i=>({role:i.role,content:[i.content.type==="text"?{type:"text",text:i.content.text}:{type:"image",source:{data:String(i.content.data),media_type:i.content.mimeType,type:"base64"}}]}))}catch(n){throw Hy(t.name,`Error running command '${e}': ${n instanceof Error?n.message:String(n)}`),n}}function QOt({serverName:e,serverConfig:t,onBack:r,onViewTools:n,onServerDisable:i,onServerReconnect:o,context:s}){let[a,u]=(0,XC.useState)(0),[l,c]=(0,XC.useState)("connected"),[f,A]=(0,XC.useState)([]),[m,g]=(0,XC.useState)(null),[E,_]=(0,XC.useState)(!1),C=ye();(0,XC.useEffect)(()=>{c(e.status),Ote(e.name).then(H=>{A(H)})},[e]),dr((H,L)=>{if(L.return){l==="connected"?a===0?n():a===1?S():a===2&&T():a===0?S():a===1&&T();return}if(L.upArrow){let Y=l==="connected"?2:1;u(z=>Math.max(0,z-1));return}if(L.downArrow){let Y=l==="connected"?2:1;u(z=>Math.min(Y,z+1));return}});let S=async()=>{_(!0);try{await o(e.name,l,H=>{g(H)})}finally{_(!1)}},T=()=>{i(e.name)},O=(H=>{switch(H){case"connected":return{icon:xr.tick,color:C.success};case"failed":return{icon:xr.cross,color:C.error};case"disabled":case"oauth":return{icon:xr.circle,color:C.secondaryText};default:return{icon:xr.circle,color:C.secondaryText}}})(l),$=l==="connected"?[{label:"View tools",action:"View available tools"},{label:"Reconnect",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:l==="failed"?[{label:"Reconnect",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:l==="oauth"?[{label:"Reconnect(oauth)",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:[{label:"Reconnect",action:"Reconnect to server"}];return An.createElement(N,{flexDirection:"column",height:"100%"},An.createElement(N,{flexDirection:"column",borderStyle:"single",borderColor:"white"},An.createElement(N,{padding:1},An.createElement(v,{bold:!0,color:C.claude},e.name," MCP Server")),An.createElement(N,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},An.createElement(N,null,An.createElement(v,null,"Status: "),An.createElement(v,{color:O.color},O.icon," ",l)),t?.command&&An.createElement(N,null,An.createElement(v,null,"Command: "),An.createElement(v,{color:C.text},t.command)),t?.args&&An.createElement(N,null,An.createElement(v,null,"Args: "),An.createElement(v,{color:C.text},Array.isArray(t.args)?t.args.join(" "):t.args)),t?.url&&An.createElement(N,null,An.createElement(v,null,"URL: "),An.createElement(v,{color:C.text},t.url)),t&&An.createElement(N,null,An.createElement(v,null,"Config location: "),An.createElement(v,{color:C.secondaryText},t.configPath||"Unknown")),l==="connected"&&An.createElement(An.Fragment,null,An.createElement(N,null,An.createElement(v,null,"Capabilities: tools")),An.createElement(N,null,An.createElement(v,null,"Tools: ",f.length," tools")))),An.createElement(N,{flexDirection:"column",paddingX:1,marginBottom:1},E?An.createElement(N,{flexDirection:"row"},An.createElement(jT,null),An.createElement(v,{color:C.claude},"Reconnecting...")):$.map((H,L)=>{let Y=L===a;return An.createElement(N,{key:L},An.createElement(v,{color:Y?C.claude:C.text},Y?xr.pointer:" "),An.createElement(v,{color:Y?C.claude:C.text,bold:Y},L+1,". ",H.label))})),An.createElement(N,{padding:1},An.createElement(v,{color:C.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back"))),l==="oauth"&&m&&An.createElement(N,{flexDirection:"column",paddingX:1},An.createElement(v,null,"Open in browser:"),An.createElement(v,{wrap:"wrap",color:C.link||"blue"},m)))}var Ls=ie(Ce(),1),s_=ie(Ce(),1);Ue();function LOt({serverName:e,onBack:t,onToolSelect:r}){let[n,i]=(0,s_.useState)(0),[o,s]=(0,s_.useState)([]),[a,u]=(0,s_.useState)({}),[l,c]=(0,s_.useState)(0),f=ye(),A=15;(0,s_.useEffect)(()=>{let _=async()=>{let C={};for(let S=0;S<o.length;S++){let T=o[S];try{if(T.description){let x=await T.description();typeof x=="string"&&x.toLowerCase().includes("read")&&x.toLowerCase().includes("only")?C[S]="read-only":C[S]="read-write"}else C[S]="read-write"}catch(x){le("Error loading tool description for access level:",x),C[S]="read-write"}}u(C)};o.length>0&&_()},[o]),(0,s_.useEffect)(()=>{e&&(async()=>{try{let C=await Ote(e.name);s(C)}catch{s([])}})()},[e]),dr((_,C)=>{if(C.return){if(o.length>0){let S=o[n];r(S)}return}if(C.upArrow){let S=Math.max(0,n-1);i(S),S<l&&c(S);return}if(C.downArrow){let S=Math.min(o.length-1,n+1);i(S),S>=l+A&&c(S-A+1);return}}),(0,s_.useEffect)(()=>{c(0),i(0)},[o]);let m=_=>{let C=_.name.match(/^mcp_[^_]+_(.+)$/);return C?C[1]:_.name},g=o.slice(l,l+A),E=o.length>A;return Ls.createElement(N,{flexDirection:"column",height:"100%",borderStyle:"single",borderColor:"white"},Ls.createElement(N,{padding:1},Ls.createElement(v,{bold:!0,color:f.claude},"Tools for ",e.name," (",o.length," tools)")),Ls.createElement(N,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},o.length===0?Ls.createElement(v,{color:f.secondaryText},"No tools available for this server"):Ls.createElement(Ls.Fragment,null,E&&l>0&&Ls.createElement(N,null,Ls.createElement(v,{color:f.secondaryText},"\u2191 More tools above")),Ls.createElement(N,{flexDirection:"column",flexGrow:1},g.map((_,C)=>{let S=l+C,T=S===n,x=m(_),O=a[S]||"read-write";return Ls.createElement(N,{key:_.name},Ls.createElement(v,{color:T?f.claude:f.text},T?xr.pointer:" "),Ls.createElement(v,{color:f.secondaryText},S+1,"."),Ls.createElement(v,{color:T?f.claude:f.text,bold:T},x),Ls.createElement(v,null," "),Ls.createElement(v,{color:f.secondaryText},O))})),E&&l+A<o.length&&Ls.createElement(N,null,Ls.createElement(v,{color:f.secondaryText},"\u2193 More tools below")))),Ls.createElement(N,{padding:1},Ls.createElement(v,{color:f.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back")))}var Ia=ie(Ce(),1);function POt({tool:e,serverName:t,onBack:r}){let[n,i]=(0,Ia.useState)(""),[o,s]=(0,Ia.useState)(!0),[a,u]=(0,Ia.useState)(0),[l,c]=(0,Ia.useState)(20),f=(0,Ia.useRef)(null),A=ye(),{stdout:m}=nfe();(0,Ia.useEffect)(()=>{(async()=>{if(e?.description)try{let L=await e.description();i(L||"")}catch{i("")}else i("");s(!1)})()},[e]),(0,Ia.useEffect)(()=>{m?.rows&&c(Math.max(10,m.rows-8))},[m]);let g=H=>{let L=H.name.match(/^mcp__[^_]+__(.+)$/);return L?L[1]:H.name},E=()=>o?"loading...":n&&n.toLowerCase().includes("read")&&n.toLowerCase().includes("only")?"read-only":"read-write",_=g(e),C=E(),T=(()=>{let H=[];return n&&(H.push("Description:"),H.push(...n.split(`
|
|
1427
|
+
- For agent tasks, marks the task as failed and triggers completion handlers`;mA();SI();PB();var Mbn=Le(()=>V.strictObject({task_id:V.string().describe("The ID of the background task to stop")})),L9={name:DOt,async description(){return xOt},async prompt(){return wOt},isReadOnly(){return!1},isConcurrencySafe(){return!1},get inputSchema(){return Mbn()},userFacingName(){return"Stop Task"},async isEnabled(){return!0},needsPermissions(){return!1},async validateInput({task_id:e}){return!e||e.trim().length===0?{result:!1,message:"task_id is required and cannot be empty"}:{result:!0}},renderToolUseMessage({task_id:e}){return`Stop task: ${e}`},renderToolUseRejectedMessage(){return wte.createElement(v,{color:"red"},"\xA0\xA0\u23BF \xA0 Task stop operation was rejected")},renderToolResultMessage(e){let{stopped:t,task_id:r,message:n}=e;return t?wte.createElement(v,{color:"green"},"\xA0\xA0\u23BF \xA0",n):wte.createElement(v,{color:"red"},"\xA0\xA0\u23BF \xA0",n)},renderResultForAssistant({stopped:e,task_id:t,message:r,task_type:n}){return`Task ${t} (${n}) stop operation: ${r}`},async*call(e,{abortController:t}){let{task_id:r}=e;if(t.signal.aborted){let n={message:"Operation cancelled",task_id:r,stopped:!1,task_type:"unknown"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(n),data:n};return}try{let n=r.startsWith("a"),i=r.startsWith("s");if(n){let o=pc.stopTask(r),s={message:o.reason,task_id:r,stopped:o.success,task_type:"agent"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(s),data:s}}else if(i){let o=r.startsWith("sp")?yp.stop(r):uu.stop(r),s={message:o?`Successfully stopped shell task: ${r}`:`Failed to stop shell task: ${r}`,task_id:r,stopped:o,task_type:"shell"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(s),data:s}}else{let o={message:`Unknown task type for ID: ${r}. Task IDs should start with 'a' (agent) or 's' (shell).`,task_id:r,stopped:!1,task_type:"unknown"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(o),data:o}}}catch(n){let o={message:`Error stopping task: ${n instanceof Error?n.message:String(n)}`,task_id:r,stopped:!1,task_type:"unknown"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(o),data:o}}}};var BOt=`${rt}/hands`,Bte="hawa/handsData",NOt=[iQ()?um:Mi,zC,YC,JC,ZC,VC,Sh,F9,Q9,L9],ROt=[um,Mi,zC,YC,JC,ZC,VC,Sh,F9,Q9,L9];var Nte=null;function Fbn(e,t){Nte={name:e,client:t},_O.cache.clear?.(),yO.cache.clear?.(),Bn.clear()}function Qbn(){_O.cache.clear?.(),yO.cache.clear?.(),Bn.clear()}function OOt(e){let t=sd(),r=QQ(),n=tn();if(t.mcpServers?.[e])return{...t.mcpServers[e],scope:"project"};if(r?.[e])return{...r[e],scope:"mcprc"};if(n.mcpServers?.[e])return{...n.mcpServers[e],scope:"global"}}async function kOt(e,t,r=!1,n=null){if(t.type==="sse"||t.type==="http"){let i=new _Z(t.url,t.headers,e);return await i.connectD(r,n),i}else{let i=t.type==="sse"?new cZ(new URL(t.url)):new rZ({command:t.command,args:t.args,env:{...process.env,...t.env},stderr:"pipe"}),o=new sC({name:`${rt}`,version:"0.1.0"},{capabilities:{}}),s=t.timeout??5e3,a=o.connect(i),u=new Promise((l,c)=>{let f=setTimeout(()=>{c(new Error(`Connection to MCP server "${e}" timed out after ${s}ms`))},s);a.then(()=>clearTimeout(f),()=>clearTimeout(f))});return await Promise.race([a,u]),t.type==="stdio"&&i.stderr?.on("data",l=>{let c=l.toString().trim();c&&Hy(e,`Server stderr: ${c}`)}),o}}function ZNe(e){let t=sd();return t.approvedMcprcServers?.includes(e)?"approved":t.rejectedMcprcServers?.includes(e)?"rejected":"pending"}var Lbn=async(e,t=!1,r=null)=>{ZNe(e)==="rejected"&&BKe(e);let i=OOt(e);if(!i)return{name:e,type:"failed"};try{let o=await kOt(e,i,t,r),s=await _O(),a={name:e,client:o,type:"connected"},u=s.findIndex(l=>l.name===e);return u!==-1?s[u]=a:s.push(a),yO.cache.clear?.(),a}catch{return{name:e,type:"failed"}}},Pbn=()=>(Qbn(),_O()),_O=Le(async()=>{if(process.env.CI)return[];let e=tn().mcpServers??{},t=QQ(),r=sd().mcpServers??{},n=jq(t,(l,c)=>ZNe(c)==="approved"),i=jq(t,(l,c)=>ZNe(c)==="rejected"),o=Object.keys(i).map(l=>({name:l,type:"disabled"})),s={...C1t,...e,...n,...r},a=await Promise.all(Object.entries(s).map(async([l,c])=>{try{let f=await kOt(l,c);return dt("tengu_mcp_server_connection_succeeded",{}),{name:l,client:f,type:"connected"}}catch(f){return f instanceof Ca?{name:l,type:"oauth"}:(dt("tengu_mcp_server_connection_failed",{}),Hy(l,`Connection failed: ${f instanceof Error?f.message:String(f)}`),{name:l,type:"failed"})}})),u=Nte?[{name:Nte.name,client:Nte.client,type:"connected"}]:[];return[...a,...u,...o]});async function MOt(e,t,r){let n=await _O();return(await Promise.allSettled(n.map(async o=>{if(o.type!=="connected")return null;try{return(await o.client.getServerCapabilities())?.[r]?{client:o,result:await o.client.request(e,t)}:null}catch(s){return o.type==="connected"&&Hy(o.name,`Failed to request '${e.method}': ${s instanceof Error?s.message:String(s)}`),null}}))).filter(o=>o.status==="fulfilled").map(o=>o.value).filter(o=>o!==null)}function Rte(e){return e.replaceAll(".","-")}async function Ote(e){return(await yO()).filter(n=>n.name.startsWith(`mcp_${e}_`))}function Ubn(e){try{return e.client.getServerVersion?.()?.name===BOt}catch{return!1}}var Hbn=new Map(ROt.map(e=>[e.name,e]));function qbn(e,t,r){return{...CIe,name:"mcp_"+Rte(e.name)+"_"+Rte(t.name),async description(){return t.description??""},userFacingName(n){return"H-"+r.userFacingName(n)},async prompt(){return t.description??""},isMcp(){return!0},async isEnabled(){return!0},renderToolResultMessage:r.renderToolResultMessage,inputSchema:cl(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let{data:i,resultForAssistant:o}=await zbn({client:e,tool:t.name,args:n});yield{type:"result",data:i,resultForAssistant:o}}}}function Gbn(e,t){return{...CIe,name:"mcp_"+Rte(e.name)+"_"+Rte(t.name),async description(){return t.description??""},async prompt(){return t.description??""},isMcp(){return!0},inputSchema:cl(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(r){let n=await $bn({client:e,tool:t.name,args:r});yield{type:"result",data:{},resultForAssistant:n}},userFacingName(){return`${e.name.length>10?`...${e.name.slice(-10)}`:e.name}:${t.name}`}}}var yO=Le(async()=>{let t=(await MOt({method:"tools/list"},BM,"tools")).flatMap(({client:r,result:{tools:n}})=>{let i=Ubn(r);return n.map(o=>{if(i){let s=Hbn.get(o.name);if(s)return qbn(r,o,s)}return Gbn(r,o)})});return fZ.batchUpdateMcpTools(t),t});async function $bn({client:{client:e,name:t},tool:r,args:n}){let i=await e.callTool({name:r,arguments:n},Mm);return(await y1t(i,r,t)).content}async function zbn({client:{client:e},tool:t,args:r}){let n=await e.callTool({name:t,arguments:r},Mm),i=n?._meta?.[Bte],o=Array.isArray(n?.content)?n.content.filter(u=>u?.type==="text"&&typeof u.text=="string").map(u=>u.text).join(""):"",s=typeof i?.resultForAssistant=="string"?i.resultForAssistant:o;return{data:i&&"data"in i?i.data:s,resultForAssistant:s}}var FOt=Le(async()=>(await MOt({method:"prompts/list"},wM,"prompts")).flatMap(({client:t,result:r})=>r.prompts?.map(n=>{let i=Object.values(n.arguments??{}).map(o=>o.name);return{type:"prompt",name:"mcp__"+t.name+"__"+n.name,description:()=>n.description??"",isEnabled:!0,isHidden:!1,progressMessage:"running",userFacingName(){return`${t.name}:${n.name} (MCP)`},argNames:i,async getPromptForCommand(o){let s=o.split(" ");return await Ybn({name:n.name,client:t},Ffe(i,s))}}})));Bn.add(FOt);Bn.getMCPCommands=FOt;Bn.getMcpServer=OOt;Bn.getClients=_O;Bn.reloadClients=Pbn;Bn.reconnect=Lbn;Bn.registerIDEClient=Fbn;async function Ybn({name:e,client:t},r){try{return(await t.client.getPrompt({name:e,arguments:r})).messages.map(i=>({role:i.role,content:[i.content.type==="text"?{type:"text",text:i.content.text}:{type:"image",source:{data:String(i.content.data),media_type:i.content.mimeType,type:"base64"}}]}))}catch(n){throw Hy(t.name,`Error running command '${e}': ${n instanceof Error?n.message:String(n)}`),n}}function QOt({serverName:e,serverConfig:t,onBack:r,onViewTools:n,onServerDisable:i,onServerReconnect:o,context:s}){let[a,u]=(0,XC.useState)(0),[l,c]=(0,XC.useState)("connected"),[f,A]=(0,XC.useState)([]),[m,g]=(0,XC.useState)(null),[E,_]=(0,XC.useState)(!1),C=ye();(0,XC.useEffect)(()=>{c(e.status),Ote(e.name).then(H=>{A(H)})},[e]),dr((H,L)=>{if(L.return){l==="connected"?a===0?n():a===1?S():a===2&&T():a===0?S():a===1&&T();return}if(L.upArrow){let Y=l==="connected"?2:1;u(z=>Math.max(0,z-1));return}if(L.downArrow){let Y=l==="connected"?2:1;u(z=>Math.min(Y,z+1));return}});let S=async()=>{_(!0);try{await o(e.name,l,H=>{g(H)})}finally{_(!1)}},T=()=>{i(e.name)},O=(H=>{switch(H){case"connected":return{icon:xr.tick,color:C.success};case"failed":return{icon:xr.cross,color:C.error};case"disabled":case"oauth":return{icon:xr.circle,color:C.secondaryText};default:return{icon:xr.circle,color:C.secondaryText}}})(l),$=l==="connected"?[{label:"View tools",action:"View available tools"},{label:"Reconnect",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:l==="failed"?[{label:"Reconnect",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:l==="oauth"?[{label:"Reconnect(oauth)",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:[{label:"Reconnect",action:"Reconnect to server"}];return An.createElement(N,{flexDirection:"column",height:"100%"},An.createElement(N,{flexDirection:"column",borderStyle:"single",borderColor:"white"},An.createElement(N,{padding:1},An.createElement(v,{bold:!0,color:C.claude},e.name," MCP Server")),An.createElement(N,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},An.createElement(N,null,An.createElement(v,null,"Status: "),An.createElement(v,{color:O.color},O.icon," ",l)),t?.command&&An.createElement(N,null,An.createElement(v,null,"Command: "),An.createElement(v,{color:C.text},t.command)),t?.args&&An.createElement(N,null,An.createElement(v,null,"Args: "),An.createElement(v,{color:C.text},Array.isArray(t.args)?t.args.join(" "):t.args)),t?.url&&An.createElement(N,null,An.createElement(v,null,"URL: "),An.createElement(v,{color:C.text},t.url)),t&&An.createElement(N,null,An.createElement(v,null,"Config location: "),An.createElement(v,{color:C.secondaryText},t.configPath||"Unknown")),l==="connected"&&An.createElement(An.Fragment,null,An.createElement(N,null,An.createElement(v,null,"Capabilities: tools")),An.createElement(N,null,An.createElement(v,null,"Tools: ",f.length," tools")))),An.createElement(N,{flexDirection:"column",paddingX:1,marginBottom:1},E?An.createElement(N,{flexDirection:"row"},An.createElement(jT,null),An.createElement(v,{color:C.claude},"Reconnecting...")):$.map((H,L)=>{let Y=L===a;return An.createElement(N,{key:L},An.createElement(v,{color:Y?C.claude:C.text},Y?xr.pointer:" "),An.createElement(v,{color:Y?C.claude:C.text,bold:Y},L+1,". ",H.label))})),An.createElement(N,{padding:1},An.createElement(v,{color:C.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back"))),l==="oauth"&&m&&An.createElement(N,{flexDirection:"column",paddingX:1},An.createElement(v,null,"Open in browser:"),An.createElement(v,{wrap:"wrap",color:C.link||"blue"},m)))}var Ls=ie(Ce(),1),s_=ie(Ce(),1);Ue();function LOt({serverName:e,onBack:t,onToolSelect:r}){let[n,i]=(0,s_.useState)(0),[o,s]=(0,s_.useState)([]),[a,u]=(0,s_.useState)({}),[l,c]=(0,s_.useState)(0),f=ye(),A=15;(0,s_.useEffect)(()=>{let _=async()=>{let C={};for(let S=0;S<o.length;S++){let T=o[S];try{if(T.description){let x=await T.description();typeof x=="string"&&x.toLowerCase().includes("read")&&x.toLowerCase().includes("only")?C[S]="read-only":C[S]="read-write"}else C[S]="read-write"}catch(x){le("Error loading tool description for access level:",x),C[S]="read-write"}}u(C)};o.length>0&&_()},[o]),(0,s_.useEffect)(()=>{e&&(async()=>{try{let C=await Ote(e.name);s(C)}catch{s([])}})()},[e]),dr((_,C)=>{if(C.return){if(o.length>0){let S=o[n];r(S)}return}if(C.upArrow){let S=Math.max(0,n-1);i(S),S<l&&c(S);return}if(C.downArrow){let S=Math.min(o.length-1,n+1);i(S),S>=l+A&&c(S-A+1);return}}),(0,s_.useEffect)(()=>{c(0),i(0)},[o]);let m=_=>{let C=_.name.match(/^mcp_[^_]+_(.+)$/);return C?C[1]:_.name},g=o.slice(l,l+A),E=o.length>A;return Ls.createElement(N,{flexDirection:"column",height:"100%",borderStyle:"single",borderColor:"white"},Ls.createElement(N,{padding:1},Ls.createElement(v,{bold:!0,color:f.claude},"Tools for ",e.name," (",o.length," tools)")),Ls.createElement(N,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},o.length===0?Ls.createElement(v,{color:f.secondaryText},"No tools available for this server"):Ls.createElement(Ls.Fragment,null,E&&l>0&&Ls.createElement(N,null,Ls.createElement(v,{color:f.secondaryText},"\u2191 More tools above")),Ls.createElement(N,{flexDirection:"column",flexGrow:1},g.map((_,C)=>{let S=l+C,T=S===n,x=m(_),O=a[S]||"read-write";return Ls.createElement(N,{key:_.name},Ls.createElement(v,{color:T?f.claude:f.text},T?xr.pointer:" "),Ls.createElement(v,{color:f.secondaryText},S+1,"."),Ls.createElement(v,{color:T?f.claude:f.text,bold:T},x),Ls.createElement(v,null," "),Ls.createElement(v,{color:f.secondaryText},O))})),E&&l+A<o.length&&Ls.createElement(N,null,Ls.createElement(v,{color:f.secondaryText},"\u2193 More tools below")))),Ls.createElement(N,{padding:1},Ls.createElement(v,{color:f.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back")))}var Ia=ie(Ce(),1);function POt({tool:e,serverName:t,onBack:r}){let[n,i]=(0,Ia.useState)(""),[o,s]=(0,Ia.useState)(!0),[a,u]=(0,Ia.useState)(0),[l,c]=(0,Ia.useState)(20),f=(0,Ia.useRef)(null),A=ye(),{stdout:m}=nfe();(0,Ia.useEffect)(()=>{(async()=>{if(e?.description)try{let L=await e.description();i(L||"")}catch{i("")}else i("");s(!1)})()},[e]),(0,Ia.useEffect)(()=>{m?.rows&&c(Math.max(10,m.rows-8))},[m]);let g=H=>{let L=H.name.match(/^mcp__[^_]+__(.+)$/);return L?L[1]:H.name},E=()=>o?"loading...":n&&n.toLowerCase().includes("read")&&n.toLowerCase().includes("only")?"read-only":"read-write",_=g(e),C=E(),T=(()=>{let H=[];return n&&(H.push("Description:"),H.push(...n.split(`
|
|
1428
1428
|
`).map(L=>L.trim())),H.push("")),e.inputSchema&&(H.push("Parameters:"),e.inputSchema.properties?H.push(...(e.inputSchema+"").split(`
|
|
1429
1429
|
`).map(L=>L.trim())):H.push("No parameters required")),H})(),x=l-6;dr((H,L)=>{if(L.escape){r();return}if(L.upArrow){u(Y=>Math.max(0,Y-1));return}if(L.downArrow){let Y=T.length/x,z=a+1;z>Y&&z--,u(z);return}});let O=T.slice(a*x,(a+1)*x),q=a>0,$=(a+1)*x<T.length;return Ia.default.createElement(N,{flexDirection:"column",borderStyle:"single",borderColor:"white",height:l},Ia.default.createElement(N,{paddingX:1},Ia.default.createElement(v,{bold:!0,color:A.claude},_," (",t.name,") [",C,"]")),o&&Ia.default.createElement(N,{paddingX:1},Ia.default.createElement(v,{color:A.secondaryText},"Loading tool details...")),Ia.default.createElement(N,{flexDirection:"column",paddingX:1,flexGrow:1,height:l-3,ref:f},O.map((H,L)=>Ia.default.createElement(v,{key:L,color:A.text},H))),Ia.default.createElement(N,{paddingX:1},Ia.default.createElement(v,{color:A.secondaryText,wrap:"truncate"},q&&"\u2191"," ",$&&"\u2193"," to scroll (Esc back)")))}_d();function UOt({onClose:e,context:t}){let[r,n]=(0,Dv.useState)("list"),[i,o]=(0,Dv.useState)(""),[s,a]=(0,Dv.useState)(null),[u,l]=(0,Dv.useState)([]),c=ye(),f=25;Vp(()=>{e(-1)}),(0,Dv.useEffect)(()=>{(async()=>{let S=await Bn.getClients();l(S.filter(T=>T.name!=="___ide_").map(T=>({name:T.name,status:T.type})))})()},[]);let A=S=>{NKe(S),Bn.reloadClients().then(T=>{l(T.filter(x=>x.name!=="___ide_").map(x=>({name:x.name,status:x.type}))),n("list"),Ci.emit("repl:reloadtools")})},m=async(S,T,x)=>{if((T==="oauth"?await Bn.reconnect(S,!0,x):await Bn.reconnect(S)).type==="connected"){let q=await Bn.getClients();l(q.filter($=>$.name!=="___ide_").map($=>({name:$.name,status:$.type}))),n("list"),Ci.emit("repl:reloadtools")}},g=S=>{o(S),n("details")},E=S=>{o(S),n("tools")},_=S=>{a(S),n("tool-details")};dr((S,T)=>{T.escape&&(r==="list"?e(-1):C())});let C=()=>{r==="details"?n("list"):r==="tools"?n("details"):r==="tool-details"&&n("tools")};return r==="list"?Ih.createElement(N,{flexDirection:"column",height:f},Ih.createElement(bEt,{servers:u,onServerSelect:g,onViewTools:E,onClose:e})):r==="details"?Ih.createElement(N,{flexDirection:"column",height:f},Ih.createElement(QOt,{serverName:i,serverConfig:Bn.getMcpServer(i),onBack:C,onServerDisable:A,onServerReconnect:m,onViewTools:()=>E(i),context:t})):r==="tools"?Ih.createElement(N,{flexDirection:"column",height:f},Ih.createElement(LOt,{serverName:i,onBack:C,onToolSelect:_})):r==="tool-details"?Ih.createElement(N,{flexDirection:"column",height:f},Ih.createElement(POt,{tool:s,serverName:i,onBack:C})):Ih.createElement(v,null,"Unknown view: ",r)}var HOt=ie(Ce(),1),jbn={type:"local-jsx",name:"mcp",description:()=>"Manage MCP servers",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e,t){return HOt.default.createElement(UOt,{onClose:e,context:t})},userFacingName(){return"mcp"}},qOt=jbn;SI();var zt=ie(Ce(),1),Mte=ie(Ce(),1);kr();lpe();oI();oY();SI();var kte=["Mode","Dependencies","Overrides","Config"];function Vbn(e){return e?.enabled?e.autoAllowBashIfSandboxed!==!1?"auto-allow":"regular":"disabled"}function Wbn(e){switch(e){case"auto-allow":return"Sandbox BashTool, with auto-allow";case"regular":return"Sandbox BashTool, with regular permissions";case"disabled":return"No Sandbox"}}function Kbn(e){switch(e){case"auto-allow":return"\u2713 Sandbox enabled with auto-allow for bash commands";case"regular":return"\u2713 Sandbox enabled with regular permissions";case"disabled":return"\u2713 Sandbox disabled"}}function Jbn(e){return{network:{allowedDomains:e.network?.allowedDomains??[],deniedDomains:e.network?.deniedDomains??[],allowLocalBinding:e.network?.allowLocalBinding,allowUnixSockets:e.network?.allowUnixSockets,allowAllUnixSockets:e.network?.allowAllUnixSockets},filesystem:{allowWrite:e.filesystem?.allowWrite??[],denyWrite:e.filesystem?.denyWrite??[],denyRead:e.filesystem?.denyRead??[],allowRead:e.filesystem?.allowRead,allowGitConfig:e.filesystem?.allowGitConfig},ignoreViolations:e.ignoreViolations,enableWeakerNestedSandbox:e.enableWeakerNestedSandbox,enableWeakerNetworkIsolation:e.enableWeakerNetworkIsolation}}async function Zbn(e,t){console.log("applyRuntimeSandbox",e);let r=uu.isSandboxingEnabled();e?(r&&await uu.stopSandbox(),await uu.startSandbox(Jbn(t))):r&&await uu.stopSandbox()}function GOt({onClose:e}){let t=yr(),[r,n]=(0,Mte.useState)(t.sandbox??{}),[i,o]=(0,Mte.useState)(0),[s,a]=(0,Mte.useState)(0),u=Vbn(r),l=r.enabled===!0,c=r.allowUnsandboxedCommands!==!1,f=!0,A=zze(),m=A.hasSeccompBpf&&A.hasSeccompApply,g=nI(),E=r.filesystem?.allowWrite??[],_=r.filesystem?.denyWrite??[],C=null;try{Ol.isSandboxingEnabled()&&(C=Ol.getFsWriteConfig())}catch{}let S=C?C.allowOnly:[...g,...E],T=C?C.denyWithinAllow:_;function x(fe){n(fe);let me=Yu.loadSettings();Yu.saveProjectSettings({...me,sandbox:fe})}dr((fe,me)=>{if(me.escape){e();return}if(me.leftArrow){o(ue=>Math.max(0,ue-1)),a(0);return}if(me.rightArrow){o(ue=>Math.min(kte.length-1,ue+1)),a(0);return}let M=kte[i];if(M==="Mode"){let ue=["auto-allow","regular","disabled"];if(me.upArrow){a(Ae=>Math.max(0,Ae-1));return}if(me.downArrow){a(Ae=>Math.min(ue.length-1,Ae+1));return}if(me.return||fe===" "){let Ae=ue[s],ae={...r,enabled:Ae!=="disabled",autoAllowBashIfSandboxed:Ae==="auto-allow"};Zbn(Ae!=="disabled",ae).catch(()=>{}),x(ae),e(Kbn(Ae));return}}if(M==="Overrides"){if(!l)return;if(me.upArrow){a(ue=>Math.max(0,ue-1));return}if(me.downArrow){a(ue=>Math.min(1,ue+1));return}if(me.return||fe===" "){let ue=s===0;x({...r,allowUnsandboxedCommands:ue}),e(ue?"\u2713 Allow unsandboxed fallback enabled":"\u2713 Strict sandbox mode enabled");return}}});let O=ye();function q(){return zt.createElement(N,{marginBottom:1},zt.createElement(v,{bold:!0,color:O.claude}," Sandbox: "),kte.map((fe,me)=>zt.createElement(N,{key:fe},zt.createElement(v,{color:me===i?O.claude:void 0,bold:me===i},` ${fe} `))))}function $(){return zt.createElement(N,{flexDirection:"column"},!m&&zt.createElement(v,{dimColor:!0}," Cannot block unix domain sockets (see Dependencies tab)",`
|
|
1430
1430
|
`),zt.createElement(v,{bold:!0}," Configure Mode:",`
|