@dahawa/hawa-code 2.4.5 → 2.4.6

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
@@ -675,7 +675,7 @@ globstar while`,t,p,r,f,A),this.matchOne(t.slice(p),r.slice(f),n))return this.de
675
675
  `)),WUn(e,o,{encoding:r,flush:!0})}var jHt=new gde.default({fetchMethod:e=>rFn(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});async function tGt(e){let t=bV(e);return jHt.get(t)||jHt.fetchMethod?.(t)}async function rFn(e){let t=new AbortController;setTimeout(()=>{t.abort()},1e3);let r=await _2t(e,t.signal,15),n=0;for(let o of r)gB(o)==="CRLF"&&n++;return n>3?"CRLF":"LF"}function rGt(e,t,r){if(e.has(t))return e.get(t);let n=r();return e.set(t,n),n}var nFn=new gde.default({fetchMethod:e=>nGt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function zm(e){let t=bV(e);return rGt(nFn,t,()=>nGt(t))}function nGt(e){let r=Buffer.alloc(4096),n;try{n=zHt(e,"r");let o=WHt(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 Se(`Error detecting encoding for file ${e}: ${o}`),"utf8"}finally{n&&KHt(n)}}var oFn=new gde.default({fetchMethod:e=>oGt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function gB(e){let t=bV(e);return rGt(oFn,t,()=>oGt(t))}function oGt(e,t="utf8"){try{if(!JHt(e).isFile())return"LF";let n=Buffer.alloc(4096),o=zHt(e,"r"),i=WHt(o,n,0,4096,0);KHt(o);let s=n.toString(t,0,i),a=0,c=0;for(let l=0;l<s.length;l++)s[l]===`
676
676
  `&&(l>0&&s[l-1]==="\r"?a++:c++);return a>c?"CRLF":"LF"}catch(r){return Se(`Error detecting line endings for file ${e}: ${r}`),"LF"}}function jF(e){let t=ZHt(e)?e:bV(Be(),e);return t.endsWith(" AM.png")?t.replace(" AM.png","\u202FAM.png"):t.endsWith(" PM.png")?t.replace(" PM.png","\u202FPM.png"):t}function xPe(e){return e?ZHt(e)?e:bV(Be(),e):void 0}function iGt(e){try{let t=xPe(e),r=t?XUn(Be(),t):void 0;return{absolutePath:t,relativePath:r}}catch(t){return X("getAbsoluteAndRelativePaths error ",t),{absolutePath:null,relativePath:null}}}function hde(e){try{let t=eFn(e),r=qHt(e,VHt(e));if(!KUn(t))return;let i=JUn(t).filter(s=>qHt(s,VHt(s))===r&&tFn(t,s)!==e)[0];return i||void 0}catch(t){Se(`Error finding similar file for ${e}: ${t}`);return}}function wPe(){let e=process.env.HAWA_CODE_COMPACT_LINE_PREFIX;return!(e==="0"||e==="false")}function rw({content:e,startLine:t}){if(!e)return"";let r=e.split(/\r?\n/);return wPe()?r.map((n,o)=>`${o+t} ${n}`).join(`
677
677
  `):r.map((n,o)=>{let i=String(o+t);return i.length>=6?`${i}\u2192${n}`:`${i.padStart(6," ")}\u2192${n}`}).join(`
678
- `)}function sGt(e){try{let t=ZUn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function Zx(){let e=Xn();e.hasCompletedProjectOnboarding||ps({...e,hasCompletedProjectOnboarding:!0})}function cFn(){let e=hr();To({...e,lastReleaseNotesSeen:MACRO.VERSION})}function RPe({workspaceDir:e}){let r=!Xn().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,aGt.gt)(MACRO.VERSION,o))&&(i=kue[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&cFn()},[s,r]),!r&&!s)return null;let a=iFn(sFn(e,Ci)),c=sGt(e),l=!a&&!c,u=OF.isEnabled&&!hr().shiftEnterKeyBindingInstalled,d=ee();return Ki.createElement(x,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&Ki.createElement(Ki.Fragment,null,Ki.createElement(C,{color:d.secondaryText},"Tips for getting started:"),Ki.createElement(Ud,{children:[]},(()=>{let p=[];return c&&p.push(Ki.createElement(Ud.Item,{key:"workspace"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to create a new app or clone a repository."))),l&&p.push(Ki.createElement(Ud.Item,{key:"claudemd"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/init")," to create a",Ci," file with instructions for Hawa code."))),u&&p.push(Ki.createElement(Ud.Item,{key:"terminal"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/terminal-setup"),Ki.createElement(C,{bold:!1}," to set up terminal integration")))),p.push(Ki.createElement(Ud.Item,{key:"questions"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," questions about your codebase."))),p.push(Ki.createElement(Ud.Item,{key:"changes"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to implement changes to your codebase."))),p})())),!r&&s&&Ki.createElement(x,{borderColor:ee().secondaryBorder,flexDirection:"column",marginRight:1},Ki.createElement(x,{flexDirection:"column",gap:0},Ki.createElement(x,{marginBottom:1},Ki.createElement(C,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),Ki.createElement(x,{flexDirection:"column",marginLeft:1},i.map((p,f)=>Ki.createElement(C,{key:f,color:ee().secondaryText},"\u2022 ",p))))),e===aFn()&&Ki.createElement(C,{color:ee().warning},"Note: You have launched ",Ki.createElement(C,{bold:!0},et)," in your home directory. For the best experience, launch it in a project directory instead."))}var WF=F(ne(),1);var zF=F(ne(),1);var CV=F(ne(),1);function NPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ms("Select");return CV.default.createElement(x,{...o.option({isFocused:e})},e&&CV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),CV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&CV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var Wm=F(ne(),1);import{isDeepStrictEqual as lFn}from"node:util";var IV=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:DPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var uFn=(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}}},OPe=e=>e.flatMap(t=>{if("options"in t){let r=OPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),cGt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=OPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new IV(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}},BPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=OPe(t),[a,c]=(0,Wm.useReducer)(uFn,{visibleOptionCount:e,defaultValue:r,options:t},cGt),[l,u]=(0,Wm.useState)(s);s!==l&&!lFn(s,l)&&(c({type:"reset",state:cGt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Wm.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,Wm.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,Wm.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Wm.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Wm.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Wm.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Wm.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 MPe=({isDisabled:e=!1,state:t})=>{Ct((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var DPe=e=>`HEADER-${e.optionValues.join(",")}`;function vC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=BPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});MPe({isDisabled:e,state:c});let{styles:l}=ms("Select");return zF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:DPe(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,E=h;if(r&&h.includes(r)){let S=h.indexOf(r);E=zF.default.createElement(zF.default.Fragment,null,h.slice(0,S),zF.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return zF.default.createElement(NPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function lGt({onDone:e}){return Ct((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),WF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:ee().secondaryBorder},WF.default.createElement(x,{marginBottom:1,flexDirection:"column"},WF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),WF.default.createElement(x,null,WF.default.createElement(vC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var An=F(ne(),1),Kt=F(ne(),1);var Lp=F(ne(),1);Ge();sr();Cy();var pFn="2.4.5",Iy={VERSION:pFn,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 LPe=46,fGt=["(\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 Ede({isDefaultModel:e=!1}){let t=Math.max(LPe,Be().length+12),r=ee(),n=fGt[Math.floor(Math.random()*fGt.length)];return Lp.createElement(x,{flexDirection:"column"},Lp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Lp.createElement(C,null,Lp.createElement(C,null,n)," Welcome to"," ",Lp.createElement(C,{bold:!0},et),Lp.createElement(C,{color:r.secondaryText}," v",Iy.VERSION)),Lp.createElement(Lp.Fragment,null,Lp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Lp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Lp.createElement(C,{color:r.secondaryText},"cwd: ",Be()),Lp.createElement(C,{color:r.secondaryText},"model: ",bo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Lp.createElement(C,{color:r.secondaryText},"small fast model: ",bo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var ES=F(ne(),1);Re();var LJ=F(ne(),1);import{randomUUID as mS}from"crypto";$s();Re();nr();sr();Re();Ge();import{existsSync as RC,readdirSync as P4n,statSync as L4n}from"fs";import{join as sw,relative as Q4n}from"path";import{homedir as U$t}from"os";import{platform as U4n}from"process";import{readFile as aw}from"fs/promises";sr();AE();Ar();import{join as _Fn,sep as SFn}from"path";function Qp(){if(!Km())return!1;try{let e=nt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Jm(){return(_Fn(Be(),".hcode","team-memory")+SFn).normalize("NFC")}function hE(e){let t=e.normalize("NFC"),r=Jm();return t.startsWith(r)}var F$t=F(MV(),1);Xo();var k$t=F(MV(),1);sr();Ge();Re();Bp();import{readFile as B$t}from"fs/promises";import{existsSync as tLe,readdirSync as O4n,statSync as B4n}from"fs";import{join as rLe,relative as P$t}from"path";import{homedir as M4n}from"os";function M$t(e){try{let t=(0,k$t.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 Se(t),{paths:[],content:e.trim()}}}function k4n(e,t){return t.length===0?!0:t.some(r=>{try{return Hd(e,r,{matchBase:!0,dot:!0})}catch(n){return Se(n),!1}})}function nLe(e){let t=[];try{if(!tLe(e))return t;let r=O4n(e);for(let n of r){let o=rLe(e,n),i=B4n(o);i.isDirectory()?t.push(...nLe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function L$t(){let e=[];try{let t=rLe(M4n(),Fn,"rules");if(tLe(t)){let r=nLe(t);for(let n of r)try{let o=await B$t(n,"utf-8"),{paths:i,content:s}=M$t(o);i.length>0&&e.push({filePath:n,content:s,paths:i,isProjectRule:!1})}catch(o){Se(o)}}}catch(t){Se(t)}try{let t=rLe(Be(),Fn,"rules");if(tLe(t)){let r=nLe(t);for(let n of r)try{let o=await B$t(n,"utf-8"),{paths:i,content:s}=M$t(o);i.length>0&&e.push({filePath:P$t(Be(),n),content:s,paths:i,isProjectRule:!0})}catch(o){Se(o)}}}catch(t){Se(t)}return e}function Q$t(e,t){e=tle(e);let r=tle(Be()),n=e.startsWith(r)?P$t(r,e):e;return t.filter(o=>k4n(n,o.paths))}var F4n=`# hawaCodeMd
678
+ `)}function sGt(e){try{let t=ZUn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function Zx(){let e=Xn();e.hasCompletedProjectOnboarding||ps({...e,hasCompletedProjectOnboarding:!0})}function cFn(){let e=hr();To({...e,lastReleaseNotesSeen:MACRO.VERSION})}function RPe({workspaceDir:e}){let r=!Xn().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,aGt.gt)(MACRO.VERSION,o))&&(i=kue[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&cFn()},[s,r]),!r&&!s)return null;let a=iFn(sFn(e,Ci)),c=sGt(e),l=!a&&!c,u=OF.isEnabled&&!hr().shiftEnterKeyBindingInstalled,d=ee();return Ki.createElement(x,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&Ki.createElement(Ki.Fragment,null,Ki.createElement(C,{color:d.secondaryText},"Tips for getting started:"),Ki.createElement(Ud,{children:[]},(()=>{let p=[];return c&&p.push(Ki.createElement(Ud.Item,{key:"workspace"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to create a new app or clone a repository."))),l&&p.push(Ki.createElement(Ud.Item,{key:"claudemd"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/init")," to create a",Ci," file with instructions for Hawa code."))),u&&p.push(Ki.createElement(Ud.Item,{key:"terminal"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/terminal-setup"),Ki.createElement(C,{bold:!1}," to set up terminal integration")))),p.push(Ki.createElement(Ud.Item,{key:"questions"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," questions about your codebase."))),p.push(Ki.createElement(Ud.Item,{key:"changes"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to implement changes to your codebase."))),p})())),!r&&s&&Ki.createElement(x,{borderColor:ee().secondaryBorder,flexDirection:"column",marginRight:1},Ki.createElement(x,{flexDirection:"column",gap:0},Ki.createElement(x,{marginBottom:1},Ki.createElement(C,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),Ki.createElement(x,{flexDirection:"column",marginLeft:1},i.map((p,f)=>Ki.createElement(C,{key:f,color:ee().secondaryText},"\u2022 ",p))))),e===aFn()&&Ki.createElement(C,{color:ee().warning},"Note: You have launched ",Ki.createElement(C,{bold:!0},et)," in your home directory. For the best experience, launch it in a project directory instead."))}var WF=F(ne(),1);var zF=F(ne(),1);var CV=F(ne(),1);function NPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ms("Select");return CV.default.createElement(x,{...o.option({isFocused:e})},e&&CV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),CV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&CV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var Wm=F(ne(),1);import{isDeepStrictEqual as lFn}from"node:util";var IV=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:DPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var uFn=(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}}},OPe=e=>e.flatMap(t=>{if("options"in t){let r=OPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),cGt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=OPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new IV(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}},BPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=OPe(t),[a,c]=(0,Wm.useReducer)(uFn,{visibleOptionCount:e,defaultValue:r,options:t},cGt),[l,u]=(0,Wm.useState)(s);s!==l&&!lFn(s,l)&&(c({type:"reset",state:cGt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Wm.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,Wm.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,Wm.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Wm.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Wm.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Wm.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Wm.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 MPe=({isDisabled:e=!1,state:t})=>{Ct((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var DPe=e=>`HEADER-${e.optionValues.join(",")}`;function vC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=BPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});MPe({isDisabled:e,state:c});let{styles:l}=ms("Select");return zF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:DPe(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,E=h;if(r&&h.includes(r)){let S=h.indexOf(r);E=zF.default.createElement(zF.default.Fragment,null,h.slice(0,S),zF.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return zF.default.createElement(NPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function lGt({onDone:e}){return Ct((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),WF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:ee().secondaryBorder},WF.default.createElement(x,{marginBottom:1,flexDirection:"column"},WF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),WF.default.createElement(x,null,WF.default.createElement(vC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var An=F(ne(),1),Kt=F(ne(),1);var Lp=F(ne(),1);Ge();sr();Cy();var pFn="2.4.6",Iy={VERSION:pFn,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 LPe=46,fGt=["(\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 Ede({isDefaultModel:e=!1}){let t=Math.max(LPe,Be().length+12),r=ee(),n=fGt[Math.floor(Math.random()*fGt.length)];return Lp.createElement(x,{flexDirection:"column"},Lp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Lp.createElement(C,null,Lp.createElement(C,null,n)," Welcome to"," ",Lp.createElement(C,{bold:!0},et),Lp.createElement(C,{color:r.secondaryText}," v",Iy.VERSION)),Lp.createElement(Lp.Fragment,null,Lp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Lp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Lp.createElement(C,{color:r.secondaryText},"cwd: ",Be()),Lp.createElement(C,{color:r.secondaryText},"model: ",bo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Lp.createElement(C,{color:r.secondaryText},"small fast model: ",bo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var ES=F(ne(),1);Re();var LJ=F(ne(),1);import{randomUUID as mS}from"crypto";$s();Re();nr();sr();Re();Ge();import{existsSync as RC,readdirSync as P4n,statSync as L4n}from"fs";import{join as sw,relative as Q4n}from"path";import{homedir as U$t}from"os";import{platform as U4n}from"process";import{readFile as aw}from"fs/promises";sr();AE();Ar();import{join as _Fn,sep as SFn}from"path";function Qp(){if(!Km())return!1;try{let e=nt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Jm(){return(_Fn(Be(),".hcode","team-memory")+SFn).normalize("NFC")}function hE(e){let t=e.normalize("NFC"),r=Jm();return t.startsWith(r)}var F$t=F(MV(),1);Xo();var k$t=F(MV(),1);sr();Ge();Re();Bp();import{readFile as B$t}from"fs/promises";import{existsSync as tLe,readdirSync as O4n,statSync as B4n}from"fs";import{join as rLe,relative as P$t}from"path";import{homedir as M4n}from"os";function M$t(e){try{let t=(0,k$t.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 Se(t),{paths:[],content:e.trim()}}}function k4n(e,t){return t.length===0?!0:t.some(r=>{try{return Hd(e,r,{matchBase:!0,dot:!0})}catch(n){return Se(n),!1}})}function nLe(e){let t=[];try{if(!tLe(e))return t;let r=O4n(e);for(let n of r){let o=rLe(e,n),i=B4n(o);i.isDirectory()?t.push(...nLe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function L$t(){let e=[];try{let t=rLe(M4n(),Fn,"rules");if(tLe(t)){let r=nLe(t);for(let n of r)try{let o=await B$t(n,"utf-8"),{paths:i,content:s}=M$t(o);i.length>0&&e.push({filePath:n,content:s,paths:i,isProjectRule:!1})}catch(o){Se(o)}}}catch(t){Se(t)}try{let t=rLe(Be(),Fn,"rules");if(tLe(t)){let r=nLe(t);for(let n of r)try{let o=await B$t(n,"utf-8"),{paths:i,content:s}=M$t(o);i.length>0&&e.push({filePath:P$t(Be(),n),content:s,paths:i,isProjectRule:!0})}catch(o){Se(o)}}}catch(t){Se(t)}return e}function Q$t(e,t){e=tle(e);let r=tle(Be()),n=e.startsWith(r)?P$t(r,e):e;return t.filter(o=>k4n(n,o.paths))}var F4n=`# hawaCodeMd
679
679
  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 H4n(e="default"){let r=Ke.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}):
680
680
 
681
681
  ${o.content}`}).join(`
@@ -773,7 +773,7 @@ data: ${JSON.stringify(H)}
773
773
  Stack trace: `+d.stack)),new Response(c.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var lge=null,Q4e=!1;function boo(){lge=null,Q4e=!1}kt.on("proxy:changed",boo);function Coo(){if(Q4e)return lge;if(Q4e=!0,nt().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(lge=new WZt.ProxyAgent({uri:e}),zt(`[proxy] using proxy: ${e}`)),lge}function Ioo(){let e=Coo();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function dge(e){let t=e||process.env.API_TYPE,r=Ioo();switch(t){case"openai":return _oo(r);case"openai-responses":return Soo(r);case"gemini":return yoo(r);default:return Too(r)}}Cy();var JZt=F(ne(),1);function KZt(e,t){let r=[],n=Math.max(1,Math.floor(t)),o="",i=0;for(let s of e){let a=voo(s);o&&i+a>n?(r.push(o),o=s,i=a):(o+=s,i+=a)}return o&&r.push(o),r}function voo(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||xoo(t)?0:woo(t)?2:1}function xoo(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function woo(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 x0(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 H4e(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 KC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}function fge(e,t,r){let n=[];return typeof e=="number"&&n.push(H4e(e)),typeof t=="number"&&n.push(`${t} ${t===1?"turn":"turns"}`),typeof r=="number"&&n.push(`${KC(r)} tokens`),n.length>0?` (${n.join(" \xB7 ")})`:""}Re();$s();var eu={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function pge(e,t){eu.totalCost+=e,eu.totalAPIDuration+=t}function mge(e,t){eu.inputTokens+=e,eu.outputTokens+=t,kt.emit("token:change",{inputTokens:eu.inputTokens,outputTokens:eu.outputTokens})}function gge(e,t){eu.cacheCreationTokens+=e,eu.cacheReadTokens+=t}function dM(){return{inputTokens:eu.inputTokens,outputTokens:eu.outputTokens,cacheCreationTokens:eu.cacheCreationTokens,cacheReadTokens:eu.cacheReadTokens}}function A9(){return eu.totalCost}function Age(){return Date.now()-eu.startTime}function ZZt(){return eu.totalAPIDuration}function XZt(e){eu.currentContextTokens=e}function eXt(){return eu.currentContextTokens}function Roo(){return St.grey(`Total duration (API): ${x0(eu.totalAPIDuration)}
774
774
  Total duration (wall): ${x0(Age())}`)}function tXt(){(0,JZt.useEffect)(()=>{let e=()=>{process.stdout.write(`
775
775
  `+Roo()+`
776
- `);let t=Xn();ps({...t,lastCost:eu.totalCost,lastAPIDuration:eu.totalAPIDuration,lastDuration:Age(),lastSessionId:t0})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var G4e="2.4.5";globalThis.MACRO={VERSION:G4e,PACKAGE_URL:`@dahawa/${Ii}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var hge=process.env.HAWA_CODE_USER_AGENT||`${Ii}/${G4e} (${process.env.USER_TYPE})`;Re();Re();nr();function jf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Nf(t);if(n?.type==="user"){t[t.length-1]=Boo(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Nf(t);n?.type==="user"&&(t[t.length-1]=Noo(n,r));return}}}),t}function Noo(e,t){return{...e,message:{...e.message,content:Ooo(e.message.content,Doo(t.content.content))}}}function Doo(e){return`
776
+ `);let t=Xn();ps({...t,lastCost:eu.totalCost,lastAPIDuration:eu.totalAPIDuration,lastDuration:Age(),lastSessionId:t0})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var G4e="2.4.6";globalThis.MACRO={VERSION:G4e,PACKAGE_URL:`@dahawa/${Ii}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var hge=process.env.HAWA_CODE_USER_AGENT||`${Ii}/${G4e} (${process.env.USER_TYPE})`;Re();Re();nr();function jf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Nf(t);if(n?.type==="user"){t[t.length-1]=Boo(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Nf(t);n?.type==="user"&&(t[t.length-1]=Noo(n,r));return}}}),t}function Noo(e,t){return{...e,message:{...e.message,content:Ooo(e.message.content,Doo(t.content.content))}}}function Doo(e){return`
777
777
  <system-reminder>
778
778
  The user sent the following message:
779
779
  ${e}
@@ -1090,7 +1090,7 @@ You are powered by the model ${e}.`}async function YM(){return uC()?`gitStatus:
1090
1090
  ${(await YPt()).join(`
1091
1091
  `)}
1092
1092
  `:""}function car(){return ct.isPowerShellToolEnable()?Yb:Df}var jM=["off","low","medium","high"],IAo={low:4e3,medium:1e4,high:32e3};function Xz(e){return jM.includes(e)?e:"medium"}function vAo(e){let t=e.toLowerCase();return t.includes("claude-opus-4-7")||t.includes("claude-mythos-preview")}function xAo(e){let t=e.toLowerCase();return t.includes("claude-opus-4-7")||t.includes("claude-opus-4-6")||t.includes("claude-sonnet-4-6")||t.includes("claude-mythos-preview")}function uar(e,t){let r=Xz(t);if(r!=="off"){if(xAo(e)){let n={type:"adaptive"};return vAo(e)&&(n.display="summarized"),n}return{budget_tokens:IAo[r],type:"enabled"}}}function dar(e){return e&&"budget_tokens"in e?e.budget_tokens:0}var iR="API Error",pqe="Prompt is too long",mqe="Credit balance is too low",eEe="Invalid API key \xB7 Please run /login",Vy="(no content)",KM=!process.env.DISABLE_PROMPT_CACHING,par=.8,mar=4,RAo=1,NAo=.08,DAo=3,OAo=15,BAo=3.75,MAo=.3,t7=1;function gqe(){return{user_id:`${lle()}_${t0}`}}async function Aqe(e){let t=Date.now(),r;for await(let o of e)o.type==="message_start"&&(r=Date.now()-t);return{...await e.finalMessage(),ttftMs:r}}var Zhe=new Map;function JM(e){let t=e||"default";if(Zhe.has(t))return Zhe.get(t);let r,n,o;if(e){let c=bo.getModelSourceConfig(e);c&&(r=c.base_url,n=c.auth_token,o=c.api_type)}let i={"x-app":"cli","User-Agent":hge};n&&(i.Authorization=`Bearer ${n}`);let s={defaultHeaders:i,maxRetries:0,timeout:parseInt(process.env.API_TIMEOUT_MS||String(60*1e3),10)},a=new a4.default({baseURL:r,apiKey:n,dangerouslyAllowBrowser:!0,fetch:dge(o),...s});return Zhe.set(t,a),a}function gar(){Zhe.clear()}kt.on("proxy:changed",gar);kt.on("api-key:changed",gar);function kAo(e,t=!1){return t?typeof e.message.content=="string"?{role:"user",content:[{type:"text",text:e.message.content,...KM?{cache_control:{type:"ephemeral"}}:{}}]}:{role:"user",content:e.message.content.map((r,n)=>({...r,...n===e.message.content.length-1?KM?{cache_control:{type:"ephemeral"}}:{}:{}}))}:{role:"user",content:e.message.content}}function PAo(e,t=!1){return t?typeof e.message.content=="string"?{role:"assistant",content:[{type:"text",text:e.message.content,...KM?{cache_control:{type:"ephemeral"}}:{}}]}:{role:"assistant",content:e.message.content.map((r,n)=>({...r,...n===e.message.content.length-1&&r.type!=="thinking"&&r.type!=="redacted_thinking"&&r.type!=="tool_use"?KM?{cache_control:{type:"ephemeral"}}:{}:{}}))}:{role:"assistant",content:e.message.content}}function Xhe(e){let t=e[0]||"",r=e.slice(1);return[t,r.join(`
1093
- `)].filter(Boolean)}async function jc(e,t,r,n,o,i){return await lqe(e,()=>LAo(e,t,r,n,o,i))}async function Aar(e,t,r,n,o=!1){let i=[...e],s=[],a=Object.entries(t).length>0;if(a){let c;if(n&&n.length>0)try{let d=Yc(n);XZt(d);let p=await nR(),f=Math.round(d/p*100),A=Math.max(0,p-d);c={currentTokens:d,contextLimit:p,percentUsed:f,tokensRemaining:A}}catch{}let l=await K8e(a,{...r,contextInfo:c});l.length>0&&(s=l);let u=await Nde();s.push({foot:!0,content:`<system-reminder>
1093
+ `)].filter(Boolean)}async function jc(e,t,r,n,o,i){return await lqe(e,()=>LAo(e,t,r,n,o,i))}async function Aar(e,t,r,n,o=!1){let i=[...e],s=[],a=Object.entries(t).length>0;if(a){let c;if(n&&n.length>0)try{let d=Yc(n);XZt(d);let p=await nR(),f=Math.round(d/p*100),A=Math.max(0,p-d);c={currentTokens:d,contextLimit:p,percentUsed:f,tokensRemaining:A}}catch{}let l=await K8e(a,{...r,contextInfo:c});l.length>0&&(s=l);let u=await Nde();s.push({foot:!1,content:`<system-reminder>
1094
1094
  As you answer the user's questions, you can use the following context:
1095
1095
  ${u}
1096
1096
  IMPORTANT: this context may or may not be relevant to your tasks. You should not respond to this context unless it is highly relevant to your task.</system-reminder>`})}return{systemPrompt:i,reminders:s}}async function LAo(e,t,r,n,o,i){e=nXt(e);let s=await JM(o.model),{model:a}=bo.parseModelKey(o.model),c=Xz(o.thinking),l=uar(a,c);if(o.prependCLISysprompt){let[V]=Xhe(t);Ue("tengu_sysprompt_block",{snippet:V?.slice(0,20),length:String(V?.length??0),hash:V?wAo("sha256").update(V).digest("hex"):""}),t=[lar(),...t]}let u=Xhe(t).map(V=>({...KM?{cache_control:{type:"ephemeral"}}:{},text:V,type:"text"})),d=await Promise.all(r.map(async V=>({name:V.name,description:await V.prompt({dangerouslySkipPermissions:o.dangerouslySkipPermissions},i),input_schema:"inputJSONSchema"in V&&V.inputJSONSchema?V.inputJSONSchema:SM(V.inputSchema)}))),p=await Sqt(),f=KM&&p.length>0;Ue("tengu_api_query",{model:a,messagesLength:String(JSON.stringify([...u,...e,...d]).length),temperature:String(t7),provider:"",...f?{betas:p.join(",")}:{}});let A=Date.now(),h=Date.now(),E=0,S,b;try{S=await oR(async V=>{E=V,h=Date.now();let $=s.messages.stream({model:a,max_tokens:Math.max(dar(l)+1,FAo(a)),messages:far(e),temperature:t7,system:u,tools:d,metadata:gqe(),...l?{thinking:l}:{}},{signal:n,headers:{"x-agent-id":o.agentId??"default","x-thinking-level":c,...f?{"anthropic-beta":p.join(",")}:{}}});return b=$,Aqe($)},{signal:n})}catch(V){return X("\u53D1\u9001\u8BF7\u6C42\u5931\u8D25\uFF0C\u9519\u8BEF\u6D88\u606F\uFF1A",far(e)),Se(V),Ue("tengu_api_error",{model:a,error:V instanceof Error?V.message:String(V),status:V instanceof a4.APIError?String(V.status):void 0,messageCount:String(e.length),messageTokens:String(Yc(e)),durationMs:String(Date.now()-h),durationMsIncludingRetries:String(Date.now()-A),attempt:String(E),provider:"",requestId:b?.request_id??void 0}),WM(V)}if(!S){let V=new Error("API response is undefined");return Se(V),WM(V)}if(!S.usage){let V=new Error("API response missing usage information");return Se(V),WM(V)}let I=Date.now()-h,w=Date.now()-A;Ue("tengu_api_success",{model:a,messageCount:String(e.length),messageTokens:String(Yc(e)),inputTokens:String(S.usage.input_tokens),outputTokens:String(S.usage.output_tokens),cachedInputTokens:String(S.usage.cache_read_input_tokens??0),uncachedInputTokens:String(S.usage.cache_creation_input_tokens??0),durationMs:String(I),durationMsIncludingRetries:String(w),attempt:String(E),ttftMs:String(S.ttftMs),provider:"",requestId:b?.request_id??void 0,stop_reason:S.stop_reason??void 0});let O=S.usage.input_tokens,B=S.usage.output_tokens,H=S.usage.cache_read_input_tokens??0,z=S.usage.cache_creation_input_tokens??0,P=O/1e6*DAo+B/1e6*OAo+H/1e6*MAo+z/1e6*BAo;return pge(P,w),mge(O,B),gge(z,H),{type:"assistant",message:{...S,content:Ege(S.content),usage:{...S.usage,cache_read_input_tokens:S.usage.cache_read_input_tokens??0,cache_creation_input_tokens:S.usage.cache_creation_input_tokens??0}},costUSD:P,durationMs:I,uuid:e7()}}function WM(e){return e instanceof Error&&e.message?zM(e.message):e instanceof Error&&e.message.includes("prompt is too long")?zM(pqe):e instanceof Error&&e.message.includes("Your credit balance is too low")?zM(mqe):e instanceof Error&&e.message.toLowerCase().includes("x-api-key")?zM(eEe):e instanceof Error?zM(`${iR}: ${e.message}`):zM(iR)}function far(e){return e.map((t,r)=>t.type==="user"?kAo(t,r>e.length-3):PAo(t,r>e.length-3))}async function QAo({systemPrompt:e,userPrompt:t,assistantPrompt:r,agentId:n,signal:o}){let i=va(),s=await JM(i);i=bo.parseModelKey(i).model;let a=[{role:"user",content:t},...r?[{role:"assistant",content:r}]:[]],c=Xhe(e).map(B=>({...KM?{cache_control:{type:"ephemeral"}}:{},text:B,type:"text"}));Ue("tengu_api_query",{model:i,messagesLength:String(JSON.stringify([...c,...a]).length),provider:""});let l=0,u=Date.now(),d=Date.now(),p,f;try{p=await oR(async B=>{l=B,u=Date.now();let H=s.messages.stream({model:i,max_tokens:512,messages:a,system:c,temperature:0,metadata:gqe(),stream:!0},{signal:o,headers:{"x-agent-id":n??"default"}});return f=H,await Aqe(H)},{signal:o})}catch(B){return Se(B),Ue("tengu_api_error",{error:B instanceof Error?B.message:String(B),status:B instanceof a4.APIError?String(B.status):void 0,model:i,messageCount:String(r?2:1),durationMs:String(Date.now()-u),durationMsIncludingRetries:String(Date.now()-d),attempt:String(l),provider:"",requestId:f?.request_id??void 0}),WM(B)}let A=p.usage.input_tokens,h=p.usage.output_tokens,E=p.usage.cache_read_input_tokens??0,S=p.usage.cache_creation_input_tokens??0,b=A/1e6*par+h/1e6*mar+E/1e6*NAo+S/1e6*RAo,I=Date.now()-u,w=Date.now()-d;pge(b,w),mge(A,h),gge(S,E);let O={durationMs:I,message:{...p,content:Ege(p.content)},costUSD:b,uuid:e7(),type:"assistant"};return Ue("tengu_api_success",{model:i,messageCount:String(r?2:1),inputTokens:String(A),outputTokens:String(p.usage.output_tokens),cachedInputTokens:String(p.usage.cache_read_input_tokens??0),uncachedInputTokens:String(p.usage.cache_creation_input_tokens??0),durationMs:String(I),durationMsIncludingRetries:String(w),ttftMs:String(p.ttftMs),provider:"",requestId:f?.request_id??void 0,stop_reason:p.stop_reason??void 0}),O}async function UAo({systemPrompt:e,userPrompt:t,assistantPrompt:r,agentId:n,signal:o}){let i=va(),s=await JM(i);i=bo.parseModelKey(i).model;let a=[{role:"user",content:t},...r?[{role:"assistant",content:r}]:[]];Ue("tengu_api_query",{model:i,messagesLength:String(JSON.stringify([{systemPrompt:e},...a]).length),provider:""});let c=0,l=Date.now(),u=Date.now(),d,p;try{d=await oR(async I=>{c=I,l=Date.now();let w=s.messages.stream({model:i,max_tokens:512,messages:a,system:Xhe(e).map(O=>({type:"text",text:O})),temperature:0,metadata:gqe(),stream:!0},{signal:o,headers:{"x-agent-id":n??"default"}});return p=w,await Aqe(w)},{signal:o})}catch(I){return Se(I),Ue("tengu_api_error",{error:I instanceof Error?I.message:String(I),status:I instanceof a4.APIError?String(I.status):void 0,model:i,messageCount:String(r?2:1),durationMs:String(Date.now()-l),durationMsIncludingRetries:String(Date.now()-u),attempt:String(c),provider:"",requestId:p?.request_id??void 0}),WM(I)}if(!d){let I=new Error("API response is undefined");return Se(I),WM(I)}if(!d.usage){let I=new Error("API response missing usage information");return Se(I),WM(I)}let f=Date.now()-l,A=Date.now()-u;Ue("tengu_api_success",{model:i,messageCount:String(r?2:1),inputTokens:String(d.usage.input_tokens),outputTokens:String(d.usage.output_tokens),durationMs:String(f),durationMsIncludingRetries:String(A),attempt:String(c),provider:"",requestId:p?.request_id??void 0,stop_reason:d.stop_reason??void 0});let h=d.usage.input_tokens,E=d.usage.output_tokens,S=h/1e6*par+E/1e6*mar;return pge(S,f),mge(h,E),gge(0,0),{durationMs:f,message:{...d,content:Ege(d.content),usage:{...d.usage,cache_read_input_tokens:0,cache_creation_input_tokens:0}},costUSD:S,type:"assistant",uuid:e7()}}async function dI({systemPrompt:e=[],userPrompt:t,assistantPrompt:r,enablePromptCaching:n=!1,agentId:o,signal:i}){return await lqe([{message:{role:"user",content:e.map(s=>({type:"text",text:s}))},type:"user",uuid:e7()},{message:{role:"user",content:t},type:"user",uuid:e7()}],()=>n?QAo({systemPrompt:e,userPrompt:t,assistantPrompt:r,agentId:o,signal:i}):UAo({systemPrompt:e,userPrompt:t,assistantPrompt:r,agentId:o,signal:i}))}function FAo(e){return e&&(e.includes("3-5")||e.includes("haiku"))?8192:3e4}Re();function hqe(e){process.platform==="win32"?process.title=e&&`\u2733 ${e}`:process.stdout.write(`\x1B]0;${e?`\u2733 ${e}`:""}\x07`)}async function har(e,t){try{let n=(await dI({systemPrompt:["Analyze if this message indicates a new conversation topic. If it does, extract a 2-3 word title that captures the new topic. Format your response as a JSON object with two fields: 'isNewTopic' (boolean) and 'title' (string, or null if isNewTopic is false). Only include these fields, no other text."],userPrompt:e,enablePromptCaching:!0,agentId:"terminal-title",signal:t})).message.content.filter(i=>i.type==="text").map(i=>i.text).join(""),o=sle(n);o&&typeof o=="object"&&"isNewTopic"in o&&"title"in o&&o.isNewTopic&&o.title&&hqe(o.title)}catch(r){Se(r)}}function Ni(){return new Promise(e=>{let t=setTimeout(()=>e(),100);process.stdout.write(vi.clearTerminal,()=>{clearTimeout(t),e()})})}Op();await VE();fM();Vm();Ar();Re();import{execFileSync as Ear,execSync as HAo}from"child_process";var ZM=class{hooksConfig;constructor(t){this.hooksConfig=t}async execute(t){if(!this.hooksConfig?.SessionEnd||this.hooksConfig.SessionEnd.length===0)return;let r=this.hooksConfig.SessionEnd.filter(i=>this.matchesMatcher(i.matcher,t.reason));if(r.length===0)return;let n=[],o=[];for(let i of r)if(!(!i.hooks||i.hooks.length===0))for(let s of i.hooks)s.async?o.push({group:i,hook:s}):n.push({group:i,hook:s});for(let{hook:i}of n)try{await this.executeSingleHook(i,t)}catch(s){X("SessionEnd sync hook execution error:",s)}o.length>0&&setImmediate(async()=>{for(let{hook:i}of o)try{await this.executeSingleHook(i,t),ie(`SessionEnd async hook completed: ${i.command?.substring(0,50)}...`)}catch(s){X("SessionEnd async hook execution error:",s)}})}matchesMatcher(t,r){return Kp.test(t,r)}async executeSingleHook(t,r){try{switch(t.type){case"command":return await this.executeCommandHook(t,r);default:return X(`SessionEnd hook only supports 'command' type, got: ${t.type}`),null}}catch(n){return X("SessionEnd hook execution error:",n),null}}async executeCommandHook(t,r){if(!t.command)return null;let n=t.timeout||3e4,o=t.command,i=JSON.stringify(r);try{let s=await No(o,"",{timeout:n,stdin:i});return s.code!==0&&X(`SessionEnd hook exited with code ${s.code}: ${s.stderr}`),s.stderr&&(ie(`SessionEnd hook stderr: ${s.stderr}`),console.error(`SessionEnd hook stderr: ${s.stderr}`)),{hookSpecificOutput:{hookEventName:"SessionEnd"}}}catch(s){return X("Command hook execution error:",s),null}}executeSync(t){if(!this.hooksConfig?.SessionEnd||this.hooksConfig.SessionEnd.length===0)return;let r=this.hooksConfig.SessionEnd.filter(n=>this.matchesMatcher(n.matcher,t.reason));if(r.length!==0){for(let n of r)if(!(!n.hooks||n.hooks.length===0)){for(let o of n.hooks)if(!(o.type!=="command"||!o.command))try{let i=o.timeout||5e3,s=JSON.stringify(t);if(ct.isPowerShellToolEnable()){let a="powershell.exe";try{let c=Ear("where",["pwsh.exe"],{encoding:"utf8",stdio:["pipe","pipe","ignore"]}).trim().split(/\r?\n/)[0];c&&(a=c)}catch{}Ear(a,["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-Command",o.command],{input:s,timeout:i,stdio:["pipe","inherit","inherit"]})}else HAo(o.command,{input:s,timeout:i,stdio:["pipe","inherit","inherit"]})}catch{}}}}};Ar();Xo();var Eqe=class{goals=new Map;key(t){return t||"default"}setGoal(t,r){let n=(t||"").trim();if(!n){this.clearGoal(r);return}this.goals.set(this.key(r),{condition:n,setAt:Date.now()})}getGoal(t){return this.goals.get(this.key(t))}hasGoal(t){return this.goals.has(this.key(t))}clearGoal(t){this.goals.delete(this.key(t))}},ru=new Eqe;Ge();Re();sr();async function GAo(){let e=nt();if(!(!e.hooks?.SessionEnd||e.hooks.SessionEnd.length===0))try{let t=new ZM(e.hooks),r={session_id:Date.now().toString(),transcript_path:"",cwd:Qi(),permission_mode:"default",hook_event_name:"SessionEnd",reason:"clear"};await t.execute(r)}catch(t){X("SessionEnd hook execution error:",t)}}async function $Ao(){let e=nt();if(!(!e.hooks?.SessionStart||e.hooks.SessionStart.length===0))try{let t=new $A(e.hooks),r={session_id:Date.now().toString(),transcript_path:"",cwd:Qi(),permission_mode:"default",hook_event_name:"SessionStart",source:"clear",model:process.env.ANTHROPIC_MODEL||"default"},n=await t.execute(r),o=[...n.additionalContext];n.asyncAdditionalContext&&n.getAsyncAdditionalContext().then(i=>{if(i.length>0){let s=Ke.getSessionContext(),c=[...s.getData("sessionStartAdditionalContexts")||[],...i];s.setData("sessionStartAdditionalContexts",c)}}).catch(i=>{X("SessionStart async hook execution error:",i)}),o.length>0&&Ke.getSessionContext().setData("sessionStartAdditionalContexts",o)}catch(t){X("SessionStart hook execution error:",t)}}async function r7(e,t={}){let{clearTerminal:r=!1}=t;await GAo(),r&&await Ni(),kt.emit("repl:clearMessages"),wi.cache?.clear?.(),await ta(Qi()),tR(),qp.clearTodos(),ru.clearGoal(),Ke.getInQueryContext()[e0]=0,await $Ao()}var qAo={type:"local",name:"clear",description:()=>"Clear conversation history and free up context",isEnabled:!0,isHidden:!1,async call(e,t){return r7(t),""},userFacingName(){return"clear"}},_ar=qAo;await VE();Ar();Xo();Re();Op();XD();async function VAo(){let e=nt();if(!(!e.hooks?.SessionStart||e.hooks.SessionStart.length===0))try{let t=new $A(e.hooks),r={session_id:Date.now().toString(),transcript_path:"",cwd:Qi(),permission_mode:"default",hook_event_name:"SessionStart",source:"compact",model:process.env.ANTHROPIC_MODEL||"default"},n=await t.execute(r),o=[...n.additionalContext];n.asyncAdditionalContext&&n.getAsyncAdditionalContext().then(i=>{if(i.length>0){let s=Ke.getSessionContext(),c=[...s.getData("sessionStartAdditionalContexts")||[],...i];s.setData("sessionStartAdditionalContexts",c)}}).catch(i=>{X("SessionStart async hook execution error:",i)}),o.length>0&&Ke.getSessionContext().setData("sessionStartAdditionalContexts",o)}catch(t){X("SessionStart hook execution error:",t)}}async function YAo(e,t,r,n){let o=Yc(e),i=joe(e),s=yt("Provide a detailed but concise summary of our conversation above. Focus on information that would be helpful for continuing the conversation, including what we did, what we're doing, which files we're working on, and what we're going to do next."),a=await jc(jf([...e,s]),["You are a helpful AI assistant tasked with summarizing conversations."],t,n.signal,{dangerouslySkipPermissions:!1,model:r,prependCLISysprompt:!0,thinking:nt().thinking}),c=a.message.content,l=null;if(typeof c=="string")l=c;else if(Array.isArray(c)&&c.length>0){let p=c.filter(f=>f?.type==="text");p.length>0&&(l=p.map(f=>f.text).join(`
package/hands.js CHANGED
@@ -756,7 +756,7 @@ data: ${JSON.stringify(z)}
756
756
  `);a=P.pop()||"";for(let z of P){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:P,done:z}=await s.read();if(z)break;a+=n.decode(P,{stream:!0}),O()}I()}catch(P){o.error(P)}})()}})}convertGeminiResponseToAnthropic(t){this.logger&&this.logger.debug({response:t},"Original Gemini response");try{if(!t.candidates||!t.candidates[0])throw new Error("No candidates found in Gemini response");let r=t.candidates[0],n=[];r.content&&r.content.parts&&r.content.parts.forEach(o=>{if(o.text&&n.push({type:"text",text:o.text}),o.functionCall){let s=`toolu_${LB()}`,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:`
757
757
 
758
758
  [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 h6r(`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"}}},sbe=new obe;var Mmt=X(Bmt(),1);ar();us();function Qg(e){return e?typeof e.entries=="function"?Object.fromEntries(e.entries()):{...e}:{}}function Omt(e){let t=String(e?.["x-thinking-level"]??"medium").toLowerCase();return["off","low","medium","high"].includes(t)?t:"medium"}function Nen(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t}}function Ben(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t,summary:"auto"}}function Oen(e,t="chat"){let r={request:{},response:{},openai:{request:{},response:{}}};return r.request.model=e.request.body.model,r.request.messages=e.request.body.messages,r.request.system=e.request.body.system,r.response.content=e.response.body.content,t==="responses"?(r.openai.request.model=e.openai.request.body.model,r.openai.request.input=e.openai.request.body.input,r.openai.response.output=e.openai.response.body?.output):(r.openai.request.model=e.openai.request.body.model,r.openai.request.messages=e.openai.request.body.messages,r.openai.response.choices=e.openai.response.body.choices),r}function M5(e,t,r){Iz(t,e),Tz(t,Oen(e,r),r)}function v2(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 Q5(e){let t=new Headers(e);return t.delete("content-encoding"),t.delete("content-length"),t.delete("transfer-encoding"),t}function kIe(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 kmt=["/v1/messages"];function MIe(e){let t;try{typeof e=="string"?t=new Ev(e):e instanceof Ev?t=e:t=new Ev(e.url)}catch{return""}let r=t.pathname;for(let n of kmt){let i=r.indexOf(n);if(i!==-1)return t.origin+r.slice(0,i)}return t.origin}function PZ(e,t){let r=typeof e=="string"?e:e instanceof Ev?e.toString():e.url,n;try{n=new Ev(r).pathname}catch{return!1}return kmt.some(i=>n.includes(i))&&(t.method==="POST"||t.method==="post")}function ken(e){return async(t,r)=>{if(!PZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await LK.transformRequestOut(n),o=MIe(t)+"/chat/completions",s=Qg(r.headers),a=s.authorization??s.Authorization??"";Nen(i,Omt(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 J(`OpenAI Chat Completions API error: ${l.status}`,{url:o,errorResponse:_}),kIe("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:Qg(l.headers)},openai:{request:{body:i},response:{}}};if(!c){let _=await l.text(),b=new Response(_,{status:l.status,statusText:l.statusText,headers:Q5(l.headers)}),S=await LK.transformResponseIn(b,n),I=await S.text();try{M5({...f,openai:{...f.openai,response:{body:JSON.parse(_)}},response:{...f.response,body:JSON.parse(I)}},u)}catch(w){J("\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=v2(l.body),m=new Response(g.stream,{status:l.status,statusText:l.statusText,headers:Q5(l.headers)}),A=await LK.transformResponseIn(m,n),E=v2(A.body);return Promise.all([g.done,E.done]).then(async([_,b])=>{try{M5({...f,openai:{...f.openai,response:{body:await lot(_)}},response:{...f.response,body:await xU(b)}},u)}catch(S){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u6D41\u5F0F):"+S?.stack)}}).catch(_=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Chat):"+_)),new Response(E.stream,{status:A.status,statusText:A.statusText,headers:A.headers})}}function Men(e){return async(t,r)=>{if(!PZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await FK.transformRequestOut(n),o=Qg(r.headers);Ben(i,Omt(o));let s=JSON.stringify(i),l=MIe(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 J(`OpenAI Responses API error: ${u.status} ${u.statusText}`,{url:l,status:u.status,errorResponse:S}),kIe("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:Qg(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:Q5(u.headers)}),w=await FK.transformResponseIn(I,n),O=await w.text();try{M5({...m,openai:{...m.openai,response:{body:JSON.parse(S)}},response:{...m.response,body:JSON.parse(O)}},g,"responses")}catch(P){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u975E\u6D41\u5F0F):",P)}return new Response(O,{status:w.status,statusText:w.statusText,headers:w.headers})}let A=v2(u.body),E=new Response(A.stream,{status:u.status,statusText:u.statusText,headers:Q5(u.headers)}),_=await FK.transformResponseIn(E,n),b=v2(_.body);return Promise.all([A.done,b.done]).then(async([S,I])=>{try{M5({...m,openai:{...m.openai,response:{body:await aot(S)}},response:{...m.response,body:await xU(I)}},g,"responses")}catch(w){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u6D41\u5F0F):"+w?.stack)}}).catch(S=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Responses):"+S)),new Response(b.stream,{status:_.status,statusText:_.statusText,headers:_.headers})}}function Qen(e){return async(t,r)=>{if(!PZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=Qg(r.headers),o=await sbe.transformRequestOut(n),s=JSON.stringify(o),a=MIe(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(b){throw J("gemini request error:",b),b}if(!c.ok){let b=await c.text();return J(`Gemini API error response: ${c.status} ${c.statusText}`,{url:a,status:c.status,errorResponse:b}),kIe("Gemini API error","Gemini",c.status,c.statusText,b)}let u=n.stream===!0,f=i["x-agent-id"],g={request:{url:a,method:r.method,headers:Qg(r.headers),body:n},response:{status:c.status,statusText:c.statusText,headers:Qg(c.headers)},openai:{request:{body:o},response:{}}},m=v2(c.body),A=new Response(m.stream,{status:c.status,statusText:c.statusText,headers:Q5(c.headers)}),E=await sbe.transformResponseIn(A),_=v2(E.body);return Promise.all([m.done,_.done]).then(async([b,S])=>{try{let I=u?cot(b):JSON.parse(b),w=u?await xU(S):JSON.parse(S);M5({...g,openai:{...g.openai,response:{body:I}},response:{...g.response,body:w}},f)}catch(I){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Gemini):"+I?.stack)}}).catch(b=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Gemini):"+b)),new Response(_.stream,{status:E.status,statusText:E.statusText,headers:E.headers})}}function Pen(e){return async(t,r)=>{if(!PZ(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=Qg(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();J(`API error response: ${a.status} ${a.statusText}`,{url:typeof t=="string"?t:t instanceof Ev?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 Ev?t.toString():t.url,method:r.method,headers:Qg(r.headers),body:JSON.parse(n)},response:{status:a.status,statusText:a.statusText,headers:Qg(a.headers)}};return(async()=>{if(c){let m=await a.text();u.response.body=await xU(m)}else u.response.body=await a.json();let g=Qg(r.headers)["x-agent-id"];Iz(g,u),Tz(g,{request:u.request.body.messages,response:u.response.body.content})})().catch(f=>J(`\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF:
759
- Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var QZ=null,OIe=!1;function Len(){QZ=null,OIe=!1}pr.on("proxy:changed",Len);function Fen(){if(OIe)return QZ;if(OIe=!0,lt().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(QZ=new Mmt.ProxyAgent({uri:e}),Kt(`[proxy] using proxy: ${e}`)),QZ}function Uen(){let e=Fen();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function LZ(e){let t=e||process.env.API_TYPE,r=Uen();switch(t){case"openai":return ken(r);case"openai-responses":return Men(r);case"gemini":return Qen(r);default:return Pen(r)}}ph();var Gen=X(Ae(),1);function Qmt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=Hen(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function Hen(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||$en(t)?0:qen(t)?2:1}function $en(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function qen(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 l_(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 YC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}ke();us();var dc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function FZ(e,t){dc.totalCost+=e,dc.totalAPIDuration+=t}function UZ(e,t){dc.inputTokens+=e,dc.outputTokens+=t,pr.emit("token:change",{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens})}function HZ(e,t){dc.cacheCreationTokens+=e,dc.cacheReadTokens+=t}function QIe(){return{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens,cacheCreationTokens:dc.cacheCreationTokens,cacheReadTokens:dc.cacheReadTokens}}function Pmt(){return dc.totalCost}function Lmt(){return Date.now()-dc.startTime}function Fmt(){return dc.totalAPIDuration}function Umt(e){dc.currentContextTokens=e}function Hmt(){return dc.currentContextTokens}ke();$e();$e();var PIe="2.4.5";globalThis.MACRO={VERSION:PIe,PACKAGE_URL:`@dahawa/${Ki}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var $Z=process.env.HAWA_CODE_USER_AGENT||`${Ki}/${PIe} (${process.env.USER_TYPE})`;import{randomUUID as hy}from"crypto";us();ke();Zt();_r();ke();$e();import{existsSync as p_,readdirSync as fin,statSync as pin}from"fs";import{join as KC,relative as min}from"path";import{homedir as fht}from"os";import{platform as gin}from"process";import{readFile as JC}from"fs/promises";_r();Pg();ar();import{join as Wen,sep as Ken}from"path";function mm(){if(!pm())return!1;try{let e=lt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function jf(){return(Wen(Be(),".hcode","team-memory")+Ken).normalize("NFC")}function u_(e){let t=e.normalize("NFC"),r=jf();return t.startsWith(r)}var pht=X(z5(),1);Qi();var lht=X(z5(),1);_r();$e();ke();Su();import{readFile as sht}from"fs/promises";import{existsSync as eTe,readdirSync as lin,statSync as cin}from"fs";import{join as tTe,relative as cht}from"path";import{homedir as uin}from"os";function aht(e){try{let t=(0,lht.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 din(e,t){return t.length===0?!0:t.some(r=>{try{return ac(e,r,{matchBase:!0,dot:!0})}catch(n){return ve(n),!1}})}function rTe(e){let t=[];try{if(!eTe(e))return t;let r=lin(e);for(let n of r){let i=tTe(e,n),o=cin(i);o.isDirectory()?t.push(...rTe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){ve(r)}return t}async function uht(){let e=[];try{let t=tTe(uin(),Xr,"rules");if(eTe(t)){let r=rTe(t);for(let n of r)try{let i=await sht(n,"utf-8"),{paths:o,content:s}=aht(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=tTe(Be(),Xr,"rules");if(eTe(t)){let r=rTe(t);for(let n of r)try{let i=await sht(n,"utf-8"),{paths:o,content:s}=aht(i);o.length>0&&e.push({filePath:cht(Be(),n),content:s,paths:o,isProjectRule:!0})}catch(i){ve(i)}}}catch(t){ve(t)}return e}function dht(e,t){e=bV(e);let r=bV(Be()),n=e.startsWith(r)?cht(r,e):e;return t.filter(i=>din(n,i.paths))}var Ain=`# hawaCodeMd
759
+ Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var QZ=null,OIe=!1;function Len(){QZ=null,OIe=!1}pr.on("proxy:changed",Len);function Fen(){if(OIe)return QZ;if(OIe=!0,lt().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(QZ=new Mmt.ProxyAgent({uri:e}),Kt(`[proxy] using proxy: ${e}`)),QZ}function Uen(){let e=Fen();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function LZ(e){let t=e||process.env.API_TYPE,r=Uen();switch(t){case"openai":return ken(r);case"openai-responses":return Men(r);case"gemini":return Qen(r);default:return Pen(r)}}ph();var Gen=X(Ae(),1);function Qmt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=Hen(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function Hen(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||$en(t)?0:qen(t)?2:1}function $en(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function qen(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 l_(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 YC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}ke();us();var dc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function FZ(e,t){dc.totalCost+=e,dc.totalAPIDuration+=t}function UZ(e,t){dc.inputTokens+=e,dc.outputTokens+=t,pr.emit("token:change",{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens})}function HZ(e,t){dc.cacheCreationTokens+=e,dc.cacheReadTokens+=t}function QIe(){return{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens,cacheCreationTokens:dc.cacheCreationTokens,cacheReadTokens:dc.cacheReadTokens}}function Pmt(){return dc.totalCost}function Lmt(){return Date.now()-dc.startTime}function Fmt(){return dc.totalAPIDuration}function Umt(e){dc.currentContextTokens=e}function Hmt(){return dc.currentContextTokens}ke();$e();$e();var PIe="2.4.6";globalThis.MACRO={VERSION:PIe,PACKAGE_URL:`@dahawa/${Ki}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var $Z=process.env.HAWA_CODE_USER_AGENT||`${Ki}/${PIe} (${process.env.USER_TYPE})`;import{randomUUID as hy}from"crypto";us();ke();Zt();_r();ke();$e();import{existsSync as p_,readdirSync as fin,statSync as pin}from"fs";import{join as KC,relative as min}from"path";import{homedir as fht}from"os";import{platform as gin}from"process";import{readFile as JC}from"fs/promises";_r();Pg();ar();import{join as Wen,sep as Ken}from"path";function mm(){if(!pm())return!1;try{let e=lt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function jf(){return(Wen(Be(),".hcode","team-memory")+Ken).normalize("NFC")}function u_(e){let t=e.normalize("NFC"),r=jf();return t.startsWith(r)}var pht=X(z5(),1);Qi();var lht=X(z5(),1);_r();$e();ke();Su();import{readFile as sht}from"fs/promises";import{existsSync as eTe,readdirSync as lin,statSync as cin}from"fs";import{join as tTe,relative as cht}from"path";import{homedir as uin}from"os";function aht(e){try{let t=(0,lht.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 din(e,t){return t.length===0?!0:t.some(r=>{try{return ac(e,r,{matchBase:!0,dot:!0})}catch(n){return ve(n),!1}})}function rTe(e){let t=[];try{if(!eTe(e))return t;let r=lin(e);for(let n of r){let i=tTe(e,n),o=cin(i);o.isDirectory()?t.push(...rTe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){ve(r)}return t}async function uht(){let e=[];try{let t=tTe(uin(),Xr,"rules");if(eTe(t)){let r=rTe(t);for(let n of r)try{let i=await sht(n,"utf-8"),{paths:o,content:s}=aht(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=tTe(Be(),Xr,"rules");if(eTe(t)){let r=rTe(t);for(let n of r)try{let i=await sht(n,"utf-8"),{paths:o,content:s}=aht(i);o.length>0&&e.push({filePath:cht(Be(),n),content:s,paths:o,isProjectRule:!0})}catch(i){ve(i)}}}catch(t){ve(t)}return e}function dht(e,t){e=bV(e);let r=bV(Be()),n=e.startsWith(r)?cht(r,e):e;return t.filter(i=>din(n,i.paths))}var Ain=`# hawaCodeMd
760
760
  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 hin(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}):
761
761
 
762
762
  ${i.content}`}).join(`
@@ -1128,7 +1128,7 @@ You are powered by the model ${e}.`}async function Jv(){return j5()?`gitStatus:
1128
1128
  <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:hI(c.inputSchema));return{name:c.name,description:`${u}
1129
1129
 
1130
1130
  Schema:
1131
- ${f}`}}),{messages:a}=t,l=$ln(o);return qln(o,l,s,a)}},cyt=Gln;Ug();var Mu=X(Ae(),1),fO=X(Ae(),1);ke();ke();import{existsSync as zln,readdirSync as jln,statSync as Yln}from"fs";import{join as Vln}from"path";function Wln(){let e=Ji.plan();if(!zln(e))return[];try{return jln(e).filter(r=>r.endsWith(".md")).map(r=>{let n=Vln(e,r),i=Yln(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var uyt=({onSelect:e})=>{let[t,r]=(0,fO.useState)([]),[n,i]=(0,fO.useState)(0),[o,s]=(0,fO.useState)(!1);(0,fO.useEffect)(()=>{let c=Wln();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}))];vr((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=Pe();return o?Mu.createElement(N,{flexDirection:"column",marginY:1},Mu.createElement(N,{marginBottom:1},Mu.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")),Mu.createElement(N,{marginBottom:1},Mu.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 Mu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Mu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Mu.createElement(v,{color:f?l.claude:l.text}," "),Mu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Mu.createElement(v,{dimColor:!0}," ","(",Vge(c.modified),")"))}),Mu.createElement(N,{marginTop:1,marginLeft:2},Mu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Mu.createElement(N,{flexDirection:"column",marginY:1},Mu.createElement(v,null,"Loading plan history..."))};var dyt=X(Ae(),1),Kln={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return Ti.isPlanMode()?(e("Already in plan mode."),null):dyt.createElement(uyt,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?Ti.setCurrentPlanFilePath(t):Ti.generatePlanFilePath(),Ti.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},fyt=Kln;Ug();var Jln={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return Ti.isAutoMode()?"Already in auto mode.":(Ti.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},pyt=Jln;_r();import{resolve as Zln}from"path";var Xln={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=Be(),n=Zln(r,t);la(n);let i=Be();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},myt=Xln;var zCt=X(Ae(),1);var Hn=X(Ae(),1);var Ncn=X(Ae(),1);var D9=X(Ae(),1),wcn=X(Eyt(),1);var _yt={info:"blue",success:"green",error:"red",warning:"yellow"},pcn={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:_yt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:_yt[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Qr.info),e==="success"&&(t=Qr.tick),e==="error"&&(t=Qr.cross),e==="warning"&&(t=Qr.warning),{icon:t}}},yyt=pcn;var mcn={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},byt=mcn;var gcn={styles:{input:({isFocused:e})=>({dimColor:!e})}},Cyt=gcn;var Acn={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})}},Syt=Acn;var hcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},Iyt=hcn;var Ecn={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Qr.square,remainingCharacter:Qr.squareLightShade})},Tyt=Ecn;var _cn={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})}},vyt=_cn;var ycn={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},xyt=ycn;var bcn={success:"green",error:"red",warning:"yellow",info:"blue"},Ccn={success:Qr.tick,error:Qr.cross,warning:Qr.warning,info:Qr.info},Scn={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:bcn[e]}),message:()=>({})},config:({variant:e})=>({icon:Ccn[e]})},wyt=Scn;var Icn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Qr.line})},Dyt=Icn;var Tcn={styles:{value:()=>({})}},Ryt=Tcn;var vcn={styles:{value:()=>({})}},Nyt=vcn;var xcn={styles:{value:()=>({})}},Byt=xcn;var Dcn={components:{Alert:yyt,Badge:byt,ConfirmInput:Cyt,MultiSelect:Syt,OrderedList:Iyt,ProgressBar:Tyt,Select:vyt,Spinner:xyt,StatusMessage:wyt,UnorderedList:Dyt,TextInput:Ryt,EmailInput:Nyt,PasswordInput:Byt}},Rcn=(0,D9.createContext)(Dcn);var po=e=>(0,D9.useContext)(Rcn).components[e];var Bcn=X(Ae(),1);var C_=X(Ae(),1);var mO=X(Ae(),1);var Oyt=X(Ae(),1);var R9=Qr.line;var iee=(0,Oyt.createContext)({marker:R9});function kyt({children:e}){let{marker:t}=(0,mO.useContext)(iee),{styles:r}=po("UnorderedList");return mO.default.createElement(N,{...r.listItem()},mO.default.createElement(v,{...r.marker()},t),mO.default.createElement(N,{...r.content()},e))}var Myt=X(Ae(),1),Uve=(0,Myt.createContext)({depth:0});function Ocn({children:e}){let{depth:t}=(0,C_.useContext)(Uve),{styles:r,config:n}=po("UnorderedList"),i=(0,C_.useMemo)(()=>({depth:t+1}),[t]),o=(0,C_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??R9}:{marker:R9}},[n,t]);return C_.default.createElement(Uve.Provider,{value:i},C_.default.createElement(iee.Provider,{value:o},C_.default.createElement(N,{...r.list()},e)))}Ocn.Item=kyt;var Mcn=X(Ae(),1);var kcn=X(Ae(),1);var N9=X(Ae(),1);var gO=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 Qyt=X(Ae(),1);var AO=X(Ae(),1);var B9=X(Ae(),1);function Pyt({isFocused:e,isSelected:t,children:r}){let{styles:n}=po("Select");return B9.default.createElement(N,{...n.option({isFocused:e})},e&&B9.default.createElement(v,{...n.focusIndicator()},Qr.pointer),B9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&B9.default.createElement(v,{...n.selectedIndicator()},Qr.tick))}var ym=X(Ae(),1);import{isDeepStrictEqual as Qcn}from"node:util";var Pcn=(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}},Lyt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new gO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},Fyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,ym.useReducer)(Pcn,{visibleOptionCount:e,defaultValue:r,options:t},Lyt),[s,a]=(0,ym.useState)(t);t!==s&&!Qcn(t,s)&&(o({type:"reset",state:Lyt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,ym.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,ym.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,ym.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,ym.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,ym.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 Uyt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function hO({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=Fyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});Uyt({isDisabled:e,state:s});let{styles:a}=po("Select");return AO.default.createElement(N,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=AO.default.createElement(AO.default.Fragment,null,l.label.slice(0,u),AO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return AO.default.createElement(Pyt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Lcn=X(Ae(),1);var Hyt=X(Ae(),1);var Ucn=X(Ae(),1);var oee=X(Ae(),1);var Fcn=X(Ae(),1);var S2i=sr.inverse(" ");var zg=X(Ae(),1);var EO=X(Ae(),1);var $yt=X(Ae(),1);var see=(0,$yt.createContext)({marker:Qr.line});function aee({children:e}){let{marker:t}=(0,EO.useContext)(see),{styles:r}=po("OrderedList");return EO.default.createElement(N,{...r.listItem()},EO.default.createElement(v,{...r.marker()},t),EO.default.createElement(N,{...r.content()},e))}var qyt=X(Ae(),1),Hve=(0,qyt.createContext)({marker:""});function jg({children:e}){let{marker:t}=(0,zg.useContext)(Hve),{styles:r}=po("OrderedList"),n=0;for(let o of zg.default.Children.toArray(e))!(0,zg.isValidElement)(o)||o.type!==aee||n++;let i=String(n).length;return zg.default.createElement(N,{...r.list()},zg.default.Children.map(e,(o,s)=>{if(!(0,zg.isValidElement)(o)||o.type!==aee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return zg.default.createElement(Hve.Provider,{value:{marker:l}},zg.default.createElement(see.Provider,{value:{marker:l}},o))}))}jg.Item=aee;var $cn=X(Ae(),1);var $ve=X(Ae(),1);var Hcn=X(Ae(),1);var Z2i=sr.inverse(" ");var qcn=X(Ae(),1);var Gcn=X(Ae(),1);var jcn=X(Ae(),1);var lee=X(Ae(),1);var zcn=X(Ae(),1);var COi=sr.inverse(" ");var $i=X(Ae(),1);var qve=X(Ae(),1),Gve=X(Ae(),1);V5();us();Qi();Fv();ar();var Gyt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Zv(){let e=[...Gyt,...[...Gyt].reverse()],{frame:t}=gR({interval:120});return qve.createElement(N,{flexWrap:"nowrap",height:1,width:2},qve.createElement(v,{color:Pe().claude},e[t%e.length]))}var dee=X(Ae(),1);var uee=null,S_=null,cee=new Set;function jve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Qpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function zve(){S_&&(uee=jve(S_),cee.forEach(e=>e(uee)))}function Ycn(e,t){return S_!==e&&(S_&&S_.off("resize",zve),S_=e,uee=jve(e),e.on("resize",zve)),cee.add(t),()=>{cee.delete(t),cee.size===0&&S_&&(S_.off("resize",zve),S_=null,uee=null)}}function Yve(){let{stdout:e}=mR(),[t,r]=(0,dee.useState)(()=>jve(e));return(0,dee.useEffect)(()=>Ycn(e,r),[e]),t}function _O(){return Yve()}$e();If();ke();lh();ke();var dMi=X(mxe(),1);import{homedir as H9}from"os";import{join as CO}from"path";import{existsSync as $9,mkdirSync as OCt,appendFileSync as BCt,readFileSync as kCt,constants as Gfn,writeFileSync as zfn,unlinkSync as MCt,statSync as jfn}from"fs";import{platform as QCt}from"process";import{accessSync as Yfn}from"fs";var qfn="2.4.5",U9={VERSION:qfn,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"};$e();var ex=CO(Q0,".update.lock"),Vfn=300*1e3;function PCt(){try{if($9(Q0)||OCt(Q0,{recursive:!0}),$9(ex)){let e=jfn(ex);if(Date.now()-e.mtimeMs<Vfn)return!1;try{MCt(ex)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return zfn(ex,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function LCt(){try{$9(ex)&&kCt(ex,"utf8")===`${process.pid}`&&MCt(ex)}catch(e){ve(`Failed to release lock: ${e}`)}}async function gxe(){try{let e=await si("npm -g config get prefix");if(e.code!==0)return ve("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{Yfn(t,Gfn.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 FCt(e){if(!PCt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:U9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{$9(e)||OCt(e,{recursive:!0});let t=await si(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
1131
+ ${f}`}}),{messages:a}=t,l=$ln(o);return qln(o,l,s,a)}},cyt=Gln;Ug();var Mu=X(Ae(),1),fO=X(Ae(),1);ke();ke();import{existsSync as zln,readdirSync as jln,statSync as Yln}from"fs";import{join as Vln}from"path";function Wln(){let e=Ji.plan();if(!zln(e))return[];try{return jln(e).filter(r=>r.endsWith(".md")).map(r=>{let n=Vln(e,r),i=Yln(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var uyt=({onSelect:e})=>{let[t,r]=(0,fO.useState)([]),[n,i]=(0,fO.useState)(0),[o,s]=(0,fO.useState)(!1);(0,fO.useEffect)(()=>{let c=Wln();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}))];vr((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=Pe();return o?Mu.createElement(N,{flexDirection:"column",marginY:1},Mu.createElement(N,{marginBottom:1},Mu.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")),Mu.createElement(N,{marginBottom:1},Mu.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 Mu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Mu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Mu.createElement(v,{color:f?l.claude:l.text}," "),Mu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Mu.createElement(v,{dimColor:!0}," ","(",Vge(c.modified),")"))}),Mu.createElement(N,{marginTop:1,marginLeft:2},Mu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Mu.createElement(N,{flexDirection:"column",marginY:1},Mu.createElement(v,null,"Loading plan history..."))};var dyt=X(Ae(),1),Kln={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return Ti.isPlanMode()?(e("Already in plan mode."),null):dyt.createElement(uyt,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?Ti.setCurrentPlanFilePath(t):Ti.generatePlanFilePath(),Ti.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},fyt=Kln;Ug();var Jln={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return Ti.isAutoMode()?"Already in auto mode.":(Ti.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},pyt=Jln;_r();import{resolve as Zln}from"path";var Xln={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=Be(),n=Zln(r,t);la(n);let i=Be();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},myt=Xln;var zCt=X(Ae(),1);var Hn=X(Ae(),1);var Ncn=X(Ae(),1);var D9=X(Ae(),1),wcn=X(Eyt(),1);var _yt={info:"blue",success:"green",error:"red",warning:"yellow"},pcn={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:_yt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:_yt[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Qr.info),e==="success"&&(t=Qr.tick),e==="error"&&(t=Qr.cross),e==="warning"&&(t=Qr.warning),{icon:t}}},yyt=pcn;var mcn={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},byt=mcn;var gcn={styles:{input:({isFocused:e})=>({dimColor:!e})}},Cyt=gcn;var Acn={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})}},Syt=Acn;var hcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},Iyt=hcn;var Ecn={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Qr.square,remainingCharacter:Qr.squareLightShade})},Tyt=Ecn;var _cn={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})}},vyt=_cn;var ycn={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},xyt=ycn;var bcn={success:"green",error:"red",warning:"yellow",info:"blue"},Ccn={success:Qr.tick,error:Qr.cross,warning:Qr.warning,info:Qr.info},Scn={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:bcn[e]}),message:()=>({})},config:({variant:e})=>({icon:Ccn[e]})},wyt=Scn;var Icn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Qr.line})},Dyt=Icn;var Tcn={styles:{value:()=>({})}},Ryt=Tcn;var vcn={styles:{value:()=>({})}},Nyt=vcn;var xcn={styles:{value:()=>({})}},Byt=xcn;var Dcn={components:{Alert:yyt,Badge:byt,ConfirmInput:Cyt,MultiSelect:Syt,OrderedList:Iyt,ProgressBar:Tyt,Select:vyt,Spinner:xyt,StatusMessage:wyt,UnorderedList:Dyt,TextInput:Ryt,EmailInput:Nyt,PasswordInput:Byt}},Rcn=(0,D9.createContext)(Dcn);var po=e=>(0,D9.useContext)(Rcn).components[e];var Bcn=X(Ae(),1);var C_=X(Ae(),1);var mO=X(Ae(),1);var Oyt=X(Ae(),1);var R9=Qr.line;var iee=(0,Oyt.createContext)({marker:R9});function kyt({children:e}){let{marker:t}=(0,mO.useContext)(iee),{styles:r}=po("UnorderedList");return mO.default.createElement(N,{...r.listItem()},mO.default.createElement(v,{...r.marker()},t),mO.default.createElement(N,{...r.content()},e))}var Myt=X(Ae(),1),Uve=(0,Myt.createContext)({depth:0});function Ocn({children:e}){let{depth:t}=(0,C_.useContext)(Uve),{styles:r,config:n}=po("UnorderedList"),i=(0,C_.useMemo)(()=>({depth:t+1}),[t]),o=(0,C_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??R9}:{marker:R9}},[n,t]);return C_.default.createElement(Uve.Provider,{value:i},C_.default.createElement(iee.Provider,{value:o},C_.default.createElement(N,{...r.list()},e)))}Ocn.Item=kyt;var Mcn=X(Ae(),1);var kcn=X(Ae(),1);var N9=X(Ae(),1);var gO=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 Qyt=X(Ae(),1);var AO=X(Ae(),1);var B9=X(Ae(),1);function Pyt({isFocused:e,isSelected:t,children:r}){let{styles:n}=po("Select");return B9.default.createElement(N,{...n.option({isFocused:e})},e&&B9.default.createElement(v,{...n.focusIndicator()},Qr.pointer),B9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&B9.default.createElement(v,{...n.selectedIndicator()},Qr.tick))}var ym=X(Ae(),1);import{isDeepStrictEqual as Qcn}from"node:util";var Pcn=(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}},Lyt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new gO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},Fyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,ym.useReducer)(Pcn,{visibleOptionCount:e,defaultValue:r,options:t},Lyt),[s,a]=(0,ym.useState)(t);t!==s&&!Qcn(t,s)&&(o({type:"reset",state:Lyt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,ym.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,ym.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,ym.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,ym.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,ym.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 Uyt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function hO({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=Fyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});Uyt({isDisabled:e,state:s});let{styles:a}=po("Select");return AO.default.createElement(N,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=AO.default.createElement(AO.default.Fragment,null,l.label.slice(0,u),AO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return AO.default.createElement(Pyt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Lcn=X(Ae(),1);var Hyt=X(Ae(),1);var Ucn=X(Ae(),1);var oee=X(Ae(),1);var Fcn=X(Ae(),1);var S2i=sr.inverse(" ");var zg=X(Ae(),1);var EO=X(Ae(),1);var $yt=X(Ae(),1);var see=(0,$yt.createContext)({marker:Qr.line});function aee({children:e}){let{marker:t}=(0,EO.useContext)(see),{styles:r}=po("OrderedList");return EO.default.createElement(N,{...r.listItem()},EO.default.createElement(v,{...r.marker()},t),EO.default.createElement(N,{...r.content()},e))}var qyt=X(Ae(),1),Hve=(0,qyt.createContext)({marker:""});function jg({children:e}){let{marker:t}=(0,zg.useContext)(Hve),{styles:r}=po("OrderedList"),n=0;for(let o of zg.default.Children.toArray(e))!(0,zg.isValidElement)(o)||o.type!==aee||n++;let i=String(n).length;return zg.default.createElement(N,{...r.list()},zg.default.Children.map(e,(o,s)=>{if(!(0,zg.isValidElement)(o)||o.type!==aee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return zg.default.createElement(Hve.Provider,{value:{marker:l}},zg.default.createElement(see.Provider,{value:{marker:l}},o))}))}jg.Item=aee;var $cn=X(Ae(),1);var $ve=X(Ae(),1);var Hcn=X(Ae(),1);var Z2i=sr.inverse(" ");var qcn=X(Ae(),1);var Gcn=X(Ae(),1);var jcn=X(Ae(),1);var lee=X(Ae(),1);var zcn=X(Ae(),1);var COi=sr.inverse(" ");var $i=X(Ae(),1);var qve=X(Ae(),1),Gve=X(Ae(),1);V5();us();Qi();Fv();ar();var Gyt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Zv(){let e=[...Gyt,...[...Gyt].reverse()],{frame:t}=gR({interval:120});return qve.createElement(N,{flexWrap:"nowrap",height:1,width:2},qve.createElement(v,{color:Pe().claude},e[t%e.length]))}var dee=X(Ae(),1);var uee=null,S_=null,cee=new Set;function jve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Qpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function zve(){S_&&(uee=jve(S_),cee.forEach(e=>e(uee)))}function Ycn(e,t){return S_!==e&&(S_&&S_.off("resize",zve),S_=e,uee=jve(e),e.on("resize",zve)),cee.add(t),()=>{cee.delete(t),cee.size===0&&S_&&(S_.off("resize",zve),S_=null,uee=null)}}function Yve(){let{stdout:e}=mR(),[t,r]=(0,dee.useState)(()=>jve(e));return(0,dee.useEffect)(()=>Ycn(e,r),[e]),t}function _O(){return Yve()}$e();If();ke();lh();ke();var dMi=X(mxe(),1);import{homedir as H9}from"os";import{join as CO}from"path";import{existsSync as $9,mkdirSync as OCt,appendFileSync as BCt,readFileSync as kCt,constants as Gfn,writeFileSync as zfn,unlinkSync as MCt,statSync as jfn}from"fs";import{platform as QCt}from"process";import{accessSync as Yfn}from"fs";var qfn="2.4.6",U9={VERSION:qfn,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"};$e();var ex=CO(Q0,".update.lock"),Vfn=300*1e3;function PCt(){try{if($9(Q0)||OCt(Q0,{recursive:!0}),$9(ex)){let e=jfn(ex);if(Date.now()-e.mtimeMs<Vfn)return!1;try{MCt(ex)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return zfn(ex,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function LCt(){try{$9(ex)&&kCt(ex,"utf8")===`${process.pid}`&&MCt(ex)}catch(e){ve(`Failed to release lock: ${e}`)}}async function gxe(){try{let e=await si("npm -g config get prefix");if(e.code!==0)return ve("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{Yfn(t,Gfn.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 FCt(e){if(!PCt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:U9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{$9(e)||OCt(e,{recursive:!0});let t=await si(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
1132
1132
  # npm global path
1133
1133
  export PATH="${e}/bin:$PATH"
1134
1134
  `;if(QCt==="win32"){let n=await si(`setx PATH "${process.env.PATH};${e}"`);if(n.code!==0)throw new Error(`Failed to update PATH on Windows: ${n.stderr}`)}else{let n=[CO(H9(),".bashrc"),CO(H9(),".bash_profile"),CO(H9(),".zshrc"),CO(H9(),".config","fish","config.fish")];for(let i of n)if($9(i))try{if(!kCt(i,"utf8").includes(e)){if(i.includes("fish")){let s=`
@@ -3560,7 +3560,7 @@ ${e}
3560
3560
  Please address this message and continue with your tasks.
3561
3561
  </system-reminder>`}function E4n(e,t){if(typeof e=="string")return e+t;let r=e.at(-1);return r?r.type==="text"?[...e.slice(0,-1),{...r,text:r.text+t}]:r.type==="tool_result"&&typeof r.content=="string"?[...e.slice(0,-1),{...r,content:r.content+t}]:[...e,{type:"text",text:t}]:[{type:"text",text:t}]}function _4n(e,t){let r=Yzt(e.message.content),n=Yzt(t.message.content);return{...e,message:{...e.message,content:b4n(y4n(r,n))}}}function Yzt(e){return typeof e=="string"?[{type:"text",text:e}]:e}function y4n(e,t){let r=e.at(-1),n=t[0];return r?.type==="text"&&n?.type==="text"?[...e.slice(0,-1),{...r,text:r.text+`
3562
3562
  `},...t]:[...e,...t]}function b4n(e){let t=[],r=[];for(let n of e)n.type==="tool_result"?t.push(n):r.push(n);return[...t,...r]}function Vzt(e){let t=[],r=!1,n=new Set;for(let i=0;i<e.length;i++){let o=e[i];if(o.type!=="assistant"){if(o.type==="user"&&Array.isArray(o.message.content)&&t.at(-1)?.type!=="assistant"){let S=o.message.content.filter(I=>!(typeof I=="object"&&"type"in I&&I.type==="tool_result"));if(S.length!==o.message.content.length){r=!0;let I=S.length>0?S:t.length===0?[{type:"text",text:"[Orphaned tool result removed due to conversation resume]"}]:null;I!==null&&t.push({...o,message:{...o.message,content:I}});continue}}t.push(o);continue}let s=new Set,a=o.message.content.filter(S=>{if(S.type==="tool_use"){if(n.has(S.id))return r=!0,!1;n.add(S.id),s.add(S.id)}return!0}),l=a.length!==o.message.content.length;a.length===0&&a.push({type:"text",text:"[Tool use interrupted]",citations:[]});let c=l?{...o,message:{...o.message,content:a}}:o;t.push(c);let u=[...s],f=e[i+1],g=new Set,m=!1;if(f?.type==="user"){let S=f.message.content;if(Array.isArray(S)){for(let I of S)if(typeof I=="object"&&"type"in I&&I.type==="tool_result"){let w=I.tool_use_id;g.has(w)&&(m=!0),g.add(w)}}}let A=new Set(u),E=u.filter(S=>!g.has(S)),_=[...g].filter(S=>!A.has(S));if(E.length===0&&_.length===0&&!m)continue;r=!0;let b=E.map(S=>({type:"tool_result",tool_use_id:S,content:zzt,is_error:!0}));if(f?.type==="user"){let S=Array.isArray(f.message.content)?f.message.content:[{type:"text",text:f.message.content}];if(_.length>0||m){let w=new Set(_),O=new Set;S=S.filter(P=>{if(typeof P=="object"&&"type"in P&&P.type==="tool_result"){let z=P.tool_use_id;if(w.has(z)||O.has(z))return!1;O.add(z)}return!0})}let I=[...b,...S];if(I.length>0){let w={...f,message:{...f.message,content:I}};i++,t.push(w)}else i++,t.push(jt({content:VM,isMeta:!0}))}else b.length>0&&t.push(jt({content:b,isMeta:!0}))}if(r){let i=e.map((o,s)=>{if(o.type==="assistant"){let a=o.message.content.filter(l=>l.type==="tool_use").map(l=>l.id);return`[${s}] assistant(id=${o.message.id}, tool_uses=[${a.join(",")}])`}if(o.type==="user"&&Array.isArray(o.message.content)){let a=o.message.content.filter(l=>typeof l=="object"&&"type"in l&&l.type==="tool_result").map(l=>l.tool_use_id);if(a.length>0)return`[${s}] user(tool_results=[${a.join(",")}])`}return`[${s}] ${o.type}`});Et("tengu_tool_result_pairing_repaired",{messageCount:e.length,repairedMessageCount:t.length,messageTypes:i.join("; ")}),J(new Error(`ensureToolResultPairing: repaired missing tool_result blocks (${e.length} -> ${t.length} messages). Message structure: ${i.join("; ")}`))}return t}function mse(e){let t=e.filter(r=>r.type!=="text"||r.text.trim().length>0);return t.length===0?[{type:"text",text:VM,citations:[]}]:t}ke();us();lh();_r();Zt();ke();import{createHash as C4n}from"crypto";import{mkdirSync as S4n,readFileSync as I4n,writeFileSync as T4n}from"fs";import{dirname as Wzt,join as v4n}from"path";import{existsSync as Kzt}from"fs";import*as Xzt from"path";async function nFe(e,t){return await t()}function x4n(e,t){return e.map(r=>typeof r=="string"?t(r):r.map(n=>{switch(n.type){case"tool_result":return typeof n.content=="string"?{...n,content:t(n.content)}:Array.isArray(n.content)?{...n,content:n.content.map(i=>{switch(i.type){case"text":return{...i,text:t(i.text)};case"image":return i}})}:n;case"text":return{...n,text:t(n.text)};case"tool_use":return{...n,input:sz(n.input,t)};case"image":return n}}))}function Jzt(e,t){return{durationMs:"DURATION",costUSD:"COST",uuid:"UUID",message:{...e.message,content:e.message.content.map(r=>{switch(r.type){case"text":return{...r,text:t(r.text),citations:r.citations||[]};case"tool_use":return{...r,input:sz(r.input,t)};default:return r}}).filter(Boolean)},type:"assistant"}}function Zzt(e){if(typeof e!="string")return e;let t=e.replace(/num_files="\d+"/g,'num_files="[NUM]"').replace(/duration_ms="\d+"/g,'duration_ms="[DURATION]"').replace(/cost_usd="\d+"/g,'cost_usd="[COST]"').replace(/\//g,Xzt.sep).replaceAll(Be(),"[CWD]");return t.includes("Files modified by user:")?"Files modified by user: [FILES]":t}function w4n(e){return typeof e!="string"?e:e.replaceAll("[NUM]","1").replaceAll("[DURATION]","100").replaceAll("[CWD]",Be())}r$();await Hg();var OX="API Error",R4n="Prompt is too long",N4n="Credit balance is too low",B4n="Invalid API key \xB7 Please run /login",VM="(no content)",mw=!process.env.DISABLE_PROMPT_CACHING,t7t=.8,r7t=4,O4n=1,k4n=.08,M4n=3,Q4n=15,P4n=3.75,L4n=.3,qke=1;function iFe(){return{user_id:`${xV()}_${Ob}`}}async function oFe(e){let t=Date.now(),r;for await(let i of e)i.type==="message_start"&&(r=Date.now()-t);return{...await e.finalMessage(),ttftMs:r}}var gse=new Map;function jx(e){let t=e||"default";if(gse.has(t))return gse.get(t);let r,n,i;if(e){let l=Ln.getModelSourceConfig(e);l&&(r=l.base_url,n=l.auth_token,i=l.api_type)}let o={"x-app":"cli","User-Agent":$Z};n&&(o.Authorization=`Bearer ${n}`);let s={defaultHeaders:o,maxRetries:0,timeout:parseInt(process.env.API_TIMEOUT_MS||String(60*1e3),10)},a=new WM.default({baseURL:r,apiKey:n,dangerouslyAllowBrowser:!0,fetch:LZ(i),...s});return gse.set(t,a),a}function n7t(){gse.clear()}pr.on("proxy:changed",n7t);pr.on("api-key:changed",n7t);function F4n(e,t=!1){return t?typeof e.message.content=="string"?{role:"user",content:[{type:"text",text:e.message.content,...mw?{cache_control:{type:"ephemeral"}}:{}}]}:{role:"user",content:e.message.content.map((r,n)=>({...r,...n===e.message.content.length-1?mw?{cache_control:{type:"ephemeral"}}:{}:{}}))}:{role:"user",content:e.message.content}}function U4n(e,t=!1){return t?typeof e.message.content=="string"?{role:"assistant",content:[{type:"text",text:e.message.content,...mw?{cache_control:{type:"ephemeral"}}:{}}]}:{role:"assistant",content:e.message.content.map((r,n)=>({...r,...n===e.message.content.length-1&&r.type!=="thinking"&&r.type!=="redacted_thinking"&&r.type!=="tool_use"?mw?{cache_control:{type:"ephemeral"}}:{}:{}}))}:{role:"assistant",content:e.message.content}}function Ase(e){let t=e[0]||"",r=e.slice(1);return[t,r.join(`
3563
- `)].filter(Boolean)}async function js(e,t,r,n,i,o){return await nFe(e,()=>H4n(e,t,r,n,i,o))}async function Izt(e,t,r,n,i=!1){let o=[...e],s=[],a=Object.entries(t).length>0;if(a){let l;if(n&&n.length>0)try{let f=Wf(n);Umt(f);let g=await oO(),m=Math.round(f/g*100),A=Math.max(0,g-f);l={currentTokens:f,contextLimit:g,percentUsed:m,tokensRemaining:A}}catch{}let c=await $Te(a,{...r,contextInfo:l});c.length>0&&(s=c);let u=await tX();s.push({foot:!0,content:`<system-reminder>
3563
+ `)].filter(Boolean)}async function js(e,t,r,n,i,o){return await nFe(e,()=>H4n(e,t,r,n,i,o))}async function Izt(e,t,r,n,i=!1){let o=[...e],s=[],a=Object.entries(t).length>0;if(a){let l;if(n&&n.length>0)try{let f=Wf(n);Umt(f);let g=await oO(),m=Math.round(f/g*100),A=Math.max(0,g-f);l={currentTokens:f,contextLimit:g,percentUsed:m,tokensRemaining:A}}catch{}let c=await $Te(a,{...r,contextInfo:l});c.length>0&&(s=c);let u=await tX();s.push({foot:!1,content:`<system-reminder>
3564
3564
  As you answer the user's questions, you can use the following context:
3565
3565
  ${u}
3566
3566
  IMPORTANT: this context may or may not be relevant to your tasks. You should not respond to this context unless it is highly relevant to your task.</system-reminder>`})}return{systemPrompt:o,reminders:s}}async function H4n(e,t,r,n,i,o){e=Vzt(e);let s=await jx(i.model),{model:a}=Ln.parseModelKey(i.model),l=G6(i.thinking),c=Ozt(a,l);if(i.prependCLISysprompt){let[G]=Ase(t);Et("tengu_sysprompt_block",{snippet:G?.slice(0,20),length:String(G?.length??0),hash:G?D4n("sha256").update(G).digest("hex"):""}),t=[ayt(),...t]}let u=Ase(t).map(G=>({...mw?{cache_control:{type:"ephemeral"}}:{},text:G,type:"text"})),f=await Promise.all(r.map(async G=>({name:G.name,description:await G.prompt({dangerouslySkipPermissions:i.dangerouslySkipPermissions},o),input_schema:"inputJSONSchema"in G&&G.inputJSONSchema?G.inputJSONSchema:hI(G.inputSchema)}))),g=await sot(),m=mw&&g.length>0;Et("tengu_api_query",{model:a,messagesLength:String(JSON.stringify([...u,...e,...f]).length),temperature:String(qke),provider:"",...m?{betas:g.join(",")}:{}});let A=Date.now(),E=Date.now(),_=0,b,S;try{b=await cS(async G=>{_=G,E=Date.now();let q=s.messages.stream({model:a,max_tokens:Math.max(kzt(c)+1,G4n(a)),messages:e7t(e),temperature:qke,system:u,tools:f,metadata:iFe(),...c?{thinking:c}:{}},{signal:n,headers:{"x-agent-id":i.agentId??"default","x-thinking-level":l,...m?{"anthropic-beta":g.join(",")}:{}}});return S=q,oFe(q)},{signal:n})}catch(G){return J("\u53D1\u9001\u8BF7\u6C42\u5931\u8D25\uFF0C\u9519\u8BEF\u6D88\u606F\uFF1A",e7t(e)),ve(G),Et("tengu_api_error",{model:a,error:G instanceof Error?G.message:String(G),status:G instanceof WM.APIError?String(G.status):void 0,messageCount:String(e.length),messageTokens:String(Wf(e)),durationMs:String(Date.now()-E),durationMsIncludingRetries:String(Date.now()-A),attempt:String(_),provider:"",requestId:S?.request_id??void 0}),pw(G)}if(!b){let G=new Error("API response is undefined");return ve(G),pw(G)}if(!b.usage){let G=new Error("API response missing usage information");return ve(G),pw(G)}let I=Date.now()-E,w=Date.now()-A;Et("tengu_api_success",{model:a,messageCount:String(e.length),messageTokens:String(Wf(e)),inputTokens:String(b.usage.input_tokens),outputTokens:String(b.usage.output_tokens),cachedInputTokens:String(b.usage.cache_read_input_tokens??0),uncachedInputTokens:String(b.usage.cache_creation_input_tokens??0),durationMs:String(I),durationMsIncludingRetries:String(w),attempt:String(_),ttftMs:String(b.ttftMs),provider:"",requestId:S?.request_id??void 0,stop_reason:b.stop_reason??void 0});let O=b.usage.input_tokens,P=b.usage.output_tokens,z=b.usage.cache_read_input_tokens??0,Y=b.usage.cache_creation_input_tokens??0,Q=O/1e6*M4n+P/1e6*Q4n+z/1e6*L4n+Y/1e6*P4n;return FZ(Q,w),UZ(O,P),HZ(Y,z),{type:"assistant",message:{...b,content:mse(b.content),usage:{...b.usage,cache_read_input_tokens:b.usage.cache_read_input_tokens??0,cache_creation_input_tokens:b.usage.cache_creation_input_tokens??0}},costUSD:Q,durationMs:I,uuid:z6()}}function pw(e){return e instanceof Error&&e.message?fw(e.message):e instanceof Error&&e.message.includes("prompt is too long")?fw(R4n):e instanceof Error&&e.message.includes("Your credit balance is too low")?fw(N4n):e instanceof Error&&e.message.toLowerCase().includes("x-api-key")?fw(B4n):e instanceof Error?fw(`${OX}: ${e.message}`):fw(OX)}function e7t(e){return e.map((t,r)=>t.type==="user"?F4n(t,r>e.length-3):U4n(t,r>e.length-3))}async function $4n({systemPrompt:e,userPrompt:t,assistantPrompt:r,agentId:n,signal:i}){let o=Po(),s=await jx(o);o=Ln.parseModelKey(o).model;let a=[{role:"user",content:t},...r?[{role:"assistant",content:r}]:[]],l=Ase(e).map(P=>({...mw?{cache_control:{type:"ephemeral"}}:{},text:P,type:"text"}));Et("tengu_api_query",{model:o,messagesLength:String(JSON.stringify([...l,...a]).length),provider:""});let c=0,u=Date.now(),f=Date.now(),g,m;try{g=await cS(async P=>{c=P,u=Date.now();let z=s.messages.stream({model:o,max_tokens:512,messages:a,system:l,temperature:0,metadata:iFe(),stream:!0},{signal:i,headers:{"x-agent-id":n??"default"}});return m=z,await oFe(z)},{signal:i})}catch(P){return ve(P),Et("tengu_api_error",{error:P instanceof Error?P.message:String(P),status:P instanceof WM.APIError?String(P.status):void 0,model:o,messageCount:String(r?2:1),durationMs:String(Date.now()-u),durationMsIncludingRetries:String(Date.now()-f),attempt:String(c),provider:"",requestId:m?.request_id??void 0}),pw(P)}let A=g.usage.input_tokens,E=g.usage.output_tokens,_=g.usage.cache_read_input_tokens??0,b=g.usage.cache_creation_input_tokens??0,S=A/1e6*t7t+E/1e6*r7t+_/1e6*k4n+b/1e6*O4n,I=Date.now()-u,w=Date.now()-f;FZ(S,w),UZ(A,E),HZ(b,_);let O={durationMs:I,message:{...g,content:mse(g.content)},costUSD:S,uuid:z6(),type:"assistant"};return Et("tengu_api_success",{model:o,messageCount:String(r?2:1),inputTokens:String(A),outputTokens:String(g.usage.output_tokens),cachedInputTokens:String(g.usage.cache_read_input_tokens??0),uncachedInputTokens:String(g.usage.cache_creation_input_tokens??0),durationMs:String(I),durationMsIncludingRetries:String(w),ttftMs:String(g.ttftMs),provider:"",requestId:m?.request_id??void 0,stop_reason:g.stop_reason??void 0}),O}async function q4n({systemPrompt:e,userPrompt:t,assistantPrompt:r,agentId:n,signal:i}){let o=Po(),s=await jx(o);o=Ln.parseModelKey(o).model;let a=[{role:"user",content:t},...r?[{role:"assistant",content:r}]:[]];Et("tengu_api_query",{model:o,messagesLength:String(JSON.stringify([{systemPrompt:e},...a]).length),provider:""});let l=0,c=Date.now(),u=Date.now(),f,g;try{f=await cS(async I=>{l=I,c=Date.now();let w=s.messages.stream({model:o,max_tokens:512,messages:a,system:Ase(e).map(O=>({type:"text",text:O})),temperature:0,metadata:iFe(),stream:!0},{signal:i,headers:{"x-agent-id":n??"default"}});return g=w,await oFe(w)},{signal:i})}catch(I){return ve(I),Et("tengu_api_error",{error:I instanceof Error?I.message:String(I),status:I instanceof WM.APIError?String(I.status):void 0,model:o,messageCount:String(r?2:1),durationMs:String(Date.now()-c),durationMsIncludingRetries:String(Date.now()-u),attempt:String(l),provider:"",requestId:g?.request_id??void 0}),pw(I)}if(!f){let I=new Error("API response is undefined");return ve(I),pw(I)}if(!f.usage){let I=new Error("API response missing usage information");return ve(I),pw(I)}let m=Date.now()-c,A=Date.now()-u;Et("tengu_api_success",{model:o,messageCount:String(r?2:1),inputTokens:String(f.usage.input_tokens),outputTokens:String(f.usage.output_tokens),durationMs:String(m),durationMsIncludingRetries:String(A),attempt:String(l),provider:"",requestId:g?.request_id??void 0,stop_reason:f.stop_reason??void 0});let E=f.usage.input_tokens,_=f.usage.output_tokens,b=E/1e6*t7t+_/1e6*r7t;return FZ(b,m),UZ(E,_),HZ(0,0),{durationMs:m,message:{...f,content:mse(f.content),usage:{...f.usage,cache_read_input_tokens:0,cache_creation_input_tokens:0}},costUSD:b,type:"assistant",uuid:z6()}}async function Q2({systemPrompt:e=[],userPrompt:t,assistantPrompt:r,enablePromptCaching:n=!1,agentId:i,signal:o}){return await nFe([{message:{role:"user",content:e.map(s=>({type:"text",text:s}))},type:"user",uuid:z6()},{message:{role:"user",content:t},type:"user",uuid:z6()}],()=>n?$4n({systemPrompt:e,userPrompt:t,assistantPrompt:r,agentId:i,signal:o}):q4n({systemPrompt:e,userPrompt:t,assistantPrompt:r,agentId:i,signal:o}))}function G4n(e){return e&&(e.includes("3-5")||e.includes("haiku"))?8192:3e4}function US(e){if(e.length<=X0e)return{totalLines:e.split(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dahawa/hawa-code",
3
- "version": "2.4.5",
3
+ "version": "2.4.6",
4
4
  "bin": {
5
5
  "hcode": "hawa.js"
6
6
  },