@dahawa/hawa-code 2.1.1 → 2.1.2
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 +3 -3
- package/hands.js +3 -3
- package/package.json +1 -1
package/cli.js
CHANGED
|
@@ -674,7 +674,7 @@ globstar while`,t,f,r,p,A),this.matchOne(t.slice(f),r.slice(p),n))return this.de
|
|
|
674
674
|
`)),FQn(e,o,{encoding:r,flush:!0})}var dHt=new rde.default({fetchMethod:e=>jQn(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});async function _Ht(e){let t=lV(e);return dHt.get(t)||dHt.fetchMethod?.(t)}async function jQn(e){let t=new AbortController;setTimeout(()=>{t.abort()},1e3);let r=await Pkt(e,t.signal,15),n=0;for(let o of r)sB(o)==="CRLF"&&n++;return n>3?"CRLF":"LF"}function SHt(e,t,r){if(e.has(t))return e.get(t);let n=r();return e.set(t,n),n}var zQn=new rde.default({fetchMethod:e=>yHt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function Vm(e){let t=lV(e);return SHt(zQn,t,()=>yHt(t))}function yHt(e){let r=Buffer.alloc(4096),n;try{n=fHt(e,"r");let o=pHt(n,r,0,4096,0);return o===0?"utf8":o>=2&&r[0]===255&&r[1]===254?"utf16le":o>=3&&r[0]===239&&r[1]===187&&r[2]===191||r.slice(0,o).toString("utf8").length>0?"utf8":"ascii"}catch(o){return ye(`Error detecting encoding for file ${e}: ${o}`),"utf8"}finally{n&&mHt(n)}}var WQn=new rde.default({fetchMethod:e=>THt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function sB(e){let t=lV(e);return SHt(WQn,t,()=>THt(t))}function THt(e,t="utf8"){try{if(!gHt(e).isFile())return"LF";let n=Buffer.alloc(4096),o=fHt(e,"r"),i=pHt(o,n,0,4096,0);mHt(o);let s=n.toString(t,0,i),a=0,c=0;for(let l=0;l<s.length;l++)s[l]===`
|
|
675
675
|
`&&(l>0&&s[l-1]==="\r"?a++:c++);return a>c?"CRLF":"LF"}catch(r){return ye(`Error detecting line endings for file ${e}: ${r}`),"LF"}}function X2e(e){let t=AHt(e)?e:lV(ke(),e);return t.endsWith(" AM.png")?t.replace(" AM.png","\u202FAM.png"):t.endsWith(" PM.png")?t.replace(" PM.png","\u202FPM.png"):t}function ePe(e){return e?AHt(e)?e:lV(ke(),e):void 0}function bHt(e){try{let t=ePe(e),r=t?qQn(ke(),t):void 0;return{absolutePath:t,relativePath:r}}catch(t){return oe("getAbsoluteAndRelativePaths error ",t),{absolutePath:null,relativePath:null}}}function ode(e){try{let t=VQn(e),r=cHt(e,lHt(e));if(!HQn(t))return;let i=GQn(t).filter(s=>cHt(s,lHt(s))===r&&YQn(t,s)!==e)[0];return i||void 0}catch(t){ye(`Error finding similar file for ${e}: ${t}`);return}}function tPe(){let e=process.env.HAWA_CODE_COMPACT_LINE_PREFIX;return!(e==="0"||e==="false")}function Hx({content:e,startLine:t}){if(!e)return"";let r=e.split(/\r?\n/);return tPe()?r.map((n,o)=>`${o+t} ${n}`).join(`
|
|
676
676
|
`):r.map((n,o)=>{let i=String(o+t);return i.length>=6?`${i}\u2192${n}`:`${i.padStart(6," ")}\u2192${n}`}).join(`
|
|
677
|
-
`)}function CHt(e){try{let t=$Qn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return ye(`Error checking directory: ${t}`),!1}}Fe();function Lx(){let e=ro();e.hasCompletedProjectOnboarding||ds({...e,hasCompletedProjectOnboarding:!0})}function XQn(){let e=Ar();Co({...e,lastReleaseNotesSeen:MACRO.VERSION})}function rPe({workspaceDir:e}){let r=!ro().hasCompletedProjectOnboarding,o=Ar().lastReleaseNotesSeen,i=[];(!o||(0,IHt.gt)(MACRO.VERSION,o))&&(i=Tue[MACRO.VERSION]||[]);let s=i.length>0;if(Wi.useEffect(()=>{s&&!r&&XQn()},[s,r]),!r&&!s)return null;let a=KQn(JQn(e,Ti)),c=CHt(e),l=!a&&!c,u=_F.isEnabled&&!Ar().shiftEnterKeyBindingInstalled,d=X();return Wi.createElement(x,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&Wi.createElement(Wi.Fragment,null,Wi.createElement(C,{color:d.secondaryText},"Tips for getting started:"),Wi.createElement(Qd,{children:[]},(()=>{let f=[];return c&&f.push(Wi.createElement(Qd.Item,{key:"workspace"},Wi.createElement(C,{color:d.secondaryText},"Ask ",We," to create a new app or clone a repository."))),l&&f.push(Wi.createElement(Qd.Item,{key:"claudemd"},Wi.createElement(C,{color:d.secondaryText},"Run ",Wi.createElement(C,{color:d.text},"/init")," to create a",Ti," file with instructions for Hawa code."))),u&&f.push(Wi.createElement(Qd.Item,{key:"terminal"},Wi.createElement(C,{color:d.secondaryText},"Run ",Wi.createElement(C,{color:d.text},"/terminal-setup"),Wi.createElement(C,{bold:!1}," to set up terminal integration")))),f.push(Wi.createElement(Qd.Item,{key:"questions"},Wi.createElement(C,{color:d.secondaryText},"Ask ",We," questions about your codebase."))),f.push(Wi.createElement(Qd.Item,{key:"changes"},Wi.createElement(C,{color:d.secondaryText},"Ask ",We," to implement changes to your codebase."))),f})())),!r&&s&&Wi.createElement(x,{borderColor:X().secondaryBorder,flexDirection:"column",marginRight:1},Wi.createElement(x,{flexDirection:"column",gap:0},Wi.createElement(x,{marginBottom:1},Wi.createElement(C,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),Wi.createElement(x,{flexDirection:"column",marginLeft:1},i.map((f,p)=>Wi.createElement(C,{key:p,color:X().secondaryText},"\u2022 ",f))))),e===ZQn()&&Wi.createElement(C,{color:X().warning},"Note: You have launched ",Wi.createElement(C,{bold:!0},We)," in your home directory. For the best experience, launch it in a project directory instead."))}var kF=F(ne(),1);var MF=F(ne(),1);var uV=F(ne(),1);function nPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=fs("Select");return uV.default.createElement(x,{...o.option({isFocused:e})},e&&uV.default.createElement(C,{...o.focusIndicator()},r?Kr.triangleDownSmall:Kr.pointer),uV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&uV.default.createElement(C,{...o.selectedIndicator()},Kr.tick))}var Ym=F(ne(),1);import{isDeepStrictEqual as eUn}from"node:util";var dV=class extends Map{first;constructor(t){let r=[],n,o,i=0;for(let s of t){let a={...s,previous:o,next:void 0,index:i};o&&(o.next=a),n||=a;let c="value"in s?s.value:oPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var tUn=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;for(;n&&!("value"in n);)n=n.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let i=Math.min(e.optionMap.size,e.visibleToIndex+1),s=i-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:i}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;for(;n&&!("value"in n);)n=n.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let i=Math.max(0,e.visibleFromIndex-1),s=i+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:i,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state;case"set-focus":return{...e,focusedValue:t.value}}},iPe=e=>e.flatMap(t=>{if("options"in t){let r=iPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),vHt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=iPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new dV(n),s=i.first,a=s&&"value"in s?s.value:void 0;return{optionMap:i,visibleOptionCount:o,focusedValue:a,visibleFromIndex:0,visibleToIndex:o,previousValue:t,value:t}},sPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=iPe(t),[a,c]=(0,Ym.useReducer)(tUn,{visibleOptionCount:e,defaultValue:r,options:t},vHt),[l,u]=(0,Ym.useState)(s);s!==l&&!eUn(s,l)&&(c({type:"reset",state:vHt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Ym.useCallback)(()=>{c({type:"focus-next-option"})},[]),f=(0,Ym.useCallback)(()=>{c({type:"focus-previous-option"})},[]),p=(0,Ym.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Ym.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Ym.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Ym.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Ym.useEffect)(()=>{i&&c({type:"set-focus",value:i})},[i]),{focusedValue:a.focusedValue,visibleFromIndex:a.visibleFromIndex,visibleToIndex:a.visibleToIndex,value:a.value,visibleOptions:A,focusNextOption:d,focusPreviousOption:f,selectFocusedOption:p}};var aPe=({isDisabled:e=!1,state:t})=>{Tt((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var oPe=e=>`HEADER-${e.optionValues.join(",")}`;function mC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=sPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});aPe({isDisabled:e,state:c});let{styles:l}=fs("Select");return MF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:oPe(u),f=!e&&c.focusedValue!==void 0&&("value"in u?c.focusedValue===u.value:u.optionValues.includes(c.focusedValue)),p=!!c.value&&("value"in u?c.value===u.value:u.optionValues.includes(c.value)),A="header"in u,h="label"in u?u.label:u.header,E=h;if(r&&h.includes(r)){let y=h.indexOf(r);E=MF.default.createElement(MF.default.Fragment,null,h.slice(0,y),MF.default.createElement(C,{...l.highlightedText()},r),h.slice(y+r.length))}return MF.default.createElement(nPe,{key:d,isFocused:f,isSelected:p,smallPointer:A},E)}))}function xHt({onDone:e}){return Tt((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),kF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:X().secondaryBorder},kF.default.createElement(x,{marginBottom:1,flexDirection:"column"},kF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),kF.default.createElement(x,null,kF.default.createElement(mC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var gn=F(ne(),1),Wt=F(ne(),1);var Mp=F(ne(),1);Fe();gr();gy();var oUn="2.1.1",Ay={VERSION:oUn,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"};var uPe=46,NHt=["(\u2740\u2579\u25E1\u2579)","(\u25D5\u072B\u25D5)","\u239D(\u25D5u\u25D5)\u23A0","\u10DA(\u25C9\u25DE\u0C6A\u25DF\u25C9 )\u10DA","(\xB4\u25C9\u203F\u25C9\uFF40)","\u0E01\u0E47\u0295\u2022\u0361\u1D25\u2022\u0294 \u0E01\u0E49","\uFF0F/( \u25D5\u203F\u203F\u25D5 )\uFF3C"];function ide({isDefaultModel:e=!1}){let t=Math.max(uPe,ke().length+12),r=X(),n=NHt[Math.floor(Math.random()*NHt.length)];return Mp.createElement(x,{flexDirection:"column"},Mp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Mp.createElement(C,null,Mp.createElement(C,null,n)," Welcome to"," ",Mp.createElement(C,{bold:!0},We),Mp.createElement(C,{color:r.secondaryText}," v",Ay.VERSION)),Mp.createElement(Mp.Fragment,null,Mp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Mp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Mp.createElement(C,{color:r.secondaryText},"cwd: ",ke()),Mp.createElement(C,{color:r.secondaryText},"model: ",Io.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Mp.createElement(C,{color:r.secondaryText},"small fast model: ",Io.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var cS=F(ne(),1);De();var IJ=F(ne(),1);import{randomUUID as oS}from"crypto";Gs();De();sr();gr();De();Fe();import{existsSync as hC,readdirSync as x9n,statSync as w9n}from"fs";import{join as Vx,relative as R9n}from"path";import{homedir as n8t}from"os";import{platform as N9n}from"process";import{readFile as Yx}from"fs/promises";gr();hy();yr();import{join as uUn,sep as dUn}from"path";function kp(){if(!jm())return!1;try{let e=nt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function zm(){return(uUn(ke(),".hcode","team-memory")+dUn).normalize("NFC")}function QF(e){let t=e.normalize("NFC"),r=zm();return t.startsWith(r)}var o8t=F(SV(),1);Xo();var X6t=F(SV(),1);gr();Fe();De();Np();import{readFile as J6t}from"fs/promises";import{existsSync as wPe,readdirSync as b9n,statSync as C9n}from"fs";import{join as RPe,relative as e8t}from"path";import{homedir as I9n}from"os";function Z6t(e){try{let t=(0,X6t.default)(e),r=t.data.paths,n=[];return typeof r=="string"?n=r.split(",").map(o=>o.trim()).filter(Boolean):Array.isArray(r)&&(n=r.filter(o=>typeof o=="string")),{paths:n,content:t.content.trim()}}catch(t){return ye(t),{paths:[],content:e.trim()}}}function v9n(e,t){return t.length===0?!0:t.some(r=>{try{return Fd(e,r,{matchBase:!0,dot:!0})}catch(n){return ye(n),!1}})}function NPe(e){let t=[];try{if(!wPe(e))return t;let r=b9n(e);for(let n of r){let o=RPe(e,n),i=C9n(o);i.isDirectory()?t.push(...NPe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){ye(r)}return t}async function t8t(){let e=[];try{let t=RPe(I9n(),Hn,"rules");if(wPe(t)){let r=NPe(t);for(let n of r)try{let o=await J6t(n,"utf-8"),{paths:i,content:s}=Z6t(o);i.length>0&&e.push({filePath:n,content:s,paths:i,isProjectRule:!1})}catch(o){ye(o)}}}catch(t){ye(t)}try{let t=RPe(ke(),Hn,"rules");if(wPe(t)){let r=NPe(t);for(let n of r)try{let o=await J6t(n,"utf-8"),{paths:i,content:s}=Z6t(o);i.length>0&&e.push({filePath:e8t(ke(),n),content:s,paths:i,isProjectRule:!0})}catch(o){ye(o)}}}catch(t){ye(t)}return e}function r8t(e,t){e=Hce(e);let r=Hce(ke()),n=e.startsWith(r)?e8t(r,e):e;return t.filter(o=>v9n(n,o.paths))}var D9n=`# hawaCodeMd
|
|
677
|
+
`)}function CHt(e){try{let t=$Qn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return ye(`Error checking directory: ${t}`),!1}}Fe();function Lx(){let e=ro();e.hasCompletedProjectOnboarding||ds({...e,hasCompletedProjectOnboarding:!0})}function XQn(){let e=Ar();Co({...e,lastReleaseNotesSeen:MACRO.VERSION})}function rPe({workspaceDir:e}){let r=!ro().hasCompletedProjectOnboarding,o=Ar().lastReleaseNotesSeen,i=[];(!o||(0,IHt.gt)(MACRO.VERSION,o))&&(i=Tue[MACRO.VERSION]||[]);let s=i.length>0;if(Wi.useEffect(()=>{s&&!r&&XQn()},[s,r]),!r&&!s)return null;let a=KQn(JQn(e,Ti)),c=CHt(e),l=!a&&!c,u=_F.isEnabled&&!Ar().shiftEnterKeyBindingInstalled,d=X();return Wi.createElement(x,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&Wi.createElement(Wi.Fragment,null,Wi.createElement(C,{color:d.secondaryText},"Tips for getting started:"),Wi.createElement(Qd,{children:[]},(()=>{let f=[];return c&&f.push(Wi.createElement(Qd.Item,{key:"workspace"},Wi.createElement(C,{color:d.secondaryText},"Ask ",We," to create a new app or clone a repository."))),l&&f.push(Wi.createElement(Qd.Item,{key:"claudemd"},Wi.createElement(C,{color:d.secondaryText},"Run ",Wi.createElement(C,{color:d.text},"/init")," to create a",Ti," file with instructions for Hawa code."))),u&&f.push(Wi.createElement(Qd.Item,{key:"terminal"},Wi.createElement(C,{color:d.secondaryText},"Run ",Wi.createElement(C,{color:d.text},"/terminal-setup"),Wi.createElement(C,{bold:!1}," to set up terminal integration")))),f.push(Wi.createElement(Qd.Item,{key:"questions"},Wi.createElement(C,{color:d.secondaryText},"Ask ",We," questions about your codebase."))),f.push(Wi.createElement(Qd.Item,{key:"changes"},Wi.createElement(C,{color:d.secondaryText},"Ask ",We," to implement changes to your codebase."))),f})())),!r&&s&&Wi.createElement(x,{borderColor:X().secondaryBorder,flexDirection:"column",marginRight:1},Wi.createElement(x,{flexDirection:"column",gap:0},Wi.createElement(x,{marginBottom:1},Wi.createElement(C,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),Wi.createElement(x,{flexDirection:"column",marginLeft:1},i.map((f,p)=>Wi.createElement(C,{key:p,color:X().secondaryText},"\u2022 ",f))))),e===ZQn()&&Wi.createElement(C,{color:X().warning},"Note: You have launched ",Wi.createElement(C,{bold:!0},We)," in your home directory. For the best experience, launch it in a project directory instead."))}var kF=F(ne(),1);var MF=F(ne(),1);var uV=F(ne(),1);function nPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=fs("Select");return uV.default.createElement(x,{...o.option({isFocused:e})},e&&uV.default.createElement(C,{...o.focusIndicator()},r?Kr.triangleDownSmall:Kr.pointer),uV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&uV.default.createElement(C,{...o.selectedIndicator()},Kr.tick))}var Ym=F(ne(),1);import{isDeepStrictEqual as eUn}from"node:util";var dV=class extends Map{first;constructor(t){let r=[],n,o,i=0;for(let s of t){let a={...s,previous:o,next:void 0,index:i};o&&(o.next=a),n||=a;let c="value"in s?s.value:oPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var tUn=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;for(;n&&!("value"in n);)n=n.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let i=Math.min(e.optionMap.size,e.visibleToIndex+1),s=i-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:i}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;for(;n&&!("value"in n);)n=n.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let i=Math.max(0,e.visibleFromIndex-1),s=i+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:i,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state;case"set-focus":return{...e,focusedValue:t.value}}},iPe=e=>e.flatMap(t=>{if("options"in t){let r=iPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),vHt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=iPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new dV(n),s=i.first,a=s&&"value"in s?s.value:void 0;return{optionMap:i,visibleOptionCount:o,focusedValue:a,visibleFromIndex:0,visibleToIndex:o,previousValue:t,value:t}},sPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=iPe(t),[a,c]=(0,Ym.useReducer)(tUn,{visibleOptionCount:e,defaultValue:r,options:t},vHt),[l,u]=(0,Ym.useState)(s);s!==l&&!eUn(s,l)&&(c({type:"reset",state:vHt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Ym.useCallback)(()=>{c({type:"focus-next-option"})},[]),f=(0,Ym.useCallback)(()=>{c({type:"focus-previous-option"})},[]),p=(0,Ym.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Ym.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Ym.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Ym.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Ym.useEffect)(()=>{i&&c({type:"set-focus",value:i})},[i]),{focusedValue:a.focusedValue,visibleFromIndex:a.visibleFromIndex,visibleToIndex:a.visibleToIndex,value:a.value,visibleOptions:A,focusNextOption:d,focusPreviousOption:f,selectFocusedOption:p}};var aPe=({isDisabled:e=!1,state:t})=>{Tt((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var oPe=e=>`HEADER-${e.optionValues.join(",")}`;function mC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=sPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});aPe({isDisabled:e,state:c});let{styles:l}=fs("Select");return MF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:oPe(u),f=!e&&c.focusedValue!==void 0&&("value"in u?c.focusedValue===u.value:u.optionValues.includes(c.focusedValue)),p=!!c.value&&("value"in u?c.value===u.value:u.optionValues.includes(c.value)),A="header"in u,h="label"in u?u.label:u.header,E=h;if(r&&h.includes(r)){let y=h.indexOf(r);E=MF.default.createElement(MF.default.Fragment,null,h.slice(0,y),MF.default.createElement(C,{...l.highlightedText()},r),h.slice(y+r.length))}return MF.default.createElement(nPe,{key:d,isFocused:f,isSelected:p,smallPointer:A},E)}))}function xHt({onDone:e}){return Tt((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),kF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:X().secondaryBorder},kF.default.createElement(x,{marginBottom:1,flexDirection:"column"},kF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),kF.default.createElement(x,null,kF.default.createElement(mC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var gn=F(ne(),1),Wt=F(ne(),1);var Mp=F(ne(),1);Fe();gr();gy();var oUn="2.1.2",Ay={VERSION:oUn,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"};var uPe=46,NHt=["(\u2740\u2579\u25E1\u2579)","(\u25D5\u072B\u25D5)","\u239D(\u25D5u\u25D5)\u23A0","\u10DA(\u25C9\u25DE\u0C6A\u25DF\u25C9 )\u10DA","(\xB4\u25C9\u203F\u25C9\uFF40)","\u0E01\u0E47\u0295\u2022\u0361\u1D25\u2022\u0294 \u0E01\u0E49","\uFF0F/( \u25D5\u203F\u203F\u25D5 )\uFF3C"];function ide({isDefaultModel:e=!1}){let t=Math.max(uPe,ke().length+12),r=X(),n=NHt[Math.floor(Math.random()*NHt.length)];return Mp.createElement(x,{flexDirection:"column"},Mp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Mp.createElement(C,null,Mp.createElement(C,null,n)," Welcome to"," ",Mp.createElement(C,{bold:!0},We),Mp.createElement(C,{color:r.secondaryText}," v",Ay.VERSION)),Mp.createElement(Mp.Fragment,null,Mp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Mp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Mp.createElement(C,{color:r.secondaryText},"cwd: ",ke()),Mp.createElement(C,{color:r.secondaryText},"model: ",Io.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Mp.createElement(C,{color:r.secondaryText},"small fast model: ",Io.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var cS=F(ne(),1);De();var IJ=F(ne(),1);import{randomUUID as oS}from"crypto";Gs();De();sr();gr();De();Fe();import{existsSync as hC,readdirSync as x9n,statSync as w9n}from"fs";import{join as Vx,relative as R9n}from"path";import{homedir as n8t}from"os";import{platform as N9n}from"process";import{readFile as Yx}from"fs/promises";gr();hy();yr();import{join as uUn,sep as dUn}from"path";function kp(){if(!jm())return!1;try{let e=nt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function zm(){return(uUn(ke(),".hcode","team-memory")+dUn).normalize("NFC")}function QF(e){let t=e.normalize("NFC"),r=zm();return t.startsWith(r)}var o8t=F(SV(),1);Xo();var X6t=F(SV(),1);gr();Fe();De();Np();import{readFile as J6t}from"fs/promises";import{existsSync as wPe,readdirSync as b9n,statSync as C9n}from"fs";import{join as RPe,relative as e8t}from"path";import{homedir as I9n}from"os";function Z6t(e){try{let t=(0,X6t.default)(e),r=t.data.paths,n=[];return typeof r=="string"?n=r.split(",").map(o=>o.trim()).filter(Boolean):Array.isArray(r)&&(n=r.filter(o=>typeof o=="string")),{paths:n,content:t.content.trim()}}catch(t){return ye(t),{paths:[],content:e.trim()}}}function v9n(e,t){return t.length===0?!0:t.some(r=>{try{return Fd(e,r,{matchBase:!0,dot:!0})}catch(n){return ye(n),!1}})}function NPe(e){let t=[];try{if(!wPe(e))return t;let r=b9n(e);for(let n of r){let o=RPe(e,n),i=C9n(o);i.isDirectory()?t.push(...NPe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){ye(r)}return t}async function t8t(){let e=[];try{let t=RPe(I9n(),Hn,"rules");if(wPe(t)){let r=NPe(t);for(let n of r)try{let o=await J6t(n,"utf-8"),{paths:i,content:s}=Z6t(o);i.length>0&&e.push({filePath:n,content:s,paths:i,isProjectRule:!1})}catch(o){ye(o)}}}catch(t){ye(t)}try{let t=RPe(ke(),Hn,"rules");if(wPe(t)){let r=NPe(t);for(let n of r)try{let o=await J6t(n,"utf-8"),{paths:i,content:s}=Z6t(o);i.length>0&&e.push({filePath:e8t(ke(),n),content:s,paths:i,isProjectRule:!0})}catch(o){ye(o)}}}catch(t){ye(t)}return e}function r8t(e,t){e=Hce(e);let r=Hce(ke()),n=e.startsWith(r)?e8t(r,e):e;return t.filter(o=>v9n(n,o.paths))}var D9n=`# hawaCodeMd
|
|
678
678
|
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 O9n(e="default"){let r=Ve.getSessionContext(e).getData("matchedPathRules");return!r||r.length===0?"":r.map(o=>{let i=o.isProjectRule?"project instructions, checked into the codebase":"user's private global instructions for all projects";return`Contents of ${o.filePath} (${i}):
|
|
679
679
|
|
|
680
680
|
${o.content}`}).join(`
|
|
@@ -772,7 +772,7 @@ data: ${JSON.stringify(H)}
|
|
|
772
772
|
Stack trace: `+d.stack)),new Response(c.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var Kme=null,d4e=!1;function mno(){Kme=null,d4e=!1}Dt.on("proxy:changed",mno);function gno(){if(d4e)return Kme;if(d4e=!0,nt().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(Kme=new pZt.ProxyAgent({uri:e}),Ht(`[proxy] using proxy: ${e}`)),Kme}function Ano(){let e=gno();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function Zme(e){let t=e||process.env.API_TYPE,r=Ano();switch(t){case"openai":return uno(r);case"openai-responses":return dno(r);case"gemini":return fno(r);default:return pno(r)}}gy();var gZt=F(ne(),1);function mZt(e,t){let r=[],n=Math.max(1,Math.floor(t)),o="",i=0;for(let s of e){let a=hno(s);o&&i+a>n?(r.push(o),o=s,i=a):(o+=s,i+=a)}return o&&r.push(o),r}function hno(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||Eno(t)?0:_no(t)?2:1}function Eno(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function _no(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 E0(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 m4e(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let r=Math.floor(t/3600),n=Math.floor(t%3600/60),o=t%60;return r>0?`${r}h ${n}m ${o}s`:`${n}m ${o}s`}function QC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}function Xme(e,t,r){let n=[];return typeof e=="number"&&n.push(m4e(e)),typeof t=="number"&&n.push(`${t} ${t===1?"turn":"turns"}`),typeof r=="number"&&n.push(`${QC(r)} tokens`),n.length>0?` (${n.join(" \xB7 ")})`:""}De();Gs();var Jl={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function ege(e,t){Jl.totalCost+=e,Jl.totalAPIDuration+=t}function tge(e,t){Jl.inputTokens+=e,Jl.outputTokens+=t,Dt.emit("token:change",{inputTokens:Jl.inputTokens,outputTokens:Jl.outputTokens})}function rge(e,t){Jl.cacheCreationTokens+=e,Jl.cacheReadTokens+=t}function rM(){return{inputTokens:Jl.inputTokens,outputTokens:Jl.outputTokens,cacheCreationTokens:Jl.cacheCreationTokens,cacheReadTokens:Jl.cacheReadTokens}}function o9(){return Jl.totalCost}function nge(){return Date.now()-Jl.startTime}function AZt(){return Jl.totalAPIDuration}function hZt(e){Jl.currentContextTokens=e}function EZt(){return Jl.currentContextTokens}function Sno(){return Et.grey(`Total duration (API): ${E0(Jl.totalAPIDuration)}
|
|
773
773
|
Total duration (wall): ${E0(nge())}`)}function _Zt(){(0,gZt.useEffect)(()=>{let e=()=>{process.stdout.write(`
|
|
774
774
|
`+Sno()+`
|
|
775
|
-
`);let t=ro();ds({...t,lastCost:Jl.totalCost,lastAPIDuration:Jl.totalAPIDuration,lastDuration:nge(),lastSessionId:Y_})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}De();Fe();Fe();var g4e="2.1.
|
|
775
|
+
`);let t=ro();ds({...t,lastCost:Jl.totalCost,lastAPIDuration:Jl.totalAPIDuration,lastDuration:nge(),lastSessionId:Y_})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}De();Fe();Fe();var g4e="2.1.2";globalThis.MACRO={VERSION:g4e,PACKAGE_URL:`@dahawa/${bi}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var oge=process.env.HAWA_CODE_USER_AGENT||`${bi}/${g4e} (${process.env.USER_TYPE})`;De();De();sr();function Vf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Rf(t);if(n?.type==="user"){t[t.length-1]=Cno(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Rf(t);n?.type==="user"&&(t[t.length-1]=yno(n,r));return}}}),t}function yno(e,t){return{...e,message:{...e.message,content:bno(e.message.content,Tno(t.content.content))}}}function Tno(e){return`
|
|
776
776
|
<system-reminder>
|
|
777
777
|
The user sent the following message:
|
|
778
778
|
${e}
|
|
@@ -1677,7 +1677,7 @@ ${i}
|
|
|
1677
1677
|
- For shell tasks, sends SIGTERM first, then SIGKILL if needed
|
|
1678
1678
|
- For agent tasks, marks the task as failed and triggers completion handlers`;O0();hx();DU();var E2o=$e(()=>Q.strictObject({task_id:Q.string().describe("The ID of the background task to stop")})),$W={name:$1r,async description(){return q1r},async prompt(){return V1r},isReadOnly(){return!1},isConcurrencySafe(){return!1},get inputSchema(){return E2o()},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 sye.createElement(C,{color:"red"},"\xA0\xA0\u23BF \xA0 Task stop operation was rejected")},renderToolResultMessage(e){let{stopped:t,task_id:r,message:n}=e;return t?sye.createElement(C,{color:"green"},"\xA0\xA0\u23BF \xA0",n):sye.createElement(C,{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"),o=r.startsWith("s");if(n){let i=pc.stopTask(r),s={message:i.reason,task_id:r,stopped:i.success,task_type:"agent"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(s),data:s}}else if(o){let i=r.startsWith("sp")?Kh.stop(r):Gl.stop(r),s={message:i?`Successfully stopped shell task: ${r}`:`Failed to stop shell task: ${r}`,task_id:r,stopped:i,task_type:"shell"};yield{type:"result",resultForAssistant:this.renderResultForAssistant(s),data:s}}else{let i={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(i),data:i}}}catch(n){let i={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(i),data:i}}}};var DJe=F(ne(),1);Nn();sr();gr();Fe();var Y1r="Cwd",j1r="Returns the current working directory used by the hands MCP server. Useful when the hands process and Hawa Code are running in different directories.",z1r=`- Returns the current working directory (CWD) of the hands MCP server process.
|
|
1679
1679
|
- The working directory of the hands process should be checked first, because the hands process and Hawa Code may not be in the same working directory.
|
|
1680
|
-
- Use this tool when you need to confirm the base directory for relative paths in file or shell operations.`;Fe();var _2o=$e(()=>Q.strictObject({})),OJe={name:Y1r,async description(){return j1r},userFacingName(){return"Cwd"},get inputSchema(){return _2o()},async isEnabled(){return!0},isReadOnly(){return!0},needsPermissions(){return!1},async prompt(){return z1r},renderToolUseMessage(){return"Get current working directory"},renderToolResultMessage(e){return DJe.default.createElement(x,{width:"100%"},DJe.default.createElement(C,null,"\xA0\xA0\u23BF \xA0",e.cwd))},async*call(){let e={cwd:ke()};yield{type:"result",resultForAssistant:this.renderResultForAssistant(e),data:e}},renderResultForAssistant(e){return`Current working directory: ${e.cwd}`}};var W1r=`${We}/hands`,qW="hawa/handsData",K1r=[e$()?zA:Ao,lf,jA,rp,np,tp,ep,HW,GW,$W,OJe],J1r=[zA,Ao,lf,jA,rp,np,tp,ep,HW,GW,$W,OJe];var aye=null;function S2o(e,t){aye={name:e,client:t},RI.cache.clear?.(),N3.cache.clear?.(),Gn.clear()}function y2o(){RI.cache.clear?.(),N3.cache.clear?.(),Gn.clear()}function rvr(e){let t={};if(e)for(let r of e){let[n,...o]=r.split("=");if(!n||o.length===0)throw new Error(`Invalid environment variable format: ${r}, environment variables should be added as: -e KEY1=value1 -e KEY2=value2`);t[n]=o.join("=")}return t}var T2o=["project","global","mcprc"],b2o=["project","global"];function lye(e){if(!e)return"project";let t=process.env.USER_TYPE==="external"?b2o:T2o;if(!t.includes(e))throw new Error(`Invalid scope: ${e}. Must be one of: ${t.join(", ")}`);return e}function BJe(e,t,r="project"){if(r==="mcprc"){let n=tvr(ke(),".mcp.json"),o={};if(Z1r(n))try{let i=X1r(n,"utf-8"),s=ay(i);s&&typeof s=="object"&&(o=s)}catch{}o[e]=t;try{evr(n,JSON.stringify(o,null,2),"utf-8")}catch(i){throw new Error(`Failed to write to .mcp.json: ${i}`)}}else if(r==="global"){let n=Ar();n.mcpServers||(n.mcpServers={}),n.mcpServers[e]=t,Co(n)}else{let n=ro();n.mcpServers||(n.mcpServers={}),n.mcpServers[e]=t,ds(n)}}function nvr(e,t="project"){if(t==="mcprc"){let r=tvr(ke(),".mcp.json");if(!Z1r(r))throw new Error("No .mcp.json file found in this directory");try{let n=X1r(r,"utf-8"),o=ay(n);if(!o||typeof o!="object"||!o[e])throw new Error(`No MCP server found with name: ${e} in .mcp.json`);delete o[e],evr(r,JSON.stringify(o,null,2),"utf-8")}catch(n){throw n instanceof Error?n:new Error(`Failed to remove from .mcp.json: ${n}`)}}else if(t==="global"){let r=Ar();if(!r.mcpServers?.[e])throw new Error(`No global MCP server found with name: ${e}`);delete r.mcpServers[e],Co(r)}else{let r=ro();if(!r.mcpServers?.[e])throw new Error(`No local MCP server found with name: ${e}`);delete r.mcpServers[e],ds(r)}}function ovr(){let e=Ar(),t=Ix(),r=ro(),n={};for(let o of cd.getMcpServers()){let{name:i,pluginId:s,...a}=o;n[i]=a}return{...n,...e.mcpServers??{},...t??{},...r.mcpServers??{}}}function uye(e){let t=ro(),r=Ix(),n=Ar();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 ivr(e,t,r=!1,n=null){if(t.type==="sse"||t.type==="http"){let o=new jEe(t.url,t.headers,e);return await o.connectD(r,n),o}else{let o=t.type==="sse"?new FEe(new URL(t.url)):new OEe({command:t.command,args:t.args,env:{...process.env,...t.env},stderr:"pipe"}),i=new Pw({name:`${We}`,version:"0.1.0"},{capabilities:{}}),s=t.timeout??5e3,a=i.connect(o),c=new Promise((l,u)=>{let d=setTimeout(()=>{u(new Error(`Connection to MCP server "${e}" timed out after ${s}ms`))},s);a.then(()=>clearTimeout(d),()=>clearTimeout(d))});return await Promise.race([a,c]),t.type==="stdio"&&o.stderr?.on("data",l=>{let u=l.toString().trim();u&&Lb(e,`Server stderr: ${u}`)}),i}}function VW(e){let t=ro();return t.approvedMcprcServers?.includes(e)?"approved":t.rejectedMcprcServers?.includes(e)?"rejected":"pending"}var C2o=async(e,t=!1,r=null)=>{VW(e)==="rejected"&&Z2t(e);let o=uye(e);if(!o)return{name:e,type:"failed"};try{let i=await ivr(e,o,t,r),s=await RI(),a={name:e,client:i,type:"connected"},c=s.findIndex(l=>l.name===e);return c!==-1?s[c]=a:s.push(a),N3.cache.clear?.(),a}catch(i){return Lb(e,`Reconnect failed: ${i instanceof Error?i.message:String(i)}`),{name:e,type:"failed"}}},I2o=()=>(y2o(),RI()),RI=$e(async()=>{if(process.env.CI)return[];let e=Ar().mcpServers??{},t=Ix(),r=ro().mcpServers??{},n=Soe(t,(u,d)=>VW(d)==="approved"),o=Soe(t,(u,d)=>VW(d)==="rejected"),i=Object.keys(o).map(u=>({name:u,type:"disabled"})),s={};for(let u of cd.getMcpServers()){let{name:d,pluginId:f,...p}=u;s[d]=p}let a={...s,...Fgr,...e,...n,...r},c=await Promise.all(Object.entries(a).map(async([u,d])=>{try{let f=await ivr(u,d);return Le("tengu_mcp_server_connection_succeeded",{}),{name:u,client:f,type:"connected"}}catch(f){return f instanceof eu?{name:u,type:"oauth"}:(Le("tengu_mcp_server_connection_failed",{}),Lb(u,`Connection failed: ${f instanceof Error?f.message:String(f)}`),{name:u,type:"failed"})}})),l=aye?[{name:aye.name,client:aye.client,type:"connected"}]:[];return[...c,...l,...i]});async function svr(e,t,r){let n=await RI();return(await Promise.allSettled(n.map(async i=>{if(i.type!=="connected")return null;try{return(await i.client.getServerCapabilities())?.[r]?{client:i,result:await i.client.request(e,t)}:null}catch(s){return i.type==="connected"&&Lb(i.name,`Failed to request '${e.method}': ${s instanceof Error?s.message:String(s)}`),null}}))).filter(i=>i.status==="fulfilled").map(i=>i.value).filter(i=>i!==null)}function cye(e){return e.replaceAll(".","-")}async function dye(e){return(await N3()).filter(n=>n.name.startsWith(`mcp_${e}_`))}function v2o(e){try{return e.client.getServerVersion?.()?.name===W1r}catch{return!1}}var x2o=new Map(J1r.map(e=>[e.name,e]));function w2o(e,t,r){return{...ok,name:"mcp_"+cye(e.name)+"_"+cye(t.name),async description(){return t.description??""},userFacingName(n){return"\u2601 "+r.userFacingName(n)},async prompt(){return t.description??""},isMcp(){return!0},async isEnabled(){return!0},isReadOnly(){return r.isReadOnly()},needsPermissions(n){return r.needsPermissions(n)},renderToolUseMessage(n,o){return r.renderToolUseMessage(n,{verbose:o.verbose})},renderToolResultMessage(n,o){if(n&&typeof n=="object"&&n.__handsValidationError===!0){let i=n.message??"Invalid tool input";return Lur(i)}return r.renderToolResultMessage(n,o)},inputSchema:sf(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let{data:o,resultForAssistant:i}=await D2o({client:e,tool:t.name,args:n});yield{type:"result",data:o,resultForAssistant:i}}}}function R2o(e,t){let r=t.annotations?.readOnlyHint===!0;return{...ok,name:"mcp_"+cye(e.name)+"_"+cye(t.name),async description(){return t.description??""},async prompt(){return t.description??""},isMcp(){return!0},isReadOnly(){return r},inputSchema:sf(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let o=await N2o({client:e,tool:t.name,args:n});yield{type:"result",data:{},resultForAssistant:o}},userFacingName(){return`${e.name.length>10?`...${e.name.slice(-10)}`:e.name}:${t.name}`}}}var N3=$e(async()=>{let t=(await svr({method:"tools/list"},Hj,"tools")).flatMap(({client:r,result:{tools:n}})=>{let o=v2o(r);return n.map(i=>{if(o){let s=x2o.get(i.name);if(s)return w2o(r,i,s)}return R2o(r,i)})});return HEe.batchUpdateMcpTools(t),t});async function N2o({client:{client:e,name:t},tool:r,args:n}){let o=await e.callTool({name:r,arguments:n},b0);return(await Qgr(o,r,t)).content}async function D2o({client:{client:e},tool:t,args:r}){let n=await e.callTool({name:t,arguments:r},b0),o=n?._meta?.[qW],i=Array.isArray(n?.content)?n.content.filter(c=>c?.type==="text"&&typeof c.text=="string").map(c=>c.text).join(""):"",s=typeof o?.resultForAssistant=="string"?o.resultForAssistant:i;if(o?.validationError===!0){let c=o.message??s;return{data:{__handsValidationError:!0,message:c},resultForAssistant:c}}return{data:o&&"data"in o?o.data:s,resultForAssistant:s}}var avr=$e(async()=>(await svr({method:"prompts/list"},Fj,"prompts")).flatMap(({client:t,result:r})=>r.prompts?.map(n=>{let o=Object.values(n.arguments??{}).map(i=>i.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:o,async getPromptForCommand(i){let s=i.split(" ");return await O2o({name:n.name,client:t},ENe(o,s))}}})));Gn.add(avr);Gn.getMCPCommands=avr;Gn.getMcpServer=uye;Gn.getClients=RI;Gn.reloadClients=I2o;Gn.reconnect=C2o;Gn.registerIDEClient=S2o;async function O2o({name:e,client:t},r){try{return(await t.client.getPrompt({name:e,arguments:r})).messages.map(o=>({role:o.role,content:[o.content.type==="text"?{type:"text",text:o.content.text}:{type:"image",source:{data:String(o.content.data),media_type:o.content.mimeType,type:"base64"}}]}))}catch(n){throw Lb(t.name,`Error running command '${e}': ${n instanceof Error?n.message:String(n)}`),n}}function cvr({serverName:e,serverConfig:t,onBack:r,onViewTools:n,onServerDisable:o,onServerReconnect:i,context:s}){let[a,c]=(0,xR.useState)(0),[l,u]=(0,xR.useState)("connected"),[d,f]=(0,xR.useState)([]),[p,A]=(0,xR.useState)(null),[h,E]=(0,xR.useState)(!1),y=X();(0,xR.useEffect)(()=>{u(e.status),dye(e.name).then(z=>{f(z)})},[e]),Tt((z,P)=>{if(P.return){l==="connected"?a===0?n():a===1?b():a===2&&I():a===0?b():a===1&&I();return}if(P.upArrow){let $=l==="connected"?2:1;c(q=>Math.max(0,q-1));return}if(P.downArrow){let $=l==="connected"?2:1;c(q=>Math.min($,q+1));return}});let b=async()=>{E(!0);try{await i(e.name,l,z=>{A(z)})}finally{E(!1)}},I=()=>{o(e.name)},O=(z=>{switch(z){case"connected":return{icon:Kr.tick,color:y.success};case"failed":return{icon:Kr.cross,color:y.error};case"disabled":case"oauth":return{icon:Kr.circle,color:y.secondaryText};default:return{icon:Kr.circle,color:y.secondaryText}}})(l),H=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 Eo.createElement(x,{flexDirection:"column",height:"100%"},Eo.createElement(x,{flexDirection:"column",borderStyle:"single",borderColor:"white"},Eo.createElement(x,{padding:1},Eo.createElement(C,{bold:!0,color:y.claude},e.name," MCP Server")),Eo.createElement(x,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},Eo.createElement(x,null,Eo.createElement(C,null,"Status: "),Eo.createElement(C,{color:O.color},O.icon," ",l)),t?.command&&Eo.createElement(x,null,Eo.createElement(C,null,"Command: "),Eo.createElement(C,{color:y.text},t.command)),t?.args&&Eo.createElement(x,null,Eo.createElement(C,null,"Args: "),Eo.createElement(C,{color:y.text},Array.isArray(t.args)?t.args.join(" "):t.args)),t?.url&&Eo.createElement(x,null,Eo.createElement(C,null,"URL: "),Eo.createElement(C,{color:y.text},t.url)),t&&Eo.createElement(x,null,Eo.createElement(C,null,"Config location: "),Eo.createElement(C,{color:y.secondaryText},t.configPath||"Unknown")),l==="connected"&&Eo.createElement(Eo.Fragment,null,Eo.createElement(x,null,Eo.createElement(C,null,"Capabilities: tools")),Eo.createElement(x,null,Eo.createElement(C,null,"Tools: ",d.length," tools")))),Eo.createElement(x,{flexDirection:"column",paddingX:1,marginBottom:1},h?Eo.createElement(x,{flexDirection:"row"},Eo.createElement(zM,null),Eo.createElement(C,{color:y.claude},"Reconnecting...")):H.map((z,P)=>{let $=P===a;return Eo.createElement(x,{key:P},Eo.createElement(C,{color:$?y.claude:y.text},$?Kr.pointer:" "),Eo.createElement(C,{color:$?y.claude:y.text,bold:$},P+1,". ",z.label))})),Eo.createElement(x,{padding:1},Eo.createElement(C,{color:y.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back"))),l==="oauth"&&p&&Eo.createElement(x,{flexDirection:"column",paddingX:1},Eo.createElement(C,null,"Open in browser:"),Eo.createElement(C,{wrap:"wrap",color:y.link||"blue"},p)))}var Wc=F(ne(),1),NI=F(ne(),1);function lvr({serverName:e,onBack:t,onToolSelect:r}){let[n,o]=(0,NI.useState)(0),[i,s]=(0,NI.useState)([]),[a,c]=(0,NI.useState)({}),[l,u]=(0,NI.useState)(0),d=X(),f=15;(0,NI.useEffect)(()=>{if(i.length>0){let E={};for(let y=0;y<i.length;y++)E[y]=i[y].isReadOnly?.()?"read-only":"read-write";c(E)}},[i]),(0,NI.useEffect)(()=>{e&&(async()=>{try{let y=await dye(e.name);s(y)}catch{s([])}})()},[e]),Tt((E,y)=>{if(y.return){if(i.length>0){let b=i[n];r(b)}return}if(y.upArrow){let b=Math.max(0,n-1);o(b),b<l&&u(b);return}if(y.downArrow){let b=Math.min(i.length-1,n+1);o(b),b>=l+f&&u(b-f+1);return}}),(0,NI.useEffect)(()=>{u(0),o(0)},[i]);let p=E=>{let y=E.name.match(/^mcp_[^_]+_(.+)$/);return y?y[1]:E.name},A=i.slice(l,l+f),h=i.length>f;return Wc.createElement(x,{flexDirection:"column",height:"100%",borderStyle:"single",borderColor:"white"},Wc.createElement(x,{padding:1},Wc.createElement(C,{bold:!0,color:d.claude},"Tools for ",e.name," (",i.length," tools)")),Wc.createElement(x,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},i.length===0?Wc.createElement(C,{color:d.secondaryText},"No tools available for this server"):Wc.createElement(Wc.Fragment,null,h&&l>0&&Wc.createElement(x,null,Wc.createElement(C,{color:d.secondaryText},"\u2191 More tools above")),Wc.createElement(x,{flexDirection:"column",flexGrow:1},A.map((E,y)=>{let b=l+y,I=b===n,w=p(E),O=a[b]||"read-write";return Wc.createElement(x,{key:E.name},Wc.createElement(C,{color:I?d.claude:d.text},I?Kr.pointer:" "),Wc.createElement(C,{color:d.secondaryText},b+1,"."),Wc.createElement(C,{color:I?d.claude:d.text,bold:I},w),Wc.createElement(C,null," "),Wc.createElement(C,{color:d.secondaryText},O))})),h&&l+f<i.length&&Wc.createElement(x,null,Wc.createElement(C,{color:d.secondaryText},"\u2193 More tools below")))),Wc.createElement(x,{padding:1},Wc.createElement(C,{color:d.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back")))}var ru=F(ne(),1);function uvr({tool:e,serverName:t,onBack:r}){let[n,o]=(0,ru.useState)(""),[i,s]=(0,ru.useState)(!0),[a,c]=(0,ru.useState)(0),[l,u]=(0,ru.useState)(20),d=(0,ru.useRef)(null),f=X(),{stdout:p}=fF();(0,ru.useEffect)(()=>{(async()=>{if(e?.description)try{let P=await e.description();o(P||"")}catch{o("")}else o("");s(!1)})()},[e]),(0,ru.useEffect)(()=>{p?.rows&&u(Math.max(10,p.rows-8))},[p]);let A=z=>{let P=z.name.match(/^mcp__[^_]+__(.+)$/);return P?P[1]:z.name},h=()=>i?"loading...":n&&n.toLowerCase().includes("read")&&n.toLowerCase().includes("only")?"read-only":"read-write",E=A(e),y=h(),I=(()=>{let z=[];return n&&(z.push("Description:"),z.push(...n.split(`
|
|
1680
|
+
- Use this tool when you need to confirm the base directory for relative paths in file or shell operations.`;Fe();var _2o=$e(()=>Q.strictObject({})),OJe={name:Y1r,async description(){return j1r},userFacingName(){return"Cwd"},get inputSchema(){return _2o()},async isEnabled(){return!0},isReadOnly(){return!0},needsPermissions(){return!1},async prompt(){return z1r},renderToolUseMessage(){return"Get current working directory"},renderToolResultMessage(e){return DJe.default.createElement(x,{width:"100%"},DJe.default.createElement(C,null,"\xA0\xA0\u23BF \xA0",e.cwd))},async*call(){let e={cwd:ke()};yield{type:"result",resultForAssistant:this.renderResultForAssistant(e),data:e}},renderResultForAssistant(e){return`Current working directory: ${e.cwd}`}};var W1r=`${We}/hands`,qW="hawa/handsData",K1r=[e$()?zA:Ao,lf,jA,rp,np,tp,ep,HW,GW,$W,OJe],J1r=[zA,Ao,lf,jA,rp,np,tp,ep,HW,GW,$W,OJe];var aye=null;function S2o(e,t){aye={name:e,client:t},RI.cache.clear?.(),N3.cache.clear?.(),Gn.clear()}function y2o(){RI.cache.clear?.(),N3.cache.clear?.(),Gn.clear()}function rvr(e){let t={};if(e)for(let r of e){let[n,...o]=r.split("=");if(!n||o.length===0)throw new Error(`Invalid environment variable format: ${r}, environment variables should be added as: -e KEY1=value1 -e KEY2=value2`);t[n]=o.join("=")}return t}var T2o=["project","global","mcprc"],b2o=["project","global"];function lye(e){if(!e)return"project";let t=process.env.USER_TYPE==="external"?b2o:T2o;if(!t.includes(e))throw new Error(`Invalid scope: ${e}. Must be one of: ${t.join(", ")}`);return e}function BJe(e,t,r="project"){if(r==="mcprc"){let n=tvr(ke(),".mcp.json"),o={};if(Z1r(n))try{let i=X1r(n,"utf-8"),s=ay(i);s&&typeof s=="object"&&(o=s)}catch{}o[e]=t;try{evr(n,JSON.stringify(o,null,2),"utf-8")}catch(i){throw new Error(`Failed to write to .mcp.json: ${i}`)}}else if(r==="global"){let n=Ar();n.mcpServers||(n.mcpServers={}),n.mcpServers[e]=t,Co(n)}else{let n=ro();n.mcpServers||(n.mcpServers={}),n.mcpServers[e]=t,ds(n)}}function nvr(e,t="project"){if(t==="mcprc"){let r=tvr(ke(),".mcp.json");if(!Z1r(r))throw new Error("No .mcp.json file found in this directory");try{let n=X1r(r,"utf-8"),o=ay(n);if(!o||typeof o!="object"||!o[e])throw new Error(`No MCP server found with name: ${e} in .mcp.json`);delete o[e],evr(r,JSON.stringify(o,null,2),"utf-8")}catch(n){throw n instanceof Error?n:new Error(`Failed to remove from .mcp.json: ${n}`)}}else if(t==="global"){let r=Ar();if(!r.mcpServers?.[e])throw new Error(`No global MCP server found with name: ${e}`);delete r.mcpServers[e],Co(r)}else{let r=ro();if(!r.mcpServers?.[e])throw new Error(`No local MCP server found with name: ${e}`);delete r.mcpServers[e],ds(r)}}function ovr(){let e=Ar(),t=Ix(),r=ro(),n={};for(let o of cd.getMcpServers()){let{name:i,pluginId:s,...a}=o;n[i]=a}return{...n,...e.mcpServers??{},...t??{},...r.mcpServers??{}}}function uye(e){let t=ro(),r=Ix(),n=Ar();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 ivr(e,t,r=!1,n=null){if(t.type==="sse"||t.type==="http"||t.type==="streamable-http"){let o=new jEe(t.url,t.headers,e);return await o.connectD(r,n),o}else{let o=t.type==="sse"?new FEe(new URL(t.url)):new OEe({command:t.command,args:t.args,env:{...process.env,...t.env},stderr:"pipe"}),i=new Pw({name:`${We}`,version:"0.1.0"},{capabilities:{}}),s=t.timeout??5e3,a=i.connect(o),c=new Promise((l,u)=>{let d=setTimeout(()=>{u(new Error(`Connection to MCP server "${e}" timed out after ${s}ms`))},s);a.then(()=>clearTimeout(d),()=>clearTimeout(d))});return await Promise.race([a,c]),t.type==="stdio"&&o.stderr?.on("data",l=>{let u=l.toString().trim();u&&Lb(e,`Server stderr: ${u}`)}),i}}function VW(e){let t=ro();return t.approvedMcprcServers?.includes(e)?"approved":t.rejectedMcprcServers?.includes(e)?"rejected":"pending"}var C2o=async(e,t=!1,r=null)=>{VW(e)==="rejected"&&Z2t(e);let o=uye(e);if(!o)return{name:e,type:"failed"};try{let i=await ivr(e,o,t,r),s=await RI(),a={name:e,client:i,type:"connected"},c=s.findIndex(l=>l.name===e);return c!==-1?s[c]=a:s.push(a),N3.cache.clear?.(),a}catch(i){return Lb(e,`Reconnect failed: ${i instanceof Error?i.message:String(i)}`),{name:e,type:"failed"}}},I2o=()=>(y2o(),RI()),RI=$e(async()=>{if(process.env.CI)return[];let e=Ar().mcpServers??{},t=Ix(),r=ro().mcpServers??{},n=Soe(t,(u,d)=>VW(d)==="approved"),o=Soe(t,(u,d)=>VW(d)==="rejected"),i=Object.keys(o).map(u=>({name:u,type:"disabled"})),s={};for(let u of cd.getMcpServers()){let{name:d,pluginId:f,...p}=u;s[d]=p}let a={...s,...Fgr,...e,...n,...r},c=await Promise.all(Object.entries(a).map(async([u,d])=>{try{let f=await ivr(u,d);return Le("tengu_mcp_server_connection_succeeded",{}),{name:u,client:f,type:"connected"}}catch(f){return f instanceof eu?{name:u,type:"oauth"}:(Le("tengu_mcp_server_connection_failed",{}),Lb(u,`Connection failed: ${f instanceof Error?f.message:String(f)}`),{name:u,type:"failed"})}})),l=aye?[{name:aye.name,client:aye.client,type:"connected"}]:[];return[...c,...l,...i]});async function svr(e,t,r){let n=await RI();return(await Promise.allSettled(n.map(async i=>{if(i.type!=="connected")return null;try{return(await i.client.getServerCapabilities())?.[r]?{client:i,result:await i.client.request(e,t)}:null}catch(s){return i.type==="connected"&&Lb(i.name,`Failed to request '${e.method}': ${s instanceof Error?s.message:String(s)}`),null}}))).filter(i=>i.status==="fulfilled").map(i=>i.value).filter(i=>i!==null)}function cye(e){return e.replaceAll(".","-")}async function dye(e){return(await N3()).filter(n=>n.name.startsWith(`mcp_${e}_`))}function v2o(e){try{return e.client.getServerVersion?.()?.name===W1r}catch{return!1}}var x2o=new Map(J1r.map(e=>[e.name,e]));function w2o(e,t,r){return{...ok,name:"mcp_"+cye(e.name)+"_"+cye(t.name),async description(){return t.description??""},userFacingName(n){return"\u2601 "+r.userFacingName(n)},async prompt(){return t.description??""},isMcp(){return!0},async isEnabled(){return!0},isReadOnly(){return r.isReadOnly()},needsPermissions(n){return r.needsPermissions(n)},renderToolUseMessage(n,o){return r.renderToolUseMessage(n,{verbose:o.verbose})},renderToolResultMessage(n,o){if(n&&typeof n=="object"&&n.__handsValidationError===!0){let i=n.message??"Invalid tool input";return Lur(i)}return r.renderToolResultMessage(n,o)},inputSchema:sf(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let{data:o,resultForAssistant:i}=await D2o({client:e,tool:t.name,args:n});yield{type:"result",data:o,resultForAssistant:i}}}}function R2o(e,t){let r=t.annotations?.readOnlyHint===!0;return{...ok,name:"mcp_"+cye(e.name)+"_"+cye(t.name),async description(){return t.description??""},async prompt(){return t.description??""},isMcp(){return!0},isReadOnly(){return r},inputSchema:sf(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let o=await N2o({client:e,tool:t.name,args:n});yield{type:"result",data:{},resultForAssistant:o}},userFacingName(){return`${e.name.length>10?`...${e.name.slice(-10)}`:e.name}:${t.name}`}}}var N3=$e(async()=>{let t=(await svr({method:"tools/list"},Hj,"tools")).flatMap(({client:r,result:{tools:n}})=>{let o=v2o(r);return n.map(i=>{if(o){let s=x2o.get(i.name);if(s)return w2o(r,i,s)}return R2o(r,i)})});return HEe.batchUpdateMcpTools(t),t});async function N2o({client:{client:e,name:t},tool:r,args:n}){let o=await e.callTool({name:r,arguments:n},b0);return(await Qgr(o,r,t)).content}async function D2o({client:{client:e},tool:t,args:r}){let n=await e.callTool({name:t,arguments:r},b0),o=n?._meta?.[qW],i=Array.isArray(n?.content)?n.content.filter(c=>c?.type==="text"&&typeof c.text=="string").map(c=>c.text).join(""):"",s=typeof o?.resultForAssistant=="string"?o.resultForAssistant:i;if(o?.validationError===!0){let c=o.message??s;return{data:{__handsValidationError:!0,message:c},resultForAssistant:c}}return{data:o&&"data"in o?o.data:s,resultForAssistant:s}}var avr=$e(async()=>(await svr({method:"prompts/list"},Fj,"prompts")).flatMap(({client:t,result:r})=>r.prompts?.map(n=>{let o=Object.values(n.arguments??{}).map(i=>i.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:o,async getPromptForCommand(i){let s=i.split(" ");return await O2o({name:n.name,client:t},ENe(o,s))}}})));Gn.add(avr);Gn.getMCPCommands=avr;Gn.getMcpServer=uye;Gn.getClients=RI;Gn.reloadClients=I2o;Gn.reconnect=C2o;Gn.registerIDEClient=S2o;async function O2o({name:e,client:t},r){try{return(await t.client.getPrompt({name:e,arguments:r})).messages.map(o=>({role:o.role,content:[o.content.type==="text"?{type:"text",text:o.content.text}:{type:"image",source:{data:String(o.content.data),media_type:o.content.mimeType,type:"base64"}}]}))}catch(n){throw Lb(t.name,`Error running command '${e}': ${n instanceof Error?n.message:String(n)}`),n}}function cvr({serverName:e,serverConfig:t,onBack:r,onViewTools:n,onServerDisable:o,onServerReconnect:i,context:s}){let[a,c]=(0,xR.useState)(0),[l,u]=(0,xR.useState)("connected"),[d,f]=(0,xR.useState)([]),[p,A]=(0,xR.useState)(null),[h,E]=(0,xR.useState)(!1),y=X();(0,xR.useEffect)(()=>{u(e.status),dye(e.name).then(z=>{f(z)})},[e]),Tt((z,P)=>{if(P.return){l==="connected"?a===0?n():a===1?b():a===2&&I():a===0?b():a===1&&I();return}if(P.upArrow){let $=l==="connected"?2:1;c(q=>Math.max(0,q-1));return}if(P.downArrow){let $=l==="connected"?2:1;c(q=>Math.min($,q+1));return}});let b=async()=>{E(!0);try{await i(e.name,l,z=>{A(z)})}finally{E(!1)}},I=()=>{o(e.name)},O=(z=>{switch(z){case"connected":return{icon:Kr.tick,color:y.success};case"failed":return{icon:Kr.cross,color:y.error};case"disabled":case"oauth":return{icon:Kr.circle,color:y.secondaryText};default:return{icon:Kr.circle,color:y.secondaryText}}})(l),H=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 Eo.createElement(x,{flexDirection:"column",height:"100%"},Eo.createElement(x,{flexDirection:"column",borderStyle:"single",borderColor:"white"},Eo.createElement(x,{padding:1},Eo.createElement(C,{bold:!0,color:y.claude},e.name," MCP Server")),Eo.createElement(x,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},Eo.createElement(x,null,Eo.createElement(C,null,"Status: "),Eo.createElement(C,{color:O.color},O.icon," ",l)),t?.command&&Eo.createElement(x,null,Eo.createElement(C,null,"Command: "),Eo.createElement(C,{color:y.text},t.command)),t?.args&&Eo.createElement(x,null,Eo.createElement(C,null,"Args: "),Eo.createElement(C,{color:y.text},Array.isArray(t.args)?t.args.join(" "):t.args)),t?.url&&Eo.createElement(x,null,Eo.createElement(C,null,"URL: "),Eo.createElement(C,{color:y.text},t.url)),t&&Eo.createElement(x,null,Eo.createElement(C,null,"Config location: "),Eo.createElement(C,{color:y.secondaryText},t.configPath||"Unknown")),l==="connected"&&Eo.createElement(Eo.Fragment,null,Eo.createElement(x,null,Eo.createElement(C,null,"Capabilities: tools")),Eo.createElement(x,null,Eo.createElement(C,null,"Tools: ",d.length," tools")))),Eo.createElement(x,{flexDirection:"column",paddingX:1,marginBottom:1},h?Eo.createElement(x,{flexDirection:"row"},Eo.createElement(zM,null),Eo.createElement(C,{color:y.claude},"Reconnecting...")):H.map((z,P)=>{let $=P===a;return Eo.createElement(x,{key:P},Eo.createElement(C,{color:$?y.claude:y.text},$?Kr.pointer:" "),Eo.createElement(C,{color:$?y.claude:y.text,bold:$},P+1,". ",z.label))})),Eo.createElement(x,{padding:1},Eo.createElement(C,{color:y.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back"))),l==="oauth"&&p&&Eo.createElement(x,{flexDirection:"column",paddingX:1},Eo.createElement(C,null,"Open in browser:"),Eo.createElement(C,{wrap:"wrap",color:y.link||"blue"},p)))}var Wc=F(ne(),1),NI=F(ne(),1);function lvr({serverName:e,onBack:t,onToolSelect:r}){let[n,o]=(0,NI.useState)(0),[i,s]=(0,NI.useState)([]),[a,c]=(0,NI.useState)({}),[l,u]=(0,NI.useState)(0),d=X(),f=15;(0,NI.useEffect)(()=>{if(i.length>0){let E={};for(let y=0;y<i.length;y++)E[y]=i[y].isReadOnly?.()?"read-only":"read-write";c(E)}},[i]),(0,NI.useEffect)(()=>{e&&(async()=>{try{let y=await dye(e.name);s(y)}catch{s([])}})()},[e]),Tt((E,y)=>{if(y.return){if(i.length>0){let b=i[n];r(b)}return}if(y.upArrow){let b=Math.max(0,n-1);o(b),b<l&&u(b);return}if(y.downArrow){let b=Math.min(i.length-1,n+1);o(b),b>=l+f&&u(b-f+1);return}}),(0,NI.useEffect)(()=>{u(0),o(0)},[i]);let p=E=>{let y=E.name.match(/^mcp_[^_]+_(.+)$/);return y?y[1]:E.name},A=i.slice(l,l+f),h=i.length>f;return Wc.createElement(x,{flexDirection:"column",height:"100%",borderStyle:"single",borderColor:"white"},Wc.createElement(x,{padding:1},Wc.createElement(C,{bold:!0,color:d.claude},"Tools for ",e.name," (",i.length," tools)")),Wc.createElement(x,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},i.length===0?Wc.createElement(C,{color:d.secondaryText},"No tools available for this server"):Wc.createElement(Wc.Fragment,null,h&&l>0&&Wc.createElement(x,null,Wc.createElement(C,{color:d.secondaryText},"\u2191 More tools above")),Wc.createElement(x,{flexDirection:"column",flexGrow:1},A.map((E,y)=>{let b=l+y,I=b===n,w=p(E),O=a[b]||"read-write";return Wc.createElement(x,{key:E.name},Wc.createElement(C,{color:I?d.claude:d.text},I?Kr.pointer:" "),Wc.createElement(C,{color:d.secondaryText},b+1,"."),Wc.createElement(C,{color:I?d.claude:d.text,bold:I},w),Wc.createElement(C,null," "),Wc.createElement(C,{color:d.secondaryText},O))})),h&&l+f<i.length&&Wc.createElement(x,null,Wc.createElement(C,{color:d.secondaryText},"\u2193 More tools below")))),Wc.createElement(x,{padding:1},Wc.createElement(C,{color:d.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back")))}var ru=F(ne(),1);function uvr({tool:e,serverName:t,onBack:r}){let[n,o]=(0,ru.useState)(""),[i,s]=(0,ru.useState)(!0),[a,c]=(0,ru.useState)(0),[l,u]=(0,ru.useState)(20),d=(0,ru.useRef)(null),f=X(),{stdout:p}=fF();(0,ru.useEffect)(()=>{(async()=>{if(e?.description)try{let P=await e.description();o(P||"")}catch{o("")}else o("");s(!1)})()},[e]),(0,ru.useEffect)(()=>{p?.rows&&u(Math.max(10,p.rows-8))},[p]);let A=z=>{let P=z.name.match(/^mcp__[^_]+__(.+)$/);return P?P[1]:z.name},h=()=>i?"loading...":n&&n.toLowerCase().includes("read")&&n.toLowerCase().includes("only")?"read-only":"read-write",E=A(e),y=h(),I=(()=>{let z=[];return n&&(z.push("Description:"),z.push(...n.split(`
|
|
1681
1681
|
`).map(P=>P.trim())),z.push("")),e.inputSchema&&(z.push("Parameters:"),e.inputSchema.properties?z.push(...(e.inputSchema+"").split(`
|
|
1682
1682
|
`).map(P=>P.trim())):z.push("No parameters required")),z})(),w=l-6;Tt((z,P)=>{if(P.escape){r();return}if(P.upArrow){c($=>Math.max(0,$-1));return}if(P.downArrow){let $=I.length/w,q=a+1;q>$&&q--,c(q);return}});let O=I.slice(a*w,(a+1)*w),B=a>0,H=(a+1)*w<I.length;return ru.default.createElement(x,{flexDirection:"column",borderStyle:"single",borderColor:"white",height:l},ru.default.createElement(x,{paddingX:1},ru.default.createElement(C,{bold:!0,color:f.claude},E," (",t.name,") [",y,"]")),i&&ru.default.createElement(x,{paddingX:1},ru.default.createElement(C,{color:f.secondaryText},"Loading tool details...")),ru.default.createElement(x,{flexDirection:"column",paddingX:1,flexGrow:1,height:l-3,ref:d},O.map((z,P)=>ru.default.createElement(C,{key:P,color:f.text},z))),ru.default.createElement(x,{paddingX:1},ru.default.createElement(C,{color:f.secondaryText,wrap:"truncate"},B&&"\u2191"," ",H&&"\u2193"," to scroll (Esc back)")))}Gs();function dvr({onClose:e,context:t}){let[r,n]=(0,Dk.useState)("list"),[o,i]=(0,Dk.useState)(""),[s,a]=(0,Dk.useState)(null),[c,l]=(0,Dk.useState)([]),u=X(),d=25;sa(()=>{e(-1)}),(0,Dk.useEffect)(()=>{(async()=>{let b=await Gn.getClients();l(b.filter(I=>I.name!=="___ide_").map(I=>({name:I.name,status:I.type})))})()},[]);let f=b=>{X2t(b),Gn.reloadClients().then(I=>{l(I.filter(w=>w.name!=="___ide_").map(w=>({name:w.name,status:w.type}))),n("list"),Dt.emit("repl:reloadtools")})},p=async(b,I,w)=>{if((I==="oauth"?await Gn.reconnect(b,!0,w):await Gn.reconnect(b)).type==="connected"){let B=await Gn.getClients();l(B.filter(H=>H.name!=="___ide_").map(H=>({name:H.name,status:H.type}))),n("list"),Dt.emit("repl:reloadtools")}},A=b=>{i(b),n("details")},h=b=>{i(b),n("tools")},E=b=>{a(b),n("tool-details")};Tt((b,I)=>{I.escape&&(r==="list"?e(-1):y())});let y=()=>{r==="details"?n("list"):r==="tools"?n("details"):r==="tool-details"&&n("tools")};return r==="list"?ST.createElement(x,{flexDirection:"column",height:d},ST.createElement(Olr,{servers:c,onServerSelect:A,onViewTools:h,onClose:e})):r==="details"?ST.createElement(x,{flexDirection:"column",height:d},ST.createElement(cvr,{serverName:o,serverConfig:Gn.getMcpServer(o),onBack:y,onServerDisable:f,onServerReconnect:p,onViewTools:()=>h(o),context:t})):r==="tools"?ST.createElement(x,{flexDirection:"column",height:d},ST.createElement(lvr,{serverName:o,onBack:y,onToolSelect:E})):r==="tool-details"?ST.createElement(x,{flexDirection:"column",height:d},ST.createElement(uvr,{tool:s,serverName:o,onBack:y})):ST.createElement(C,null,"Unknown view: ",r)}var fvr=F(ne(),1),B2o={type:"local-jsx",name:"mcp",description:()=>"Manage MCP servers",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e,t){return fvr.default.createElement(dvr,{onClose:e,context:t})},userFacingName(){return"mcp"}},pvr=B2o;var Nvr=F(ne(),1);var $n=F(ne(),1);DI();DR();Kw();km();P3();var OR=[{key:"installable",label:"Available"},{key:"installed",label:"Installed"},{key:"marketplaces",label:"Marketplaces"}];function jJe({onDone:e}){sa(()=>{e?.()});let[t,r]=(0,$n.useState)("installable"),[n,o]=(0,$n.useState)("list"),[i,s]=(0,$n.useState)(0),[a,c]=(0,$n.useState)(null),[l,u]=(0,$n.useState)("update"),[d,f]=(0,$n.useState)(""),[p,A]=(0,$n.useState)(""),[h,E]=(0,$n.useState)([]),[y,b]=(0,$n.useState)([]),[I,w]=(0,$n.useState)([]),O=()=>{let ue=Ru.list();E(ue);let re=op.list();b(re);let me=[];for(let Te of ue)try{let be=Ru.readMarketplaceManifest(Te.localPath);for(let Ee of be.plugins){let W=`${Ee.name}@${Te.name}`;re.some(Oe=>Oe.plugin===Ee.name&&Oe.marketplace===Te.name)||me.push({plugin:Ee,marketplaceName:Te.name,marketplaceDir:Te.localPath})}}catch{}w(me)};(0,$n.useEffect)(()=>{O()},[]);let B=(()=>{switch(t){case"installable":return I;case"installed":return y;case"marketplaces":return[{type:"add-marketplace"},...h]}})(),H=()=>{cd.refresh(),Gn.clear(),k3()},z=async ue=>{A(`Installing ${ue.plugin.name}@${ue.marketplaceName}...`);let re=await op.install(`${ue.plugin.name}@${ue.marketplaceName}`);re.success?(A(`Installed ${re.id}`),H(),O(),o("list")):A(`Error: ${re.error}`)},P=async ue=>{A(`Uninstalling ${ue.id}...`);let re=op.uninstall(ue.id);re.success?(A(`Uninstalled ${ue.id}`),H(),O(),o("list")):A(`Error: ${re.error}`)},$=async()=>{if(!d.trim())return;A(`Adding marketplace ${d}...`);let ue=await Ru.add(d.trim());ue.success?(A(`Added marketplace ${ue.name}`),H(),O(),o("list"),f("")):A(`Error: ${ue.error}`)},q=async ue=>{A(`Removing marketplace ${ue.name}...`);let re=Ru.remove(ue.name);re.success?(A(`Removed marketplace ${ue.name}`),H(),O(),o("list")):A(`Error: ${re.error}`)},pe=async ue=>{A(`Updating marketplace ${ue.name}...`);let re=await Ru.update(ue.name);re.success?(re.updated.length>0?A(`Updated marketplace ${ue.name}`):re.errors.length>0?A(`Error: ${re.errors.join("; ")}`):A(`Marketplace ${ue.name} is up to date`),H(),O(),o("list")):A(`Error: ${re.errors.join("; ")}`)};Tt((ue,re)=>{if(!(re.ctrl&&ue==="c")){if(n==="addMarketplace"){if(re.escape||re.return){re.return?$():(o("list"),f(""));return}if(re.backspace||re.delete){f(me=>me.slice(0,-1));return}ue&&f(me=>me+ue);return}if(n==="detail"){(re.escape||re.backspace)&&(o("list"),A("")),re.return&&(a&&"plugin"in a&&"marketplaceName"in a?z(a):a&&"id"in a?P(a):a&&"source"in a&&(l==="update"?pe(a):q(a))),a&&"source"in a&&(re.leftArrow||re.rightArrow)&&u(me=>me==="update"?"remove":"update");return}if(re.leftArrow){let Te=(OR.findIndex(be=>be.key===t)-1+OR.length)%OR.length;r(OR[Te].key),s(0),A("");return}if(re.rightArrow){let Te=(OR.findIndex(be=>be.key===t)+1)%OR.length;r(OR[Te].key),s(0),A("");return}if(re.upArrow){s(me=>me>0?me-1:B.length-1);return}if(re.downArrow){s(me=>me<B.length-1?me+1:0);return}if(re.return){let me=B[i];if(!me)return;"type"in me&&me.type==="add-marketplace"?(o("addMarketplace"),f(""),A("")):(c(me),"source"in me&&u("update"),o("detail"),A(""));return}re.escape&&e?.()}});let se=()=>$n.default.createElement(x,{flexDirection:"row",gap:2,marginBottom:1},OR.map((ue,re)=>{let me=ue.key===t;return $n.default.createElement($n.default.Fragment,{key:re},$n.default.createElement(C,{bold:me,color:me?"green":"gray"},me?`[ ${ue.label} ]`:` ${ue.label} `))})),U=()=>$n.default.createElement(x,{flexDirection:"column",minHeight:10},B.length===0?$n.default.createElement(C,{color:"gray"},"No items. Use \u2190 \u2192 to switch tabs, Esc to exit, Enter to select."):B.map((ue,re)=>{let me=re===i,Te="";if("type"in ue&&ue.type==="add-marketplace")Te="+ Add Marketplace...";else if("plugin"in ue&&"marketplaceName"in ue){let be=ue;Te=`${be.plugin.name}@${be.marketplaceName}`}else if("id"in ue)Te=ue.id;else if("source"in ue){let be=ue;Te=`${be.name} (${be.type}) - ${be.source}`}return $n.default.createElement($n.default.Fragment,{key:re},$n.default.createElement(C,{bold:me,color:me?"cyan":void 0},me?`> ${Te}`:` ${Te}`))})),he=()=>{if(!a)return null;let ue="",re="",me="",Te=()=>{};if("type"in a&&a.type==="add-marketplace")return null;let be="source"in a;if("plugin"in a&&"marketplaceName"in a){let Ee=a;ue=`${Ee.plugin.name}@${Ee.marketplaceName}`,re=Ee.plugin.description??"",me="Install (Enter)",Te=()=>void z(Ee)}else if("id"in a){let Ee=a;ue=Ee.id,re=Ee.manifest.description??"",me=`Uninstall (Enter) - ${Ee.enabled?"Enabled":"Disabled"}`,Te=()=>void P(Ee)}else if(be){let Ee=a;ue=Ee.name,re=`source: ${Ee.source}
|
|
1683
1683
|
type: ${Ee.type}
|
package/hands.js
CHANGED
|
@@ -750,7 +750,7 @@ data: ${JSON.stringify(z)}
|
|
|
750
750
|
`);a=P.pop()||"";for(let z of P){let V=z.trim();if(!(!V||V==="data: [DONE]"))if(V.startsWith("data: ")){let Q=V.slice(6);try{let G=JSON.parse(Q);w(G)}catch(G){this.logger&&this.logger.error({err:G,line:V},"Failed to parse Gemini SSE chunk")}}else try{let Q=JSON.parse(V);w(Q)}catch{}}};(async()=>{try{for(;;){let{value:P,done:z}=await s.read();if(z)break;a+=n.decode(P,{stream:!0}),O()}I()}catch(P){o.error(P)}})()}})}convertGeminiResponseToAnthropic(t){this.logger&&this.logger.debug({response:t},"Original Gemini response");try{if(!t.candidates||!t.candidates[0])throw new Error("No candidates found in Gemini response");let r=t.candidates[0],n=[];r.content&&r.content.parts&&r.content.parts.forEach(o=>{if(o.text&&n.push({type:"text",text:o.text}),o.functionCall){let s=`toolu_${vB()}`,a=o.functionCall.thoughtSignature||o.functionCall.thought_signature||null;n.push({type:"tool_use",id:s,name:o.functionCall.name,input:o.functionCall.args||{},thought_signature:a})}}),r.groundingMetadata&&(this.logger&&this.logger.debug({groundingMetadata:r.groundingMetadata},"Processing grounding metadata"),r.groundingMetadata.webSearchQueries&&n.push({type:"text",text:`
|
|
751
751
|
|
|
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 $4r(`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"}}},vye=new Tye;var $pt=ee(Upt(),1);Ar();us();function Ng(e){return e?typeof e.entries=="function"?Object.fromEntries(e.entries()):{...e}:{}}function Hpt(e){let t=String(e?.["x-thinking-level"]??"medium").toLowerCase();return["off","low","medium","high"].includes(t)?t:"medium"}function nXr(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t}}function iXr(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t,summary:"auto"}}function oXr(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 h5(e,t,r){nz(t,e),iz(t,oXr(e,r),r)}function m2(e){let t=[],r=e.getReader(),n,i=new Promise(l=>n=l),o=!1,s=()=>{o||(o=!0,n(Buffer.concat(t).toString("utf8")))};return{stream:new ReadableStream({async pull(l){try{let{done:c,value:u}=await r.read();if(c){l.close(),s();return}t.push(u),l.enqueue(u)}catch(c){l.error(c),s()}},cancel(l){r.cancel(l).catch(()=>{}),s()}}),done:i}}function E5(e){let t=new Headers(e);return t.delete("content-encoding"),t.delete("content-length"),t.delete("transfer-encoding"),t}function eIe(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 qpt=["/v1/messages"];function tIe(e){let t;try{typeof e=="string"?t=new lv(e):e instanceof lv?t=e:t=new lv(e.url)}catch{return""}let r=t.pathname;for(let n of qpt){let i=r.indexOf(n);if(i!==-1)return t.origin+r.slice(0,i)}return t.origin}function AZ(e,t){let r=typeof e=="string"?e:e instanceof lv?e.toString():e.url,n;try{n=new lv(r).pathname}catch{return!1}return qpt.some(i=>n.includes(i))&&(t.method==="POST"||t.method==="post")}function sXr(e){return async(t,r)=>{if(!AZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await hK.transformRequestOut(n),o=tIe(t)+"/chat/completions",s=Ng(r.headers),a=s.authorization??s.Authorization??"";nXr(i,Hpt(s));let l=await e(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a},body:JSON.stringify(i),signal:r.signal});if(!l.ok){let _=await l.text();return X(`OpenAI Chat Completions API error: ${l.status}`,{url:o,errorResponse:_}),eIe("OpenAI Chat Completions API error","OPENROUTER",l.status,l.statusText,_)}let c=n.stream===!0,u=s["x-agent-id"],f={request:{url:o,method:r.method,headers:s,body:n},response:{status:l.status,statusText:l.statusText,headers:Ng(l.headers)},openai:{request:{body:i},response:{}}};if(!c){let _=await l.text(),C=new Response(_,{status:l.status,statusText:l.statusText,headers:E5(l.headers)}),S=await hK.transformResponseIn(C,n),I=await S.text();try{h5({...f,openai:{...f.openai,response:{body:JSON.parse(_)}},response:{...f.response,body:JSON.parse(I)}},u)}catch(w){X("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u975E\u6D41\u5F0F):",w)}return new Response(I,{status:S.status,statusText:S.statusText,headers:S.headers})}let g=m2(l.body),m=new Response(g.stream,{status:l.status,statusText:l.statusText,headers:E5(l.headers)}),A=await hK.transformResponseIn(m,n),E=m2(A.body);return Promise.all([g.done,E.done]).then(async([_,C])=>{try{h5({...f,openai:{...f.openai,response:{body:await Ait(_)}},response:{...f.response,body:await cU(C)}},u)}catch(S){X("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u6D41\u5F0F):"+S?.stack)}}).catch(_=>X("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Chat):"+_)),new Response(E.stream,{status:A.status,statusText:A.statusText,headers:A.headers})}}function aXr(e){return async(t,r)=>{if(!AZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await EK.transformRequestOut(n),o=Ng(r.headers);iXr(i,Hpt(o));let s=JSON.stringify(i),l=tIe(t)+"/responses",c=o.authorization??o.Authorization??"";if(!c)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 u=await e(l,{method:"POST",headers:{"Content-Type":"application/json",Authorization:c,"x-api-key":c.replace(/^Bearer\s+/i,"").trim()},body:s,signal:r.signal});if(!u.ok){let S=await u.text();return X(`OpenAI Responses API error: ${u.status} ${u.statusText}`,{url:l,status:u.status,errorResponse:S}),eIe("OpenAI Responses API error","RESPONSES",u.status,u.statusText,S)}let f=n.stream===!0,g=o["x-agent-id"],m={request:{url:l,method:r.method,headers:o,body:n},response:{status:u.status,statusText:u.statusText,headers:Ng(u.headers)},openai:{request:{body:i},response:{}}};if(!f){let S=await u.text(),I=new Response(S,{status:u.status,statusText:u.statusText,headers:E5(u.headers)}),w=await EK.transformResponseIn(I,n),O=await w.text();try{h5({...m,openai:{...m.openai,response:{body:JSON.parse(S)}},response:{...m.response,body:JSON.parse(O)}},g,"responses")}catch(P){X("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u975E\u6D41\u5F0F):",P)}return new Response(O,{status:w.status,statusText:w.statusText,headers:w.headers})}let A=m2(u.body),E=new Response(A.stream,{status:u.status,statusText:u.statusText,headers:E5(u.headers)}),_=await EK.transformResponseIn(E,n),C=m2(_.body);return Promise.all([A.done,C.done]).then(async([S,I])=>{try{h5({...m,openai:{...m.openai,response:{body:await git(S)}},response:{...m.response,body:await cU(I)}},g,"responses")}catch(w){X("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u6D41\u5F0F):"+w?.stack)}}).catch(S=>X("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Responses):"+S)),new Response(C.stream,{status:_.status,statusText:_.statusText,headers:_.headers})}}function lXr(e){return async(t,r)=>{if(!AZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=Ng(r.headers),o=await vye.transformRequestOut(n),s=JSON.stringify(o),a=tIe(t)+`/models/${n.model}:streamGenerateContent?alt=sse`,l=i.authorization??i.Authorization??"",c;try{c=await e(a,{method:"POST",headers:{"Content-Type":"application/json","x-goog-api-key":String(l).replace(/^Bearer\s+/i,"").trim()},body:s,signal:r.signal})}catch(C){throw X("gemini request error:",C),C}if(!c.ok){let C=await c.text();return X(`Gemini API error response: ${c.status} ${c.statusText}`,{url:a,status:c.status,errorResponse:C}),eIe("Gemini API error","Gemini",c.status,c.statusText,C)}let u=n.stream===!0,f=i["x-agent-id"],g={request:{url:a,method:r.method,headers:Ng(r.headers),body:n},response:{status:c.status,statusText:c.statusText,headers:Ng(c.headers)},openai:{request:{body:o},response:{}}},m=m2(c.body),A=new Response(m.stream,{status:c.status,statusText:c.statusText,headers:E5(c.headers)}),E=await vye.transformResponseIn(A),_=m2(E.body);return Promise.all([m.done,_.done]).then(async([C,S])=>{try{let I=u?hit(C):JSON.parse(C),w=u?await cU(S):JSON.parse(S);h5({...g,openai:{...g.openai,response:{body:I}},response:{...g.response,body:w}},f)}catch(I){X("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Gemini):"+I?.stack)}}).catch(C=>X("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Gemini):"+C)),new Response(_.stream,{status:E.status,statusText:E.statusText,headers:E.headers})}}function cXr(e){return async(t,r)=>{if(!AZ(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=Ng(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,signal:r.signal});if(!a.ok){let f=await a.text();X(`API error response: ${a.status} ${a.statusText}`,{url:typeof t=="string"?t:t instanceof lv?t.toString():t.url,status:a.status,errorResponse:f});let g;try{let m=JSON.parse(f);g={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&&(g.error.details=m.error.details)}catch{g={type:"error",error:{type:"api_error",message:`API error: ${a.statusText}`,code:`API_${a.status}_ERROR`}}}return new Response(JSON.stringify(g),{status:a.status,statusText:a.statusText,headers:{"Content-Type":"application/json"}})}let l=a.clone(),c=!(Object.hasOwn(JSON.parse(n),"stream")&&!JSON.parse(n).stream),u={request:{url:typeof t=="string"?t:t instanceof lv?t.toString():t.url,method:r.method,headers:Ng(r.headers),body:JSON.parse(n)},response:{status:a.status,statusText:a.statusText,headers:Ng(a.headers)}};return(async()=>{if(c){let m=await a.text();u.response.body=await cU(m)}else u.response.body=await a.json();let g=Ng(r.headers)["x-agent-id"];nz(g,u),iz(g,{request:u.request.body.messages,response:u.response.body.content})})().catch(f=>X(`\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF:
|
|
753
|
-
Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var gZ=null,XSe=!1;function uXr(){gZ=null,XSe=!1}dr.on("proxy:changed",uXr);function dXr(){if(XSe)return gZ;if(XSe=!0,At().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(gZ=new $pt.ProxyAgent({uri:e}),zt(`[proxy] using proxy: ${e}`)),gZ}function fXr(){let e=dXr();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function hZ(e){let t=e||process.env.API_TYPE,r=fXr();switch(t){case"openai":return sXr(r);case"openai-responses":return aXr(r);case"gemini":return lXr(r);default:return cXr(r)}}ih();var AXr=ee(_e(),1);function Gpt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=pXr(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function pXr(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||mXr(t)?0:gXr(t)?2:1}function mXr(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function gXr(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 K0(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 BC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}Le();us();var ac={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function EZ(e,t){ac.totalCost+=e,ac.totalAPIDuration+=t}function _Z(e,t){ac.inputTokens+=e,ac.outputTokens+=t,dr.emit("token:change",{inputTokens:ac.inputTokens,outputTokens:ac.outputTokens})}function yZ(e,t){ac.cacheCreationTokens+=e,ac.cacheReadTokens+=t}function rIe(){return{inputTokens:ac.inputTokens,outputTokens:ac.outputTokens,cacheCreationTokens:ac.cacheCreationTokens,cacheReadTokens:ac.cacheReadTokens}}function zpt(){return ac.totalCost}function Ypt(){return Date.now()-ac.startTime}function jpt(){return ac.totalAPIDuration}function Vpt(e){ac.currentContextTokens=e}function Wpt(){return ac.currentContextTokens}Le();Ue();Ue();var nIe="2.1.
|
|
753
|
+
Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var gZ=null,XSe=!1;function uXr(){gZ=null,XSe=!1}dr.on("proxy:changed",uXr);function dXr(){if(XSe)return gZ;if(XSe=!0,At().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(gZ=new $pt.ProxyAgent({uri:e}),zt(`[proxy] using proxy: ${e}`)),gZ}function fXr(){let e=dXr();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function hZ(e){let t=e||process.env.API_TYPE,r=fXr();switch(t){case"openai":return sXr(r);case"openai-responses":return aXr(r);case"gemini":return lXr(r);default:return cXr(r)}}ih();var AXr=ee(_e(),1);function Gpt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=pXr(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function pXr(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||mXr(t)?0:gXr(t)?2:1}function mXr(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function gXr(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 K0(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 BC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}Le();us();var ac={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function EZ(e,t){ac.totalCost+=e,ac.totalAPIDuration+=t}function _Z(e,t){ac.inputTokens+=e,ac.outputTokens+=t,dr.emit("token:change",{inputTokens:ac.inputTokens,outputTokens:ac.outputTokens})}function yZ(e,t){ac.cacheCreationTokens+=e,ac.cacheReadTokens+=t}function rIe(){return{inputTokens:ac.inputTokens,outputTokens:ac.outputTokens,cacheCreationTokens:ac.cacheCreationTokens,cacheReadTokens:ac.cacheReadTokens}}function zpt(){return ac.totalCost}function Ypt(){return Date.now()-ac.startTime}function jpt(){return ac.totalAPIDuration}function Vpt(e){ac.currentContextTokens=e}function Wpt(){return ac.currentContextTokens}Le();Ue();Ue();var nIe="2.1.2";globalThis.MACRO={VERSION:nIe,PACKAGE_URL:`@dahawa/${Zi}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var bZ=process.env.HAWA_CODE_USER_AGENT||`${Zi}/${nIe} (${process.env.USER_TYPE})`;import{randomUUID as ry}from"crypto";us();Le();er();vr();Le();Ue();import{existsSync as e_,readdirSync as Lrn,statSync as Frn}from"fs";import{join as MC,relative as Urn}from"path";import{homedir as yAt}from"os";import{platform as Hrn}from"process";import{readFile as QC}from"fs/promises";vr();J0();Ar();import{join as bXr,sep as CXr}from"path";function lm(){if(!am())return!1;try{let e=At();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Ff(){return(bXr(ke(),".hcode","team-memory")+CXr).normalize("NFC")}function oIe(e){let t=e.normalize("NFC"),r=Ff();return t.startsWith(r)}var bAt=ee(x5(),1);Li();var AAt=ee(x5(),1);vr();Ue();Le();yu();import{readFile as mAt}from"fs/promises";import{existsSync as CIe,readdirSync as krn,statSync as Mrn}from"fs";import{join as SIe,relative as hAt}from"path";import{homedir as Qrn}from"os";function gAt(e){try{let t=(0,AAt.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 ve(t),{paths:[],content:e.trim()}}}function Prn(e,t){return t.length===0?!0:t.some(r=>{try{return nc(e,r,{matchBase:!0,dot:!0})}catch(n){return ve(n),!1}})}function IIe(e){let t=[];try{if(!CIe(e))return t;let r=krn(e);for(let n of r){let i=SIe(e,n),o=Mrn(i);o.isDirectory()?t.push(...IIe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){ve(r)}return t}async function EAt(){let e=[];try{let t=SIe(Qrn(),Xr,"rules");if(CIe(t)){let r=IIe(t);for(let n of r)try{let i=await mAt(n,"utf-8"),{paths:o,content:s}=gAt(i);o.length>0&&e.push({filePath:n,content:s,paths:o,isProjectRule:!1})}catch(i){ve(i)}}}catch(t){ve(t)}try{let t=SIe(ke(),Xr,"rules");if(CIe(t)){let r=IIe(t);for(let n of r)try{let i=await mAt(n,"utf-8"),{paths:o,content:s}=gAt(i);o.length>0&&e.push({filePath:hAt(ke(),n),content:s,paths:o,isProjectRule:!0})}catch(i){ve(i)}}}catch(t){ve(t)}return e}function _At(e,t){e=eV(e);let r=eV(ke()),n=e.startsWith(r)?hAt(r,e):e;return t.filter(i=>Prn(n,i.paths))}var qrn=`# hawaCodeMd
|
|
754
754
|
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 $rn(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}):
|
|
755
755
|
|
|
756
756
|
${i.content}`}).join(`
|
|
@@ -1122,7 +1122,7 @@ You are powered by the model ${e}.`}async function Pv(){return w5()?`gitStatus:
|
|
|
1122
1122
|
<context name="${c}">${u}</context>`;let s=i.map(c=>{let u=c.prompt({},t),f=JSON.stringify("inputJSONSchema"in c&&c.inputJSONSchema?c.inputJSONSchema:sI(c.inputSchema));return{name:c.name,description:`${u}
|
|
1123
1123
|
|
|
1124
1124
|
Schema:
|
|
1125
|
-
${f}`}}),{messages:a}=t,l=Fsn(o);return Usn(o,l,s,a)}},V0t=Hsn;Og();var Bu=ee(_e(),1),V2=ee(_e(),1);Le();Le();import{existsSync as qsn,readdirSync as $sn,statSync as Gsn}from"fs";import{join as zsn}from"path";function Ysn(){let e=Xi.plan();if(!qsn(e))return[];try{return $sn(e).filter(r=>r.endsWith(".md")).map(r=>{let n=zsn(e,r),i=Gsn(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var W0t=({onSelect:e})=>{let[t,r]=(0,V2.useState)([]),[n,i]=(0,V2.useState)(0),[o,s]=(0,V2.useState)(!1);(0,V2.useEffect)(()=>{let c=Ysn();r(c),s(!0)},[]);let a=[{label:"New plan",value:"__NEW_PLAN__",isNew:!0},...t.map(c=>({label:c.name,value:c.path,isNew:!1,modified:c.modified}))];Tr((c,u)=>{if(u.upArrow)i(f=>f>0?f-1:a.length-1);else if(u.downArrow)i(f=>f<a.length-1?f+1:0);else if(u.return){let f=a[n];f&&e(f.value)}else u.escape&&e("__CANCELLED__")});let l=Me();return o?Bu.createElement(N,{flexDirection:"column",marginY:1},Bu.createElement(N,{marginBottom:1},Bu.createElement(v,{bold:!0,color:l.claude},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),Bu.createElement(N,{marginBottom:1},Bu.createElement(v,{bold:!0,color:l.claude}," Select a plan to continue, or create a new one")),a.map((c,u)=>{let f=u===n;return Bu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Bu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Bu.createElement(v,{color:f?l.claude:l.text}," "),Bu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Bu.createElement(v,{dimColor:!0}," ","(",pge(c.modified),")"))}),Bu.createElement(N,{marginTop:1,marginLeft:2},Bu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Bu.createElement(N,{flexDirection:"column",marginY:1},Bu.createElement(v,null,"Loading plan history..."))};var K0t=ee(_e(),1),jsn={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return vi.isPlanMode()?(e("Already in plan mode."),null):K0t.createElement(W0t,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?vi.setCurrentPlanFilePath(t):vi.generatePlanFilePath(),vi.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},J0t=jsn;Og();var Vsn={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return vi.isAutoMode()?"Already in auto mode.":(vi.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},Z0t=Vsn;vr();import{resolve as Wsn}from"path";var Ksn={type:"local",name:"cd",description:()=>"Move this session to a new working directory",isEnabled:!0,isHidden:!1,argNames:["path"],async call(e){let t=e.trim();if(t==="")throw new Error("Missing directory path. Usage: /cd <path>");let r=ke(),n=Wsn(r,t);sa(n);let i=ke();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},X0t=Ksn;var Rbt=ee(_e(),1);var qn=ee(_e(),1);var wan=ee(_e(),1);var n9=ee(_e(),1),Tan=ee(n_t(),1);var i_t={info:"blue",success:"green",error:"red",warning:"yellow"},uan={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:i_t[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:i_t[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Qr.info),e==="success"&&(t=Qr.tick),e==="error"&&(t=Qr.cross),e==="warning"&&(t=Qr.warning),{icon:t}}},o_t=uan;var dan={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},s_t=dan;var fan={styles:{input:({isFocused:e})=>({dimColor:!e})}},a_t=fan;var pan={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},l_t=pan;var man={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},c_t=man;var gan={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Qr.square,remainingCharacter:Qr.squareLightShade})},u_t=gan;var Aan={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},d_t=Aan;var han={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},f_t=han;var Ean={success:"green",error:"red",warning:"yellow",info:"blue"},_an={success:Qr.tick,error:Qr.cross,warning:Qr.warning,info:Qr.info},yan={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Ean[e]}),message:()=>({})},config:({variant:e})=>({icon:_an[e]})},p_t=yan;var ban={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Qr.line})},m_t=ban;var Can={styles:{value:()=>({})}},g_t=Can;var San={styles:{value:()=>({})}},A_t=San;var Ian={styles:{value:()=>({})}},h_t=Ian;var van={components:{Alert:o_t,Badge:s_t,ConfirmInput:a_t,MultiSelect:l_t,OrderedList:c_t,ProgressBar:u_t,Select:d_t,Spinner:f_t,StatusMessage:p_t,UnorderedList:m_t,TextInput:g_t,EmailInput:A_t,PasswordInput:h_t}},xan=(0,n9.createContext)(van);var go=e=>(0,n9.useContext)(xan).components[e];var Dan=ee(_e(),1);var a_=ee(_e(),1);var K2=ee(_e(),1);var E_t=ee(_e(),1);var i9=Qr.line;var wX=(0,E_t.createContext)({marker:i9});function __t({children:e}){let{marker:t}=(0,K2.useContext)(wX),{styles:r}=go("UnorderedList");return K2.default.createElement(N,{...r.listItem()},K2.default.createElement(v,{...r.marker()},t),K2.default.createElement(N,{...r.content()},e))}var y_t=ee(_e(),1),$Te=(0,y_t.createContext)({depth:0});function Ran({children:e}){let{depth:t}=(0,a_.useContext)($Te),{styles:r,config:n}=go("UnorderedList"),i=(0,a_.useMemo)(()=>({depth:t+1}),[t]),o=(0,a_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??i9}:{marker:i9}},[n,t]);return a_.default.createElement($Te.Provider,{value:i},a_.default.createElement(wX.Provider,{value:o},a_.default.createElement(N,{...r.list()},e)))}Ran.Item=__t;var Ban=ee(_e(),1);var Nan=ee(_e(),1);var o9=ee(_e(),1);var J2=class extends Map{first;constructor(t){let r=[],n,i,o=0;for(let s of t){let a={...s,previous:i,next:void 0,index:o};i&&(i.next=a),n||=a,r.push([s.value,a]),o++,i=a}super(r),this.first=n}};var b_t=ee(_e(),1);var Z2=ee(_e(),1);var s9=ee(_e(),1);function C_t({isFocused:e,isSelected:t,children:r}){let{styles:n}=go("Select");return s9.default.createElement(N,{...n.option({isFocused:e})},e&&s9.default.createElement(v,{...n.focusIndicator()},Qr.pointer),s9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&s9.default.createElement(v,{...n.selectedIndicator()},Qr.tick))}var pm=ee(_e(),1);import{isDeepStrictEqual as Oan}from"node:util";var kan=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let o=Math.min(e.optionMap.size,e.visibleToIndex+1),s=o-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:o}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let o=Math.max(0,e.visibleFromIndex-1),s=o+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:o,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state}},S_t=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new J2(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},I_t=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,pm.useReducer)(kan,{visibleOptionCount:e,defaultValue:r,options:t},S_t),[s,a]=(0,pm.useState)(t);t!==s&&!Oan(t,s)&&(o({type:"reset",state:S_t({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,pm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,pm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,pm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,pm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,pm.useEffect)(()=>{i.value&&i.previousValue!==i.value&&n?.(i.value)},[i.previousValue,i.value,t,n]),{focusedValue:i.focusedValue,visibleFromIndex:i.visibleFromIndex,visibleToIndex:i.visibleToIndex,value:i.value,visibleOptions:f,focusNextOption:l,focusPreviousOption:c,selectFocusedOption:u}};var T_t=({isDisabled:e=!1,state:t})=>{Tr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function X2({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=I_t({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});T_t({isDisabled:e,state:s});let{styles:a}=go("Select");return Z2.default.createElement(N,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=Z2.default.createElement(Z2.default.Fragment,null,l.label.slice(0,u),Z2.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return Z2.default.createElement(C_t,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Man=ee(_e(),1);var v_t=ee(_e(),1);var Pan=ee(_e(),1);var DX=ee(_e(),1);var Qan=ee(_e(),1);var yDi=gr.inverse(" ");var Pg=ee(_e(),1);var eO=ee(_e(),1);var x_t=ee(_e(),1);var RX=(0,x_t.createContext)({marker:Qr.line});function NX({children:e}){let{marker:t}=(0,eO.useContext)(RX),{styles:r}=go("OrderedList");return eO.default.createElement(N,{...r.listItem()},eO.default.createElement(v,{...r.marker()},t),eO.default.createElement(N,{...r.content()},e))}var w_t=ee(_e(),1),GTe=(0,w_t.createContext)({marker:""});function Lg({children:e}){let{marker:t}=(0,Pg.useContext)(GTe),{styles:r}=go("OrderedList"),n=0;for(let o of Pg.default.Children.toArray(e))!(0,Pg.isValidElement)(o)||o.type!==NX||n++;let i=String(n).length;return Pg.default.createElement(N,{...r.list()},Pg.default.Children.map(e,(o,s)=>{if(!(0,Pg.isValidElement)(o)||o.type!==NX)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Pg.default.createElement(GTe.Provider,{value:{marker:l}},Pg.default.createElement(RX.Provider,{value:{marker:l}},o))}))}Lg.Item=NX;var Fan=ee(_e(),1);var zTe=ee(_e(),1);var Lan=ee(_e(),1);var WDi=gr.inverse(" ");var Uan=ee(_e(),1);var Han=ee(_e(),1);var $an=ee(_e(),1);var BX=ee(_e(),1);var qan=ee(_e(),1);var _Ri=gr.inverse(" ");var Gi=ee(_e(),1);var YTe=ee(_e(),1),jTe=ee(_e(),1);R5();us();Li();Dv();Ar();var D_t=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Lv(){let e=[...D_t,...[...D_t].reverse()],{frame:t}=iR({interval:120});return YTe.createElement(N,{flexWrap:"nowrap",height:1,width:2},YTe.createElement(v,{color:Me().claude},e[t%e.length]))}var MX=ee(_e(),1);var kX=null,l_=null,OX=new Set;function WTe(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=spe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function VTe(){l_&&(kX=WTe(l_),OX.forEach(e=>e(kX)))}function Gan(e,t){return l_!==e&&(l_&&l_.off("resize",VTe),l_=e,kX=WTe(e),e.on("resize",VTe)),OX.add(t),()=>{OX.delete(t),OX.size===0&&l_&&(l_.off("resize",VTe),l_=null,kX=null)}}function KTe(){let{stdout:e}=nR(),[t,r]=(0,MX.useState)(()=>WTe(e));return(0,MX.useEffect)(()=>Gan(e,r),[e]),t}function tO(){return KTe()}Ue();import{homedir as g9}from"os";import{join as iO}from"path";import{existsSync as A9,mkdirSync as Ebt,appendFileSync as hbt,readFileSync as _bt,constants as Hun,writeFileSync as qun,unlinkSync as ybt,statSync as $un}from"fs";import{platform as bbt}from"process";Le();import{accessSync as Gun}from"fs";Le();var lBi=ee(hve(),1);var Uun="2.1.1",m9={VERSION:Uun,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"};Ue();var Uv=iO(I0,".update.lock"),zun=300*1e3;function Cbt(){try{if(A9(I0)||Ebt(I0,{recursive:!0}),A9(Uv)){let e=$un(Uv);if(Date.now()-e.mtimeMs<zun)return!1;try{ybt(Uv)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return qun(Uv,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function Sbt(){try{A9(Uv)&&_bt(Uv,"utf8")===`${process.pid}`&&ybt(Uv)}catch(e){ve(`Failed to release lock: ${e}`)}}async function Eve(){try{let e=await si("npm -g config get prefix");if(e.code!==0)return ve("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{Gun(t,Hun.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(ve("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return ve(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function Ibt(e){if(!Cbt())throw ft("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:m9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{A9(e)||Ebt(e,{recursive:!0});let t=await si(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
|
|
1125
|
+
${f}`}}),{messages:a}=t,l=Fsn(o);return Usn(o,l,s,a)}},V0t=Hsn;Og();var Bu=ee(_e(),1),V2=ee(_e(),1);Le();Le();import{existsSync as qsn,readdirSync as $sn,statSync as Gsn}from"fs";import{join as zsn}from"path";function Ysn(){let e=Xi.plan();if(!qsn(e))return[];try{return $sn(e).filter(r=>r.endsWith(".md")).map(r=>{let n=zsn(e,r),i=Gsn(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var W0t=({onSelect:e})=>{let[t,r]=(0,V2.useState)([]),[n,i]=(0,V2.useState)(0),[o,s]=(0,V2.useState)(!1);(0,V2.useEffect)(()=>{let c=Ysn();r(c),s(!0)},[]);let a=[{label:"New plan",value:"__NEW_PLAN__",isNew:!0},...t.map(c=>({label:c.name,value:c.path,isNew:!1,modified:c.modified}))];Tr((c,u)=>{if(u.upArrow)i(f=>f>0?f-1:a.length-1);else if(u.downArrow)i(f=>f<a.length-1?f+1:0);else if(u.return){let f=a[n];f&&e(f.value)}else u.escape&&e("__CANCELLED__")});let l=Me();return o?Bu.createElement(N,{flexDirection:"column",marginY:1},Bu.createElement(N,{marginBottom:1},Bu.createElement(v,{bold:!0,color:l.claude},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),Bu.createElement(N,{marginBottom:1},Bu.createElement(v,{bold:!0,color:l.claude}," Select a plan to continue, or create a new one")),a.map((c,u)=>{let f=u===n;return Bu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Bu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Bu.createElement(v,{color:f?l.claude:l.text}," "),Bu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Bu.createElement(v,{dimColor:!0}," ","(",pge(c.modified),")"))}),Bu.createElement(N,{marginTop:1,marginLeft:2},Bu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Bu.createElement(N,{flexDirection:"column",marginY:1},Bu.createElement(v,null,"Loading plan history..."))};var K0t=ee(_e(),1),jsn={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return vi.isPlanMode()?(e("Already in plan mode."),null):K0t.createElement(W0t,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?vi.setCurrentPlanFilePath(t):vi.generatePlanFilePath(),vi.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},J0t=jsn;Og();var Vsn={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return vi.isAutoMode()?"Already in auto mode.":(vi.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},Z0t=Vsn;vr();import{resolve as Wsn}from"path";var Ksn={type:"local",name:"cd",description:()=>"Move this session to a new working directory",isEnabled:!0,isHidden:!1,argNames:["path"],async call(e){let t=e.trim();if(t==="")throw new Error("Missing directory path. Usage: /cd <path>");let r=ke(),n=Wsn(r,t);sa(n);let i=ke();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},X0t=Ksn;var Rbt=ee(_e(),1);var qn=ee(_e(),1);var wan=ee(_e(),1);var n9=ee(_e(),1),Tan=ee(n_t(),1);var i_t={info:"blue",success:"green",error:"red",warning:"yellow"},uan={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:i_t[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:i_t[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Qr.info),e==="success"&&(t=Qr.tick),e==="error"&&(t=Qr.cross),e==="warning"&&(t=Qr.warning),{icon:t}}},o_t=uan;var dan={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},s_t=dan;var fan={styles:{input:({isFocused:e})=>({dimColor:!e})}},a_t=fan;var pan={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},l_t=pan;var man={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},c_t=man;var gan={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Qr.square,remainingCharacter:Qr.squareLightShade})},u_t=gan;var Aan={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},d_t=Aan;var han={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},f_t=han;var Ean={success:"green",error:"red",warning:"yellow",info:"blue"},_an={success:Qr.tick,error:Qr.cross,warning:Qr.warning,info:Qr.info},yan={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Ean[e]}),message:()=>({})},config:({variant:e})=>({icon:_an[e]})},p_t=yan;var ban={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Qr.line})},m_t=ban;var Can={styles:{value:()=>({})}},g_t=Can;var San={styles:{value:()=>({})}},A_t=San;var Ian={styles:{value:()=>({})}},h_t=Ian;var van={components:{Alert:o_t,Badge:s_t,ConfirmInput:a_t,MultiSelect:l_t,OrderedList:c_t,ProgressBar:u_t,Select:d_t,Spinner:f_t,StatusMessage:p_t,UnorderedList:m_t,TextInput:g_t,EmailInput:A_t,PasswordInput:h_t}},xan=(0,n9.createContext)(van);var go=e=>(0,n9.useContext)(xan).components[e];var Dan=ee(_e(),1);var a_=ee(_e(),1);var K2=ee(_e(),1);var E_t=ee(_e(),1);var i9=Qr.line;var wX=(0,E_t.createContext)({marker:i9});function __t({children:e}){let{marker:t}=(0,K2.useContext)(wX),{styles:r}=go("UnorderedList");return K2.default.createElement(N,{...r.listItem()},K2.default.createElement(v,{...r.marker()},t),K2.default.createElement(N,{...r.content()},e))}var y_t=ee(_e(),1),$Te=(0,y_t.createContext)({depth:0});function Ran({children:e}){let{depth:t}=(0,a_.useContext)($Te),{styles:r,config:n}=go("UnorderedList"),i=(0,a_.useMemo)(()=>({depth:t+1}),[t]),o=(0,a_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??i9}:{marker:i9}},[n,t]);return a_.default.createElement($Te.Provider,{value:i},a_.default.createElement(wX.Provider,{value:o},a_.default.createElement(N,{...r.list()},e)))}Ran.Item=__t;var Ban=ee(_e(),1);var Nan=ee(_e(),1);var o9=ee(_e(),1);var J2=class extends Map{first;constructor(t){let r=[],n,i,o=0;for(let s of t){let a={...s,previous:i,next:void 0,index:o};i&&(i.next=a),n||=a,r.push([s.value,a]),o++,i=a}super(r),this.first=n}};var b_t=ee(_e(),1);var Z2=ee(_e(),1);var s9=ee(_e(),1);function C_t({isFocused:e,isSelected:t,children:r}){let{styles:n}=go("Select");return s9.default.createElement(N,{...n.option({isFocused:e})},e&&s9.default.createElement(v,{...n.focusIndicator()},Qr.pointer),s9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&s9.default.createElement(v,{...n.selectedIndicator()},Qr.tick))}var pm=ee(_e(),1);import{isDeepStrictEqual as Oan}from"node:util";var kan=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let o=Math.min(e.optionMap.size,e.visibleToIndex+1),s=o-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:o}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let o=Math.max(0,e.visibleFromIndex-1),s=o+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:o,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state}},S_t=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new J2(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},I_t=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,pm.useReducer)(kan,{visibleOptionCount:e,defaultValue:r,options:t},S_t),[s,a]=(0,pm.useState)(t);t!==s&&!Oan(t,s)&&(o({type:"reset",state:S_t({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,pm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,pm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,pm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,pm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,pm.useEffect)(()=>{i.value&&i.previousValue!==i.value&&n?.(i.value)},[i.previousValue,i.value,t,n]),{focusedValue:i.focusedValue,visibleFromIndex:i.visibleFromIndex,visibleToIndex:i.visibleToIndex,value:i.value,visibleOptions:f,focusNextOption:l,focusPreviousOption:c,selectFocusedOption:u}};var T_t=({isDisabled:e=!1,state:t})=>{Tr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function X2({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=I_t({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});T_t({isDisabled:e,state:s});let{styles:a}=go("Select");return Z2.default.createElement(N,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=Z2.default.createElement(Z2.default.Fragment,null,l.label.slice(0,u),Z2.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return Z2.default.createElement(C_t,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Man=ee(_e(),1);var v_t=ee(_e(),1);var Pan=ee(_e(),1);var DX=ee(_e(),1);var Qan=ee(_e(),1);var yDi=gr.inverse(" ");var Pg=ee(_e(),1);var eO=ee(_e(),1);var x_t=ee(_e(),1);var RX=(0,x_t.createContext)({marker:Qr.line});function NX({children:e}){let{marker:t}=(0,eO.useContext)(RX),{styles:r}=go("OrderedList");return eO.default.createElement(N,{...r.listItem()},eO.default.createElement(v,{...r.marker()},t),eO.default.createElement(N,{...r.content()},e))}var w_t=ee(_e(),1),GTe=(0,w_t.createContext)({marker:""});function Lg({children:e}){let{marker:t}=(0,Pg.useContext)(GTe),{styles:r}=go("OrderedList"),n=0;for(let o of Pg.default.Children.toArray(e))!(0,Pg.isValidElement)(o)||o.type!==NX||n++;let i=String(n).length;return Pg.default.createElement(N,{...r.list()},Pg.default.Children.map(e,(o,s)=>{if(!(0,Pg.isValidElement)(o)||o.type!==NX)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Pg.default.createElement(GTe.Provider,{value:{marker:l}},Pg.default.createElement(RX.Provider,{value:{marker:l}},o))}))}Lg.Item=NX;var Fan=ee(_e(),1);var zTe=ee(_e(),1);var Lan=ee(_e(),1);var WDi=gr.inverse(" ");var Uan=ee(_e(),1);var Han=ee(_e(),1);var $an=ee(_e(),1);var BX=ee(_e(),1);var qan=ee(_e(),1);var _Ri=gr.inverse(" ");var Gi=ee(_e(),1);var YTe=ee(_e(),1),jTe=ee(_e(),1);R5();us();Li();Dv();Ar();var D_t=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Lv(){let e=[...D_t,...[...D_t].reverse()],{frame:t}=iR({interval:120});return YTe.createElement(N,{flexWrap:"nowrap",height:1,width:2},YTe.createElement(v,{color:Me().claude},e[t%e.length]))}var MX=ee(_e(),1);var kX=null,l_=null,OX=new Set;function WTe(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=spe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function VTe(){l_&&(kX=WTe(l_),OX.forEach(e=>e(kX)))}function Gan(e,t){return l_!==e&&(l_&&l_.off("resize",VTe),l_=e,kX=WTe(e),e.on("resize",VTe)),OX.add(t),()=>{OX.delete(t),OX.size===0&&l_&&(l_.off("resize",VTe),l_=null,kX=null)}}function KTe(){let{stdout:e}=nR(),[t,r]=(0,MX.useState)(()=>WTe(e));return(0,MX.useEffect)(()=>Gan(e,r),[e]),t}function tO(){return KTe()}Ue();import{homedir as g9}from"os";import{join as iO}from"path";import{existsSync as A9,mkdirSync as Ebt,appendFileSync as hbt,readFileSync as _bt,constants as Hun,writeFileSync as qun,unlinkSync as ybt,statSync as $un}from"fs";import{platform as bbt}from"process";Le();import{accessSync as Gun}from"fs";Le();var lBi=ee(hve(),1);var Uun="2.1.2",m9={VERSION:Uun,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"};Ue();var Uv=iO(I0,".update.lock"),zun=300*1e3;function Cbt(){try{if(A9(I0)||Ebt(I0,{recursive:!0}),A9(Uv)){let e=$un(Uv);if(Date.now()-e.mtimeMs<zun)return!1;try{ybt(Uv)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return qun(Uv,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function Sbt(){try{A9(Uv)&&_bt(Uv,"utf8")===`${process.pid}`&&ybt(Uv)}catch(e){ve(`Failed to release lock: ${e}`)}}async function Eve(){try{let e=await si("npm -g config get prefix");if(e.code!==0)return ve("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{Gun(t,Hun.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(ve("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return ve(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function Ibt(e){if(!Cbt())throw ft("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:m9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{A9(e)||Ebt(e,{recursive:!0});let t=await si(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
|
|
1126
1126
|
# npm global path
|
|
1127
1127
|
export PATH="${e}/bin:$PATH"
|
|
1128
1128
|
`;if(bbt==="win32"){let n=await si(`setx PATH "${process.env.PATH};${e}"`);if(n.code!==0)throw new Error(`Failed to update PATH on Windows: ${n.stderr}`)}else{let n=[iO(g9(),".bashrc"),iO(g9(),".bash_profile"),iO(g9(),".zshrc"),iO(g9(),".config","fish","config.fish")];for(let i of n)if(A9(i))try{if(!_bt(i,"utf8").includes(e)){if(i.includes("fish")){let s=`
|
|
@@ -1533,7 +1533,7 @@ ${o}
|
|
|
1533
1533
|
- For shell tasks, sends SIGTERM first, then SIGKILL if needed
|
|
1534
1534
|
- For agent tasks, marks the task as failed and triggers completion handlers`;r_();uT();HN();var FDn=Pe(()=>k.strictObject({task_id:k.string().describe("The ID of the background task to stop")})),i3={name:BLt,async description(){return OLt},async prompt(){return kLt},isReadOnly(){return!1},isConcurrencySafe(){return!1},get inputSchema(){return FDn()},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 kne.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?kne.createElement(v,{color:"green"},"\xA0\xA0\u23BF \xA0",n):kne.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=jc.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")?Up.stop(r):gl.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 UOe=ee(_e(),1);Gr();er();vr();Ue();var MLt="Cwd",QLt="Returns the current working directory used by the hands MCP server. Useful when the hands process and Hawa Code are running in different directories.",PLt=`- Returns the current working directory (CWD) of the hands MCP server process.
|
|
1535
1535
|
- The working directory of the hands process should be checked first, because the hands process and Hawa Code may not be in the same working directory.
|
|
1536
|
-
- Use this tool when you need to confirm the base directory for relative paths in file or shell operations.`;Ue();var UDn=Pe(()=>k.strictObject({})),HOe={name:MLt,async description(){return QLt},userFacingName(){return"Cwd"},get inputSchema(){return UDn()},async isEnabled(){return!0},isReadOnly(){return!0},needsPermissions(){return!1},async prompt(){return PLt},renderToolUseMessage(){return"Get current working directory"},renderToolResultMessage(e){return UOe.default.createElement(N,{width:"100%"},UOe.default.createElement(v,null,"\xA0\xA0\u23BF \xA0",e.cwd))},async*call(){let e={cwd:ke()};yield{type:"result",resultForAssistant:this.renderResultForAssistant(e),data:e}},renderResultForAssistant(e){return`Current working directory: ${e.cwd}`}};var LLt=`${gt}/hands`,o3="hawa/handsData",FLt=[CL()?xm:zi,b1,C1,x1,w1,I1,Wh,r3,n3,i3,HOe],ULt=[xm,zi,b1,C1,x1,w1,I1,Wh,r3,n3,i3,HOe];var Mne=null;function HDn(e,t){Mne={name:e,client:t},Dk.cache.clear?.(),Rk.cache.clear?.(),En.clear()}function qDn(){Dk.cache.clear?.(),Rk.cache.clear?.(),En.clear()}function HLt(e){let t=_d(),r=tF(),n=mn();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 qLt(e,t,r=!1,n=null){if(t.type==="sse"||t.type==="http"){let i=new Iee(t.url,t.headers,e);return await i.connectD(r,n),i}else{let i=t.type==="sse"?new gee(new URL(t.url)):new aee({command:t.command,args:t.args,env:{...process.env,...t.env},stderr:"pipe"}),o=new PC({name:`${gt}`,version:"0.1.0"},{capabilities:{}}),s=t.timeout??5e3,a=o.connect(i),l=new Promise((c,u)=>{let f=setTimeout(()=>{u(new Error(`Connection to MCP server "${e}" timed out after ${s}ms`))},s);a.then(()=>clearTimeout(f),()=>clearTimeout(f))});return await Promise.race([a,l]),t.type==="stdio"&&i.stderr?.on("data",c=>{let u=c.toString().trim();u&&m0(e,`Server stderr: ${u}`)}),o}}function qOe(e){let t=_d();return t.approvedMcprcServers?.includes(e)?"approved":t.rejectedMcprcServers?.includes(e)?"rejected":"pending"}var $Dn=async(e,t=!1,r=null)=>{qOe(e)==="rejected"&&ott(e);let i=HLt(e);if(!i)return{name:e,type:"failed"};try{let o=await qLt(e,i,t,r),s=await Dk(),a={name:e,client:o,type:"connected"},l=s.findIndex(c=>c.name===e);return l!==-1?s[l]=a:s.push(a),Rk.cache.clear?.(),a}catch(o){return m0(e,`Reconnect failed: ${o instanceof Error?o.message:String(o)}`),{name:e,type:"failed"}}},GDn=()=>(qDn(),Dk()),Dk=Pe(async()=>{if(process.env.CI)return[];let e=mn().mcpServers??{},t=tF(),r=_d().mcpServers??{},n=HG(t,(u,f)=>qOe(f)==="approved"),i=HG(t,(u,f)=>qOe(f)==="rejected"),o=Object.keys(i).map(u=>({name:u,type:"disabled"})),s={};for(let u of Em.getMcpServers()){let{name:f,pluginId:g,...m}=u;s[f]=m}let a={...s,...xxt,...e,...n,...r},l=await Promise.all(Object.entries(a).map(async([u,f])=>{try{let g=await qLt(u,f);return ft("tengu_mcp_server_connection_succeeded",{}),{name:u,client:g,type:"connected"}}catch(g){return g instanceof Da?{name:u,type:"oauth"}:(ft("tengu_mcp_server_connection_failed",{}),m0(u,`Connection failed: ${g instanceof Error?g.message:String(g)}`),{name:u,type:"failed"})}})),c=Mne?[{name:Mne.name,client:Mne.client,type:"connected"}]:[];return[...l,...c,...o]});async function $Lt(e,t,r){let n=await Dk();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"&&m0(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 Qne(e){return e.replaceAll(".","-")}async function Pne(e){return(await Rk()).filter(n=>n.name.startsWith(`mcp_${e}_`))}function zDn(e){try{return e.client.getServerVersion?.()?.name===LLt}catch{return!1}}var YDn=new Map(ULt.map(e=>[e.name,e]));function jDn(e,t,r){return{...dxe,name:"mcp_"+Qne(e.name)+"_"+Qne(t.name),async description(){return t.description??""},userFacingName(n){return"\u2601 "+r.userFacingName(n)},async prompt(){return t.description??""},isMcp(){return!0},async isEnabled(){return!0},isReadOnly(){return r.isReadOnly()},needsPermissions(n){return r.needsPermissions(n)},renderToolUseMessage(n,i){return r.renderToolUseMessage(n,{verbose:i.verbose})},renderToolResultMessage(n,i){if(n&&typeof n=="object"&&n.__handsValidationError===!0){let o=n.message??"Invalid tool input";return I1t(o)}return r.renderToolResultMessage(n,i)},inputSchema:gc(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let{data:i,resultForAssistant:o}=await KDn({client:e,tool:t.name,args:n});yield{type:"result",data:i,resultForAssistant:o}}}}function VDn(e,t){let r=t.annotations?.readOnlyHint===!0;return{...dxe,name:"mcp_"+Qne(e.name)+"_"+Qne(t.name),async description(){return t.description??""},async prompt(){return t.description??""},isMcp(){return!0},isReadOnly(){return r},inputSchema:gc(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let i=await WDn({client:e,tool:t.name,args:n});yield{type:"result",data:{},resultForAssistant:i}},userFacingName(){return`${e.name.length>10?`...${e.name.slice(-10)}`:e.name}:${t.name}`}}}var Rk=Pe(async()=>{let t=(await $Lt({method:"tools/list"},qQ,"tools")).flatMap(({client:r,result:{tools:n}})=>{let i=zDn(r);return n.map(o=>{if(i){let s=YDn.get(o.name);if(s)return jDn(r,o,s)}return VDn(r,o)})});return hee.batchUpdateMcpTools(t),t});async function WDn({client:{client:e,name:t},tool:r,args:n}){let i=await e.callTool({name:r,arguments:n},Zm);return(await Txt(i,r,t)).content}async function KDn({client:{client:e},tool:t,args:r}){let n=await e.callTool({name:t,arguments:r},Zm),i=n?._meta?.[o3],o=Array.isArray(n?.content)?n.content.filter(l=>l?.type==="text"&&typeof l.text=="string").map(l=>l.text).join(""):"",s=typeof i?.resultForAssistant=="string"?i.resultForAssistant:o;if(i?.validationError===!0){let l=i.message??s;return{data:{__handsValidationError:!0,message:l},resultForAssistant:l}}return{data:i&&"data"in i?i.data:s,resultForAssistant:s}}var GLt=Pe(async()=>(await $Lt({method:"prompts/list"},HQ,"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 JDn({name:n.name,client:t},sge(i,s))}}})));En.add(GLt);En.getMCPCommands=GLt;En.getMcpServer=HLt;En.getClients=Dk;En.reloadClients=GDn;En.reconnect=$Dn;En.registerIDEClient=HDn;async function JDn({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 m0(t.name,`Error running command '${e}': ${n instanceof Error?n.message:String(n)}`),n}}function zLt({serverName:e,serverConfig:t,onBack:r,onViewTools:n,onServerDisable:i,onServerReconnect:o,context:s}){let[a,l]=(0,D1.useState)(0),[c,u]=(0,D1.useState)("connected"),[f,g]=(0,D1.useState)([]),[m,A]=(0,D1.useState)(null),[E,_]=(0,D1.useState)(!1),C=Me();(0,D1.useEffect)(()=>{u(e.status),Pne(e.name).then(V=>{g(V)})},[e]),Tr((V,Q)=>{if(Q.return){c==="connected"?a===0?n():a===1?S():a===2&&I():a===0?S():a===1&&I();return}if(Q.upArrow){let G=c==="connected"?2:1;l(q=>Math.max(0,q-1));return}if(Q.downArrow){let G=c==="connected"?2:1;l(q=>Math.min(G,q+1));return}});let S=async()=>{_(!0);try{await o(e.name,c,V=>{A(V)})}finally{_(!1)}},I=()=>{i(e.name)},O=(V=>{switch(V){case"connected":return{icon:Qr.tick,color:C.success};case"failed":return{icon:Qr.cross,color:C.error};case"disabled":case"oauth":return{icon:Qr.circle,color:C.secondaryText};default:return{icon:Qr.circle,color:C.secondaryText}}})(c),z=c==="connected"?[{label:"View tools",action:"View available tools"},{label:"Reconnect",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:c==="failed"?[{label:"Reconnect",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:c==="oauth"?[{label:"Reconnect(oauth)",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:[{label:"Reconnect",action:"Reconnect to server"}];return Tn.createElement(N,{flexDirection:"column",height:"100%"},Tn.createElement(N,{flexDirection:"column",borderStyle:"single",borderColor:"white"},Tn.createElement(N,{padding:1},Tn.createElement(v,{bold:!0,color:C.claude},e.name," MCP Server")),Tn.createElement(N,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},Tn.createElement(N,null,Tn.createElement(v,null,"Status: "),Tn.createElement(v,{color:O.color},O.icon," ",c)),t?.command&&Tn.createElement(N,null,Tn.createElement(v,null,"Command: "),Tn.createElement(v,{color:C.text},t.command)),t?.args&&Tn.createElement(N,null,Tn.createElement(v,null,"Args: "),Tn.createElement(v,{color:C.text},Array.isArray(t.args)?t.args.join(" "):t.args)),t?.url&&Tn.createElement(N,null,Tn.createElement(v,null,"URL: "),Tn.createElement(v,{color:C.text},t.url)),t&&Tn.createElement(N,null,Tn.createElement(v,null,"Config location: "),Tn.createElement(v,{color:C.secondaryText},t.configPath||"Unknown")),c==="connected"&&Tn.createElement(Tn.Fragment,null,Tn.createElement(N,null,Tn.createElement(v,null,"Capabilities: tools")),Tn.createElement(N,null,Tn.createElement(v,null,"Tools: ",f.length," tools")))),Tn.createElement(N,{flexDirection:"column",paddingX:1,marginBottom:1},E?Tn.createElement(N,{flexDirection:"row"},Tn.createElement(Lv,null),Tn.createElement(v,{color:C.claude},"Reconnecting...")):z.map((V,Q)=>{let G=Q===a;return Tn.createElement(N,{key:Q},Tn.createElement(v,{color:G?C.claude:C.text},G?Qr.pointer:" "),Tn.createElement(v,{color:G?C.claude:C.text,bold:G},Q+1,". ",V.label))})),Tn.createElement(N,{padding:1},Tn.createElement(v,{color:C.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back"))),c==="oauth"&&m&&Tn.createElement(N,{flexDirection:"column",paddingX:1},Tn.createElement(v,null,"Open in browser:"),Tn.createElement(v,{wrap:"wrap",color:C.link||"blue"},m)))}var Ks=ee(_e(),1),k_=ee(_e(),1);function YLt({serverName:e,onBack:t,onToolSelect:r}){let[n,i]=(0,k_.useState)(0),[o,s]=(0,k_.useState)([]),[a,l]=(0,k_.useState)({}),[c,u]=(0,k_.useState)(0),f=Me(),g=15;(0,k_.useEffect)(()=>{if(o.length>0){let _={};for(let C=0;C<o.length;C++)_[C]=o[C].isReadOnly?.()?"read-only":"read-write";l(_)}},[o]),(0,k_.useEffect)(()=>{e&&(async()=>{try{let C=await Pne(e.name);s(C)}catch{s([])}})()},[e]),Tr((_,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<c&&u(S);return}if(C.downArrow){let S=Math.min(o.length-1,n+1);i(S),S>=c+g&&u(S-g+1);return}}),(0,k_.useEffect)(()=>{u(0),i(0)},[o]);let m=_=>{let C=_.name.match(/^mcp_[^_]+_(.+)$/);return C?C[1]:_.name},A=o.slice(c,c+g),E=o.length>g;return Ks.createElement(N,{flexDirection:"column",height:"100%",borderStyle:"single",borderColor:"white"},Ks.createElement(N,{padding:1},Ks.createElement(v,{bold:!0,color:f.claude},"Tools for ",e.name," (",o.length," tools)")),Ks.createElement(N,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},o.length===0?Ks.createElement(v,{color:f.secondaryText},"No tools available for this server"):Ks.createElement(Ks.Fragment,null,E&&c>0&&Ks.createElement(N,null,Ks.createElement(v,{color:f.secondaryText},"\u2191 More tools above")),Ks.createElement(N,{flexDirection:"column",flexGrow:1},A.map((_,C)=>{let S=c+C,I=S===n,w=m(_),O=a[S]||"read-write";return Ks.createElement(N,{key:_.name},Ks.createElement(v,{color:I?f.claude:f.text},I?Qr.pointer:" "),Ks.createElement(v,{color:f.secondaryText},S+1,"."),Ks.createElement(v,{color:I?f.claude:f.text,bold:I},w),Ks.createElement(v,null," "),Ks.createElement(v,{color:f.secondaryText},O))})),E&&c+g<o.length&&Ks.createElement(N,null,Ks.createElement(v,{color:f.secondaryText},"\u2193 More tools below")))),Ks.createElement(N,{padding:1},Ks.createElement(v,{color:f.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back")))}var Na=ee(_e(),1);function jLt({tool:e,serverName:t,onBack:r}){let[n,i]=(0,Na.useState)(""),[o,s]=(0,Na.useState)(!0),[a,l]=(0,Na.useState)(0),[c,u]=(0,Na.useState)(20),f=(0,Na.useRef)(null),g=Me(),{stdout:m}=nR();(0,Na.useEffect)(()=>{(async()=>{if(e?.description)try{let Q=await e.description();i(Q||"")}catch{i("")}else i("");s(!1)})()},[e]),(0,Na.useEffect)(()=>{m?.rows&&u(Math.max(10,m.rows-8))},[m]);let A=V=>{let Q=V.name.match(/^mcp__[^_]+__(.+)$/);return Q?Q[1]:V.name},E=()=>o?"loading...":n&&n.toLowerCase().includes("read")&&n.toLowerCase().includes("only")?"read-only":"read-write",_=A(e),C=E(),I=(()=>{let V=[];return n&&(V.push("Description:"),V.push(...n.split(`
|
|
1536
|
+
- Use this tool when you need to confirm the base directory for relative paths in file or shell operations.`;Ue();var UDn=Pe(()=>k.strictObject({})),HOe={name:MLt,async description(){return QLt},userFacingName(){return"Cwd"},get inputSchema(){return UDn()},async isEnabled(){return!0},isReadOnly(){return!0},needsPermissions(){return!1},async prompt(){return PLt},renderToolUseMessage(){return"Get current working directory"},renderToolResultMessage(e){return UOe.default.createElement(N,{width:"100%"},UOe.default.createElement(v,null,"\xA0\xA0\u23BF \xA0",e.cwd))},async*call(){let e={cwd:ke()};yield{type:"result",resultForAssistant:this.renderResultForAssistant(e),data:e}},renderResultForAssistant(e){return`Current working directory: ${e.cwd}`}};var LLt=`${gt}/hands`,o3="hawa/handsData",FLt=[CL()?xm:zi,b1,C1,x1,w1,I1,Wh,r3,n3,i3,HOe],ULt=[xm,zi,b1,C1,x1,w1,I1,Wh,r3,n3,i3,HOe];var Mne=null;function HDn(e,t){Mne={name:e,client:t},Dk.cache.clear?.(),Rk.cache.clear?.(),En.clear()}function qDn(){Dk.cache.clear?.(),Rk.cache.clear?.(),En.clear()}function HLt(e){let t=_d(),r=tF(),n=mn();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 qLt(e,t,r=!1,n=null){if(t.type==="sse"||t.type==="http"||t.type==="streamable-http"){let i=new Iee(t.url,t.headers,e);return await i.connectD(r,n),i}else{let i=t.type==="sse"?new gee(new URL(t.url)):new aee({command:t.command,args:t.args,env:{...process.env,...t.env},stderr:"pipe"}),o=new PC({name:`${gt}`,version:"0.1.0"},{capabilities:{}}),s=t.timeout??5e3,a=o.connect(i),l=new Promise((c,u)=>{let f=setTimeout(()=>{u(new Error(`Connection to MCP server "${e}" timed out after ${s}ms`))},s);a.then(()=>clearTimeout(f),()=>clearTimeout(f))});return await Promise.race([a,l]),t.type==="stdio"&&i.stderr?.on("data",c=>{let u=c.toString().trim();u&&m0(e,`Server stderr: ${u}`)}),o}}function qOe(e){let t=_d();return t.approvedMcprcServers?.includes(e)?"approved":t.rejectedMcprcServers?.includes(e)?"rejected":"pending"}var $Dn=async(e,t=!1,r=null)=>{qOe(e)==="rejected"&&ott(e);let i=HLt(e);if(!i)return{name:e,type:"failed"};try{let o=await qLt(e,i,t,r),s=await Dk(),a={name:e,client:o,type:"connected"},l=s.findIndex(c=>c.name===e);return l!==-1?s[l]=a:s.push(a),Rk.cache.clear?.(),a}catch(o){return m0(e,`Reconnect failed: ${o instanceof Error?o.message:String(o)}`),{name:e,type:"failed"}}},GDn=()=>(qDn(),Dk()),Dk=Pe(async()=>{if(process.env.CI)return[];let e=mn().mcpServers??{},t=tF(),r=_d().mcpServers??{},n=HG(t,(u,f)=>qOe(f)==="approved"),i=HG(t,(u,f)=>qOe(f)==="rejected"),o=Object.keys(i).map(u=>({name:u,type:"disabled"})),s={};for(let u of Em.getMcpServers()){let{name:f,pluginId:g,...m}=u;s[f]=m}let a={...s,...xxt,...e,...n,...r},l=await Promise.all(Object.entries(a).map(async([u,f])=>{try{let g=await qLt(u,f);return ft("tengu_mcp_server_connection_succeeded",{}),{name:u,client:g,type:"connected"}}catch(g){return g instanceof Da?{name:u,type:"oauth"}:(ft("tengu_mcp_server_connection_failed",{}),m0(u,`Connection failed: ${g instanceof Error?g.message:String(g)}`),{name:u,type:"failed"})}})),c=Mne?[{name:Mne.name,client:Mne.client,type:"connected"}]:[];return[...l,...c,...o]});async function $Lt(e,t,r){let n=await Dk();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"&&m0(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 Qne(e){return e.replaceAll(".","-")}async function Pne(e){return(await Rk()).filter(n=>n.name.startsWith(`mcp_${e}_`))}function zDn(e){try{return e.client.getServerVersion?.()?.name===LLt}catch{return!1}}var YDn=new Map(ULt.map(e=>[e.name,e]));function jDn(e,t,r){return{...dxe,name:"mcp_"+Qne(e.name)+"_"+Qne(t.name),async description(){return t.description??""},userFacingName(n){return"\u2601 "+r.userFacingName(n)},async prompt(){return t.description??""},isMcp(){return!0},async isEnabled(){return!0},isReadOnly(){return r.isReadOnly()},needsPermissions(n){return r.needsPermissions(n)},renderToolUseMessage(n,i){return r.renderToolUseMessage(n,{verbose:i.verbose})},renderToolResultMessage(n,i){if(n&&typeof n=="object"&&n.__handsValidationError===!0){let o=n.message??"Invalid tool input";return I1t(o)}return r.renderToolResultMessage(n,i)},inputSchema:gc(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let{data:i,resultForAssistant:o}=await KDn({client:e,tool:t.name,args:n});yield{type:"result",data:i,resultForAssistant:o}}}}function VDn(e,t){let r=t.annotations?.readOnlyHint===!0;return{...dxe,name:"mcp_"+Qne(e.name)+"_"+Qne(t.name),async description(){return t.description??""},async prompt(){return t.description??""},isMcp(){return!0},isReadOnly(){return r},inputSchema:gc(t.inputSchema),inputJSONSchema:t.inputSchema,async*call(n){let i=await WDn({client:e,tool:t.name,args:n});yield{type:"result",data:{},resultForAssistant:i}},userFacingName(){return`${e.name.length>10?`...${e.name.slice(-10)}`:e.name}:${t.name}`}}}var Rk=Pe(async()=>{let t=(await $Lt({method:"tools/list"},qQ,"tools")).flatMap(({client:r,result:{tools:n}})=>{let i=zDn(r);return n.map(o=>{if(i){let s=YDn.get(o.name);if(s)return jDn(r,o,s)}return VDn(r,o)})});return hee.batchUpdateMcpTools(t),t});async function WDn({client:{client:e,name:t},tool:r,args:n}){let i=await e.callTool({name:r,arguments:n},Zm);return(await Txt(i,r,t)).content}async function KDn({client:{client:e},tool:t,args:r}){let n=await e.callTool({name:t,arguments:r},Zm),i=n?._meta?.[o3],o=Array.isArray(n?.content)?n.content.filter(l=>l?.type==="text"&&typeof l.text=="string").map(l=>l.text).join(""):"",s=typeof i?.resultForAssistant=="string"?i.resultForAssistant:o;if(i?.validationError===!0){let l=i.message??s;return{data:{__handsValidationError:!0,message:l},resultForAssistant:l}}return{data:i&&"data"in i?i.data:s,resultForAssistant:s}}var GLt=Pe(async()=>(await $Lt({method:"prompts/list"},HQ,"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 JDn({name:n.name,client:t},sge(i,s))}}})));En.add(GLt);En.getMCPCommands=GLt;En.getMcpServer=HLt;En.getClients=Dk;En.reloadClients=GDn;En.reconnect=$Dn;En.registerIDEClient=HDn;async function JDn({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 m0(t.name,`Error running command '${e}': ${n instanceof Error?n.message:String(n)}`),n}}function zLt({serverName:e,serverConfig:t,onBack:r,onViewTools:n,onServerDisable:i,onServerReconnect:o,context:s}){let[a,l]=(0,D1.useState)(0),[c,u]=(0,D1.useState)("connected"),[f,g]=(0,D1.useState)([]),[m,A]=(0,D1.useState)(null),[E,_]=(0,D1.useState)(!1),C=Me();(0,D1.useEffect)(()=>{u(e.status),Pne(e.name).then(V=>{g(V)})},[e]),Tr((V,Q)=>{if(Q.return){c==="connected"?a===0?n():a===1?S():a===2&&I():a===0?S():a===1&&I();return}if(Q.upArrow){let G=c==="connected"?2:1;l(q=>Math.max(0,q-1));return}if(Q.downArrow){let G=c==="connected"?2:1;l(q=>Math.min(G,q+1));return}});let S=async()=>{_(!0);try{await o(e.name,c,V=>{A(V)})}finally{_(!1)}},I=()=>{i(e.name)},O=(V=>{switch(V){case"connected":return{icon:Qr.tick,color:C.success};case"failed":return{icon:Qr.cross,color:C.error};case"disabled":case"oauth":return{icon:Qr.circle,color:C.secondaryText};default:return{icon:Qr.circle,color:C.secondaryText}}})(c),z=c==="connected"?[{label:"View tools",action:"View available tools"},{label:"Reconnect",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:c==="failed"?[{label:"Reconnect",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:c==="oauth"?[{label:"Reconnect(oauth)",action:"Reconnect to server"},{label:"Disable",action:"Disable this server"}]:[{label:"Reconnect",action:"Reconnect to server"}];return Tn.createElement(N,{flexDirection:"column",height:"100%"},Tn.createElement(N,{flexDirection:"column",borderStyle:"single",borderColor:"white"},Tn.createElement(N,{padding:1},Tn.createElement(v,{bold:!0,color:C.claude},e.name," MCP Server")),Tn.createElement(N,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},Tn.createElement(N,null,Tn.createElement(v,null,"Status: "),Tn.createElement(v,{color:O.color},O.icon," ",c)),t?.command&&Tn.createElement(N,null,Tn.createElement(v,null,"Command: "),Tn.createElement(v,{color:C.text},t.command)),t?.args&&Tn.createElement(N,null,Tn.createElement(v,null,"Args: "),Tn.createElement(v,{color:C.text},Array.isArray(t.args)?t.args.join(" "):t.args)),t?.url&&Tn.createElement(N,null,Tn.createElement(v,null,"URL: "),Tn.createElement(v,{color:C.text},t.url)),t&&Tn.createElement(N,null,Tn.createElement(v,null,"Config location: "),Tn.createElement(v,{color:C.secondaryText},t.configPath||"Unknown")),c==="connected"&&Tn.createElement(Tn.Fragment,null,Tn.createElement(N,null,Tn.createElement(v,null,"Capabilities: tools")),Tn.createElement(N,null,Tn.createElement(v,null,"Tools: ",f.length," tools")))),Tn.createElement(N,{flexDirection:"column",paddingX:1,marginBottom:1},E?Tn.createElement(N,{flexDirection:"row"},Tn.createElement(Lv,null),Tn.createElement(v,{color:C.claude},"Reconnecting...")):z.map((V,Q)=>{let G=Q===a;return Tn.createElement(N,{key:Q},Tn.createElement(v,{color:G?C.claude:C.text},G?Qr.pointer:" "),Tn.createElement(v,{color:G?C.claude:C.text,bold:G},Q+1,". ",V.label))})),Tn.createElement(N,{padding:1},Tn.createElement(v,{color:C.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back"))),c==="oauth"&&m&&Tn.createElement(N,{flexDirection:"column",paddingX:1},Tn.createElement(v,null,"Open in browser:"),Tn.createElement(v,{wrap:"wrap",color:C.link||"blue"},m)))}var Ks=ee(_e(),1),k_=ee(_e(),1);function YLt({serverName:e,onBack:t,onToolSelect:r}){let[n,i]=(0,k_.useState)(0),[o,s]=(0,k_.useState)([]),[a,l]=(0,k_.useState)({}),[c,u]=(0,k_.useState)(0),f=Me(),g=15;(0,k_.useEffect)(()=>{if(o.length>0){let _={};for(let C=0;C<o.length;C++)_[C]=o[C].isReadOnly?.()?"read-only":"read-write";l(_)}},[o]),(0,k_.useEffect)(()=>{e&&(async()=>{try{let C=await Pne(e.name);s(C)}catch{s([])}})()},[e]),Tr((_,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<c&&u(S);return}if(C.downArrow){let S=Math.min(o.length-1,n+1);i(S),S>=c+g&&u(S-g+1);return}}),(0,k_.useEffect)(()=>{u(0),i(0)},[o]);let m=_=>{let C=_.name.match(/^mcp_[^_]+_(.+)$/);return C?C[1]:_.name},A=o.slice(c,c+g),E=o.length>g;return Ks.createElement(N,{flexDirection:"column",height:"100%",borderStyle:"single",borderColor:"white"},Ks.createElement(N,{padding:1},Ks.createElement(v,{bold:!0,color:f.claude},"Tools for ",e.name," (",o.length," tools)")),Ks.createElement(N,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingX:1},o.length===0?Ks.createElement(v,{color:f.secondaryText},"No tools available for this server"):Ks.createElement(Ks.Fragment,null,E&&c>0&&Ks.createElement(N,null,Ks.createElement(v,{color:f.secondaryText},"\u2191 More tools above")),Ks.createElement(N,{flexDirection:"column",flexGrow:1},A.map((_,C)=>{let S=c+C,I=S===n,w=m(_),O=a[S]||"read-write";return Ks.createElement(N,{key:_.name},Ks.createElement(v,{color:I?f.claude:f.text},I?Qr.pointer:" "),Ks.createElement(v,{color:f.secondaryText},S+1,"."),Ks.createElement(v,{color:I?f.claude:f.text,bold:I},w),Ks.createElement(v,null," "),Ks.createElement(v,{color:f.secondaryText},O))})),E&&c+g<o.length&&Ks.createElement(N,null,Ks.createElement(v,{color:f.secondaryText},"\u2193 More tools below")))),Ks.createElement(N,{padding:1},Ks.createElement(v,{color:f.secondaryText},"Use \u2191\u2193 to navigate, Enter to select, Esc to go back")))}var Na=ee(_e(),1);function jLt({tool:e,serverName:t,onBack:r}){let[n,i]=(0,Na.useState)(""),[o,s]=(0,Na.useState)(!0),[a,l]=(0,Na.useState)(0),[c,u]=(0,Na.useState)(20),f=(0,Na.useRef)(null),g=Me(),{stdout:m}=nR();(0,Na.useEffect)(()=>{(async()=>{if(e?.description)try{let Q=await e.description();i(Q||"")}catch{i("")}else i("");s(!1)})()},[e]),(0,Na.useEffect)(()=>{m?.rows&&u(Math.max(10,m.rows-8))},[m]);let A=V=>{let Q=V.name.match(/^mcp__[^_]+__(.+)$/);return Q?Q[1]:V.name},E=()=>o?"loading...":n&&n.toLowerCase().includes("read")&&n.toLowerCase().includes("only")?"read-only":"read-write",_=A(e),C=E(),I=(()=>{let V=[];return n&&(V.push("Description:"),V.push(...n.split(`
|
|
1537
1537
|
`).map(Q=>Q.trim())),V.push("")),e.inputSchema&&(V.push("Parameters:"),e.inputSchema.properties?V.push(...(e.inputSchema+"").split(`
|
|
1538
1538
|
`).map(Q=>Q.trim())):V.push("No parameters required")),V})(),w=c-6;Tr((V,Q)=>{if(Q.escape){r();return}if(Q.upArrow){l(G=>Math.max(0,G-1));return}if(Q.downArrow){let G=I.length/w,q=a+1;q>G&&q--,l(q);return}});let O=I.slice(a*w,(a+1)*w),P=a>0,z=(a+1)*w<I.length;return Na.default.createElement(N,{flexDirection:"column",borderStyle:"single",borderColor:"white",height:c},Na.default.createElement(N,{paddingX:1},Na.default.createElement(v,{bold:!0,color:g.claude},_," (",t.name,") [",C,"]")),o&&Na.default.createElement(N,{paddingX:1},Na.default.createElement(v,{color:g.secondaryText},"Loading tool details...")),Na.default.createElement(N,{flexDirection:"column",paddingX:1,flexGrow:1,height:c-3,ref:f},O.map((V,Q)=>Na.default.createElement(v,{key:Q,color:g.text},V))),Na.default.createElement(N,{paddingX:1},Na.default.createElement(v,{color:g.secondaryText,wrap:"truncate"},P&&"\u2191"," ",z&&"\u2193"," to scroll (Esc back)")))}us();function VLt({onClose:e,context:t}){let[r,n]=(0,yx.useState)("list"),[i,o]=(0,yx.useState)(""),[s,a]=(0,yx.useState)(null),[l,c]=(0,yx.useState)([]),u=Me(),f=25;kd(()=>{e(-1)}),(0,yx.useEffect)(()=>{(async()=>{let S=await En.getClients();c(S.filter(I=>I.name!=="___ide_").map(I=>({name:I.name,status:I.type})))})()},[]);let g=S=>{stt(S),En.reloadClients().then(I=>{c(I.filter(w=>w.name!=="___ide_").map(w=>({name:w.name,status:w.type}))),n("list"),dr.emit("repl:reloadtools")})},m=async(S,I,w)=>{if((I==="oauth"?await En.reconnect(S,!0,w):await En.reconnect(S)).type==="connected"){let P=await En.getClients();c(P.filter(z=>z.name!=="___ide_").map(z=>({name:z.name,status:z.type}))),n("list"),dr.emit("repl:reloadtools")}},A=S=>{o(S),n("details")},E=S=>{o(S),n("tools")},_=S=>{a(S),n("tool-details")};Tr((S,I)=>{I.escape&&(r==="list"?e(-1):C())});let C=()=>{r==="details"?n("list"):r==="tools"?n("details"):r==="tool-details"&&n("tools")};return r==="list"?Kh.createElement(N,{flexDirection:"column",height:f},Kh.createElement(_Ct,{servers:l,onServerSelect:A,onViewTools:E,onClose:e})):r==="details"?Kh.createElement(N,{flexDirection:"column",height:f},Kh.createElement(zLt,{serverName:i,serverConfig:En.getMcpServer(i),onBack:C,onServerDisable:g,onServerReconnect:m,onViewTools:()=>E(i),context:t})):r==="tools"?Kh.createElement(N,{flexDirection:"column",height:f},Kh.createElement(YLt,{serverName:i,onBack:C,onToolSelect:_})):r==="tool-details"?Kh.createElement(N,{flexDirection:"column",height:f},Kh.createElement(jLt,{tool:s,serverName:i,onBack:C})):Kh.createElement(v,null,"Unknown view: ",r)}var WLt=ee(_e(),1),ZDn={type:"local-jsx",name:"mcp",description:()=>"Manage MCP servers",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e,t){return WLt.default.createElement(VLt,{onClose:e,context:t})},userFacingName(){return"mcp"}},KLt=ZDn;var oFt=ee(_e(),1);var en=ee(_e(),1);Le();import{existsSync as a3,readFileSync as pRn,rmSync as Bk}from"fs";import{join as YOe}from"path";Le();import{existsSync as tFt,mkdirSync as rFt}from"fs";import{join as oRn}from"path";Nk();var Lne=class{async fetch(t,r){let i=process.env.HCODE_PLUGIN_PREFER_SSH==="1"?`git@github.com:${t.repo}.git`:`https://github.com/${t.repo}.git`,o=await bx({url:i,targetDir:r,ref:t.ref,sha:t.sha});return{success:o.success,version:o.commitSha,error:o.error}}};Nk();var Fne=class{async fetch(t,r){let n=await bx({url:t.url,targetDir:r,ref:t.ref,sha:t.sha});return{success:n.success,version:n.commitSha,error:n.error}}};Nk();var Une=class{async fetch(t,r){let n=await bx({url:t.url,targetDir:r,ref:t.ref,sha:t.sha,sparsePaths:[t.path]});return{success:n.success,version:n.commitSha,error:n.error}}};Le();import{cpSync as eRn,existsSync as tRn}from"fs";import{resolve as ZLt}from"path";var Hne=class{async fetch(t,r,n){if(typeof t!="string")return{success:!1,error:"Local source must be a string path"};if(t.includes(".."))return{success:!1,error:'Local source path cannot contain ".."'};let i=n?ZLt(n,t):ZLt(t);if(!tRn(i))return X(`Local source path does not exist: ${i}`),{success:!1,error:`Path not found: ${i}`};try{return ce(`Copying local source ${i} to ${r}`),eRn(i,r,{recursive:!0}),{success:!0}}catch(o){return X(`Failed to copy local source ${i}:`,o),{success:!1,error:String(o)}}}};hf();Le();import{existsSync as nRn,mkdirSync as iRn}from"fs";hf();Le();var XLt=12e4;async function eFt(e){let{packageName:t,version:r,registry:n,targetDir:i,timeout:o=XLt}=e,s=["pack",t];r&&(s[1]=`${t}@${r}`),s.push("--pack-destination",i),n&&s.push("--registry",n),ce(`Packing npm package ${t}${r?`@${r}`:""}`);let a=await ar("npm",s,void 0,o);if(a.code!==0)return X(`npm pack failed for ${t}:`,a.stderr),{success:!1,error:a.stderr};let l=a.stdout.trim().split(`
|
|
1539
1539
|
`).pop();if(!l)return{success:!1,error:"No tarball produced"};let c=await rRn({packageName:t,registry:n,timeout:o});return{success:!0,tarballPath:`${i}/${l}`,version:c.version}}async function rRn(e){let{packageName:t,registry:r,timeout:n=XLt}=e,i=["view",t,"version"];r&&i.push("--registry",r);let o=await ar("npm",i,void 0,n);return o.code!==0?(X(`npm view failed for ${t}:`,o.stderr),{error:o.stderr}):{version:o.stdout.trim()}}var qne=class{async fetch(t,r){nRn(r)||iRn(r,{recursive:!0});let n=await eFt({packageName:t.package,version:t.version,registry:t.registry,targetDir:r});if(!n.success||!n.tarballPath)return{success:!1,error:n.error};ce(`Extracting npm tarball ${n.tarballPath} to ${r}`);let i=await ar("tar",["-xzf",n.tarballPath,"-C",r,"--strip-components=1"]);return i.code!==0?(X(`Failed to extract npm tarball ${n.tarballPath}:`,i.stderr),{success:!1,error:i.stderr}):{success:!0,version:n.version}}};var R1=class{static localFetcher=new Hne;static githubFetcher=new Lne;static gitFetcher=new Fne;static gitSubdirFetcher=new Une;static npmFetcher=new qne;static async fetchPlugin(t,r,n){if(tFt(r)||rFt(r,{recursive:!0}),typeof t=="string")return this.localFetcher.fetch(t,r,n);switch(t.source){case"github":return this.githubFetcher.fetch(t,r);case"url":return this.gitFetcher.fetch(t,r);case"git-subdir":return this.gitSubdirFetcher.fetch(t,r);case"npm":return this.npmFetcher.fetch(t,r);default:return{success:!1,error:`Unsupported source type: ${t.source}`}}}static async fetchMarketplace(t,r){return tFt(r)||rFt(r,{recursive:!0}),t.startsWith("./")||t.startsWith("../")?this.localFetcher.fetch(t,r):t.includes("://")||t.startsWith("git@")?t.endsWith(".json")?this.fetchMarketplaceJsonFromUrl(t,r):this.gitFetcher.fetch({source:"url",url:t},r):/^[^/]+\/[^/]+$/.test(t)?this.githubFetcher.fetch({source:"github",repo:t},r):{success:!1,error:`Unrecognized marketplace source: ${t}`}}static async fetchMarketplaceJsonFromUrl(t,r){try{ce(`Downloading marketplace.json from ${t}`);let n=await fetch(t);if(!n.ok)return{success:!1,error:`HTTP ${n.status}: ${n.statusText}`};let i=await n.text(),o=oRn(r,"marketplace.json"),{writeFileSync:s}=await import("fs");return s(o,i,"utf-8"),{success:!0}}catch(n){return X(`Failed to download marketplace.json from ${t}:`,n),{success:!1,error:String(n)}}}};Ar();var sRn=new Set(["hcode","hawacode","official","claude-code-marketplace","claude-code-plugins","claude-plugins-official","claude-plugins-community","claude-community","anthropic-marketplace","anthropic-plugins","agent-skills","anthropic-agent-skills"]),N1=class{static isReservedName(t){return sRn.has(t.toLowerCase())}static validateManifest(t){let r=[];this.isReservedName(t.name)&&r.push(`Marketplace name "${t.name}" is reserved and cannot be used`);let n=new Set;for(let i of t.plugins)n.has(i.name)&&r.push(`Duplicate plugin name "${i.name}" found in marketplace`),n.add(i.name),typeof i.source=="string"&&(i.source.includes("..")&&r.push(`Plugin "${i.name}" source path contains ".." which is not allowed`),i.source.startsWith("./")||r.push(`Plugin "${i.name}" local source must start with "./"`));return{valid:r.length===0,errors:r}}static isMarketplaceAllowed(t){let n=At().plugins?.pluginMarketplaceAllowlist;return!n||n.length===0?!0:n.some(i=>i.includes("*")?new RegExp("^"+i.replace(/\*/g,".*")+"$").test(t):t===i)}static isMarketplaceStrictlyKnown(t){let r=At(),n=r.plugins?.strictKnownMarketplaces;return n===void 0||n===!1?!0:n===!0?(r.plugins?.extraKnownMarketplaces??[]).some(o=>o.source===t):Array.isArray(n)?n.some(i=>i.source===t):!1}};Gr();var aRn=k.object({source:k.literal("github"),repo:k.string().min(1),ref:k.string().optional(),sha:k.string().optional()}),lRn=k.object({source:k.literal("url"),url:k.string().url(),ref:k.string().optional(),sha:k.string().optional()}),cRn=k.object({source:k.literal("git-subdir"),url:k.string().url(),path:k.string().min(1),ref:k.string().optional(),sha:k.string().optional()}),uRn=k.object({source:k.literal("npm"),package:k.string().min(1),version:k.string().optional(),registry:k.string().url().optional()}),nFt=k.union([k.string().min(1),aRn,lRn,cRn,uRn]),zOe=k.object({name:k.string().min(1),email:k.string().email().optional()}),B1=k.union([k.string(),k.array(k.string())]),dRn=k.object({name:k.string().min(1),source:nFt,description:k.string().optional(),version:k.string().optional(),author:zOe.optional(),homepage:k.string().url().optional(),repository:k.string().url().optional(),license:k.string().optional(),keywords:k.array(k.string()).optional(),category:k.string().optional(),tags:k.array(k.string()).optional(),skills:B1.optional(),commands:B1.optional(),agents:B1.optional(),hooks:k.union([B1,k.record(k.string(),k.unknown())]).optional(),mcpServers:k.union([k.string(),k.record(k.string(),k.unknown())]).optional(),lspServers:k.union([k.string(),k.record(k.string(),k.unknown())]).optional(),permissions:k.array(k.string()).optional(),strict:k.boolean().optional(),defaultEnabled:k.boolean().optional()}),iFt=k.object({name:k.string().min(1),owner:zOe,description:k.string().optional(),plugins:k.array(dRn)}),s3=k.object({name:k.string().min(1),version:k.string().min(1),description:k.string().optional(),author:zOe.optional(),homepage:k.string().url().optional(),repository:k.string().url().optional(),license:k.string().optional(),keywords:k.array(k.string()).optional(),category:k.string().optional(),skills:B1.optional(),commands:B1.optional(),agents:B1.optional(),hooks:k.union([B1,k.record(k.string(),k.unknown())]).optional(),mcpServers:k.union([k.string(),k.record(k.string(),k.unknown())]).optional(),lspServers:k.union([k.string(),k.record(k.string(),k.unknown())]).optional(),permissions:k.array(k.string()).optional(),strict:k.boolean().optional(),defaultEnabled:k.boolean().optional()}),fYi=k.object({name:k.string().min(1),source:k.string().min(1),type:k.enum(["local","git","url","github"]),fetchedAt:k.string(),localPath:k.string().min(1)}),pYi=k.object({id:k.string().min(1),marketplace:k.string().min(1),plugin:k.string().min(1),version:k.string().min(1),source:nFt,manifest:s3,installedAt:k.string(),enabled:k.boolean(),cachePath:k.string().min(1),dataPath:k.string().min(1)}),fRn=k.object({source:k.string().min(1)}).catchall(k.unknown()),mYi=k.object({enabledPlugins:k.array(k.string()).optional(),disabledPlugins:k.array(k.string()).optional(),pluginConfigs:k.record(k.string(),k.unknown()).optional(),extraKnownMarketplaces:k.array(k.object({name:k.string().min(1),source:k.string().min(1)})).optional(),strictKnownMarketplaces:k.union([k.boolean(),k.array(fRn)]).optional(),pluginMarketplaceAllowlist:k.array(k.string()).optional(),pluginAutoUpdate:k.boolean().optional(),pluginAutoUpdateInterval:k.number().int().positive().optional(),pluginSandboxHooks:k.boolean().optional()});function $ne(){return process.env.HCODE_PLUGIN_CLAUDE_COMPAT==="1"?[".hcode-plugin",".claude-plugin"]:[".hcode-plugin"]}var tu=class{static parseSourceType(t){return t.startsWith("./")||t.startsWith("../")||t.startsWith("/")?"local":t.endsWith(".json")&&(t.includes("://")||t.startsWith("http"))?"url":t.includes("://")||t.startsWith("git@")?"git":/^[^/]+\/[^/]+$/.test(t)?"github":"local"}static findMarketplaceManifestPath(t){for(let n of $ne()){let i=YOe(t,n,"marketplace.json");if(a3(i))return i}let r=YOe(t,"marketplace.json");return a3(r)?r:null}static readMarketplaceManifest(t){let r=this.findMarketplaceManifestPath(t);if(!r)throw new Error(`Marketplace manifest not found in ${t}. Expected .hcode-plugin/marketplace.json`);let n=pRn(r,"utf-8"),i=JSON.parse(n);return iFt.parse(i)}static async add(t){if(!N1.isMarketplaceAllowed(t))return{success:!1,error:`Marketplace source "${t}" is not allowed by pluginMarketplaceAllowlist`};if(!N1.isMarketplaceStrictlyKnown(t))return{success:!1,error:`Marketplace source "${t}" is rejected by strictKnownMarketplaces`};let r=this.parseSourceType(t);if(r==="local")try{let i=this.readMarketplaceManifest(t),o=N1.validateManifest(i);return o.valid?(wi.getKnownMarketplaces().some(a=>a.name===i.name)&&ce(`Replacing existing marketplace "${i.name}"`),wi.addKnownMarketplace({name:i.name,source:t,type:r,fetchedAt:new Date().toISOString(),localPath:t}),ce(`Added marketplace "${i.name}" from ${t}`),{success:!0,name:i.name}):{success:!1,error:o.errors.join("; ")}}catch(i){return X(`Failed to add local marketplace from ${t}:`,i),{success:!1,error:String(i)}}let n=YOe(wi.getMarketplacesDir(),`.staging-${Date.now()}`);try{let i=await R1.fetchMarketplace(t,n);if(!i.success)return Bk(n,{recursive:!0,force:!0}),{success:!1,error:i.error};let o=this.readMarketplaceManifest(n),s=N1.validateManifest(o);if(!s.valid)return Bk(n,{recursive:!0,force:!0}),{success:!1,error:s.errors.join("; ")};let a=wi.getMarketplacePath(o.name);a3(a)&&(Bk(a,{recursive:!0,force:!0}),ce(`Replacing existing marketplace "${o.name}"`));let{renameSync:l}=await import("fs");return l(n,a),wi.addKnownMarketplace({name:o.name,source:t,type:r,fetchedAt:new Date().toISOString(),localPath:a}),ce(`Added marketplace "${o.name}" from ${t}`),{success:!0,name:o.name}}catch(i){return a3(n)&&Bk(n,{recursive:!0,force:!0}),X(`Failed to add marketplace from ${t}:`,i),{success:!1,error:String(i)}}}static remove(t){let n=wi.getKnownMarketplaces().find(i=>i.name===t);return n?(wi.removeKnownMarketplace(t),n.type!=="local"&&a3(n.localPath)&&Bk(n.localPath,{recursive:!0,force:!0}),ce(`Removed marketplace "${t}"`),{success:!0}):{success:!1,error:`Marketplace "${t}" not found`}}static list(){return wi.getKnownMarketplaces()}static get(t){return wi.getKnownMarketplaces().find(r=>r.name===t)}static async update(t){let r=wi.getKnownMarketplaces(),n=t?r.filter(s=>s.name===t):r;if(t&&n.length===0)return{success:!1,updated:[],errors:[`Marketplace "${t}" not found`]};let i=[],o=[];for(let s of n)try{if(s.type==="local"){let a=this.readMarketplaceManifest(s.localPath),l=N1.validateManifest(a);if(!l.valid){o.push(`${s.name}: ${l.errors.join("; ")}`);continue}wi.addKnownMarketplace({...s,fetchedAt:new Date().toISOString()}),i.push(s.name);continue}if(s.type==="git"||s.type==="github"){let{pullRepository:a}=await Promise.resolve().then(()=>(Nk(),JLt)),l=await a({cwd:s.localPath});if(!l.success){if(process.env.HCODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE==="1"){o.push(`${s.name}: pull failed, keeping existing cache (${l.error})`);continue}Bk(s.localPath,{recursive:!0,force:!0});let c=await R1.fetchMarketplace(s.source,s.localPath);if(!c.success){o.push(`${s.name}: ${c.error}`);continue}}wi.addKnownMarketplace({...s,fetchedAt:new Date().toISOString()}),i.push(s.name);continue}if(s.type==="url"){let a=await R1.fetchMarketplace(s.source,s.localPath);if(!a.success){o.push(`${s.name}: ${a.error}`);continue}wi.addKnownMarketplace({...s,fetchedAt:new Date().toISOString()}),i.push(s.name)}}catch(a){X(`Failed to update marketplace "${s.name}":`,a),o.push(`${s.name}: ${String(a)}`)}return i.length>0&&ce(`Updated marketplaces: ${i.join(", ")}`),{success:o.length===0,updated:i,errors:o}}};Le();import{existsSync as zne,rmSync as Ok}from"fs";import{join as jOe}from"path";import{createHash as hRn}from"crypto";import{readdirSync as ERn,readFileSync as _Rn,statSync as yRn}from"fs";import{existsSync as mRn,readFileSync as gRn}from"fs";import{join as ARn}from"path";var Gne=class{static findPluginManifestPath(t){for(let r of $ne()){let n=ARn(t,r,"plugin.json");if(mRn(n))return n}return null}static readPluginManifest(t){let r=this.findPluginManifestPath(t);if(!r)return null;let n=gRn(r,"utf-8"),i=JSON.parse(n);return s3.parse(i)}static resolveManifest(t,r){let n=r.strict!==!1,i=this.readPluginManifest(t);if(!n){if(i&&this.hasComponentDeclarations(i))throw new Error(`Plugin "${r.name}" has strict:false in the marketplace entry, but its plugin.json also declares components. Remove the component declarations from plugin.json.`);return s3.parse({name:r.name,version:r.version??"0.0.0",...r})}return i?{...r,...i,version:i.version??r.version??"0.0.0"}:s3.parse({name:r.name,version:r.version??"0.0.0",...r})}static hasComponentDeclarations(t){return!!(t.skills||t.commands||t.agents||t.hooks||t.mcpServers||t.lspServers)}};Nk();var Vf=class{static buildPluginId(t,r,n){return`${t}__${r}@${n}`}static parsePluginSpec(t){let r=t.lastIndexOf("@");return r<=0?{plugin:t}:{plugin:t.slice(0,r),marketplace:t.slice(r+1)}}static findPluginEntry(t,r){let n=tu.list(),i=r?n.filter(o=>o.name===r):n;for(let o of i)try{let s=tu.readMarketplaceManifest(o.localPath),a=s.plugins.find(l=>l.name===t);if(a)return{entry:a,marketplaceName:s.name,marketplaceDir:o.localPath}}catch(s){X(`Failed to read marketplace "${o.name}":`,s)}return null}static async resolveVersion(t,r,n){if(t.version&&t.version!=="0.0.0")return t.version;if(r)return r;let i=await GOe(n);return i?i.slice(0,12):this.hashDirectory(n)}static hashDirectory(t){let r=hRn("sha256"),n=i=>{for(let o of ERn(i).sort()){if(o===".git"||o==="node_modules")continue;let s=jOe(i,o);yRn(s).isDirectory()?n(s):(r.update(o),r.update(_Rn(s)))}};try{n(t)}catch{}return r.digest("hex").slice(0,12)}static async install(t,r={}){let{plugin:n,marketplace:i}=this.parsePluginSpec(t),o=this.findPluginEntry(n,i);if(!o)return{success:!1,error:i?`Plugin "${n}" not found in marketplace "${i}"`:`Plugin "${n}" not found in any known marketplace`};let{entry:s,marketplaceName:a,marketplaceDir:l}=o,c=jOe(wi.getInstalledDir(),`.staging-${Date.now()}`),u=typeof s.source=="string"?l:void 0,f=await R1.fetchPlugin(s.source,c,u);if(!f.success)return Ok(c,{recursive:!0,force:!0}),{success:!1,error:f.error};try{let g=Gne.resolveManifest(c,{...s}),m=await this.resolveVersion(g,s.version,c),A=this.buildPluginId(a,n,m);if(wi.getInstalledPlugin(A))return Ok(c,{recursive:!0,force:!0}),ce(`Plugin "${A}" is already installed`),{success:!0,id:A};let _=wi.getPluginCachePath(a,n,m),C=wi.getPluginDataPath(a,n);zne(_)&&Ok(_,{recursive:!0,force:!0});let{renameSync:S,mkdirSync:I}=await import("fs");I(jOe(_,".."),{recursive:!0}),S(c,_),I(C,{recursive:!0});let w={id:A,marketplace:a,plugin:n,version:m,source:s.source,manifest:g,installedAt:new Date().toISOString(),enabled:s.defaultEnabled!==!1,cachePath:_,dataPath:C};return wi.addInstalledPlugin(w),ce(`Installed plugin "${A}"`),{success:!0,id:A}}catch(g){return zne(c)&&Ok(c,{recursive:!0,force:!0}),X(`Failed to install plugin "${n}":`,g),{success:!1,error:String(g)}}}static uninstall(t){let r=wi.getInstalledPlugins(),n=r.find(i=>i.id===t)??r.find(i=>{let{plugin:o,marketplace:s}=this.parsePluginSpec(t);return i.plugin===o&&(!s||i.marketplace===s)});return n?(wi.removeInstalledPlugin(n.id),zne(n.cachePath)&&Ok(n.cachePath,{recursive:!0,force:!0}),ce(`Uninstalled plugin "${n.id}"`),{success:!0}):{success:!1,error:`Plugin "${t}" is not installed`}}static async update(t){let r=wi.getInstalledPlugins(),n=t?r.filter(s=>{let{plugin:a,marketplace:l}=this.parsePluginSpec(t);return s.plugin===a&&(!l||s.marketplace===l)}):r;if(t&&n.length===0)return{success:!1,updated:[],errors:[`Plugin "${t}" is not installed`]};let i=[],o=[];for(let s of n){let a=await this.install(`${s.plugin}@${s.marketplace}`,{yes:!0});a.success&&a.id&&a.id!==s.id?(wi.removeInstalledPlugin(s.id),zne(s.cachePath)&&Ok(s.cachePath,{recursive:!0,force:!0}),i.push(`${s.id} -> ${a.id}`)):a.success||o.push(`${s.id}: ${a.error}`)}return{success:o.length===0,updated:i,errors:o}}static list(){return wi.getInstalledPlugins()}static setEnabled(t,r){let n=wi.getInstalledPlugins(),i=n.find(o=>o.id===t)??n.find(o=>{let{plugin:s,marketplace:a}=this.parsePluginSpec(t);return o.plugin===s&&(!a||o.marketplace===a)});return i?(wi.addInstalledPlugin({...i,enabled:r}),ce(`${r?"Enabled":"Disabled"} plugin "${i.id}"`),{success:!0}):{success:!1,error:`Plugin "${t}" is not installed`}}};Op();er();vr();import{existsSync as l3,readFileSync as VOe}from"fs";import{join as c3}from"path";import{homedir as ZOe}from"os";Ar();Ue();async function bRn(e){let t=/!\`([^`]+)\`/g,r=[...e.matchAll(t)];if(r.length===0)return e;let n=e;for(let i of r){let o=i[0],s=i[1].trim();try{let a=s.split(/\s+/),l=a[0],c=a.slice(1),u=[l,...c].join(" "),{stdout:f,stderr:g}=await si(u,"",{timeout:5e3,cwd:ke()}),m=f.trim()||g.trim()||"(no output)";n=n.replace(o,m)}catch(a){console.warn(`Failed to execute bash command "${s}":`,a),n=n.replace(o,`(error executing: ${s})`)}}return n}function WOe(e){let t=/^---\s*\n([\s\S]*?)---\s*\n?/,r=e.match(t);if(!r)return{frontmatter:{},content:e};let n=r[1]||"",i=e.slice(r[0].length),o={},s=n.split(`
|