@dahawa/hawa-code 2.4.26 → 2.4.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/cli.js +3 -3
  2. package/hands.js +3 -3
  3. package/package.json +1 -1
package/cli.js CHANGED
@@ -686,7 +686,7 @@ globstar while`,t,p,r,f,A),this.matchOne(t.slice(p),r.slice(f),n))return this.de
686
686
  `)),U6n(e,o,{encoding:r,flush:!0})}var fqt=new rpe.default({fetchMethod:e=>Y6n(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});async function Tqt(e){let t=XY(e);return fqt.get(t)||fqt.fetchMethod?.(t)}async function Y6n(e){let t=new AbortController;setTimeout(()=>{t.abort()},1e3);let r=await LLt(e,t.signal,15),n=0;for(let o of r)UM(o)==="CRLF"&&n++;return n>3?"CRLF":"LF"}function bqt(e,t,r){if(e.has(t))return e.get(t);let n=r();return e.set(t,n),n}var V6n=new rpe.default({fetchMethod:e=>yqt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function ig(e){let t=XY(e);return bqt(V6n,t,()=>yqt(t))}function yqt(e){let r=Buffer.alloc(4096),n;try{n=mqt(e,"r");let o=gqt(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&&Aqt(n)}}var z6n=new rpe.default({fetchMethod:e=>Cqt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function UM(e){let t=XY(e);return bqt(z6n,t,()=>Cqt(t))}function Cqt(e,t="utf8"){try{if(!hqt(e).isFile())return"LF";let n=Buffer.alloc(4096),o=mqt(e,"r"),i=gqt(o,n,0,4096,0);Aqt(o);let s=n.toString(t,0,i),a=0,c=0;for(let l=0;l<s.length;l++)s[l]===`
687
687
  `&&(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 hG(e){let t=_qt(e)?e:XY(Pe(),e);return t.endsWith(" AM.png")?t.replace(" AM.png","\u202FAM.png"):t.endsWith(" PM.png")?t.replace(" PM.png","\u202FPM.png"):t}function v2e(e){return e?_qt(e)?e:XY(Pe(),e):void 0}function Iqt(e){try{let t=v2e(e),r=t?H6n(Pe(),t):void 0;return{absolutePath:t,relativePath:r}}catch(t){return re("getAbsoluteAndRelativePaths error ",t),{absolutePath:null,relativePath:null}}}function ope(e){try{let t=q6n(e),r=uqt(e,dqt(e));if(!F6n(t))return;let i=Q6n(t).filter(s=>uqt(s,dqt(s))===r&&$6n(t,s)!==e)[0];return i||void 0}catch(t){ye(`Error finding similar file for ${e}: ${t}`);return}}function R2e(){let e=process.env.HAWA_CODE_COMPACT_LINE_PREFIX;return!(e==="0"||e==="false")}function Tx({content:e,startLine:t}){if(!e)return"";let r=e.split(/\r?\n/);return R2e()?r.map((n,o)=>`${o+t} ${n}`).join(`
688
688
  `):r.map((n,o)=>{let i=String(o+t);return i.length>=6?`${i}\u2192${n}`:`${i.padStart(6," ")}\u2192${n}`}).join(`
689
- `)}function vqt(e){try{let t=G6n(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return ye(`Error checking directory: ${t}`),!1}}qe();function hx(){let e=Jn();e.hasCompletedProjectOnboarding||zi({...e,hasCompletedProjectOnboarding:!0})}function J6n(){let e=vr();Do({...e,lastReleaseNotesSeen:MACRO.VERSION})}function N2e({workspaceDir:e}){let r=!Jn().hasCompletedProjectOnboarding,o=vr().lastReleaseNotesSeen,i=[];(!o||(0,Rqt.gt)(MACRO.VERSION,o))&&(i=bde[MACRO.VERSION]||[]);let s=i.length>0;if(os.useEffect(()=>{s&&!r&&J6n()},[s,r]),!r&&!s)return null;let a=W6n(j6n(e,Di)),c=vqt(e),l=!a&&!c,u=rG.isEnabled&&!vr().shiftEnterKeyBindingInstalled,d=te();return os.createElement(v,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&os.createElement(os.Fragment,null,os.createElement(I,{color:d.secondaryText},"Tips for getting started:"),os.createElement(Wd,{children:[]},(()=>{let p=[];return c&&p.push(os.createElement(Wd.Item,{key:"workspace"},os.createElement(I,{color:d.secondaryText},"Ask ",rt," to create a new app or clone a repository."))),l&&p.push(os.createElement(Wd.Item,{key:"claudemd"},os.createElement(I,{color:d.secondaryText},"Run ",os.createElement(I,{color:d.text},"/init")," to create a",Di," file with instructions for Hawa code."))),u&&p.push(os.createElement(Wd.Item,{key:"terminal"},os.createElement(I,{color:d.secondaryText},"Run ",os.createElement(I,{color:d.text},"/terminal-setup"),os.createElement(I,{bold:!1}," to set up terminal integration")))),p.push(os.createElement(Wd.Item,{key:"questions"},os.createElement(I,{color:d.secondaryText},"Ask ",rt," questions about your codebase."))),p.push(os.createElement(Wd.Item,{key:"changes"},os.createElement(I,{color:d.secondaryText},"Ask ",rt," to implement changes to your codebase."))),p})())),!r&&s&&os.createElement(v,{borderColor:te().secondaryBorder,flexDirection:"column",marginRight:1},os.createElement(v,{flexDirection:"column",gap:0},os.createElement(v,{marginBottom:1},os.createElement(I,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),os.createElement(v,{flexDirection:"column",marginLeft:1},i.map((p,f)=>os.createElement(I,{key:f,color:te().secondaryText},"\u2022 ",p))))),e===K6n()&&os.createElement(I,{color:te().warning},"Note: You have launched ",os.createElement(I,{bold:!0},rt)," in your home directory. For the best experience, launch it in a project directory instead."))}var EG=q(ae(),1);var _G=q(ae(),1);var eV=q(ae(),1);function x2e({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=Es("Select");return eV.default.createElement(v,{...o.option({isFocused:e})},e&&eV.default.createElement(I,{...o.focusIndicator()},r?ar.triangleDownSmall:ar.pointer),eV.default.createElement(I,{...o.label({isFocused:e,isSelected:t})},n),t&&eV.default.createElement(I,{...o.selectedIndicator()},ar.tick))}var sg=q(ae(),1);import{isDeepStrictEqual as Z6n}from"node:util";var tV=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:O2e(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var X6n=(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}}},w2e=e=>e.flatMap(t=>{if("options"in t){let r=w2e(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),Nqt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=w2e(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new tV(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}},D2e=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=w2e(t),[a,c]=(0,sg.useReducer)(X6n,{visibleOptionCount:e,defaultValue:r,options:t},Nqt),[l,u]=(0,sg.useState)(s);s!==l&&!Z6n(s,l)&&(c({type:"reset",state:Nqt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,sg.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,sg.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,sg.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,sg.useMemo)(()=>s.map((h,_)=>({...h,index:_})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,sg.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,sg.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,sg.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:p,selectFocusedOption:f}};var M2e=({isDisabled:e=!1,state:t})=>{gt((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var O2e=e=>`HEADER-${e.optionValues.join(",")}`;function $0({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=D2e({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});M2e({isDisabled:e,state:c});let{styles:l}=Es("Select");return _G.default.createElement(v,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:O2e(u),p=!e&&c.focusedValue!==void 0&&("value"in u?c.focusedValue===u.value:u.optionValues.includes(c.focusedValue)),f=!!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,_=h;if(r&&h.includes(r)){let T=h.indexOf(r);_=_G.default.createElement(_G.default.Fragment,null,h.slice(0,T),_G.default.createElement(I,{...l.highlightedText()},r),h.slice(T+r.length))}return _G.default.createElement(x2e,{key:d,isFocused:p,isSelected:f,smallPointer:A},_)}))}function xqt({onDone:e}){return gt((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),EG.default.createElement(v,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:te().secondaryBorder},EG.default.createElement(v,{marginBottom:1,flexDirection:"column"},EG.default.createElement(I,{bold:!0},"You've spent $5 this session.")),EG.default.createElement(v,null,EG.default.createElement($0,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var Nn=q(ae(),1),rr=q(ae(),1);var Wf=q(ae(),1);qe();fr();Qb();var r8n="2.4.26",Gb={VERSION:r8n,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 P2e=46,Dqt=["(\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 ipe({isDefaultModel:e=!1}){let t=Math.max(P2e,Pe().length+12),r=te(),n=Dqt[Math.floor(Math.random()*Dqt.length)];return Wf.createElement(v,{flexDirection:"column"},Wf.createElement(v,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Wf.createElement(I,null,Wf.createElement(I,null,n)," Welcome to"," ",Wf.createElement(I,{bold:!0},rt),Wf.createElement(I,{color:r.secondaryText}," v",Gb.VERSION)),Wf.createElement(Wf.Fragment,null,Wf.createElement(v,{paddingLeft:2,flexDirection:"column",gap:1},Wf.createElement(I,{color:r.secondaryText,italic:!0},"/help for help"),Wf.createElement(I,{color:r.secondaryText},"cwd: ",Pe()),Wf.createElement(I,{color:r.secondaryText},"model: ",Mo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Wf.createElement(I,{color:r.secondaryText},"small fast model: ",Mo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var PT=q(ae(),1);De();var SZ=q(ae(),1);import{randomUUID as DT}from"crypto";Ks();De();nr();fr();De();qe();import{existsSync as z0,readdirSync as Izn,statSync as vzn}from"fs";import{join as Ix,relative as Rzn}from"path";import{homedir as i8t}from"os";import{platform as Nzn}from"process";import{readFile as vx}from"fs/promises";fr();D_();yr();import{join as c8n,sep as l8n}from"path";function jf(){if(!ag())return!1;try{let e=it();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function cg(){return(c8n(Pe(),".hcode","team-memory")+l8n).normalize("NFC")}function M_(e){let t=e.normalize("NFC"),r=cg();return t.startsWith(r)}var s8t=q(uV(),1);ci();var t8t=q(uV(),1);fr();qe();De();$f();import{readFile as X6t}from"fs/promises";import{existsSync as eUe,readdirSync as Tzn,statSync as bzn}from"fs";import{join as tUe,relative as r8t}from"path";import{homedir as yzn}from"os";function e8t(e){try{let t=(0,t8t.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 Czn(e,t){return t.length===0?!0:t.some(r=>{try{return Kd(e,r,{matchBase:!0,dot:!0})}catch(n){return ye(n),!1}})}function rUe(e){let t=[];try{if(!eUe(e))return t;let r=Tzn(e);for(let n of r){let o=tUe(e,n),i=bzn(o);i.isDirectory()?t.push(...rUe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){ye(r)}return t}async function n8t(){let e=[];try{let t=tUe(yzn(),Kn,"rules");if(eUe(t)){let r=rUe(t);for(let n of r)try{let o=await X6t(n,"utf-8"),{paths:i,content:s}=e8t(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=tUe(Pe(),Kn,"rules");if(eUe(t)){let r=rUe(t);for(let n of r)try{let o=await X6t(n,"utf-8"),{paths:i,content:s}=e8t(o);i.length>0&&e.push({filePath:r8t(Pe(),n),content:s,paths:i,isProjectRule:!0})}catch(o){ye(o)}}}catch(t){ye(t)}return e}function o8t(e,t){e=Hle(e);let r=Hle(Pe()),n=e.startsWith(r)?r8t(r,e):e;return t.filter(o=>Czn(n,o.paths))}var xzn=`# hawaCodeMd
689
+ `)}function vqt(e){try{let t=G6n(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return ye(`Error checking directory: ${t}`),!1}}qe();function hx(){let e=Jn();e.hasCompletedProjectOnboarding||zi({...e,hasCompletedProjectOnboarding:!0})}function J6n(){let e=vr();Do({...e,lastReleaseNotesSeen:MACRO.VERSION})}function N2e({workspaceDir:e}){let r=!Jn().hasCompletedProjectOnboarding,o=vr().lastReleaseNotesSeen,i=[];(!o||(0,Rqt.gt)(MACRO.VERSION,o))&&(i=bde[MACRO.VERSION]||[]);let s=i.length>0;if(os.useEffect(()=>{s&&!r&&J6n()},[s,r]),!r&&!s)return null;let a=W6n(j6n(e,Di)),c=vqt(e),l=!a&&!c,u=rG.isEnabled&&!vr().shiftEnterKeyBindingInstalled,d=te();return os.createElement(v,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&os.createElement(os.Fragment,null,os.createElement(I,{color:d.secondaryText},"Tips for getting started:"),os.createElement(Wd,{children:[]},(()=>{let p=[];return c&&p.push(os.createElement(Wd.Item,{key:"workspace"},os.createElement(I,{color:d.secondaryText},"Ask ",rt," to create a new app or clone a repository."))),l&&p.push(os.createElement(Wd.Item,{key:"claudemd"},os.createElement(I,{color:d.secondaryText},"Run ",os.createElement(I,{color:d.text},"/init")," to create a",Di," file with instructions for Hawa code."))),u&&p.push(os.createElement(Wd.Item,{key:"terminal"},os.createElement(I,{color:d.secondaryText},"Run ",os.createElement(I,{color:d.text},"/terminal-setup"),os.createElement(I,{bold:!1}," to set up terminal integration")))),p.push(os.createElement(Wd.Item,{key:"questions"},os.createElement(I,{color:d.secondaryText},"Ask ",rt," questions about your codebase."))),p.push(os.createElement(Wd.Item,{key:"changes"},os.createElement(I,{color:d.secondaryText},"Ask ",rt," to implement changes to your codebase."))),p})())),!r&&s&&os.createElement(v,{borderColor:te().secondaryBorder,flexDirection:"column",marginRight:1},os.createElement(v,{flexDirection:"column",gap:0},os.createElement(v,{marginBottom:1},os.createElement(I,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),os.createElement(v,{flexDirection:"column",marginLeft:1},i.map((p,f)=>os.createElement(I,{key:f,color:te().secondaryText},"\u2022 ",p))))),e===K6n()&&os.createElement(I,{color:te().warning},"Note: You have launched ",os.createElement(I,{bold:!0},rt)," in your home directory. For the best experience, launch it in a project directory instead."))}var EG=q(ae(),1);var _G=q(ae(),1);var eV=q(ae(),1);function x2e({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=Es("Select");return eV.default.createElement(v,{...o.option({isFocused:e})},e&&eV.default.createElement(I,{...o.focusIndicator()},r?ar.triangleDownSmall:ar.pointer),eV.default.createElement(I,{...o.label({isFocused:e,isSelected:t})},n),t&&eV.default.createElement(I,{...o.selectedIndicator()},ar.tick))}var sg=q(ae(),1);import{isDeepStrictEqual as Z6n}from"node:util";var tV=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:O2e(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var X6n=(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}}},w2e=e=>e.flatMap(t=>{if("options"in t){let r=w2e(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),Nqt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=w2e(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new tV(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}},D2e=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=w2e(t),[a,c]=(0,sg.useReducer)(X6n,{visibleOptionCount:e,defaultValue:r,options:t},Nqt),[l,u]=(0,sg.useState)(s);s!==l&&!Z6n(s,l)&&(c({type:"reset",state:Nqt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,sg.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,sg.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,sg.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,sg.useMemo)(()=>s.map((h,_)=>({...h,index:_})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,sg.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,sg.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,sg.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:p,selectFocusedOption:f}};var M2e=({isDisabled:e=!1,state:t})=>{gt((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var O2e=e=>`HEADER-${e.optionValues.join(",")}`;function $0({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=D2e({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});M2e({isDisabled:e,state:c});let{styles:l}=Es("Select");return _G.default.createElement(v,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:O2e(u),p=!e&&c.focusedValue!==void 0&&("value"in u?c.focusedValue===u.value:u.optionValues.includes(c.focusedValue)),f=!!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,_=h;if(r&&h.includes(r)){let T=h.indexOf(r);_=_G.default.createElement(_G.default.Fragment,null,h.slice(0,T),_G.default.createElement(I,{...l.highlightedText()},r),h.slice(T+r.length))}return _G.default.createElement(x2e,{key:d,isFocused:p,isSelected:f,smallPointer:A},_)}))}function xqt({onDone:e}){return gt((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),EG.default.createElement(v,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:te().secondaryBorder},EG.default.createElement(v,{marginBottom:1,flexDirection:"column"},EG.default.createElement(I,{bold:!0},"You've spent $5 this session.")),EG.default.createElement(v,null,EG.default.createElement($0,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var Nn=q(ae(),1),rr=q(ae(),1);var Wf=q(ae(),1);qe();fr();Qb();var r8n="2.4.28",Gb={VERSION:r8n,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 P2e=46,Dqt=["(\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 ipe({isDefaultModel:e=!1}){let t=Math.max(P2e,Pe().length+12),r=te(),n=Dqt[Math.floor(Math.random()*Dqt.length)];return Wf.createElement(v,{flexDirection:"column"},Wf.createElement(v,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Wf.createElement(I,null,Wf.createElement(I,null,n)," Welcome to"," ",Wf.createElement(I,{bold:!0},rt),Wf.createElement(I,{color:r.secondaryText}," v",Gb.VERSION)),Wf.createElement(Wf.Fragment,null,Wf.createElement(v,{paddingLeft:2,flexDirection:"column",gap:1},Wf.createElement(I,{color:r.secondaryText,italic:!0},"/help for help"),Wf.createElement(I,{color:r.secondaryText},"cwd: ",Pe()),Wf.createElement(I,{color:r.secondaryText},"model: ",Mo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Wf.createElement(I,{color:r.secondaryText},"small fast model: ",Mo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var PT=q(ae(),1);De();var SZ=q(ae(),1);import{randomUUID as DT}from"crypto";Ks();De();nr();fr();De();qe();import{existsSync as z0,readdirSync as Izn,statSync as vzn}from"fs";import{join as Ix,relative as Rzn}from"path";import{homedir as i8t}from"os";import{platform as Nzn}from"process";import{readFile as vx}from"fs/promises";fr();D_();yr();import{join as c8n,sep as l8n}from"path";function jf(){if(!ag())return!1;try{let e=it();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function cg(){return(c8n(Pe(),".hcode","team-memory")+l8n).normalize("NFC")}function M_(e){let t=e.normalize("NFC"),r=cg();return t.startsWith(r)}var s8t=q(uV(),1);ci();var t8t=q(uV(),1);fr();qe();De();$f();import{readFile as X6t}from"fs/promises";import{existsSync as eUe,readdirSync as Tzn,statSync as bzn}from"fs";import{join as tUe,relative as r8t}from"path";import{homedir as yzn}from"os";function e8t(e){try{let t=(0,t8t.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 Czn(e,t){return t.length===0?!0:t.some(r=>{try{return Kd(e,r,{matchBase:!0,dot:!0})}catch(n){return ye(n),!1}})}function rUe(e){let t=[];try{if(!eUe(e))return t;let r=Tzn(e);for(let n of r){let o=tUe(e,n),i=bzn(o);i.isDirectory()?t.push(...rUe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){ye(r)}return t}async function n8t(){let e=[];try{let t=tUe(yzn(),Kn,"rules");if(eUe(t)){let r=rUe(t);for(let n of r)try{let o=await X6t(n,"utf-8"),{paths:i,content:s}=e8t(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=tUe(Pe(),Kn,"rules");if(eUe(t)){let r=rUe(t);for(let n of r)try{let o=await X6t(n,"utf-8"),{paths:i,content:s}=e8t(o);i.length>0&&e.push({filePath:r8t(Pe(),n),content:s,paths:i,isProjectRule:!0})}catch(o){ye(o)}}}catch(t){ye(t)}return e}function o8t(e,t){e=Hle(e);let r=Hle(Pe()),n=e.startsWith(r)?r8t(r,e):e;return t.filter(o=>Czn(n,o.paths))}var xzn=`# hawaCodeMd
690
690
  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 Ozn(e="default"){let r=Je.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}):
691
691
 
692
692
  ${o.content}`}).join(`
@@ -784,7 +784,7 @@ data: ${JSON.stringify(L)}
784
784
  Stack trace: `+d.stack)),new Response(c.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var Kge=null,L4e=!1;function pmo(){Kge=null,L4e=!1}Ft.on("proxy:changed",pmo);function fmo(){if(L4e)return Kge;if(L4e=!0,it().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(Kge=new ger.ProxyAgent({uri:e}),er(`[proxy] using proxy: ${e}`)),Kge}function mmo(){let e=fmo();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function Zge(e){let t=e||process.env.API_TYPE,r=mmo();switch(t){case"openai":return cmo(r);case"openai-responses":return lmo(r);case"gemini":return umo(r);default:return dmo(r)}}Qb();var her=q(ae(),1);function Aer(e,t){let r=[],n=Math.max(1,Math.floor(t)),o="",i=0;for(let s of e){let a=gmo(s);o&&i+a>n?(r.push(o),o=s,i=a):(o+=s,i+=a)}return o&&r.push(o),r}function gmo(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||Amo(t)?0:hmo(t)?2:1}function Amo(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function hmo(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 $S(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 Q4e(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 mI(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}function Xge(e,t,r){let n=[];return typeof e=="number"&&n.push(Q4e(e)),typeof t=="number"&&n.push(`${t} ${t===1?"turn":"turns"}`),typeof r=="number"&&n.push(`${mI(r)} tokens`),n.length>0?` (${n.join(" \xB7 ")})`:""}De();Ks();var cu={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function eAe(e,t){cu.totalCost+=e,cu.totalAPIDuration+=t}function tAe(e,t){cu.inputTokens+=e,cu.outputTokens+=t,Ft.emit("token:change",{inputTokens:cu.inputTokens,outputTokens:cu.outputTokens})}function rAe(e,t){cu.cacheCreationTokens+=e,cu.cacheReadTokens+=t}function BB(){return{inputTokens:cu.inputTokens,outputTokens:cu.outputTokens,cacheCreationTokens:cu.cacheCreationTokens,cacheReadTokens:cu.cacheReadTokens}}function Q9(){return cu.totalCost}function nAe(){return Date.now()-cu.startTime}function _er(){return cu.totalAPIDuration}function Eer(e){cu.currentContextTokens=e}function Ser(){return cu.currentContextTokens}function _mo(){return Ct.grey(`Total duration (API): ${$S(cu.totalAPIDuration)}
785
785
  Total duration (wall): ${$S(nAe())}`)}function Ter(){(0,her.useEffect)(()=>{let e=()=>{process.stdout.write(`
786
786
  `+_mo()+`
787
- `);let t=Jn();zi({...t,lastCost:cu.totalCost,lastAPIDuration:cu.totalAPIDuration,lastDuration:nAe(),lastSessionId:_S})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}De();qe();qe();var G4e="2.4.26";globalThis.MACRO={VERSION:G4e,PACKAGE_URL:`@dahawa/${Mi}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var oAe=process.env.HAWA_CODE_USER_AGENT||`${Mi}/${G4e} (${process.env.USER_TYPE})`;De();De();nr();function sf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Fp(t);if(n?.type==="user"){t[t.length-1]=bmo(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Fp(t);n?.type==="user"&&(t[t.length-1]=Emo(n,r));return}}}),t}function Emo(e,t){return{...e,message:{...e.message,content:Tmo(e.message.content,Smo(t.content.content))}}}function Smo(e){return`
787
+ `);let t=Jn();zi({...t,lastCost:cu.totalCost,lastAPIDuration:cu.totalAPIDuration,lastDuration:nAe(),lastSessionId:_S})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}De();qe();qe();var G4e="2.4.28";globalThis.MACRO={VERSION:G4e,PACKAGE_URL:`@dahawa/${Mi}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var oAe=process.env.HAWA_CODE_USER_AGENT||`${Mi}/${G4e} (${process.env.USER_TYPE})`;De();De();nr();function sf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Fp(t);if(n?.type==="user"){t[t.length-1]=bmo(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Fp(t);n?.type==="user"&&(t[t.length-1]=Emo(n,r));return}}}),t}function Emo(e,t){return{...e,message:{...e.message,content:Tmo(e.message.content,Smo(t.content.content))}}}function Smo(e){return`
788
788
  <system-reminder>
789
789
  The user sent the following message:
790
790
  ${e}
@@ -3730,7 +3730,7 @@ Return ONLY a JSON object with the following format:
3730
3730
 
3731
3731
  > This memory file was truncated (${i?`${pot} byte limit`:`first ${dot} lines`}). Use the Read tool to view the complete file at: ${r}`:"";return{path:r,content:s+c}}catch(n){return ye(`[memoryRecall] failed to read memory file ${r}: ${n}`),null}}))).filter(r=>r!==null)}D_();function uQr(e){return typeof e=="string"?{type:"text",text:e}:e}function RXo(e){if(typeof e=="string")return e;let t=[];if(Array.isArray(e))for(let r of e)t.push(uQr(r));else t.push(uQr(e));return t}async function NXo(e,t,r){if(process.env.USER_TYPE!=="ant"||!r||!await EMr()){let i=await t();return e.abortController.signal.aborted?{message:null,shouldSkipPermissionCheck:!1}:{message:i,shouldSkipPermissionCheck:!1}}let[n,o]=await Promise.all([t(),t()]);return e.abortController.signal.aborted?{message:null,shouldSkipPermissionCheck:!1}:o.isApiErrorMessage?{message:n,shouldSkipPermissionCheck:!1}:n.isApiErrorMessage?{message:o,shouldSkipPermissionCheck:!1}:SMr(n,o)?await r(n,o):{message:n,shouldSkipPermissionCheck:!1}}async function*fZ(e,t,r,n,o,i){o.hookContext={hooks:it().hooks},Je.onQueryStart(),vMr.tryStart();let s=[...e];for(;;){for await(let d of IE([...s],t,r,n,o,i))yield d,s.push(d);let a=[];if(So.needNotification()&&a.push(...await So.takeNotificationMessages()),Ki.needNotification()){let d=await Ki.takeNotificationMessages();d&&a.push(...d)}let c=await Us.takeTeamLeadMailInbox();c&&c.length>0&&a.push({type:"text",text:Us.formatMessagesForContext(c)});let u=Je.getSessionContext(o.agentId).takePendingPrompts();if(u.length>0){let d=u.join(`
3732
3732
  `);a.push({type:"text",text:d})}if(a.length>0){let d=It(a);yield d,s.push(d);continue}for await(let d of IMr.tryStop(s,t,r,n,o))yield d,s.push(d);if(s.length>0&&s[s.length-1].type!=="user")break}!o.abortController.signal.aborted&&!it().disableSuggestion&&oQr.getSuggestionPrompt(s,o.abortController.signal).then(a=>{a&&Ft.emit(Nie,a)}),o.abortController.signal.aborted||xXo(s,t,r,o).catch(a=>{ye(a)});try{if(ct.isLazyToolEnable()){let a=Je.getInQueryContext()[i_];a&&a.size>0&&(a=[...a],yield It(`<system-notification> unload ${a.map(c=>c+" tool").join(", ")} success, must be reloaded before their next use. </system-notification>`))}}catch(a){throw a}Je.onQueryEnd(null,o.abortController.signal.aborted)}async function xXo(e,t,r,n){let o=n;n.lazyToolMode==="loading"&&n.options._tools&&(o={...n,options:{...n.options,tools:n.options._tools}});let i={messages:[...e],systemPrompt:t,userContext:r,systemContext:await Pi(),toolUseContext:o,querySource:"repl_main_thread"};cQr(i).catch(s=>{ye(s)}),eQr(i).catch(s=>{ye(s)})}async function*IE(e,t,r,n,o,i){o.turns||(o.turns={count:0}),o.turns.count++,it();let s=o.lazyToolMode==="proxy",a=o.lazyToolMode==="loading";if(s)o.options._tools||(o.options._tools=o.options.tools),o.options.tools=o.options._tools.filter(H=>H.name===yc||KDt.includes(H.name));else if(a){o.options._tools||(o.options._tools=o.options.tools);let H=Je.getInQueryContext(o.agentId)[i_],G=J=>J.name===Hd||J.name===Ru,oe=o.options._tools.filter(J=>l_.includes(J.name)&&!G(J)),le=new Map(o.options._tools.map(J=>[J.name,J])),U=H?[...H].filter(J=>!l_.includes(J)&&le.has(J)).map(J=>le.get(J)):[],me=o.options._tools.filter(G);o.options.tools=[...oe,...U,...me]}else o.options._tools&&(o.options.tools=o.options._tools,delete o.options._tools);e=Mie(e);let{messages:c,wasCompacted:l}=await _cr(e,o);if(l){e=c;for(let H of e)yield H}up("session:startup",{agentId:o.agentId,messages:e.length,timestamp:Date.now(),context:r||{}});let u=e.filter(H=>H.type==="user").pop();if(u&&u.message.content){let H=u.message.content;typeof H=="string"&&bMr(H).catch(G=>{ye(G)})}LXo(o.agentId,u,o.abortController.signal);let{systemPrompt:d,reminders:p}=await Lcr(t,r,{agentId:o.agentId,permissionMode:o.options?.permissionMode,tools:o.options.tools,allTools:o.options._tools??o.options.tools,lazyToolMode:o.lazyToolMode},e),f=Je.getInQueryContext()[ED];if(f&&f.filePath&&!Je.getInQueryContext().open_in_ide&&(yield tC("File opened in IDE: "+f.filePath),Je.getInQueryContext().open_in_ide=!0),!o.agentName){let H=await Us.takeMailInbox(Us.getCurrentTeamName(),o.agentName||AN);if(H&&H.length>0){let G=Us.formatMessagesForContext(H),oe=It([{type:"text",text:G}]);yield oe,e.push(oe)}}let h=Je.getSessionContext(o.agentId).takePendingPrompts();if(h&&h.length>0){let H=mQr(h.join(`
3733
- `));yield H,e.push(H)}let _=kXo(e,p);function T(){return tl(xg.applyToMessages(ZMr(sf(e))),d,o.options.tools,o.abortController.signal,{dangerouslySkipPermissions:o.options.dangerouslySkipPermissions??!1,model:o.options.slowAndCapableModel,prependCLISysprompt:!0,agentId:o.agentId,thinking:o.options.thinking},o)}let b=await NXo(o,T,i);if(b.message===null){yield Sr(dl);return}let C=b.message;if(process.env[q6]==="true")try{C.message.content=C.message.content.map(H=>{if(H.type==="tool_use"){let G=o.options.tools.find(oe=>oe.name===H.name);if(G.isMcp?.()){let oe=G.inputSchema.safeParse(H.input);return oe.success?H.input=oe.data:(re("\u6A21\u578B\u8FD4\u56DE\u7684\u5DE5\u5177\u975E\u6CD5\uFF0C\u9700\u8981\u8FDB\u884C\u4FEE\u590D "+H.input),H.input=iQr(H.input)),H}else if(G?.isFixSchema?.()){let oe=G.inputSchema.safeParse(H.input);return oe.success&&(H.input=oe.data),H}}return H})}catch(H){re(`Error in fixing tool input schema: ${H}`)}let R=b.shouldSkipPermissionCheck,O=await Pi();xMr([...e,C],t,r,O,o,o.agentId?"subagent":"repl_main_thread").catch(H=>{ye(H)}),yield C;let w=C.message.content.filter(H=>H.type==="tool_use");if(!w.length)return;let L=await c8t(w,o.agentId);if(L)for(let H of L)yield H;o={...o};let $=[];for await(let H of OXo(w,C,n,o,R,e))yield H,H.type==="user"&&$.push(H);if(o.abortController.signal.aborted){let H=new Set($.flatMap(G=>G.message.content.filter(oe=>oe.type==="tool_result").map(oe=>oe.tool_use_id)));for(let G of w)if(!H.has(G.id)){let oe=It([C0e(G.id)]);yield oe,$.push(oe)}yield Sr(C3);return}let P=$.sort((H,G)=>{let oe=w.findIndex(U=>U.id===H.message.content[0].id),le=w.findIndex(U=>U.id===G.message.content[0].id);return oe-le});BXo(e,_),yield*await IE([...e,C,...P],t,r,n,o,i)}async function*OXo(e,t,r,n,o,i){let s=new a_e;s.setAbortSignal(n.abortController.signal);for(let a of e){let c=new i_e,{toolName:l,isProxyCall:u}=pQr(a,n),d=fQr(n,l,u);d?(c.sync=!d.isReadOnly(),c.toolName=d.name):c.sync=!0,c.callable=()=>wXo(a,new Set(e.map(p=>p.id)),t,r,n,o,i),s.addTask(c)}for await(let a of s.getResult())yield a}function pQr(e,t){let r=e.input??{};return t.lazyToolMode==="proxy"&&e.name===yc&&(r.action??"call")==="call"&&r.name?{toolName:String(r.name),toolInput:r.input??{},isProxyCall:!0}:{toolName:e.name,toolInput:r,isProxyCall:!1}}function fQr(e,t,r){return e.options.tools.find(n=>n.name===t)??(r?e.options._tools?.find(n=>n.name===t):void 0)}async function*wXo(e,t,r,n,o,i,s){try{let{toolName:a,toolInput:c,isProxyCall:l}=pQr(e,o),u=fQr(o,a,l);if(!u){Qe("tengu_tool_use_error",{error:`No such tool available: ${a}`,messageID:r.message.id,toolName:a,toolUseID:e.id});let p=o.lazyToolMode==="proxy",f=o.lazyToolMode==="loading";yield It([{type:"tool_result",content:p?`Error: No such tool available: ${a}. Use ProxyTool({action:'describe'}) to view available tools.`:f?`Error: No such tool available: ${a}, Use the ToolLoader to load it`:`Error: No such tool available: ${a}`,is_error:!0,tool_use_id:e.id}]);return}let d=c;try{if(o.abortController.signal.aborted){Qe("tengu_tool_use_cancelled",{toolName:u.name,toolUseID:e.id}),yield It([C0e(e.id)]);return}for await(let p of MXo(u,e.id,t,d,o,n,r,i,s))yield p}catch(p){let f=mot(p);ye(p),yield It([{type:"tool_result",content:`call tool ${e.id} error ${f} `,is_error:!0,tool_use_id:e.id}])}}catch(a){let c=mot(a);yield It([{type:"tool_result",content:`call tool ${e.id} error ${c} `,is_error:!0,tool_use_id:e.id}])}}function DXo(e,t){switch(e){case Io:{let{command:r,timeout:n,run_in_background:o}=Io.inputSchema.parse(t);return{command:r.replace(`cd ${Pe()} && `,""),...n?{timeout:n}:{},...o!==void 0?{run_in_background:o}:{}}}default:return t}}async function*MXo(e,t,r,n,o,i,s,a,c){let l=e.inputSchema.safeParse(n);if(!l.success){Qe("tengu_tool_use_error",{error:`InputValidationError: ${l.error.message}`,messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200)});let b=o.lazyToolMode==="proxy"?` Use ProxyTool({action:'describe', name:'${e.name}'}) to view the correct parameter structure before retrying.`:"";yield It([{type:"tool_result",content:`InputValidationError: ${l.error.message}${b}`,is_error:!0,tool_use_id:t}]);return}let u=DXo(e,n),d=await e.validateInput?.(u,c&&c.length>0?{...o,historyMessages:c}:o);if(d?.result===!1){Qe("tengu_tool_use_error",{error:d?.message.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200),...d?.meta??{}}),yield It([{type:"tool_result",content:d.message,is_error:!0,tool_use_id:t}]);return}let p=new mJ(o.hookContext?.hooks),f=Je.getSessionContext(o.agentId).getSessionId(),A={session_id:f,transcript_path:Nl(),cwd:Pe(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PreToolUse",tool_name:e.name,tool_input:u,tool_use_id:t},h={hookWarning:null,forceCheck:!1},_=await p.execute(A);if(_){if(_.systemMessage&&!_.suppressOutput&&(yield W0(t,r,Sr(_.systemMessage),[],[],{multiline:!1,freeze:!0})),_.continue===!1){Qe("tengu_tool_use_blocked_by_hook",{toolName:e.name,toolUseID:t,reason:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook"}),yield It([{type:"tool_result",content:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="deny"){Qe("tengu_tool_use_denied_by_hook",{toolName:e.name,toolUseID:t,reason:_.hookSpecificOutput.permissionDecisionReason||"Denied by PreToolUse hook"}),yield It([{type:"tool_result",content:_.hookSpecificOutput.permissionDecisionReason||"Tool execution denied by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="ask"?(a=!1,h.forceCheck=!0):_.hookSpecificOutput?.permissionDecision==="allow"&&(yield W0(t,r,Sr(_.hookSpecificOutput.permissionDecisionReason||"Tool execution allowed by PreToolUse hook"),[],[],{multiline:!1,freeze:!0})),_.hookSpecificOutput?.updatedInput)for(let b in _.hookSpecificOutput.updatedInput)b in u&&(u[b]=_.hookSpecificOutput.updatedInput[b]);h.hookWarning=`Hook PreToolUse:${e.name} requires confirmation for this command:${_.hookSpecificOutput.permissionDecisionReason}`}let T=a?{result:!0}:await i(e,u,o,s,t,h,c);if(T.result===!1){yield It([{type:"tool_result",content:T.message,is_error:!0,tool_use_id:t}]);return}try{o.currentToolUseID=t;let b=e.call(u,c&&c.length>0?{...o,historyMessages:c}:o,i);for await(let{value:C,aborted:R}of CMr(b,o.abortController.signal)){if(R){rc.abortResponse(t);let O=new H5(o.hookContext?.hooks),w={session_id:f,transcript_path:Nl(),cwd:Pe(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:"User interrupted the tool execution",is_interrupt:!0};O.execute(w).catch(L=>{re("PostToolUseFailure hook error during interrupt:",L)}),yield It([C0e(t)]);return}switch(C.type){case"result":Qe("tengu_tool_use_success",{messageID:s.message.id,toolName:e.name});let O=new gJ(o.hookContext?.hooks),w={session_id:f,transcript_path:Nl(),cwd:Pe(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUse",tool_name:e.name,tool_input:u,tool_response:C.data||{},tool_use_id:t},L=await O.execute(w);L&&L.decision==="block"&&(yield W0(t,r,Sr(L.reason?`PostToolUse:Read hook blocking error:${L.reason}`:"Tool execution blocked by PostToolUse hook"),[],[],{multiline:!1,freeze:!0}));let $="";if(L&&L.hookSpecificOutput?.additionalContext&&($=`<system-reminder>
3733
+ `));yield H,e.push(H)}let _=kXo(e,p);function T(){return tl(xg.applyToMessages(ZMr(sf(e))),d,o.options.tools,o.abortController.signal,{dangerouslySkipPermissions:o.options.dangerouslySkipPermissions??!1,model:o.options.slowAndCapableModel,prependCLISysprompt:!0,agentId:o.agentId,thinking:o.options.thinking},o)}let b=await NXo(o,T,i);if(b.message===null){yield Sr(dl);return}let C=b.message;if(process.env[q6]==="true")try{C.message.content=C.message.content.map(H=>{if(H.type==="tool_use"){let G=o.options.tools.find(oe=>oe.name===H.name);if(G.isMcp?.()){let oe=G.inputSchema.safeParse(H.input);return oe.success?H.input=oe.data:(re("\u6A21\u578B\u8FD4\u56DE\u7684\u5DE5\u5177\u975E\u6CD5\uFF0C\u9700\u8981\u8FDB\u884C\u4FEE\u590D "+H.input),H.input=iQr(H.input)),H}else if(G?.isFixSchema?.()){let oe=G.inputSchema.safeParse(H.input);return oe.success&&(H.input=oe.data),H}}return H})}catch(H){re(`Error in fixing tool input schema: ${H}`)}let R=b.shouldSkipPermissionCheck,O=await Pi();xMr([...e,C],t,r,O,o,o.agentId?"subagent":"repl_main_thread").catch(H=>{ye(H)}),yield C;let w=C.message.content.filter(H=>H.type==="tool_use");if(!w.length)return;let L=await c8t(w,o.agentId);if(L)for(let H of L)yield H;o={...o};let $=[];for await(let H of OXo(w,C,n,o,R,e))yield H,H.type==="user"&&$.push(H);if(o.abortController.signal.aborted){let H=new Set($.flatMap(G=>G.message.content.filter(oe=>oe.type==="tool_result").map(oe=>oe.tool_use_id)));for(let G of w)if(!H.has(G.id)){let oe=It([C0e(G.id)]);yield oe,$.push(oe)}yield Sr(C3);return}let P=$.sort((H,G)=>{let oe=w.findIndex(U=>U.id===H.message.content[0].id),le=w.findIndex(U=>U.id===G.message.content[0].id);return oe-le});BXo(e,_),yield*await IE([...e,C,...P],t,r,n,o,i)}async function*OXo(e,t,r,n,o,i){let s=new a_e;s.setAbortSignal(n.abortController.signal);for(let a of e){let c=new i_e,{toolName:l,isProxyCall:u}=pQr(a,n),d=fQr(n,l,u);d?(c.sync=!d.isReadOnly(),c.toolName=d.name):c.sync=!0,c.callable=()=>wXo(a,new Set(e.map(p=>p.id)),t,r,n,o,i),s.addTask(c)}for await(let a of s.getResult())yield a}function pQr(e,t){let r=e.input??{};return t.lazyToolMode==="proxy"&&e.name===yc&&(r.action??"call")==="call"&&r.name?{toolName:String(r.name),toolInput:r.input??{},isProxyCall:!0}:{toolName:e.name,toolInput:r,isProxyCall:!1}}function fQr(e,t,r){return e.options.tools.find(n=>n.name===t)??(r?e.options._tools?.find(n=>n.name===t):void 0)}async function*wXo(e,t,r,n,o,i,s){try{let{toolName:a,toolInput:c,isProxyCall:l}=pQr(e,o),u=fQr(o,a,l);if(!u){Qe("tengu_tool_use_error",{error:`No such tool available: ${a}`,messageID:r.message.id,toolName:a,toolUseID:e.id});let p=o.lazyToolMode==="proxy",f=o.lazyToolMode==="loading",h=o.options._tools?.some(_=>_.name===a)??!1;yield It([{type:"tool_result",content:p&&h?`Error: No such tool available: ${a}. Use ProxyTool({action:'describe'}) to view available tools.`:f&&h?`Error: No such tool available: ${a}, Use the ToolLoader to load it`:`Error: No such tool available: ${a}`,is_error:!0,tool_use_id:e.id}]);return}let d=c;try{if(o.abortController.signal.aborted){Qe("tengu_tool_use_cancelled",{toolName:u.name,toolUseID:e.id}),yield It([C0e(e.id)]);return}for await(let p of MXo(u,e.id,t,d,o,n,r,i,s))yield p}catch(p){let f=mot(p);ye(p),yield It([{type:"tool_result",content:`call tool ${e.id} error ${f} `,is_error:!0,tool_use_id:e.id}])}}catch(a){let c=mot(a);yield It([{type:"tool_result",content:`call tool ${e.id} error ${c} `,is_error:!0,tool_use_id:e.id}])}}function DXo(e,t){switch(e){case Io:{let{command:r,timeout:n,run_in_background:o}=Io.inputSchema.parse(t);return{command:r.replace(`cd ${Pe()} && `,""),...n?{timeout:n}:{},...o!==void 0?{run_in_background:o}:{}}}default:return t}}async function*MXo(e,t,r,n,o,i,s,a,c){let l=e.inputSchema.safeParse(n);if(!l.success){Qe("tengu_tool_use_error",{error:`InputValidationError: ${l.error.message}`,messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200)});let b=o.lazyToolMode==="proxy"?` Use ProxyTool({action:'describe', name:'${e.name}'}) to view the correct parameter structure before retrying.`:"";yield It([{type:"tool_result",content:`InputValidationError: ${l.error.message}${b}`,is_error:!0,tool_use_id:t}]);return}let u=DXo(e,n),d=await e.validateInput?.(u,c&&c.length>0?{...o,historyMessages:c}:o);if(d?.result===!1){Qe("tengu_tool_use_error",{error:d?.message.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200),...d?.meta??{}}),yield It([{type:"tool_result",content:d.message,is_error:!0,tool_use_id:t}]);return}let p=new mJ(o.hookContext?.hooks),f=Je.getSessionContext(o.agentId).getSessionId(),A={session_id:f,transcript_path:Nl(),cwd:Pe(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PreToolUse",tool_name:e.name,tool_input:u,tool_use_id:t},h={hookWarning:null,forceCheck:!1},_=await p.execute(A);if(_){if(_.systemMessage&&!_.suppressOutput&&(yield W0(t,r,Sr(_.systemMessage),[],[],{multiline:!1,freeze:!0})),_.continue===!1){Qe("tengu_tool_use_blocked_by_hook",{toolName:e.name,toolUseID:t,reason:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook"}),yield It([{type:"tool_result",content:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="deny"){Qe("tengu_tool_use_denied_by_hook",{toolName:e.name,toolUseID:t,reason:_.hookSpecificOutput.permissionDecisionReason||"Denied by PreToolUse hook"}),yield It([{type:"tool_result",content:_.hookSpecificOutput.permissionDecisionReason||"Tool execution denied by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="ask"?(a=!1,h.forceCheck=!0):_.hookSpecificOutput?.permissionDecision==="allow"&&(yield W0(t,r,Sr(_.hookSpecificOutput.permissionDecisionReason||"Tool execution allowed by PreToolUse hook"),[],[],{multiline:!1,freeze:!0})),_.hookSpecificOutput?.updatedInput)for(let b in _.hookSpecificOutput.updatedInput)b in u&&(u[b]=_.hookSpecificOutput.updatedInput[b]);h.hookWarning=`Hook PreToolUse:${e.name} requires confirmation for this command:${_.hookSpecificOutput.permissionDecisionReason}`}let T=a?{result:!0}:await i(e,u,o,s,t,h,c);if(T.result===!1){yield It([{type:"tool_result",content:T.message,is_error:!0,tool_use_id:t}]);return}try{o.currentToolUseID=t;let b=e.call(u,c&&c.length>0?{...o,historyMessages:c}:o,i);for await(let{value:C,aborted:R}of CMr(b,o.abortController.signal)){if(R){rc.abortResponse(t);let O=new H5(o.hookContext?.hooks),w={session_id:f,transcript_path:Nl(),cwd:Pe(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:"User interrupted the tool execution",is_interrupt:!0};O.execute(w).catch(L=>{re("PostToolUseFailure hook error during interrupt:",L)}),yield It([C0e(t)]);return}switch(C.type){case"result":Qe("tengu_tool_use_success",{messageID:s.message.id,toolName:e.name});let O=new gJ(o.hookContext?.hooks),w={session_id:f,transcript_path:Nl(),cwd:Pe(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUse",tool_name:e.name,tool_input:u,tool_response:C.data||{},tool_use_id:t},L=await O.execute(w);L&&L.decision==="block"&&(yield W0(t,r,Sr(L.reason?`PostToolUse:Read hook blocking error:${L.reason}`:"Tool execution blocked by PostToolUse hook"),[],[],{multiline:!1,freeze:!0}));let $="";if(L&&L.hookSpecificOutput?.additionalContext&&($=`<system-reminder>
3734
3734
  PostToolUse:${e.name} hook additional context: ${L.hookSpecificOutput.additionalContext}
3735
3735
  </system-reminder>`),typeof C.resultForAssistant=="function"){let P=C.resultForAssistant(t);if($&&Array.isArray(P)){let H=P.find(G=>G.type==="tool_result");H&&(Array.isArray(H.content)||(H.content=[{type:"text",text:H.content}]),H.content.push({type:"text",text:$}))}yield It(P,{data:C.data,resultForAssistant:C.resultForAssistant})}else{let P=RXo(C.resultForAssistant),H=[];Array.isArray(P)?H.push(...P):P&&H.push({type:"text",text:P}),$&&H.push({type:"text",text:$}),yield It([{type:"tool_result",content:H,tool_use_id:t}],{data:C.data,resultForAssistant:C.resultForAssistant})}return;case"progress":Qe("tengu_tool_use_progress",{messageID:s.message.id,toolName:e.name}),yield W0(t,r,C.content,C.normalizedMessages,C.tools,C.meta)}}}catch(b){re("\u5DE5\u5177\u6267\u884C\u9519\u8BEF\uFF1A",b);let C=mot(b);Qe("tengu_tool_use_error",{error:C.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,1e3)});let R=new H5(o.hookContext?.hooks),O={session_id:f,transcript_path:Nl(),cwd:Pe(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:C,is_interrupt:!1},w=await R.execute(O),L="";w?.hookSpecificOutput?.additionalContext&&(L=`<system-reminder>
3736
3736
  PostToolUseFailure:${e.name} hook additional context: ${w.hookSpecificOutput.additionalContext}
package/hands.js CHANGED
@@ -758,7 +758,7 @@ data: ${JSON.stringify(z)}
758
758
  `);a=Q.pop()||"";for(let z of Q){let Y=z.trim();if(!(!Y||Y==="data: [DONE]"))if(Y.startsWith("data: ")){let q=Y.slice(6);try{let G=JSON.parse(q);w(G)}catch(G){this.logger&&this.logger.error({err:G,line:Y},"Failed to parse Gemini SSE chunk")}}else try{let q=JSON.parse(Y);w(q)}catch{}}};(async()=>{try{for(;;){let{value:Q,done:z}=await s.read();if(z)break;a+=n.decode(Q,{stream:!0}),O()}I()}catch(Q){o.error(Q)}})()}})}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_${JB()}`,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:`
759
759
 
760
760
  [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 A8r(`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"}}},Ibe=new Sbe;var lgt=X(ogt(),1);ar();fs();function $g(e){return e?typeof e.entries=="function"?Object.fromEntries(e.entries()):{...e}:{}}function sgt(e){let t=String(e?.["x-thinking-level"]??"medium").toLowerCase();return["off","low","medium","high"].includes(t)?t:"medium"}function Rtn(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t}}function Ntn(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t,summary:"auto"}}function Btn(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,r.response.usage=e.response.body?.usage,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.response.usage=e.openai.response.body?.usage):(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.openai.response.usage=e.openai.response.body?.usage),r}function J5(e,t,r){Gz(t,e),zz(t,Btn(e,r),r)}function F2(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 Z5(e){let t=new Headers(e);return t.delete("content-encoding"),t.delete("content-length"),t.delete("transfer-encoding"),t}function ZIe(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 agt=["/v1/messages"];function XIe(e){let t;try{typeof e=="string"?t=new Ov(e):e instanceof Ov?t=e:t=new Ov(e.url)}catch{return""}let r=t.pathname;for(let n of agt){let i=r.indexOf(n);if(i!==-1)return t.origin+r.slice(0,i)}return t.origin}function nX(e,t){let r=typeof e=="string"?e:e instanceof Ov?e.toString():e.url,n;try{n=new Ov(r).pathname}catch{return!1}return agt.some(i=>n.includes(i))&&(t.method==="POST"||t.method==="post")}function Otn(e){return async(t,r)=>{if(!nX(t,r))return e(t,r);let n=JSON.parse(r.body),i=await iJ.transformRequestOut(n),o=XIe(t)+"/chat/completions",s=$g(r.headers),a=s.authorization??s.Authorization??"";Rtn(i,sgt(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 K(`OpenAI Chat Completions API error: ${l.status}`,{url:o,errorResponse:_}),ZIe("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:$g(l.headers)},openai:{request:{body:i},response:{}}};if(!c){let _=await l.text(),y=new Response(_,{status:l.status,statusText:l.statusText,headers:Z5(l.headers)}),S=await iJ.transformResponseIn(y,n),I=await S.text();try{J5({...f,openai:{...f.openai,response:{body:JSON.parse(_)}},response:{...f.response,body:JSON.parse(I)}},u)}catch(w){K("\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=F2(l.body),m=new Response(g.stream,{status:l.status,statusText:l.statusText,headers:Z5(l.headers)}),A=await iJ.transformResponseIn(m,n),E=F2(A.body);return Promise.all([g.done,E.done]).then(async([_,y])=>{try{J5({...f,openai:{...f.openai,response:{body:await Mot(_)}},response:{...f.response,body:await qU(y)}},u)}catch(S){K("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u6D41\u5F0F):"+S?.stack)}}).catch(_=>K("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Chat):"+_)),new Response(E.stream,{status:A.status,statusText:A.statusText,headers:A.headers})}}function ktn(e){return async(t,r)=>{if(!nX(t,r))return e(t,r);let n=JSON.parse(r.body),i=await oJ.transformRequestOut(n),o=$g(r.headers);Ntn(i,sgt(o));let s=JSON.stringify(i),l=XIe(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 K(`OpenAI Responses API error: ${u.status} ${u.statusText}`,{url:l,status:u.status,errorResponse:S}),ZIe("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:$g(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:Z5(u.headers)}),w=await oJ.transformResponseIn(I,n),O=await w.text();try{J5({...m,openai:{...m.openai,response:{body:JSON.parse(S)}},response:{...m.response,body:JSON.parse(O)}},g,"responses")}catch(Q){K("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u975E\u6D41\u5F0F):",Q)}return new Response(O,{status:w.status,statusText:w.statusText,headers:w.headers})}let A=F2(u.body),E=new Response(A.stream,{status:u.status,statusText:u.statusText,headers:Z5(u.headers)}),_=await oJ.transformResponseIn(E,n),y=F2(_.body);return Promise.all([A.done,y.done]).then(async([S,I])=>{try{J5({...m,openai:{...m.openai,response:{body:await kot(S)}},response:{...m.response,body:await qU(I)}},g,"responses")}catch(w){K("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u6D41\u5F0F):"+w?.stack)}}).catch(S=>K("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Responses):"+S)),new Response(y.stream,{status:_.status,statusText:_.statusText,headers:_.headers})}}function Mtn(e){return async(t,r)=>{if(!nX(t,r))return e(t,r);let n=JSON.parse(r.body),i=$g(r.headers),o=await Ibe.transformRequestOut(n),s=JSON.stringify(o),a=XIe(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(y){throw K("gemini request error:",y),y}if(!c.ok){let y=await c.text();return K(`Gemini API error response: ${c.status} ${c.statusText}`,{url:a,status:c.status,errorResponse:y}),ZIe("Gemini API error","Gemini",c.status,c.statusText,y)}let u=n.stream===!0,f=i["x-agent-id"],g={request:{url:a,method:r.method,headers:$g(r.headers),body:n},response:{status:c.status,statusText:c.statusText,headers:$g(c.headers)},openai:{request:{body:o},response:{}}},m=F2(c.body),A=new Response(m.stream,{status:c.status,statusText:c.statusText,headers:Z5(c.headers)}),E=await Ibe.transformResponseIn(A),_=F2(E.body);return Promise.all([m.done,_.done]).then(async([y,S])=>{try{let I=u?Qot(y):JSON.parse(y),w=u?await qU(S):JSON.parse(S);J5({...g,openai:{...g.openai,response:{body:I}},response:{...g.response,body:w}},f)}catch(I){K("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Gemini):"+I?.stack)}}).catch(y=>K("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Gemini):"+y)),new Response(_.stream,{status:E.status,statusText:E.statusText,headers:E.headers})}}function Qtn(e){return async(t,r)=>{if(!nX(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=$g(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();K(`API error response: ${a.status} ${a.statusText}`,{url:typeof t=="string"?t:t instanceof Ov?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 Ov?t.toString():t.url,method:r.method,headers:$g(r.headers),body:JSON.parse(n)},response:{status:a.status,statusText:a.statusText,headers:$g(a.headers)}};return(async()=>{if(c){let m=await a.text();u.response.body=await qU(m)}else u.response.body=await a.json();let g=$g(r.headers)["x-agent-id"];Gz(g,u),zz(g,{request:u.request.body.messages,response:u.response.body.content,usage:u.response.body?.usage})})().catch(f=>K(`\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF:
761
- Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var rX=null,JIe=!1;function Ptn(){rX=null,JIe=!1}gr.on("proxy:changed",Ptn);function Ltn(){if(JIe)return rX;if(JIe=!0,ut().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(rX=new lgt.ProxyAgent({uri:e}),Zt(`[proxy] using proxy: ${e}`)),rX}function Ftn(){let e=Ltn();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function iX(e){let t=e||process.env.API_TYPE,r=Ftn();switch(t){case"openai":return Otn(r);case"openai-responses":return ktn(r);case"gemini":return Mtn(r);default:return Qtn(r)}}hh();var qtn=X(pe(),1);function cgt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=Utn(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function Utn(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||Htn(t)?0:$tn(t)?2:1}function Htn(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function $tn(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 __(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 aS(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}ke();fs();var hc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function oX(e,t){hc.totalCost+=e,hc.totalAPIDuration+=t}function sX(e,t){hc.inputTokens+=e,hc.outputTokens+=t,gr.emit("token:change",{inputTokens:hc.inputTokens,outputTokens:hc.outputTokens})}function aX(e,t){hc.cacheCreationTokens+=e,hc.cacheReadTokens+=t}function eTe(){return{inputTokens:hc.inputTokens,outputTokens:hc.outputTokens,cacheCreationTokens:hc.cacheCreationTokens,cacheReadTokens:hc.cacheReadTokens}}function ugt(){return hc.totalCost}function dgt(){return Date.now()-hc.startTime}function fgt(){return hc.totalAPIDuration}function pgt(e){hc.currentContextTokens=e}function mgt(){return hc.currentContextTokens}ke();He();He();var tTe="2.4.26";globalThis.MACRO={VERSION:tTe,PACKAGE_URL:`@dahawa/${Ji}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var lX=process.env.HAWA_CODE_USER_AGENT||`${Ji}/${tTe} (${process.env.USER_TYPE})`;import{randomUUID as Ry}from"crypto";fs();ke();Wt();Er();ke();He();import{existsSync as I_,readdirSync as don,statSync as fon}from"fs";import{join as uS,relative as pon}from"path";import{homedir as Fht}from"os";import{platform as mon}from"process";import{readFile as dS}from"fs/promises";Er();qg();ar();import{join as Vtn,sep as Wtn}from"path";function _m(){if(!Em())return!1;try{let e=ut();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Jf(){return(Vtn(Oe(),".hcode","team-memory")+Wtn).normalize("NFC")}function b_(e){let t=e.normalize("NFC"),r=Jf();return t.startsWith(r)}var Uht=X(a9(),1);Pi();var Mht=X(a9(),1);Er();He();ke();Du();import{readFile as Oht}from"fs/promises";import{existsSync as ETe,readdirSync as aon,statSync as lon}from"fs";import{join as _Te,relative as Qht}from"path";import{homedir as con}from"os";function kht(e){try{let t=(0,Mht.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 uon(e,t){return t.length===0?!0:t.some(r=>{try{return pc(e,r,{matchBase:!0,dot:!0})}catch(n){return ve(n),!1}})}function yTe(e){let t=[];try{if(!ETe(e))return t;let r=aon(e);for(let n of r){let i=_Te(e,n),o=lon(i);o.isDirectory()?t.push(...yTe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){ve(r)}return t}async function Pht(){let e=[];try{let t=_Te(con(),Xr,"rules");if(ETe(t)){let r=yTe(t);for(let n of r)try{let i=await Oht(n,"utf-8"),{paths:o,content:s}=kht(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=_Te(Oe(),Xr,"rules");if(ETe(t)){let r=yTe(t);for(let n of r)try{let i=await Oht(n,"utf-8"),{paths:o,content:s}=kht(i);o.length>0&&e.push({filePath:Qht(Oe(),n),content:s,paths:o,isProjectRule:!0})}catch(i){ve(i)}}}catch(t){ve(t)}return e}function Lht(e,t){e=HV(e);let r=HV(Oe()),n=e.startsWith(r)?Qht(r,e):e;return t.filter(i=>uon(n,i.paths))}var gon=`# hawaCodeMd
761
+ Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var rX=null,JIe=!1;function Ptn(){rX=null,JIe=!1}gr.on("proxy:changed",Ptn);function Ltn(){if(JIe)return rX;if(JIe=!0,ut().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(rX=new lgt.ProxyAgent({uri:e}),Zt(`[proxy] using proxy: ${e}`)),rX}function Ftn(){let e=Ltn();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function iX(e){let t=e||process.env.API_TYPE,r=Ftn();switch(t){case"openai":return Otn(r);case"openai-responses":return ktn(r);case"gemini":return Mtn(r);default:return Qtn(r)}}hh();var qtn=X(pe(),1);function cgt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=Utn(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function Utn(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||Htn(t)?0:$tn(t)?2:1}function Htn(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function $tn(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 __(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 aS(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}ke();fs();var hc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function oX(e,t){hc.totalCost+=e,hc.totalAPIDuration+=t}function sX(e,t){hc.inputTokens+=e,hc.outputTokens+=t,gr.emit("token:change",{inputTokens:hc.inputTokens,outputTokens:hc.outputTokens})}function aX(e,t){hc.cacheCreationTokens+=e,hc.cacheReadTokens+=t}function eTe(){return{inputTokens:hc.inputTokens,outputTokens:hc.outputTokens,cacheCreationTokens:hc.cacheCreationTokens,cacheReadTokens:hc.cacheReadTokens}}function ugt(){return hc.totalCost}function dgt(){return Date.now()-hc.startTime}function fgt(){return hc.totalAPIDuration}function pgt(e){hc.currentContextTokens=e}function mgt(){return hc.currentContextTokens}ke();He();He();var tTe="2.4.28";globalThis.MACRO={VERSION:tTe,PACKAGE_URL:`@dahawa/${Ji}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var lX=process.env.HAWA_CODE_USER_AGENT||`${Ji}/${tTe} (${process.env.USER_TYPE})`;import{randomUUID as Ry}from"crypto";fs();ke();Wt();Er();ke();He();import{existsSync as I_,readdirSync as don,statSync as fon}from"fs";import{join as uS,relative as pon}from"path";import{homedir as Fht}from"os";import{platform as mon}from"process";import{readFile as dS}from"fs/promises";Er();qg();ar();import{join as Vtn,sep as Wtn}from"path";function _m(){if(!Em())return!1;try{let e=ut();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Jf(){return(Vtn(Oe(),".hcode","team-memory")+Wtn).normalize("NFC")}function b_(e){let t=e.normalize("NFC"),r=Jf();return t.startsWith(r)}var Uht=X(a9(),1);Pi();var Mht=X(a9(),1);Er();He();ke();Du();import{readFile as Oht}from"fs/promises";import{existsSync as ETe,readdirSync as aon,statSync as lon}from"fs";import{join as _Te,relative as Qht}from"path";import{homedir as con}from"os";function kht(e){try{let t=(0,Mht.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 uon(e,t){return t.length===0?!0:t.some(r=>{try{return pc(e,r,{matchBase:!0,dot:!0})}catch(n){return ve(n),!1}})}function yTe(e){let t=[];try{if(!ETe(e))return t;let r=aon(e);for(let n of r){let i=_Te(e,n),o=lon(i);o.isDirectory()?t.push(...yTe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){ve(r)}return t}async function Pht(){let e=[];try{let t=_Te(con(),Xr,"rules");if(ETe(t)){let r=yTe(t);for(let n of r)try{let i=await Oht(n,"utf-8"),{paths:o,content:s}=kht(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=_Te(Oe(),Xr,"rules");if(ETe(t)){let r=yTe(t);for(let n of r)try{let i=await Oht(n,"utf-8"),{paths:o,content:s}=kht(i);o.length>0&&e.push({filePath:Qht(Oe(),n),content:s,paths:o,isProjectRule:!0})}catch(i){ve(i)}}}catch(t){ve(t)}return e}function Lht(e,t){e=HV(e);let r=HV(Oe()),n=e.startsWith(r)?Qht(r,e):e;return t.filter(i=>uon(n,i.paths))}var gon=`# hawaCodeMd
762
762
  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 Aon(e="default"){let r=Je.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}):
763
763
 
764
764
  ${i.content}`}).join(`
@@ -1130,7 +1130,7 @@ You are powered by the model ${e}.`}async function fx(){return l9()?`gitStatus:
1130
1130
  <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:c0(c.inputSchema));return{name:c.name,description:`${u}
1131
1131
 
1132
1132
  Schema:
1133
- ${f}`}}),{messages:a}=t,l=Hcn(o);return $cn(o,l,s,a)}},Qyt=qcn;zg();var Hu=X(pe(),1),TO=X(pe(),1);ke();ke();import{existsSync as Gcn,readdirSync as zcn,statSync as jcn}from"fs";import{join as Ycn}from"path";function Vcn(){let e=Zi.plan();if(!Gcn(e))return[];try{return zcn(e).filter(r=>r.endsWith(".md")).map(r=>{let n=Ycn(e,r),i=jcn(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var Pyt=({onSelect:e})=>{let[t,r]=(0,TO.useState)([]),[n,i]=(0,TO.useState)(0),[o,s]=(0,TO.useState)(!1);(0,TO.useEffect)(()=>{let c=Vcn();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}))];er((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=Be();return o?Hu.createElement(R,{flexDirection:"column",marginY:1},Hu.createElement(R,{marginBottom:1},Hu.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")),Hu.createElement(R,{marginBottom:1},Hu.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 Hu.createElement(R,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Hu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Hu.createElement(v,{color:f?l.claude:l.text}," "),Hu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Hu.createElement(v,{dimColor:!0}," ","(",dAe(c.modified),")"))}),Hu.createElement(R,{marginTop:1,marginLeft:2},Hu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Hu.createElement(R,{flexDirection:"column",marginY:1},Hu.createElement(v,null,"Loading plan history..."))};var Lyt=X(pe(),1),Wcn={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):Lyt.createElement(Pyt,{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"}},Fyt=Wcn;zg();var Kcn={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"}},Uyt=Kcn;Er();import{resolve as Jcn}from"path";var Zcn={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=Oe(),n=Jcn(r,t);da(n);let i=Oe();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},Hyt=Zcn;var ESt=X(pe(),1);var $n=X(pe(),1);var Run=X(pe(),1);var z9=X(pe(),1),xun=X(zyt(),1);var jyt={info:"blue",success:"green",error:"red",warning:"yellow"},fun={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:jyt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:jyt[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=Vt.info),e==="success"&&(t=Vt.tick),e==="error"&&(t=Vt.cross),e==="warning"&&(t=Vt.warning),{icon:t}}},Yyt=fun;var pun={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},Vyt=pun;var mun={styles:{input:({isFocused:e})=>({dimColor:!e})}},Wyt=mun;var gun={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})}},Kyt=gun;var Aun={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},Jyt=Aun;var hun={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Vt.square,remainingCharacter:Vt.squareLightShade})},Zyt=hun;var Eun={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})}},Xyt=Eun;var _un={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},ebt=_un;var yun={success:"green",error:"red",warning:"yellow",info:"blue"},bun={success:Vt.tick,error:Vt.cross,warning:Vt.warning,info:Vt.info},Cun={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:yun[e]}),message:()=>({})},config:({variant:e})=>({icon:bun[e]})},tbt=Cun;var Sun={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Vt.line})},rbt=Sun;var Iun={styles:{value:()=>({})}},nbt=Iun;var Tun={styles:{value:()=>({})}},ibt=Tun;var vun={styles:{value:()=>({})}},obt=vun;var wun={components:{Alert:Yyt,Badge:Vyt,ConfirmInput:Wyt,MultiSelect:Kyt,OrderedList:Jyt,ProgressBar:Zyt,Select:Xyt,Spinner:ebt,StatusMessage:tbt,UnorderedList:rbt,TextInput:nbt,EmailInput:ibt,PasswordInput:obt}},Dun=(0,z9.createContext)(wun);var mo=e=>(0,z9.useContext)(Dun).components[e];var Nun=X(pe(),1);var O_=X(pe(),1);var xO=X(pe(),1);var sbt=X(pe(),1);var j9=Vt.line;var Iee=(0,sbt.createContext)({marker:j9});function abt({children:e}){let{marker:t}=(0,xO.useContext)(Iee),{styles:r}=mo("UnorderedList");return xO.default.createElement(R,{...r.listItem()},xO.default.createElement(v,{...r.marker()},t),xO.default.createElement(R,{...r.content()},e))}var lbt=X(pe(),1),ixe=(0,lbt.createContext)({depth:0});function Bun({children:e}){let{depth:t}=(0,O_.useContext)(ixe),{styles:r,config:n}=mo("UnorderedList"),i=(0,O_.useMemo)(()=>({depth:t+1}),[t]),o=(0,O_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??j9}:{marker:j9}},[n,t]);return O_.default.createElement(ixe.Provider,{value:i},O_.default.createElement(Iee.Provider,{value:o},O_.default.createElement(R,{...r.list()},e)))}Bun.Item=abt;var kun=X(pe(),1);var Oun=X(pe(),1);var Y9=X(pe(),1);var wO=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 cbt=X(pe(),1);var DO=X(pe(),1);var V9=X(pe(),1);function ubt({isFocused:e,isSelected:t,children:r}){let{styles:n}=mo("Select");return V9.default.createElement(R,{...n.option({isFocused:e})},e&&V9.default.createElement(v,{...n.focusIndicator()},Vt.pointer),V9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&V9.default.createElement(v,{...n.selectedIndicator()},Vt.tick))}var Tm=X(pe(),1);import{isDeepStrictEqual as Mun}from"node:util";var Qun=(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}},dbt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new wO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},fbt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,Tm.useReducer)(Qun,{visibleOptionCount:e,defaultValue:r,options:t},dbt),[s,a]=(0,Tm.useState)(t);t!==s&&!Mun(t,s)&&(o({type:"reset",state:dbt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,Tm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,Tm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,Tm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,Tm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,Tm.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 pbt=({isDisabled:e=!1,state:t})=>{er((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function RO({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=fbt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});pbt({isDisabled:e,state:s});let{styles:a}=mo("Select");return DO.default.createElement(R,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=DO.default.createElement(DO.default.Fragment,null,l.label.slice(0,u),DO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return DO.default.createElement(ubt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Pun=X(pe(),1);var mbt=X(pe(),1);var Fun=X(pe(),1);var Tee=X(pe(),1);var Lun=X(pe(),1);var ROi=cr.inverse(" ");var Kg=X(pe(),1);var NO=X(pe(),1);var gbt=X(pe(),1);var vee=(0,gbt.createContext)({marker:Vt.line});function xee({children:e}){let{marker:t}=(0,NO.useContext)(vee),{styles:r}=mo("OrderedList");return NO.default.createElement(R,{...r.listItem()},NO.default.createElement(v,{...r.marker()},t),NO.default.createElement(R,{...r.content()},e))}var Abt=X(pe(),1),oxe=(0,Abt.createContext)({marker:""});function Jg({children:e}){let{marker:t}=(0,Kg.useContext)(oxe),{styles:r}=mo("OrderedList"),n=0;for(let o of Kg.default.Children.toArray(e))!(0,Kg.isValidElement)(o)||o.type!==xee||n++;let i=String(n).length;return Kg.default.createElement(R,{...r.list()},Kg.default.Children.map(e,(o,s)=>{if(!(0,Kg.isValidElement)(o)||o.type!==xee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Kg.default.createElement(oxe.Provider,{value:{marker:l}},Kg.default.createElement(vee.Provider,{value:{marker:l}},o))}))}Jg.Item=xee;var Hun=X(pe(),1);var sxe=X(pe(),1);var Uun=X(pe(),1);var oki=cr.inverse(" ");var $un=X(pe(),1);var qun=X(pe(),1);var zun=X(pe(),1);var wee=X(pe(),1);var Gun=X(pe(),1);var Dki=cr.inverse(" ");var qi=X(pe(),1);var axe=X(pe(),1),lxe=X(pe(),1);u9();fs();Pi();ex();ar();var hbt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Zg(){let e=[...hbt,...[...hbt].reverse()],{frame:t}=wR({interval:120});return axe.createElement(R,{flexWrap:"nowrap",height:1,width:2},axe.createElement(v,{color:Be().claude},e[t%e.length]))}var Nee=X(pe(),1);var Ree=null,k_=null,Dee=new Set;function uxe(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Xpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function cxe(){k_&&(Ree=uxe(k_),Dee.forEach(e=>e(Ree)))}function jun(e,t){return k_!==e&&(k_&&k_.off("resize",cxe),k_=e,Ree=uxe(e),e.on("resize",cxe)),Dee.add(t),()=>{Dee.delete(t),Dee.size===0&&k_&&(k_.off("resize",cxe),k_=null,Ree=null)}}function dxe(){let{stdout:e}=Nb(),[t,r]=(0,Nee.useState)(()=>uxe(e));return(0,Nee.useEffect)(()=>jun(e,r),[e]),t}function BO(){return dxe()}He();Df();ke();fh();ke();var EQi=X(Bxe(),1);import{homedir as n4}from"os";import{join as MO}from"path";import{existsSync as i4,mkdirSync as sSt,appendFileSync as oSt,readFileSync as aSt,constants as qpn,writeFileSync as Gpn,unlinkSync as lSt,statSync as zpn}from"fs";import{platform as cSt}from"process";import{accessSync as jpn}from"fs";var $pn="2.4.26",r4={VERSION:$pn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};He();var mx=MO(j0,".update.lock"),Ypn=300*1e3;function uSt(){try{if(i4(j0)||sSt(j0,{recursive:!0}),i4(mx)){let e=zpn(mx);if(Date.now()-e.mtimeMs<Ypn)return!1;try{lSt(mx)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return Gpn(mx,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function dSt(){try{i4(mx)&&aSt(mx,"utf8")===`${process.pid}`&&lSt(mx)}catch(e){ve(`Failed to release lock: ${e}`)}}async function Oxe(){try{let e=await ai("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{jpn(t,qpn.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 fSt(e){if(!uSt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:r4.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{i4(e)||sSt(e,{recursive:!0});let t=await ai(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
1133
+ ${f}`}}),{messages:a}=t,l=Hcn(o);return $cn(o,l,s,a)}},Qyt=qcn;zg();var Hu=X(pe(),1),TO=X(pe(),1);ke();ke();import{existsSync as Gcn,readdirSync as zcn,statSync as jcn}from"fs";import{join as Ycn}from"path";function Vcn(){let e=Zi.plan();if(!Gcn(e))return[];try{return zcn(e).filter(r=>r.endsWith(".md")).map(r=>{let n=Ycn(e,r),i=jcn(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var Pyt=({onSelect:e})=>{let[t,r]=(0,TO.useState)([]),[n,i]=(0,TO.useState)(0),[o,s]=(0,TO.useState)(!1);(0,TO.useEffect)(()=>{let c=Vcn();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}))];er((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=Be();return o?Hu.createElement(R,{flexDirection:"column",marginY:1},Hu.createElement(R,{marginBottom:1},Hu.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")),Hu.createElement(R,{marginBottom:1},Hu.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 Hu.createElement(R,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Hu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Hu.createElement(v,{color:f?l.claude:l.text}," "),Hu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Hu.createElement(v,{dimColor:!0}," ","(",dAe(c.modified),")"))}),Hu.createElement(R,{marginTop:1,marginLeft:2},Hu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Hu.createElement(R,{flexDirection:"column",marginY:1},Hu.createElement(v,null,"Loading plan history..."))};var Lyt=X(pe(),1),Wcn={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):Lyt.createElement(Pyt,{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"}},Fyt=Wcn;zg();var Kcn={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"}},Uyt=Kcn;Er();import{resolve as Jcn}from"path";var Zcn={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=Oe(),n=Jcn(r,t);da(n);let i=Oe();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},Hyt=Zcn;var ESt=X(pe(),1);var $n=X(pe(),1);var Run=X(pe(),1);var z9=X(pe(),1),xun=X(zyt(),1);var jyt={info:"blue",success:"green",error:"red",warning:"yellow"},fun={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:jyt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:jyt[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=Vt.info),e==="success"&&(t=Vt.tick),e==="error"&&(t=Vt.cross),e==="warning"&&(t=Vt.warning),{icon:t}}},Yyt=fun;var pun={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},Vyt=pun;var mun={styles:{input:({isFocused:e})=>({dimColor:!e})}},Wyt=mun;var gun={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})}},Kyt=gun;var Aun={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},Jyt=Aun;var hun={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Vt.square,remainingCharacter:Vt.squareLightShade})},Zyt=hun;var Eun={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})}},Xyt=Eun;var _un={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},ebt=_un;var yun={success:"green",error:"red",warning:"yellow",info:"blue"},bun={success:Vt.tick,error:Vt.cross,warning:Vt.warning,info:Vt.info},Cun={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:yun[e]}),message:()=>({})},config:({variant:e})=>({icon:bun[e]})},tbt=Cun;var Sun={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Vt.line})},rbt=Sun;var Iun={styles:{value:()=>({})}},nbt=Iun;var Tun={styles:{value:()=>({})}},ibt=Tun;var vun={styles:{value:()=>({})}},obt=vun;var wun={components:{Alert:Yyt,Badge:Vyt,ConfirmInput:Wyt,MultiSelect:Kyt,OrderedList:Jyt,ProgressBar:Zyt,Select:Xyt,Spinner:ebt,StatusMessage:tbt,UnorderedList:rbt,TextInput:nbt,EmailInput:ibt,PasswordInput:obt}},Dun=(0,z9.createContext)(wun);var mo=e=>(0,z9.useContext)(Dun).components[e];var Nun=X(pe(),1);var O_=X(pe(),1);var xO=X(pe(),1);var sbt=X(pe(),1);var j9=Vt.line;var Iee=(0,sbt.createContext)({marker:j9});function abt({children:e}){let{marker:t}=(0,xO.useContext)(Iee),{styles:r}=mo("UnorderedList");return xO.default.createElement(R,{...r.listItem()},xO.default.createElement(v,{...r.marker()},t),xO.default.createElement(R,{...r.content()},e))}var lbt=X(pe(),1),ixe=(0,lbt.createContext)({depth:0});function Bun({children:e}){let{depth:t}=(0,O_.useContext)(ixe),{styles:r,config:n}=mo("UnorderedList"),i=(0,O_.useMemo)(()=>({depth:t+1}),[t]),o=(0,O_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??j9}:{marker:j9}},[n,t]);return O_.default.createElement(ixe.Provider,{value:i},O_.default.createElement(Iee.Provider,{value:o},O_.default.createElement(R,{...r.list()},e)))}Bun.Item=abt;var kun=X(pe(),1);var Oun=X(pe(),1);var Y9=X(pe(),1);var wO=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 cbt=X(pe(),1);var DO=X(pe(),1);var V9=X(pe(),1);function ubt({isFocused:e,isSelected:t,children:r}){let{styles:n}=mo("Select");return V9.default.createElement(R,{...n.option({isFocused:e})},e&&V9.default.createElement(v,{...n.focusIndicator()},Vt.pointer),V9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&V9.default.createElement(v,{...n.selectedIndicator()},Vt.tick))}var Tm=X(pe(),1);import{isDeepStrictEqual as Mun}from"node:util";var Qun=(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}},dbt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new wO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},fbt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,Tm.useReducer)(Qun,{visibleOptionCount:e,defaultValue:r,options:t},dbt),[s,a]=(0,Tm.useState)(t);t!==s&&!Mun(t,s)&&(o({type:"reset",state:dbt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,Tm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,Tm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,Tm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,Tm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,Tm.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 pbt=({isDisabled:e=!1,state:t})=>{er((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function RO({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=fbt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});pbt({isDisabled:e,state:s});let{styles:a}=mo("Select");return DO.default.createElement(R,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=DO.default.createElement(DO.default.Fragment,null,l.label.slice(0,u),DO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return DO.default.createElement(ubt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Pun=X(pe(),1);var mbt=X(pe(),1);var Fun=X(pe(),1);var Tee=X(pe(),1);var Lun=X(pe(),1);var ROi=cr.inverse(" ");var Kg=X(pe(),1);var NO=X(pe(),1);var gbt=X(pe(),1);var vee=(0,gbt.createContext)({marker:Vt.line});function xee({children:e}){let{marker:t}=(0,NO.useContext)(vee),{styles:r}=mo("OrderedList");return NO.default.createElement(R,{...r.listItem()},NO.default.createElement(v,{...r.marker()},t),NO.default.createElement(R,{...r.content()},e))}var Abt=X(pe(),1),oxe=(0,Abt.createContext)({marker:""});function Jg({children:e}){let{marker:t}=(0,Kg.useContext)(oxe),{styles:r}=mo("OrderedList"),n=0;for(let o of Kg.default.Children.toArray(e))!(0,Kg.isValidElement)(o)||o.type!==xee||n++;let i=String(n).length;return Kg.default.createElement(R,{...r.list()},Kg.default.Children.map(e,(o,s)=>{if(!(0,Kg.isValidElement)(o)||o.type!==xee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Kg.default.createElement(oxe.Provider,{value:{marker:l}},Kg.default.createElement(vee.Provider,{value:{marker:l}},o))}))}Jg.Item=xee;var Hun=X(pe(),1);var sxe=X(pe(),1);var Uun=X(pe(),1);var oki=cr.inverse(" ");var $un=X(pe(),1);var qun=X(pe(),1);var zun=X(pe(),1);var wee=X(pe(),1);var Gun=X(pe(),1);var Dki=cr.inverse(" ");var qi=X(pe(),1);var axe=X(pe(),1),lxe=X(pe(),1);u9();fs();Pi();ex();ar();var hbt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Zg(){let e=[...hbt,...[...hbt].reverse()],{frame:t}=wR({interval:120});return axe.createElement(R,{flexWrap:"nowrap",height:1,width:2},axe.createElement(v,{color:Be().claude},e[t%e.length]))}var Nee=X(pe(),1);var Ree=null,k_=null,Dee=new Set;function uxe(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Xpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function cxe(){k_&&(Ree=uxe(k_),Dee.forEach(e=>e(Ree)))}function jun(e,t){return k_!==e&&(k_&&k_.off("resize",cxe),k_=e,Ree=uxe(e),e.on("resize",cxe)),Dee.add(t),()=>{Dee.delete(t),Dee.size===0&&k_&&(k_.off("resize",cxe),k_=null,Ree=null)}}function dxe(){let{stdout:e}=Nb(),[t,r]=(0,Nee.useState)(()=>uxe(e));return(0,Nee.useEffect)(()=>jun(e,r),[e]),t}function BO(){return dxe()}He();Df();ke();fh();ke();var EQi=X(Bxe(),1);import{homedir as n4}from"os";import{join as MO}from"path";import{existsSync as i4,mkdirSync as sSt,appendFileSync as oSt,readFileSync as aSt,constants as qpn,writeFileSync as Gpn,unlinkSync as lSt,statSync as zpn}from"fs";import{platform as cSt}from"process";import{accessSync as jpn}from"fs";var $pn="2.4.28",r4={VERSION:$pn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};He();var mx=MO(j0,".update.lock"),Ypn=300*1e3;function uSt(){try{if(i4(j0)||sSt(j0,{recursive:!0}),i4(mx)){let e=zpn(mx);if(Date.now()-e.mtimeMs<Ypn)return!1;try{lSt(mx)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return Gpn(mx,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function dSt(){try{i4(mx)&&aSt(mx,"utf8")===`${process.pid}`&&lSt(mx)}catch(e){ve(`Failed to release lock: ${e}`)}}async function Oxe(){try{let e=await ai("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{jpn(t,qpn.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 fSt(e){if(!uSt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:r4.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{i4(e)||sSt(e,{recursive:!0});let t=await ai(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
1134
1134
  # npm global path
1135
1135
  export PATH="${e}/bin:$PATH"
1136
1136
  `;if(cSt==="win32"){let n=await ai(`setx PATH "${process.env.PATH};${e}"`);if(n.code!==0)throw new Error(`Failed to update PATH on Windows: ${n.stderr}`)}else{let n=[MO(n4(),".bashrc"),MO(n4(),".bash_profile"),MO(n4(),".zshrc"),MO(n4(),".config","fish","config.fish")];for(let i of n)if(i4(i))try{if(!aSt(i,"utf8").includes(e)){if(i.includes("fish")){let s=`
@@ -3540,7 +3540,7 @@ Return ONLY a JSON object with the following format:
3540
3540
  {"selected_memories": ["filename1.md", "filename2.md"]}`;try{let c=(await W2({systemPrompt:[$4n],userPrompt:a,agentId:"memory-selector",signal:r})).message.content.find(A=>A.type==="text");if(!c||c.type!=="text")return[];let u=c.text.trim(),f=u.match(/\{[\s\S]*\}/),g=f?f[0]:u;return(N0e(g).selected_memories||[]).filter(A=>i.has(A))}catch(l){return r.aborted?[]:(ve(`[memdir] selectRelevantMemories failed: ${l}`),[])}}var yFe=200,bFe=4096;async function h7t(e){return(await Promise.all(e.map(async({path:r})=>{try{let{content:n,totalLines:i}=bW(r,0,yFe),o=n.length>bFe,s=o?n.slice(0,bFe):n,l=i>yFe||o?`
3541
3541
 
3542
3542
  > This memory file was truncated (${o?`${bFe} byte limit`:`first ${yFe} lines`}). Use the Read tool to view the complete file at: ${r}`:"";return{path:r,content:s+l}}catch(n){return ve(`[memoryRecall] failed to read memory file ${r}: ${n}`),null}}))).filter(r=>r!==null)}qg();function E7t(e){return typeof e=="string"?{type:"text",text:e}:e}function G4n(e){if(typeof e=="string")return e;let t=[];if(Array.isArray(e))for(let r of e)t.push(E7t(r));else t.push(E7t(e));return t}async function z4n(e,t,r){if(process.env.USER_TYPE!=="ant"||!r||!await f5t()){let o=await t();return e.abortController.signal.aborted?{message:null,shouldSkipPermissionCheck:!1}:{message:o,shouldSkipPermissionCheck:!1}}let[n,i]=await Promise.all([t(),t()]);return e.abortController.signal.aborted?{message:null,shouldSkipPermissionCheck:!1}:i.isApiErrorMessage?{message:n,shouldSkipPermissionCheck:!1}:n.isApiErrorMessage?{message:i,shouldSkipPermissionCheck:!1}:p5t(n,i)?await r(n,i):{message:n,shouldSkipPermissionCheck:!1}}async function*hE(e,t,r,n,i,o){i.turns||(i.turns={count:0}),i.turns.count++,ut();let s=i.lazyToolMode==="proxy",a=i.lazyToolMode==="loading";if(s)i.options._tools||(i.options._tools=i.options.tools),i.options.tools=i.options._tools.filter(G=>G.name===ja||bKe.includes(G.name));else if(a){i.options._tools||(i.options._tools=i.options.tools);let G=Je.getInQueryContext(i.agentId)[Sg],P=he=>he.name===qc||he.name===El,ee=i.options._tools.filter(he=>Gp.includes(he.name)&&!P(he)),Ee=new Map(i.options._tools.map(he=>[he.name,he])),M=G?[...G].filter(he=>!Gp.includes(he)&&Ee.has(he)).map(he=>Ee.get(he)):[],me=i.options._tools.filter(P);i.options.tools=[...ee,...M,...me]}else i.options._tools&&(i.options.tools=i.options._tools,delete i.options._tools);e=Qz(e);let{messages:l,wasCompacted:c}=await I_t(e,i);if(c){e=l;for(let G of e)yield G}bc("session:startup",{agentId:i.agentId,messages:e.length,timestamp:Date.now(),context:r||{}});let u=e.filter(G=>G.type==="user").pop();if(u&&u.message.content){let G=u.message.content;typeof G=="string"&&m5t(G).catch(P=>{ve(P)})}X4n(i.agentId,u,i.abortController.signal);let{systemPrompt:f,reminders:g}=await S7t(t,r,{agentId:i.agentId,permissionMode:i.options?.permissionMode,tools:i.options.tools,allTools:i.options._tools??i.options.tools,lazyToolMode:i.lazyToolMode},e),m=Je.getInQueryContext()[uT];if(m&&m.filePath&&!Je.getInQueryContext().open_in_ide&&(yield AE("File opened in IDE: "+m.filePath),Je.getInQueryContext().open_in_ide=!0),!i.agentName){let G=await Aa.takeMailInbox(Aa.getCurrentTeamName(),i.agentName||sN);if(G&&G.length>0){let P=Aa.formatMessagesForContext(G),ee=jt([{type:"text",text:P}]);yield ee,e.push(ee)}}let E=Je.getSessionContext(i.agentId).takePendingPrompts();if(E&&E.length>0){let G=C7t(E.join(`
3543
- `));yield G,e.push(G)}let _=J4n(e,g);function y(){return Vs(ES.applyToMessages($5t(qd(e))),f,i.options.tools,i.abortController.signal,{dangerouslySkipPermissions:i.options.dangerouslySkipPermissions??!1,model:i.options.slowAndCapableModel,prependCLISysprompt:!0,agentId:i.agentId,thinking:i.options.thinking},i)}let S=await z4n(i,y,o);if(S.message===null){yield Mr(Hl);return}let I=S.message;if(process.env[eF]==="true")try{I.message.content=I.message.content.map(G=>{if(G.type==="tool_use"){let P=i.options.tools.find(ee=>ee.name===G.name);if(P.isMcp?.()){let ee=P.inputSchema.safeParse(G.input);return ee.success?G.input=ee.data:(K("\u6A21\u578B\u8FD4\u56DE\u7684\u5DE5\u5177\u975E\u6CD5\uFF0C\u9700\u8981\u8FDB\u884C\u4FEE\u590D "+G.input),G.input=A7t(G.input)),G}else if(P?.isFixSchema?.()){let ee=P.inputSchema.safeParse(G.input);return ee.success&&(G.input=ee.data),G}}return G})}catch(G){K(`Error in fixing tool input schema: ${G}`)}let w=S.shouldSkipPermissionCheck,O=await Ys();h5t([...e,I],t,r,O,i,i.agentId?"subagent":"repl_main_thread").catch(G=>{ve(G)}),yield I;let Q=I.message.content.filter(G=>G.type==="tool_use");if(!Q.length)return;let z=await $ht(Q,i.agentId);if(z)for(let G of z)yield G;i={...i};let Y=[];for await(let G of j4n(Q,I,n,i,w,e))yield G,G.type==="user"&&Y.push(G);if(i.abortController.signal.aborted){let G=new Set(Y.flatMap(P=>P.message.content.filter(ee=>ee.type==="tool_result").map(ee=>ee.tool_use_id)));for(let P of Q)if(!G.has(P.id)){let ee=jt([Dse(P.id)]);yield ee,Y.push(ee)}yield Mr(IFe);return}let q=Y.sort((G,P)=>{let ee=Q.findIndex(M=>M.id===G.message.content[0].id),Ee=Q.findIndex(M=>M.id===P.message.content[0].id);return ee-Ee});K4n(e,_),yield*await hE([...e,I,...q],t,r,n,i,o)}async function*j4n(e,t,r,n,i,o){let s=new NX;s.setAbortSignal(n.abortController.signal);for(let a of e){let l=new DX,{toolName:c,isProxyCall:u}=y7t(a,n),f=b7t(n,c,u);f?(l.sync=!f.isReadOnly(),l.toolName=f.name):l.sync=!0,l.callable=()=>Y4n(a,new Set(e.map(g=>g.id)),t,r,n,i,o),s.addTask(l)}for await(let a of s.getResult())yield a}function y7t(e,t){let r=e.input??{};return t.lazyToolMode==="proxy"&&e.name===ja&&(r.action??"call")==="call"&&r.name?{toolName:String(r.name),toolInput:r.input??{},isProxyCall:!0}:{toolName:e.name,toolInput:r,isProxyCall:!1}}function b7t(e,t,r){return e.options.tools.find(n=>n.name===t)??(r?e.options._tools?.find(n=>n.name===t):void 0)}async function*Y4n(e,t,r,n,i,o,s){try{let{toolName:a,toolInput:l,isProxyCall:c}=y7t(e,i),u=b7t(i,a,c);if(!u){Et("tengu_tool_use_error",{error:`No such tool available: ${a}`,messageID:r.message.id,toolName:a,toolUseID:e.id});let g=i.lazyToolMode==="proxy",m=i.lazyToolMode==="loading";yield jt([{type:"tool_result",content:g?`Error: No such tool available: ${a}. Use ProxyTool({action:'describe'}) to view available tools.`:m?`Error: No such tool available: ${a}, Use the ToolLoader to load it`:`Error: No such tool available: ${a}`,is_error:!0,tool_use_id:e.id}]);return}let f=l;try{if(i.abortController.signal.aborted){Et("tengu_tool_use_cancelled",{toolName:u.name,toolUseID:e.id}),yield jt([Dse(e.id)]);return}for await(let g of W4n(u,e.id,t,f,i,n,r,o,s))yield g}catch(g){let m=SFe(g);ve(g),yield jt([{type:"tool_result",content:`call tool ${e.id} error ${m} `,is_error:!0,tool_use_id:e.id}])}}catch(a){let l=SFe(a);yield jt([{type:"tool_result",content:`call tool ${e.id} error ${l} `,is_error:!0,tool_use_id:e.id}])}}function V4n(e,t){switch(e){case Gi:{let{command:r,timeout:n,run_in_background:i}=Gi.inputSchema.parse(t);return{command:r.replace(`cd ${Oe()} && `,""),...n?{timeout:n}:{},...i!==void 0?{run_in_background:i}:{}}}default:return t}}async function*W4n(e,t,r,n,i,o,s,a,l){let c=e.inputSchema.safeParse(n);if(!c.success){Et("tengu_tool_use_error",{error:`InputValidationError: ${c.error.message}`,messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200)});let S=i.lazyToolMode==="proxy"?` Use ProxyTool({action:'describe', name:'${e.name}'}) to view the correct parameter structure before retrying.`:"";yield jt([{type:"tool_result",content:`InputValidationError: ${c.error.message}${S}`,is_error:!0,tool_use_id:t}]);return}let u=V4n(e,n),f=await e.validateInput?.(u,l&&l.length>0?{...i,historyMessages:l}:i);if(f?.result===!1){Et("tengu_tool_use_error",{error:f?.message.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200),...f?.meta??{}}),yield jt([{type:"tool_result",content:f.message,is_error:!0,tool_use_id:t}]);return}let g=new K3(i.hookContext?.hooks),m=Je.getSessionContext(i.agentId).getSessionId(),A={session_id:m,transcript_path:Ya(),cwd:Oe(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PreToolUse",tool_name:e.name,tool_input:u,tool_use_id:t},E={hookWarning:null,forceCheck:!1},_=await g.execute(A);if(_){if(_.systemMessage&&!_.suppressOutput&&(yield Hv(t,r,Mr(_.systemMessage),[],[],{multiline:!1,freeze:!0})),_.continue===!1){Et("tengu_tool_use_blocked_by_hook",{toolName:e.name,toolUseID:t,reason:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook"}),yield jt([{type:"tool_result",content:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="deny"){Et("tengu_tool_use_denied_by_hook",{toolName:e.name,toolUseID:t,reason:_.hookSpecificOutput.permissionDecisionReason||"Denied by PreToolUse hook"}),yield jt([{type:"tool_result",content:_.hookSpecificOutput.permissionDecisionReason||"Tool execution denied by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="ask"?(a=!1,E.forceCheck=!0):_.hookSpecificOutput?.permissionDecision==="allow"&&(yield Hv(t,r,Mr(_.hookSpecificOutput.permissionDecisionReason||"Tool execution allowed by PreToolUse hook"),[],[],{multiline:!1,freeze:!0})),_.hookSpecificOutput?.updatedInput)for(let S in _.hookSpecificOutput.updatedInput)S in u&&(u[S]=_.hookSpecificOutput.updatedInput[S]);E.hookWarning=`Hook PreToolUse:${e.name} requires confirmation for this command:${_.hookSpecificOutput.permissionDecisionReason}`}let y=a?{result:!0}:await o(e,u,i,s,t,E,l);if(y.result===!1){yield jt([{type:"tool_result",content:y.message,is_error:!0,tool_use_id:t}]);return}try{i.currentToolUseID=t;let S=e.call(u,l&&l.length>0?{...i,historyMessages:l}:i,o);for await(let{value:I,aborted:w}of A5t(S,i.abortController.signal)){if(w){zd.abortResponse(t);let O=new pM(i.hookContext?.hooks),Q={session_id:m,transcript_path:Ya(),cwd:Oe(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:"User interrupted the tool execution",is_interrupt:!0};O.execute(Q).catch(z=>{K("PostToolUseFailure hook error during interrupt:",z)}),yield jt([Dse(t)]);return}switch(I.type){case"result":Et("tengu_tool_use_success",{messageID:s.message.id,toolName:e.name});let O=new J3(i.hookContext?.hooks),Q={session_id:m,transcript_path:Ya(),cwd:Oe(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUse",tool_name:e.name,tool_input:u,tool_response:I.data||{},tool_use_id:t},z=await O.execute(Q);z&&z.decision==="block"&&(yield Hv(t,r,Mr(z.reason?`PostToolUse:Read hook blocking error:${z.reason}`:"Tool execution blocked by PostToolUse hook"),[],[],{multiline:!1,freeze:!0}));let Y="";if(z&&z.hookSpecificOutput?.additionalContext&&(Y=`<system-reminder>
3543
+ `));yield G,e.push(G)}let _=J4n(e,g);function y(){return Vs(ES.applyToMessages($5t(qd(e))),f,i.options.tools,i.abortController.signal,{dangerouslySkipPermissions:i.options.dangerouslySkipPermissions??!1,model:i.options.slowAndCapableModel,prependCLISysprompt:!0,agentId:i.agentId,thinking:i.options.thinking},i)}let S=await z4n(i,y,o);if(S.message===null){yield Mr(Hl);return}let I=S.message;if(process.env[eF]==="true")try{I.message.content=I.message.content.map(G=>{if(G.type==="tool_use"){let P=i.options.tools.find(ee=>ee.name===G.name);if(P.isMcp?.()){let ee=P.inputSchema.safeParse(G.input);return ee.success?G.input=ee.data:(K("\u6A21\u578B\u8FD4\u56DE\u7684\u5DE5\u5177\u975E\u6CD5\uFF0C\u9700\u8981\u8FDB\u884C\u4FEE\u590D "+G.input),G.input=A7t(G.input)),G}else if(P?.isFixSchema?.()){let ee=P.inputSchema.safeParse(G.input);return ee.success&&(G.input=ee.data),G}}return G})}catch(G){K(`Error in fixing tool input schema: ${G}`)}let w=S.shouldSkipPermissionCheck,O=await Ys();h5t([...e,I],t,r,O,i,i.agentId?"subagent":"repl_main_thread").catch(G=>{ve(G)}),yield I;let Q=I.message.content.filter(G=>G.type==="tool_use");if(!Q.length)return;let z=await $ht(Q,i.agentId);if(z)for(let G of z)yield G;i={...i};let Y=[];for await(let G of j4n(Q,I,n,i,w,e))yield G,G.type==="user"&&Y.push(G);if(i.abortController.signal.aborted){let G=new Set(Y.flatMap(P=>P.message.content.filter(ee=>ee.type==="tool_result").map(ee=>ee.tool_use_id)));for(let P of Q)if(!G.has(P.id)){let ee=jt([Dse(P.id)]);yield ee,Y.push(ee)}yield Mr(IFe);return}let q=Y.sort((G,P)=>{let ee=Q.findIndex(M=>M.id===G.message.content[0].id),Ee=Q.findIndex(M=>M.id===P.message.content[0].id);return ee-Ee});K4n(e,_),yield*await hE([...e,I,...q],t,r,n,i,o)}async function*j4n(e,t,r,n,i,o){let s=new NX;s.setAbortSignal(n.abortController.signal);for(let a of e){let l=new DX,{toolName:c,isProxyCall:u}=y7t(a,n),f=b7t(n,c,u);f?(l.sync=!f.isReadOnly(),l.toolName=f.name):l.sync=!0,l.callable=()=>Y4n(a,new Set(e.map(g=>g.id)),t,r,n,i,o),s.addTask(l)}for await(let a of s.getResult())yield a}function y7t(e,t){let r=e.input??{};return t.lazyToolMode==="proxy"&&e.name===ja&&(r.action??"call")==="call"&&r.name?{toolName:String(r.name),toolInput:r.input??{},isProxyCall:!0}:{toolName:e.name,toolInput:r,isProxyCall:!1}}function b7t(e,t,r){return e.options.tools.find(n=>n.name===t)??(r?e.options._tools?.find(n=>n.name===t):void 0)}async function*Y4n(e,t,r,n,i,o,s){try{let{toolName:a,toolInput:l,isProxyCall:c}=y7t(e,i),u=b7t(i,a,c);if(!u){Et("tengu_tool_use_error",{error:`No such tool available: ${a}`,messageID:r.message.id,toolName:a,toolUseID:e.id});let g=i.lazyToolMode==="proxy",m=i.lazyToolMode==="loading",E=i.options._tools?.some(_=>_.name===a)??!1;yield jt([{type:"tool_result",content:g&&E?`Error: No such tool available: ${a}. Use ProxyTool({action:'describe'}) to view available tools.`:m&&E?`Error: No such tool available: ${a}, Use the ToolLoader to load it`:`Error: No such tool available: ${a}`,is_error:!0,tool_use_id:e.id}]);return}let f=l;try{if(i.abortController.signal.aborted){Et("tengu_tool_use_cancelled",{toolName:u.name,toolUseID:e.id}),yield jt([Dse(e.id)]);return}for await(let g of W4n(u,e.id,t,f,i,n,r,o,s))yield g}catch(g){let m=SFe(g);ve(g),yield jt([{type:"tool_result",content:`call tool ${e.id} error ${m} `,is_error:!0,tool_use_id:e.id}])}}catch(a){let l=SFe(a);yield jt([{type:"tool_result",content:`call tool ${e.id} error ${l} `,is_error:!0,tool_use_id:e.id}])}}function V4n(e,t){switch(e){case Gi:{let{command:r,timeout:n,run_in_background:i}=Gi.inputSchema.parse(t);return{command:r.replace(`cd ${Oe()} && `,""),...n?{timeout:n}:{},...i!==void 0?{run_in_background:i}:{}}}default:return t}}async function*W4n(e,t,r,n,i,o,s,a,l){let c=e.inputSchema.safeParse(n);if(!c.success){Et("tengu_tool_use_error",{error:`InputValidationError: ${c.error.message}`,messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200)});let S=i.lazyToolMode==="proxy"?` Use ProxyTool({action:'describe', name:'${e.name}'}) to view the correct parameter structure before retrying.`:"";yield jt([{type:"tool_result",content:`InputValidationError: ${c.error.message}${S}`,is_error:!0,tool_use_id:t}]);return}let u=V4n(e,n),f=await e.validateInput?.(u,l&&l.length>0?{...i,historyMessages:l}:i);if(f?.result===!1){Et("tengu_tool_use_error",{error:f?.message.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200),...f?.meta??{}}),yield jt([{type:"tool_result",content:f.message,is_error:!0,tool_use_id:t}]);return}let g=new K3(i.hookContext?.hooks),m=Je.getSessionContext(i.agentId).getSessionId(),A={session_id:m,transcript_path:Ya(),cwd:Oe(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PreToolUse",tool_name:e.name,tool_input:u,tool_use_id:t},E={hookWarning:null,forceCheck:!1},_=await g.execute(A);if(_){if(_.systemMessage&&!_.suppressOutput&&(yield Hv(t,r,Mr(_.systemMessage),[],[],{multiline:!1,freeze:!0})),_.continue===!1){Et("tengu_tool_use_blocked_by_hook",{toolName:e.name,toolUseID:t,reason:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook"}),yield jt([{type:"tool_result",content:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="deny"){Et("tengu_tool_use_denied_by_hook",{toolName:e.name,toolUseID:t,reason:_.hookSpecificOutput.permissionDecisionReason||"Denied by PreToolUse hook"}),yield jt([{type:"tool_result",content:_.hookSpecificOutput.permissionDecisionReason||"Tool execution denied by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="ask"?(a=!1,E.forceCheck=!0):_.hookSpecificOutput?.permissionDecision==="allow"&&(yield Hv(t,r,Mr(_.hookSpecificOutput.permissionDecisionReason||"Tool execution allowed by PreToolUse hook"),[],[],{multiline:!1,freeze:!0})),_.hookSpecificOutput?.updatedInput)for(let S in _.hookSpecificOutput.updatedInput)S in u&&(u[S]=_.hookSpecificOutput.updatedInput[S]);E.hookWarning=`Hook PreToolUse:${e.name} requires confirmation for this command:${_.hookSpecificOutput.permissionDecisionReason}`}let y=a?{result:!0}:await o(e,u,i,s,t,E,l);if(y.result===!1){yield jt([{type:"tool_result",content:y.message,is_error:!0,tool_use_id:t}]);return}try{i.currentToolUseID=t;let S=e.call(u,l&&l.length>0?{...i,historyMessages:l}:i,o);for await(let{value:I,aborted:w}of A5t(S,i.abortController.signal)){if(w){zd.abortResponse(t);let O=new pM(i.hookContext?.hooks),Q={session_id:m,transcript_path:Ya(),cwd:Oe(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:"User interrupted the tool execution",is_interrupt:!0};O.execute(Q).catch(z=>{K("PostToolUseFailure hook error during interrupt:",z)}),yield jt([Dse(t)]);return}switch(I.type){case"result":Et("tengu_tool_use_success",{messageID:s.message.id,toolName:e.name});let O=new J3(i.hookContext?.hooks),Q={session_id:m,transcript_path:Ya(),cwd:Oe(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUse",tool_name:e.name,tool_input:u,tool_response:I.data||{},tool_use_id:t},z=await O.execute(Q);z&&z.decision==="block"&&(yield Hv(t,r,Mr(z.reason?`PostToolUse:Read hook blocking error:${z.reason}`:"Tool execution blocked by PostToolUse hook"),[],[],{multiline:!1,freeze:!0}));let Y="";if(z&&z.hookSpecificOutput?.additionalContext&&(Y=`<system-reminder>
3544
3544
  PostToolUse:${e.name} hook additional context: ${z.hookSpecificOutput.additionalContext}
3545
3545
  </system-reminder>`),typeof I.resultForAssistant=="function"){let q=I.resultForAssistant(t);if(Y&&Array.isArray(q)){let G=q.find(P=>P.type==="tool_result");G&&(Array.isArray(G.content)||(G.content=[{type:"text",text:G.content}]),G.content.push({type:"text",text:Y}))}yield jt(q,{data:I.data,resultForAssistant:I.resultForAssistant})}else{let q=G4n(I.resultForAssistant),G=[];Array.isArray(q)?G.push(...q):q&&G.push({type:"text",text:q}),Y&&G.push({type:"text",text:Y}),yield jt([{type:"tool_result",content:G,tool_use_id:t}],{data:I.data,resultForAssistant:I.resultForAssistant})}return;case"progress":Et("tengu_tool_use_progress",{messageID:s.message.id,toolName:e.name}),yield Hv(t,r,I.content,I.normalizedMessages,I.tools,I.meta)}}}catch(S){K("\u5DE5\u5177\u6267\u884C\u9519\u8BEF\uFF1A",S);let I=SFe(S);Et("tengu_tool_use_error",{error:I.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,1e3)});let w=new pM(i.hookContext?.hooks),O={session_id:m,transcript_path:Ya(),cwd:Oe(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:I,is_interrupt:!1},Q=await w.execute(O),z="";Q?.hookSpecificOutput?.additionalContext&&(z=`<system-reminder>
3546
3546
  PostToolUseFailure:${e.name} hook additional context: ${Q.hookSpecificOutput.additionalContext}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dahawa/hawa-code",
3
- "version": "2.4.26",
3
+ "version": "2.4.28",
4
4
  "bin": {
5
5
  "hcode": "hawa.js"
6
6
  },