@dahawa/hawa-code 2.4.20 → 2.4.21

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
@@ -488,7 +488,7 @@ ${c}. Members must communicate with each other using the ${zh} tool`;if(n){l+=`
488
488
  Warning: Team "${r}" has ${d.length} active ${p}, so it cannot be deleted.`}l+=`
489
489
 
490
490
  You don't need to keep checking on the team's tool progress\u2014members will notify you when they complete their tasks. Continue with other work or respond to the user instead`}return[this.createReminderMessage("agent_team","task","medium",l,s,!0)]}getContextOptimizationReminder(t,r,n,o){let i=at.isMessageArchivingEnable(),s=at.isMemoEnable();if(!i&&!s)return null;let a=r??t,c=i&&a?.some(I=>I.name===Mf),l=s&&a?.some(I=>I.name===zb);if(!c&&!l)return null;let u=t?.some(I=>I.name===Mf),d=t?.some(I=>I.name===zb),p=Date.now(),f=n?.percentUsed,A=.92*100,h=[],E=(I,w)=>o==="proxy"?`use ${I} via ${_l}({action:'call', name:'${I}'})`:w?`use ${I}`:`load ${I} with ${Dd}`;c&&(vgo()?h.push(`${E(Mf,!!u)} to archive tool_result messages (use "__tool_result__") and specific tool_use input fields (e.g. "content", "user.name") that are no longer needed for the current task. Do not archive results or input fields required for ongoing reasoning`):h.push(`${E(Mf,!!u)} to archive tool_result messages (use "__tool_result__") that are no longer needed for the current task. Do not archive results required for ongoing reasoning`)),l&&h.push(`${E(zb,!!d)} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`),c&&l&&h.push(`${Mf} and ${zb} work together: archive obsolete tool_result messages, and persist long-term conclusions or plans to Memo so they stay retrievable outside the context window.`);let S="";f!==void 0?S=`Context usage is ${f}%. The system will automatically compact prior messages when usage reaches ${A}%. If the history contains a lot of content irrelevant to the current task, clean it up proactively even when context usage is low. Reduce context usage by: `:S="Reduce context usage by: ";let b=h.length===1?`${S}${h[0]}`:`${S}${h.map(I=>`- ${I}`).join(`
491
- `)}`;return this.createReminderMessage("message_archiving_context","performance","medium",b,p,!0)}async getToolLazy(t,r,n,o){let i=at.getLazyToolMode();if(i==="off"||o==="off"||o===void 0)return null;if(i==="proxy"&&o==="proxy"){let I=`\u4F7F\u7528 ${_l}({action:'describe', name}) \u67E5\u770B\u5DE5\u5177\u8BE6\u60C5\uFF0C\u4F7F\u7528 ${_l}({action:'call', name, input}) \u8C03\u7528\u5DE5\u5177\u3002`;return[this.createReminderMessage("tool","general","high",I,Date.now(),!0)]}if(!(i==="loading"&&o==="loading"))return null;let s=n??await Sn.getTools(!1),a=r?.map(I=>I.name)??[],c=new Set(a),l=s.filter(I=>!Wh.includes(I.name)&&!c.has(I.name)).map(I=>I.name),u=s.some(I=>I.name===Dd),d=s.some(I=>I.name===yu),p=(process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD+"").toLowerCase()==="true",f=u?`Load them with ${Dd} if needed; call it in parallel with other tools when possible.`:"",A=u?`\u5982\u679C\u5DE5\u5177\u4E0D\u5728 <loaded_tools> \u548C <defalut_tools> \u4EE5\u5185\uFF0C\u4E0D\u8981\u76F4\u63A5\u4F7F\u7528\uFF0C\u5E94\u8BE5\u53BB\u52A0\u8F7D\uFF0C Load tools with ${Dd} if needed; call it in parallel with other tools when possible.`:"",h=d?`Unload tools you no longer need with ${yu}; call it in parallel with other tools when possible. You do not need to unload if you are returning results to the user.`:"",E=`Not yet loaded tools : ${l.length?l.join(", ")+". "+f:"none."} Loaded tools: ${a.length?a.join(", ")+". "+h:"none."}.`,S=`${l.length>0?A:""} ${a.length>0?h:""}.`,b=p?E:S;return[this.createReminderMessage("tool","general","high",b,Date.now(),p)]}getRecalledMemories(t){let n=Ke.getQueryContext(t).recalledMemories;if(!n||n.length===0)return null;let o=Date.now(),s=`The following memories were recalled and may be relevant to the current task. Use them only if they are helpful:
491
+ `)}`;return this.createReminderMessage("message_archiving_context","performance","medium",b,p,!0)}async getToolLazy(t,r,n,o){let i=at.getLazyToolMode();if(i==="off"||o==="off"||o===void 0)return null;if(i==="proxy"&&o==="proxy"){let I=`\u4F7F\u7528 ${_l}({action:'describe', name}) \u67E5\u770B\u5DE5\u5177\u53C2\u6570\u7ED3\u6784\u548C\u63CF\u8FF0\uFF0C\u4E00\u5B9A\u4E0D\u8981\u731C\u6D4B\u53C2\u6570\u7ED3\u6784\uFF0C\u4F7F\u7528 ${_l}({action:'call', name, input}) \u8C03\u7528\u5DE5\u5177\u3002`;return[this.createReminderMessage("tool","general","high",I,Date.now(),!0)]}if(!(i==="loading"&&o==="loading"))return null;let s=n??await Sn.getTools(!1),a=r?.map(I=>I.name)??[],c=new Set(a),l=s.filter(I=>!Wh.includes(I.name)&&!c.has(I.name)).map(I=>I.name),u=s.some(I=>I.name===Dd),d=s.some(I=>I.name===yu),p=(process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD+"").toLowerCase()==="true",f=u?`Load them with ${Dd} if needed; call it in parallel with other tools when possible.`:"",A=u?`\u5982\u679C\u5DE5\u5177\u4E0D\u5728 <loaded_tools> \u548C <defalut_tools> \u4EE5\u5185\uFF0C\u4E0D\u8981\u76F4\u63A5\u4F7F\u7528\uFF0C\u5E94\u8BE5\u53BB\u52A0\u8F7D\uFF0C Load tools with ${Dd} if needed; call it in parallel with other tools when possible.`:"",h=d?`Unload tools you no longer need with ${yu}; call it in parallel with other tools when possible. You do not need to unload if you are returning results to the user.`:"",E=`Not yet loaded tools : ${l.length?l.join(", ")+". "+f:"none."} Loaded tools: ${a.length?a.join(", ")+". "+h:"none."}.`,S=`${l.length>0?A:""} ${a.length>0?h:""}.`,b=p?E:S;return[this.createReminderMessage("tool","general","high",b,Date.now(),p)]}getRecalledMemories(t){let n=Ke.getQueryContext(t).recalledMemories;if(!n||n.length===0)return null;let o=Date.now(),s=`The following memories were recalled and may be relevant to the current task. Use them only if they are helpful:
492
492
 
493
493
  ${n.map(a=>`## ${a.path.split(/[\\/]/).pop()||a.path}
494
494
  ${a.content}`).join(`
@@ -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
  `)),cFn(e,o,{encoding:r,flush:!0})}var XHt=new bde.default({fetchMethod:e=>gFn(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});async function aGt(e){let t=wV(e);return XHt.get(t)||XHt.fetchMethod?.(t)}async function gFn(e){let t=new AbortController;setTimeout(()=>{t.abort()},1e3);let r=await I2t(e,t.signal,15),n=0;for(let o of r)_B(o)==="CRLF"&&n++;return n>3?"CRLF":"LF"}function cGt(e,t,r){if(e.has(t))return e.get(t);let n=r();return e.set(t,n),n}var AFn=new bde.default({fetchMethod:e=>lGt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function Wm(e){let t=wV(e);return cGt(AFn,t,()=>lGt(t))}function lGt(e){let r=Buffer.alloc(4096),n;try{n=eGt(e,"r");let o=tGt(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&&rGt(n)}}var hFn=new bde.default({fetchMethod:e=>uGt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function _B(e){let t=wV(e);return cGt(hFn,t,()=>uGt(t))}function uGt(e,t="utf8"){try{if(!nGt(e).isFile())return"LF";let n=Buffer.alloc(4096),o=eGt(e,"r"),i=tGt(o,n,0,4096,0);rGt(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 WF(e){let t=oGt(e)?e:wV(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 DPe(e){return e?oGt(e)?e:wV(Be(),e):void 0}function dGt(e){try{let t=DPe(e),r=t?fFn(Be(),t):void 0;return{absolutePath:t,relativePath:r}}catch(t){return X("getAbsoluteAndRelativePaths error ",t),{absolutePath:null,relativePath:null}}}function Ide(e){try{let t=pFn(e),r=KHt(e,JHt(e));if(!lFn(t))return;let i=uFn(t).filter(s=>KHt(s,JHt(s))===r&&mFn(t,s)!==e)[0];return i||void 0}catch(t){Se(`Error finding similar file for ${e}: ${t}`);return}}function OPe(){let e=process.env.HAWA_CODE_COMPACT_LINE_PREFIX;return!(e==="0"||e==="false")}function ow({content:e,startLine:t}){if(!e)return"";let r=e.split(/\r?\n/);return OPe()?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 fGt(e){try{let t=dFn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function ew(){let e=Xn();e.hasCompletedProjectOnboarding||ps({...e,hasCompletedProjectOnboarding:!0})}function yFn(){let e=hr();To({...e,lastReleaseNotesSeen:MACRO.VERSION})}function BPe({workspaceDir:e}){let r=!Xn().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,pGt.gt)(MACRO.VERSION,o))&&(i=$ue[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&yFn()},[s,r]),!r&&!s)return null;let a=EFn(_Fn(e,Ci)),c=fGt(e),l=!a&&!c,u=MF.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===SFn()&&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 JF=F(ne(),1);var KF=F(ne(),1);var RV=F(ne(),1);function MPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ms("Select");return RV.default.createElement(x,{...o.option({isFocused:e})},e&&RV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),RV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&RV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var Km=F(ne(),1);import{isDeepStrictEqual as TFn}from"node:util";var NV=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:kPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var bFn=(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}}},PPe=e=>e.flatMap(t=>{if("options"in t){let r=PPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),mGt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=PPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new NV(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}},LPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=PPe(t),[a,c]=(0,Km.useReducer)(bFn,{visibleOptionCount:e,defaultValue:r,options:t},mGt),[l,u]=(0,Km.useState)(s);s!==l&&!TFn(s,l)&&(c({type:"reset",state:mGt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Km.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,Km.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,Km.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Km.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Km.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Km.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Km.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 QPe=({isDisabled:e=!1,state:t})=>{Ct((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var kPe=e=>`HEADER-${e.optionValues.join(",")}`;function xC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=LPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});QPe({isDisabled:e,state:c});let{styles:l}=ms("Select");return KF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:kPe(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=KF.default.createElement(KF.default.Fragment,null,h.slice(0,S),KF.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return KF.default.createElement(MPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function gGt({onDone:e}){return Ct((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),JF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:ee().secondaryBorder},JF.default.createElement(x,{marginBottom:1,flexDirection:"column"},JF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),JF.default.createElement(x,null,JF.default.createElement(xC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var An=F(ne(),1),Kt=F(ne(),1);var Qp=F(ne(),1);Ge();sr();Cy();var vFn="2.4.20",Iy={VERSION:vFn,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 HPe=46,EGt=["(\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 vde({isDefaultModel:e=!1}){let t=Math.max(HPe,Be().length+12),r=ee(),n=EGt[Math.floor(Math.random()*EGt.length)];return Qp.createElement(x,{flexDirection:"column"},Qp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Qp.createElement(C,null,Qp.createElement(C,null,n)," Welcome to"," ",Qp.createElement(C,{bold:!0},et),Qp.createElement(C,{color:r.secondaryText}," v",Iy.VERSION)),Qp.createElement(Qp.Fragment,null,Qp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Qp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Qp.createElement(C,{color:r.secondaryText},"cwd: ",Be()),Qp.createElement(C,{color:r.secondaryText},"model: ",bo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Qp.createElement(C,{color:r.secondaryText},"small fast model: ",bo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var SS=F(ne(),1);Re();var qJ=F(ne(),1);import{randomUUID as AS}from"crypto";$s();Re();Zt();sr();Re();Ge();import{existsSync as NC,readdirSync as W4n,statSync as K4n}from"fs";import{join as cw,relative as J4n}from"path";import{homedir as V$t}from"os";import{platform as Z4n}from"process";import{readFile as lw}from"fs/promises";sr();EE();gr();import{join as OFn,sep as BFn}from"path";function Up(){if(!Jm())return!1;try{let e=ot();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Zm(){return(OFn(Be(),".hcode","team-memory")+BFn).normalize("NFC")}function _E(e){let t=e.normalize("NFC"),r=Zm();return t.startsWith(r)}var j$t=F(UV(),1);Xo();var H$t=F(UV(),1);sr();Ge();Re();Mp();import{readFile as U$t}from"fs/promises";import{existsSync as iLe,readdirSync as V4n,statSync as j4n}from"fs";import{join as sLe,relative as G$t}from"path";import{homedir as Y4n}from"os";function F$t(e){try{let t=(0,H$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 z4n(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 aLe(e){let t=[];try{if(!iLe(e))return t;let r=V4n(e);for(let n of r){let o=sLe(e,n),i=j4n(o);i.isDirectory()?t.push(...aLe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function $$t(){let e=[];try{let t=sLe(Y4n(),Fn,"rules");if(iLe(t)){let r=aLe(t);for(let n of r)try{let o=await U$t(n,"utf-8"),{paths:i,content:s}=F$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=sLe(Be(),Fn,"rules");if(iLe(t)){let r=aLe(t);for(let n of r)try{let o=await U$t(n,"utf-8"),{paths:i,content:s}=F$t(o);i.length>0&&e.push({filePath:G$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=lle(e);let r=lle(Be()),n=e.startsWith(r)?G$t(r,e):e;return t.filter(o=>z4n(n,o.paths))}var X4n=`# hawaCodeMd
678
+ `)}function fGt(e){try{let t=dFn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function ew(){let e=Xn();e.hasCompletedProjectOnboarding||ps({...e,hasCompletedProjectOnboarding:!0})}function yFn(){let e=hr();To({...e,lastReleaseNotesSeen:MACRO.VERSION})}function BPe({workspaceDir:e}){let r=!Xn().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,pGt.gt)(MACRO.VERSION,o))&&(i=$ue[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&yFn()},[s,r]),!r&&!s)return null;let a=EFn(_Fn(e,Ci)),c=fGt(e),l=!a&&!c,u=MF.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===SFn()&&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 JF=F(ne(),1);var KF=F(ne(),1);var RV=F(ne(),1);function MPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ms("Select");return RV.default.createElement(x,{...o.option({isFocused:e})},e&&RV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),RV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&RV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var Km=F(ne(),1);import{isDeepStrictEqual as TFn}from"node:util";var NV=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:kPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var bFn=(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}}},PPe=e=>e.flatMap(t=>{if("options"in t){let r=PPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),mGt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=PPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new NV(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}},LPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=PPe(t),[a,c]=(0,Km.useReducer)(bFn,{visibleOptionCount:e,defaultValue:r,options:t},mGt),[l,u]=(0,Km.useState)(s);s!==l&&!TFn(s,l)&&(c({type:"reset",state:mGt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Km.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,Km.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,Km.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Km.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Km.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Km.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Km.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 QPe=({isDisabled:e=!1,state:t})=>{Ct((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var kPe=e=>`HEADER-${e.optionValues.join(",")}`;function xC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=LPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});QPe({isDisabled:e,state:c});let{styles:l}=ms("Select");return KF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:kPe(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=KF.default.createElement(KF.default.Fragment,null,h.slice(0,S),KF.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return KF.default.createElement(MPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function gGt({onDone:e}){return Ct((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),JF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:ee().secondaryBorder},JF.default.createElement(x,{marginBottom:1,flexDirection:"column"},JF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),JF.default.createElement(x,null,JF.default.createElement(xC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var An=F(ne(),1),Kt=F(ne(),1);var Qp=F(ne(),1);Ge();sr();Cy();var vFn="2.4.21",Iy={VERSION:vFn,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 HPe=46,EGt=["(\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 vde({isDefaultModel:e=!1}){let t=Math.max(HPe,Be().length+12),r=ee(),n=EGt[Math.floor(Math.random()*EGt.length)];return Qp.createElement(x,{flexDirection:"column"},Qp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Qp.createElement(C,null,Qp.createElement(C,null,n)," Welcome to"," ",Qp.createElement(C,{bold:!0},et),Qp.createElement(C,{color:r.secondaryText}," v",Iy.VERSION)),Qp.createElement(Qp.Fragment,null,Qp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Qp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Qp.createElement(C,{color:r.secondaryText},"cwd: ",Be()),Qp.createElement(C,{color:r.secondaryText},"model: ",bo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Qp.createElement(C,{color:r.secondaryText},"small fast model: ",bo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var SS=F(ne(),1);Re();var qJ=F(ne(),1);import{randomUUID as AS}from"crypto";$s();Re();Zt();sr();Re();Ge();import{existsSync as NC,readdirSync as W4n,statSync as K4n}from"fs";import{join as cw,relative as J4n}from"path";import{homedir as V$t}from"os";import{platform as Z4n}from"process";import{readFile as lw}from"fs/promises";sr();EE();gr();import{join as OFn,sep as BFn}from"path";function Up(){if(!Jm())return!1;try{let e=ot();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Zm(){return(OFn(Be(),".hcode","team-memory")+BFn).normalize("NFC")}function _E(e){let t=e.normalize("NFC"),r=Zm();return t.startsWith(r)}var j$t=F(UV(),1);Xo();var H$t=F(UV(),1);sr();Ge();Re();Mp();import{readFile as U$t}from"fs/promises";import{existsSync as iLe,readdirSync as V4n,statSync as j4n}from"fs";import{join as sLe,relative as G$t}from"path";import{homedir as Y4n}from"os";function F$t(e){try{let t=(0,H$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 z4n(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 aLe(e){let t=[];try{if(!iLe(e))return t;let r=V4n(e);for(let n of r){let o=sLe(e,n),i=j4n(o);i.isDirectory()?t.push(...aLe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function $$t(){let e=[];try{let t=sLe(Y4n(),Fn,"rules");if(iLe(t)){let r=aLe(t);for(let n of r)try{let o=await U$t(n,"utf-8"),{paths:i,content:s}=F$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=sLe(Be(),Fn,"rules");if(iLe(t)){let r=aLe(t);for(let n of r)try{let o=await U$t(n,"utf-8"),{paths:i,content:s}=F$t(o);i.length>0&&e.push({filePath:G$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=lle(e);let r=lle(Be()),n=e.startsWith(r)?G$t(r,e):e;return t.filter(o=>z4n(n,o.paths))}var X4n=`# 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 e3n(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 hge=null,G4e=!1;function Poo(){hge=null,G4e=!1}kt.on("proxy:changed",Poo);function Loo(){if(G4e)return hge;if(G4e=!0,ot().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(hge=new tXt.ProxyAgent({uri:e}),zt(`[proxy] using proxy: ${e}`)),hge}function Qoo(){let e=Loo();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function _ge(e){let t=e||process.env.API_TYPE,r=Qoo();switch(t){case"openai":return Ooo(r);case"openai-responses":return Boo(r);case"gemini":return Moo(r);default:return koo(r)}}Cy();var nXt=F(ne(),1);function rXt(e,t){let r=[],n=Math.max(1,Math.floor(t)),o="",i=0;for(let s of e){let a=Uoo(s);o&&i+a>n?(r.push(o),o=s,i=a):(o+=s,i+=a)}return o&&r.push(o),r}function Uoo(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||Foo(t)?0:Hoo(t)?2:1}function Foo(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function Hoo(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 R0(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 V4e(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 JC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}function Sge(e,t,r){let n=[];return typeof e=="number"&&n.push(V4e(e)),typeof t=="number"&&n.push(`${t} ${t===1?"turn":"turns"}`),typeof r=="number"&&n.push(`${JC(r)} tokens`),n.length>0?` (${n.join(" \xB7 ")})`:""}Re();$s();var tu={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function yge(e,t){tu.totalCost+=e,tu.totalAPIDuration+=t}function Tge(e,t){tu.inputTokens+=e,tu.outputTokens+=t,kt.emit("token:change",{inputTokens:tu.inputTokens,outputTokens:tu.outputTokens})}function bge(e,t){tu.cacheCreationTokens+=e,tu.cacheReadTokens+=t}function gM(){return{inputTokens:tu.inputTokens,outputTokens:tu.outputTokens,cacheCreationTokens:tu.cacheCreationTokens,cacheReadTokens:tu.cacheReadTokens}}function E9(){return tu.totalCost}function Cge(){return Date.now()-tu.startTime}function oXt(){return tu.totalAPIDuration}function iXt(e){tu.currentContextTokens=e}function sXt(){return tu.currentContextTokens}function Goo(){return St.grey(`Total duration (API): ${R0(tu.totalAPIDuration)}
774
774
  Total duration (wall): ${R0(Cge())}`)}function aXt(){(0,nXt.useEffect)(()=>{let e=()=>{process.stdout.write(`
775
775
  `+Goo()+`
776
- `);let t=Xn();ps({...t,lastCost:tu.totalCost,lastAPIDuration:tu.totalAPIDuration,lastDuration:Cge(),lastSessionId:n0})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var j4e="2.4.20";globalThis.MACRO={VERSION:j4e,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 Ige=process.env.HAWA_CODE_USER_AGENT||`${Ii}/${j4e} (${process.env.USER_TYPE})`;Re();Re();Zt();function Jf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Of(t);if(n?.type==="user"){t[t.length-1]=joo(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Of(t);n?.type==="user"&&(t[t.length-1]=$oo(n,r));return}}}),t}function $oo(e,t){return{...e,message:{...e.message,content:Voo(e.message.content,qoo(t.content.content))}}}function qoo(e){return`
776
+ `);let t=Xn();ps({...t,lastCost:tu.totalCost,lastAPIDuration:tu.totalAPIDuration,lastDuration:Cge(),lastSessionId:n0})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var j4e="2.4.21";globalThis.MACRO={VERSION:j4e,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 Ige=process.env.HAWA_CODE_USER_AGENT||`${Ii}/${j4e} (${process.env.USER_TYPE})`;Re();Re();Zt();function Jf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Of(t);if(n?.type==="user"){t[t.length-1]=joo(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Of(t);n?.type==="user"&&(t[t.length-1]=$oo(n,r));return}}}),t}function $oo(e,t){return{...e,message:{...e.message,content:Voo(e.message.content,qoo(t.content.content))}}}function qoo(e){return`
777
777
  <system-reminder>
778
778
  The user sent the following message:
779
779
  ${e}
package/hands.js CHANGED
@@ -484,7 +484,7 @@ ${l}. Members must communicate with each other using the ${Fp} tool`;if(n){c+=`
484
484
  Warning: Team "${r}" has ${f.length} active ${g}, so it cannot be deleted.`}c+=`
485
485
 
486
486
  You don't need to keep checking on the team's tool progress\u2014members will notify you when they complete their tasks. Continue with other work or respond to the user instead`}return[this.createReminderMessage("agent_team","task","medium",c,s,!0)]}getContextOptimizationReminder(t,r,n,i){let o=it.isMessageArchivingEnable(),s=it.isMemoEnable();if(!o&&!s)return null;let a=r??t,l=o&&a?.some(I=>I.name===Cu),c=s&&a?.some(I=>I.name===T0);if(!l&&!c)return null;let u=t?.some(I=>I.name===Cu),f=t?.some(I=>I.name===T0),g=Date.now(),m=n?.percentUsed,A=.92*100,E=[],_=(I,w)=>i==="proxy"?`use ${I} via ${ec}({action:'call', name:'${I}'})`:w?`use ${I}`:`load ${I} with ${Pc}`;l&&(esn()?E.push(`${_(Cu,!!u)} to archive tool_result messages (use "__tool_result__") and specific tool_use input fields (e.g. "content", "user.name") that are no longer needed for the current task. Do not archive results or input fields required for ongoing reasoning`):E.push(`${_(Cu,!!u)} to archive tool_result messages (use "__tool_result__") that are no longer needed for the current task. Do not archive results required for ongoing reasoning`)),c&&E.push(`${_(T0,!!f)} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`),l&&c&&E.push(`${Cu} and ${T0} work together: archive obsolete tool_result messages, and persist long-term conclusions or plans to Memo so they stay retrievable outside the context window.`);let C="";m!==void 0?C=`Context usage is ${m}%. The system will automatically compact prior messages when usage reaches ${A}%. If the history contains a lot of content irrelevant to the current task, clean it up proactively even when context usage is low. Reduce context usage by: `:C="Reduce context usage by: ";let S=E.length===1?`${C}${E[0]}`:`${C}${E.map(I=>`- ${I}`).join(`
487
- `)}`;return this.createReminderMessage("message_archiving_context","performance","medium",S,g,!0)}async getToolLazy(t,r,n,i){let o=it.getLazyToolMode();if(o==="off"||i==="off"||i===void 0)return null;if(o==="proxy"&&i==="proxy"){let I=`\u4F7F\u7528 ${ec}({action:'describe', name}) \u67E5\u770B\u5DE5\u5177\u8BE6\u60C5\uFF0C\u4F7F\u7528 ${ec}({action:'call', name, input}) \u8C03\u7528\u5DE5\u5177\u3002`;return[this.createReminderMessage("tool","general","high",I,Date.now(),!0)]}if(!(o==="loading"&&i==="loading"))return null;let s=n??await en.getTools(!1),a=r?.map(I=>I.name)??[],l=new Set(a),c=s.filter(I=>!Up.includes(I.name)&&!l.has(I.name)).map(I=>I.name),u=s.some(I=>I.name===Pc),f=s.some(I=>I.name===gl),g=(process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD+"").toLowerCase()==="true",m=u?`Load them with ${Pc} if needed; call it in parallel with other tools when possible.`:"",A=u?`\u5982\u679C\u5DE5\u5177\u4E0D\u5728 <loaded_tools> \u548C <defalut_tools> \u4EE5\u5185\uFF0C\u4E0D\u8981\u76F4\u63A5\u4F7F\u7528\uFF0C\u5E94\u8BE5\u53BB\u52A0\u8F7D\uFF0C Load tools with ${Pc} if needed; call it in parallel with other tools when possible.`:"",E=f?`Unload tools you no longer need with ${gl}; call it in parallel with other tools when possible. You do not need to unload if you are returning results to the user.`:"",_=`Not yet loaded tools : ${c.length?c.join(", ")+". "+m:"none."} Loaded tools: ${a.length?a.join(", ")+". "+E:"none."}.`,C=`${c.length>0?A:""} ${a.length>0?E:""}.`,S=g?_:C;return[this.createReminderMessage("tool","general","high",S,Date.now(),g)]}getRecalledMemories(t){let n=Je.getQueryContext(t).recalledMemories;if(!n||n.length===0)return null;let i=Date.now(),s=`The following memories were recalled and may be relevant to the current task. Use them only if they are helpful:
487
+ `)}`;return this.createReminderMessage("message_archiving_context","performance","medium",S,g,!0)}async getToolLazy(t,r,n,i){let o=it.getLazyToolMode();if(o==="off"||i==="off"||i===void 0)return null;if(o==="proxy"&&i==="proxy"){let I=`\u4F7F\u7528 ${ec}({action:'describe', name}) \u67E5\u770B\u5DE5\u5177\u53C2\u6570\u7ED3\u6784\u548C\u63CF\u8FF0\uFF0C\u4E00\u5B9A\u4E0D\u8981\u731C\u6D4B\u53C2\u6570\u7ED3\u6784\uFF0C\u4F7F\u7528 ${ec}({action:'call', name, input}) \u8C03\u7528\u5DE5\u5177\u3002`;return[this.createReminderMessage("tool","general","high",I,Date.now(),!0)]}if(!(o==="loading"&&i==="loading"))return null;let s=n??await en.getTools(!1),a=r?.map(I=>I.name)??[],l=new Set(a),c=s.filter(I=>!Up.includes(I.name)&&!l.has(I.name)).map(I=>I.name),u=s.some(I=>I.name===Pc),f=s.some(I=>I.name===gl),g=(process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD+"").toLowerCase()==="true",m=u?`Load them with ${Pc} if needed; call it in parallel with other tools when possible.`:"",A=u?`\u5982\u679C\u5DE5\u5177\u4E0D\u5728 <loaded_tools> \u548C <defalut_tools> \u4EE5\u5185\uFF0C\u4E0D\u8981\u76F4\u63A5\u4F7F\u7528\uFF0C\u5E94\u8BE5\u53BB\u52A0\u8F7D\uFF0C Load tools with ${Pc} if needed; call it in parallel with other tools when possible.`:"",E=f?`Unload tools you no longer need with ${gl}; call it in parallel with other tools when possible. You do not need to unload if you are returning results to the user.`:"",_=`Not yet loaded tools : ${c.length?c.join(", ")+". "+m:"none."} Loaded tools: ${a.length?a.join(", ")+". "+E:"none."}.`,C=`${c.length>0?A:""} ${a.length>0?E:""}.`,S=g?_:C;return[this.createReminderMessage("tool","general","high",S,Date.now(),g)]}getRecalledMemories(t){let n=Je.getQueryContext(t).recalledMemories;if(!n||n.length===0)return null;let i=Date.now(),s=`The following memories were recalled and may be relevant to the current task. Use them only if they are helpful:
488
488
 
489
489
  ${n.map(a=>`## ${a.path.split(/[\\/]/).pop()||a.path}
490
490
  ${a.content}`).join(`
@@ -756,7 +756,7 @@ data: ${JSON.stringify(z)}
756
756
  `);a=Q.pop()||"";for(let z of Q){let Y=z.trim();if(!(!Y||Y==="data: [DONE]"))if(Y.startsWith("data: ")){let q=Y.slice(6);try{let G=JSON.parse(q);w(G)}catch(G){this.logger&&this.logger.error({err:G,line:Y},"Failed to parse Gemini SSE chunk")}}else try{let q=JSON.parse(Y);w(q)}catch{}}};(async()=>{try{for(;;){let{value:Q,done:z}=await s.read();if(z)break;a+=n.decode(Q,{stream:!0}),O()}I()}catch(Q){o.error(Q)}})()}})}convertGeminiResponseToAnthropic(t){this.logger&&this.logger.debug({response:t},"Original Gemini response");try{if(!t.candidates||!t.candidates[0])throw new Error("No candidates found in Gemini response");let r=t.candidates[0],n=[];r.content&&r.content.parts&&r.content.parts.forEach(o=>{if(o.text&&n.push({type:"text",text:o.text}),o.functionCall){let s=`toolu_${UB()}`,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 R6r(`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"}}},lbe=new abe;var Fmt=X(Qmt(),1);or();us();function Lg(e){return e?typeof e.entries=="function"?Object.fromEntries(e.entries()):{...e}:{}}function Pmt(e){let t=String(e?.["x-thinking-level"]??"medium").toLowerCase();return["off","low","medium","high"].includes(t)?t:"medium"}function Gen(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t}}function zen(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t,summary:"auto"}}function jen(e,t="chat"){let r={request:{},response:{},openai:{request:{},response:{}}};return r.request.model=e.request.body.model,r.request.messages=e.request.body.messages,r.request.system=e.request.body.system,r.response.content=e.response.body.content,r.response.usage=e.response.body?.usage,t==="responses"?(r.openai.request.model=e.openai.request.body.model,r.openai.request.input=e.openai.request.body.input,r.openai.response.output=e.openai.response.body?.output,r.openai.response.usage=e.openai.response.body?.usage):(r.openai.request.model=e.openai.request.body.model,r.openai.request.messages=e.openai.request.body.messages,r.openai.response.choices=e.openai.response.body.choices,r.openai.response.usage=e.openai.response.body?.usage),r}function U5(e,t,r){Dz(t,e),Rz(t,jen(e,r),r)}function w2(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 H5(e){let t=new Headers(e);return t.delete("content-encoding"),t.delete("content-length"),t.delete("transfer-encoding"),t}function QIe(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 Lmt=["/v1/messages"];function PIe(e){let t;try{typeof e=="string"?t=new bv(e):e instanceof bv?t=e:t=new bv(e.url)}catch{return""}let r=t.pathname;for(let n of Lmt){let i=r.indexOf(n);if(i!==-1)return t.origin+r.slice(0,i)}return t.origin}function $Z(e,t){let r=typeof e=="string"?e:e instanceof bv?e.toString():e.url,n;try{n=new bv(r).pathname}catch{return!1}return Lmt.some(i=>n.includes(i))&&(t.method==="POST"||t.method==="post")}function Yen(e){return async(t,r)=>{if(!$Z(t,r))return e(t,r);let n=JSON.parse(r.body),i=await qK.transformRequestOut(n),o=PIe(t)+"/chat/completions",s=Lg(r.headers),a=s.authorization??s.Authorization??"";Gen(i,Pmt(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:_}),QIe("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:Lg(l.headers)},openai:{request:{body:i},response:{}}};if(!c){let _=await l.text(),C=new Response(_,{status:l.status,statusText:l.statusText,headers:H5(l.headers)}),S=await qK.transformResponseIn(C,n),I=await S.text();try{U5({...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=w2(l.body),m=new Response(g.stream,{status:l.status,statusText:l.statusText,headers:H5(l.headers)}),A=await qK.transformResponseIn(m,n),E=w2(A.body);return Promise.all([g.done,E.done]).then(async([_,C])=>{try{U5({...f,openai:{...f.openai,response:{body:await fot(_)}},response:{...f.response,body:await BU(C)}},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 Ven(e){return async(t,r)=>{if(!$Z(t,r))return e(t,r);let n=JSON.parse(r.body),i=await GK.transformRequestOut(n),o=Lg(r.headers);zen(i,Pmt(o));let s=JSON.stringify(i),l=PIe(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}),QIe("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:Lg(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:H5(u.headers)}),w=await GK.transformResponseIn(I,n),O=await w.text();try{U5({...m,openai:{...m.openai,response:{body:JSON.parse(S)}},response:{...m.response,body:JSON.parse(O)}},g,"responses")}catch(Q){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u975E\u6D41\u5F0F):",Q)}return new Response(O,{status:w.status,statusText:w.statusText,headers:w.headers})}let A=w2(u.body),E=new Response(A.stream,{status:u.status,statusText:u.statusText,headers:H5(u.headers)}),_=await GK.transformResponseIn(E,n),C=w2(_.body);return Promise.all([A.done,C.done]).then(async([S,I])=>{try{U5({...m,openai:{...m.openai,response:{body:await dot(S)}},response:{...m.response,body:await BU(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(C.stream,{status:_.status,statusText:_.statusText,headers:_.headers})}}function Wen(e){return async(t,r)=>{if(!$Z(t,r))return e(t,r);let n=JSON.parse(r.body),i=Lg(r.headers),o=await lbe.transformRequestOut(n),s=JSON.stringify(o),a=PIe(t)+`/models/${n.model}:streamGenerateContent?alt=sse`,l=i.authorization??i.Authorization??"",c;try{c=await e(a,{method:"POST",headers:{"Content-Type":"application/json","x-goog-api-key":String(l).replace(/^Bearer\s+/i,"").trim()},body:s,signal:r.signal})}catch(C){throw J("gemini request error:",C),C}if(!c.ok){let C=await c.text();return J(`Gemini API error response: ${c.status} ${c.statusText}`,{url:a,status:c.status,errorResponse:C}),QIe("Gemini API error","Gemini",c.status,c.statusText,C)}let u=n.stream===!0,f=i["x-agent-id"],g={request:{url:a,method:r.method,headers:Lg(r.headers),body:n},response:{status:c.status,statusText:c.statusText,headers:Lg(c.headers)},openai:{request:{body:o},response:{}}},m=w2(c.body),A=new Response(m.stream,{status:c.status,statusText:c.statusText,headers:H5(c.headers)}),E=await lbe.transformResponseIn(A),_=w2(E.body);return Promise.all([m.done,_.done]).then(async([C,S])=>{try{let I=u?pot(C):JSON.parse(C),w=u?await BU(S):JSON.parse(S);U5({...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(C=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Gemini):"+C)),new Response(_.stream,{status:E.status,statusText:E.statusText,headers:E.headers})}}function Ken(e){return async(t,r)=>{if(!$Z(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=Lg(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 bv?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 bv?t.toString():t.url,method:r.method,headers:Lg(r.headers),body:JSON.parse(n)},response:{status:a.status,statusText:a.statusText,headers:Lg(a.headers)}};return(async()=>{if(c){let m=await a.text();u.response.body=await BU(m)}else u.response.body=await a.json();let g=Lg(r.headers)["x-agent-id"];Dz(g,u),Rz(g,{request:u.request.body.messages,response:u.response.body.content,usage:u.response.body?.usage})})().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 HZ=null,MIe=!1;function Jen(){HZ=null,MIe=!1}pr.on("proxy:changed",Jen);function Zen(){if(MIe)return HZ;if(MIe=!0,ut().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(HZ=new Fmt.ProxyAgent({uri:e}),Jt(`[proxy] using proxy: ${e}`)),HZ}function Xen(){let e=Zen();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function qZ(e){let t=e||process.env.API_TYPE,r=Xen();switch(t){case"openai":return Yen(r);case"openai-responses":return Ven(r);case"gemini":return Wen(r);default:return Ken(r)}}ph();var ntn=X(he(),1);function Umt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=etn(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function etn(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||ttn(t)?0:rtn(t)?2:1}function ttn(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function rtn(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 u_(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 WC(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 GZ(e,t){dc.totalCost+=e,dc.totalAPIDuration+=t}function zZ(e,t){dc.inputTokens+=e,dc.outputTokens+=t,pr.emit("token:change",{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens})}function jZ(e,t){dc.cacheCreationTokens+=e,dc.cacheReadTokens+=t}function LIe(){return{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens,cacheCreationTokens:dc.cacheCreationTokens,cacheReadTokens:dc.cacheReadTokens}}function Hmt(){return dc.totalCost}function $mt(){return Date.now()-dc.startTime}function qmt(){return dc.totalAPIDuration}function Gmt(e){dc.currentContextTokens=e}function zmt(){return dc.currentContextTokens}ke();He();He();var FIe="2.4.20";globalThis.MACRO={VERSION:FIe,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 YZ=process.env.HAWA_CODE_USER_AGENT||`${Ki}/${FIe} (${process.env.USER_TYPE})`;import{randomUUID as _y}from"crypto";us();ke();Kt();_r();ke();He();import{existsSync as g_,readdirSync as Tin,statSync as vin}from"fs";import{join as ZC,relative as xin}from"path";import{homedir as Aht}from"os";import{platform as win}from"process";import{readFile as XC}from"fs/promises";_r();Fg();or();import{join as ltn,sep as ctn}from"path";function Am(){if(!gm())return!1;try{let e=ut();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Yf(){return(ltn(Be(),".hcode","team-memory")+ctn).normalize("NFC")}function f_(e){let t=e.normalize("NFC"),r=Yf();return t.startsWith(r)}var hht=X(K5(),1);Qi();var fht=X(K5(),1);_r();He();ke();Iu();import{readFile as uht}from"fs/promises";import{existsSync as rTe,readdirSync as bin,statSync as Cin}from"fs";import{join as nTe,relative as pht}from"path";import{homedir as Sin}from"os";function dht(e){try{let t=(0,fht.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 Iin(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 iTe(e){let t=[];try{if(!rTe(e))return t;let r=bin(e);for(let n of r){let i=nTe(e,n),o=Cin(i);o.isDirectory()?t.push(...iTe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){ve(r)}return t}async function mht(){let e=[];try{let t=nTe(Sin(),Xr,"rules");if(rTe(t)){let r=iTe(t);for(let n of r)try{let i=await uht(n,"utf-8"),{paths:o,content:s}=dht(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=nTe(Be(),Xr,"rules");if(rTe(t)){let r=iTe(t);for(let n of r)try{let i=await uht(n,"utf-8"),{paths:o,content:s}=dht(i);o.length>0&&e.push({filePath:pht(Be(),n),content:s,paths:o,isProjectRule:!0})}catch(i){ve(i)}}}catch(t){ve(t)}return e}function ght(e,t){e=vV(e);let r=vV(Be()),n=e.startsWith(r)?pht(r,e):e;return t.filter(i=>Iin(n,i.paths))}var Din=`# hawaCodeMd
759
+ Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var HZ=null,MIe=!1;function Jen(){HZ=null,MIe=!1}pr.on("proxy:changed",Jen);function Zen(){if(MIe)return HZ;if(MIe=!0,ut().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(HZ=new Fmt.ProxyAgent({uri:e}),Jt(`[proxy] using proxy: ${e}`)),HZ}function Xen(){let e=Zen();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function qZ(e){let t=e||process.env.API_TYPE,r=Xen();switch(t){case"openai":return Yen(r);case"openai-responses":return Ven(r);case"gemini":return Wen(r);default:return Ken(r)}}ph();var ntn=X(he(),1);function Umt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=etn(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function etn(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||ttn(t)?0:rtn(t)?2:1}function ttn(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function rtn(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 u_(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 WC(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 GZ(e,t){dc.totalCost+=e,dc.totalAPIDuration+=t}function zZ(e,t){dc.inputTokens+=e,dc.outputTokens+=t,pr.emit("token:change",{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens})}function jZ(e,t){dc.cacheCreationTokens+=e,dc.cacheReadTokens+=t}function LIe(){return{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens,cacheCreationTokens:dc.cacheCreationTokens,cacheReadTokens:dc.cacheReadTokens}}function Hmt(){return dc.totalCost}function $mt(){return Date.now()-dc.startTime}function qmt(){return dc.totalAPIDuration}function Gmt(e){dc.currentContextTokens=e}function zmt(){return dc.currentContextTokens}ke();He();He();var FIe="2.4.21";globalThis.MACRO={VERSION:FIe,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 YZ=process.env.HAWA_CODE_USER_AGENT||`${Ki}/${FIe} (${process.env.USER_TYPE})`;import{randomUUID as _y}from"crypto";us();ke();Kt();_r();ke();He();import{existsSync as g_,readdirSync as Tin,statSync as vin}from"fs";import{join as ZC,relative as xin}from"path";import{homedir as Aht}from"os";import{platform as win}from"process";import{readFile as XC}from"fs/promises";_r();Fg();or();import{join as ltn,sep as ctn}from"path";function Am(){if(!gm())return!1;try{let e=ut();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Yf(){return(ltn(Be(),".hcode","team-memory")+ctn).normalize("NFC")}function f_(e){let t=e.normalize("NFC"),r=Yf();return t.startsWith(r)}var hht=X(K5(),1);Qi();var fht=X(K5(),1);_r();He();ke();Iu();import{readFile as uht}from"fs/promises";import{existsSync as rTe,readdirSync as bin,statSync as Cin}from"fs";import{join as nTe,relative as pht}from"path";import{homedir as Sin}from"os";function dht(e){try{let t=(0,fht.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 Iin(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 iTe(e){let t=[];try{if(!rTe(e))return t;let r=bin(e);for(let n of r){let i=nTe(e,n),o=Cin(i);o.isDirectory()?t.push(...iTe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){ve(r)}return t}async function mht(){let e=[];try{let t=nTe(Sin(),Xr,"rules");if(rTe(t)){let r=iTe(t);for(let n of r)try{let i=await uht(n,"utf-8"),{paths:o,content:s}=dht(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=nTe(Be(),Xr,"rules");if(rTe(t)){let r=iTe(t);for(let n of r)try{let i=await uht(n,"utf-8"),{paths:o,content:s}=dht(i);o.length>0&&e.push({filePath:pht(Be(),n),content:s,paths:o,isProjectRule:!0})}catch(i){ve(i)}}}catch(t){ve(t)}return e}function ght(e,t){e=vV(e);let r=vV(Be()),n=e.startsWith(r)?pht(r,e):e;return t.filter(i=>Iin(n,i.paths))}var Din=`# 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 Rin(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 ex(){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:r0(c.inputSchema));return{name:c.name,description:`${u}
1129
1129
 
1130
1130
  Schema:
1131
- ${f}`}}),{messages:a}=t,l=tcn(o);return rcn(o,l,s,a)}},pyt=ncn;$g();var Qu=X(he(),1),mO=X(he(),1);ke();ke();import{existsSync as icn,readdirSync as ocn,statSync as scn}from"fs";import{join as acn}from"path";function lcn(){let e=Ji.plan();if(!icn(e))return[];try{return ocn(e).filter(r=>r.endsWith(".md")).map(r=>{let n=acn(e,r),i=scn(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var myt=({onSelect:e})=>{let[t,r]=(0,mO.useState)([]),[n,i]=(0,mO.useState)(0),[o,s]=(0,mO.useState)(!1);(0,mO.useEffect)(()=>{let c=lcn();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=Le();return o?Qu.createElement(N,{flexDirection:"column",marginY:1},Qu.createElement(N,{marginBottom:1},Qu.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")),Qu.createElement(N,{marginBottom:1},Qu.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 Qu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Qu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Qu.createElement(v,{color:f?l.claude:l.text}," "),Qu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Qu.createElement(v,{dimColor:!0}," ","(",Kge(c.modified),")"))}),Qu.createElement(N,{marginTop:1,marginLeft:2},Qu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Qu.createElement(N,{flexDirection:"column",marginY:1},Qu.createElement(v,null,"Loading plan history..."))};var gyt=X(he(),1),ccn={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):gyt.createElement(myt,{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"}},Ayt=ccn;$g();var ucn={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"}},hyt=ucn;_r();import{resolve as dcn}from"path";var fcn={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=dcn(r,t);la(n);let i=Be();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},Eyt=fcn;var WCt=X(he(),1);var Hn=X(he(),1);var Gcn=X(he(),1);var k9=X(he(),1),Hcn=X(Cyt(),1);var Syt={info:"blue",success:"green",error:"red",warning:"yellow"},vcn={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:Syt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Syt[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=Pr.info),e==="success"&&(t=Pr.tick),e==="error"&&(t=Pr.cross),e==="warning"&&(t=Pr.warning),{icon:t}}},Iyt=vcn;var xcn={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},Tyt=xcn;var wcn={styles:{input:({isFocused:e})=>({dimColor:!e})}},vyt=wcn;var Dcn={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},xyt=Dcn;var Rcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},wyt=Rcn;var Ncn={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Pr.square,remainingCharacter:Pr.squareLightShade})},Dyt=Ncn;var Bcn={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})}},Ryt=Bcn;var Ocn={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},Nyt=Ocn;var kcn={success:"green",error:"red",warning:"yellow",info:"blue"},Mcn={success:Pr.tick,error:Pr.cross,warning:Pr.warning,info:Pr.info},Qcn={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:kcn[e]}),message:()=>({})},config:({variant:e})=>({icon:Mcn[e]})},Byt=Qcn;var Pcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Pr.line})},Oyt=Pcn;var Lcn={styles:{value:()=>({})}},kyt=Lcn;var Fcn={styles:{value:()=>({})}},Myt=Fcn;var Ucn={styles:{value:()=>({})}},Qyt=Ucn;var $cn={components:{Alert:Iyt,Badge:Tyt,ConfirmInput:vyt,MultiSelect:xyt,OrderedList:wyt,ProgressBar:Dyt,Select:Ryt,Spinner:Nyt,StatusMessage:Byt,UnorderedList:Oyt,TextInput:kyt,EmailInput:Myt,PasswordInput:Qyt}},qcn=(0,k9.createContext)($cn);var po=e=>(0,k9.useContext)(qcn).components[e];var zcn=X(he(),1);var I_=X(he(),1);var AO=X(he(),1);var Pyt=X(he(),1);var M9=Pr.line;var cee=(0,Pyt.createContext)({marker:M9});function Lyt({children:e}){let{marker:t}=(0,AO.useContext)(cee),{styles:r}=po("UnorderedList");return AO.default.createElement(N,{...r.listItem()},AO.default.createElement(v,{...r.marker()},t),AO.default.createElement(N,{...r.content()},e))}var Fyt=X(he(),1),$ve=(0,Fyt.createContext)({depth:0});function jcn({children:e}){let{depth:t}=(0,I_.useContext)($ve),{styles:r,config:n}=po("UnorderedList"),i=(0,I_.useMemo)(()=>({depth:t+1}),[t]),o=(0,I_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??M9}:{marker:M9}},[n,t]);return I_.default.createElement($ve.Provider,{value:i},I_.default.createElement(cee.Provider,{value:o},I_.default.createElement(N,{...r.list()},e)))}jcn.Item=Lyt;var Vcn=X(he(),1);var Ycn=X(he(),1);var Q9=X(he(),1);var hO=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 Uyt=X(he(),1);var EO=X(he(),1);var P9=X(he(),1);function Hyt({isFocused:e,isSelected:t,children:r}){let{styles:n}=po("Select");return P9.default.createElement(N,{...n.option({isFocused:e})},e&&P9.default.createElement(v,{...n.focusIndicator()},Pr.pointer),P9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&P9.default.createElement(v,{...n.selectedIndicator()},Pr.tick))}var Cm=X(he(),1);import{isDeepStrictEqual as Wcn}from"node:util";var Kcn=(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}},$yt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new hO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},qyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,Cm.useReducer)(Kcn,{visibleOptionCount:e,defaultValue:r,options:t},$yt),[s,a]=(0,Cm.useState)(t);t!==s&&!Wcn(t,s)&&(o({type:"reset",state:$yt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,Cm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,Cm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,Cm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,Cm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,Cm.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 Gyt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function _O({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=qyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});Gyt({isDisabled:e,state:s});let{styles:a}=po("Select");return EO.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=EO.default.createElement(EO.default.Fragment,null,l.label.slice(0,u),EO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return EO.default.createElement(Hyt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Jcn=X(he(),1);var zyt=X(he(),1);var Xcn=X(he(),1);var uee=X(he(),1);var Zcn=X(he(),1);var H2i=ar.inverse(" ");var Yg=X(he(),1);var yO=X(he(),1);var jyt=X(he(),1);var dee=(0,jyt.createContext)({marker:Pr.line});function fee({children:e}){let{marker:t}=(0,yO.useContext)(dee),{styles:r}=po("OrderedList");return yO.default.createElement(N,{...r.listItem()},yO.default.createElement(v,{...r.marker()},t),yO.default.createElement(N,{...r.content()},e))}var Yyt=X(he(),1),qve=(0,Yyt.createContext)({marker:""});function Vg({children:e}){let{marker:t}=(0,Yg.useContext)(qve),{styles:r}=po("OrderedList"),n=0;for(let o of Yg.default.Children.toArray(e))!(0,Yg.isValidElement)(o)||o.type!==fee||n++;let i=String(n).length;return Yg.default.createElement(N,{...r.list()},Yg.default.Children.map(e,(o,s)=>{if(!(0,Yg.isValidElement)(o)||o.type!==fee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Yg.default.createElement(qve.Provider,{value:{marker:l}},Yg.default.createElement(dee.Provider,{value:{marker:l}},o))}))}Vg.Item=fee;var tun=X(he(),1);var Gve=X(he(),1);var eun=X(he(),1);var AOi=ar.inverse(" ");var run=X(he(),1);var nun=X(he(),1);var oun=X(he(),1);var pee=X(he(),1);var iun=X(he(),1);var UOi=ar.inverse(" ");var $i=X(he(),1);var zve=X(he(),1),jve=X(he(),1);X5();us();Qi();$v();or();var Vyt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function tx(){let e=[...Vyt,...[...Vyt].reverse()],{frame:t}=hR({interval:120});return zve.createElement(N,{flexWrap:"nowrap",height:1,width:2},zve.createElement(v,{color:Le().claude},e[t%e.length]))}var Aee=X(he(),1);var gee=null,T_=null,mee=new Set;function Vve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Lpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function Yve(){T_&&(gee=Vve(T_),mee.forEach(e=>e(gee)))}function sun(e,t){return T_!==e&&(T_&&T_.off("resize",Yve),T_=e,gee=Vve(e),e.on("resize",Yve)),mee.add(t),()=>{mee.delete(t),mee.size===0&&T_&&(T_.off("resize",Yve),T_=null,gee=null)}}function Wve(){let{stdout:e}=AR(),[t,r]=(0,Aee.useState)(()=>Vve(e));return(0,Aee.useEffect)(()=>sun(e,r),[e]),t}function bO(){return Wve()}He();Tf();ke();lh();ke();var DMi=X(Axe(),1);import{homedir as j9}from"os";import{join as IO}from"path";import{existsSync as Y9,mkdirSync as PCt,appendFileSync as QCt,readFileSync as LCt,constants as npn,writeFileSync as ipn,unlinkSync as FCt,statSync as opn}from"fs";import{platform as UCt}from"process";import{accessSync as spn}from"fs";var rpn="2.4.20",z9={VERSION:rpn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};He();var nx=IO(L0,".update.lock"),apn=300*1e3;function HCt(){try{if(Y9(L0)||PCt(L0,{recursive:!0}),Y9(nx)){let e=opn(nx);if(Date.now()-e.mtimeMs<apn)return!1;try{FCt(nx)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return ipn(nx,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function $Ct(){try{Y9(nx)&&LCt(nx,"utf8")===`${process.pid}`&&FCt(nx)}catch(e){ve(`Failed to release lock: ${e}`)}}async function hxe(){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{spn(t,npn.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 qCt(e){if(!HCt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:z9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{Y9(e)||PCt(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=tcn(o);return rcn(o,l,s,a)}},pyt=ncn;$g();var Qu=X(he(),1),mO=X(he(),1);ke();ke();import{existsSync as icn,readdirSync as ocn,statSync as scn}from"fs";import{join as acn}from"path";function lcn(){let e=Ji.plan();if(!icn(e))return[];try{return ocn(e).filter(r=>r.endsWith(".md")).map(r=>{let n=acn(e,r),i=scn(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var myt=({onSelect:e})=>{let[t,r]=(0,mO.useState)([]),[n,i]=(0,mO.useState)(0),[o,s]=(0,mO.useState)(!1);(0,mO.useEffect)(()=>{let c=lcn();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=Le();return o?Qu.createElement(N,{flexDirection:"column",marginY:1},Qu.createElement(N,{marginBottom:1},Qu.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")),Qu.createElement(N,{marginBottom:1},Qu.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 Qu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Qu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Qu.createElement(v,{color:f?l.claude:l.text}," "),Qu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Qu.createElement(v,{dimColor:!0}," ","(",Kge(c.modified),")"))}),Qu.createElement(N,{marginTop:1,marginLeft:2},Qu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Qu.createElement(N,{flexDirection:"column",marginY:1},Qu.createElement(v,null,"Loading plan history..."))};var gyt=X(he(),1),ccn={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):gyt.createElement(myt,{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"}},Ayt=ccn;$g();var ucn={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"}},hyt=ucn;_r();import{resolve as dcn}from"path";var fcn={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=dcn(r,t);la(n);let i=Be();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},Eyt=fcn;var WCt=X(he(),1);var Hn=X(he(),1);var Gcn=X(he(),1);var k9=X(he(),1),Hcn=X(Cyt(),1);var Syt={info:"blue",success:"green",error:"red",warning:"yellow"},vcn={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:Syt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Syt[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=Pr.info),e==="success"&&(t=Pr.tick),e==="error"&&(t=Pr.cross),e==="warning"&&(t=Pr.warning),{icon:t}}},Iyt=vcn;var xcn={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},Tyt=xcn;var wcn={styles:{input:({isFocused:e})=>({dimColor:!e})}},vyt=wcn;var Dcn={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},xyt=Dcn;var Rcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},wyt=Rcn;var Ncn={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Pr.square,remainingCharacter:Pr.squareLightShade})},Dyt=Ncn;var Bcn={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})}},Ryt=Bcn;var Ocn={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},Nyt=Ocn;var kcn={success:"green",error:"red",warning:"yellow",info:"blue"},Mcn={success:Pr.tick,error:Pr.cross,warning:Pr.warning,info:Pr.info},Qcn={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:kcn[e]}),message:()=>({})},config:({variant:e})=>({icon:Mcn[e]})},Byt=Qcn;var Pcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Pr.line})},Oyt=Pcn;var Lcn={styles:{value:()=>({})}},kyt=Lcn;var Fcn={styles:{value:()=>({})}},Myt=Fcn;var Ucn={styles:{value:()=>({})}},Qyt=Ucn;var $cn={components:{Alert:Iyt,Badge:Tyt,ConfirmInput:vyt,MultiSelect:xyt,OrderedList:wyt,ProgressBar:Dyt,Select:Ryt,Spinner:Nyt,StatusMessage:Byt,UnorderedList:Oyt,TextInput:kyt,EmailInput:Myt,PasswordInput:Qyt}},qcn=(0,k9.createContext)($cn);var po=e=>(0,k9.useContext)(qcn).components[e];var zcn=X(he(),1);var I_=X(he(),1);var AO=X(he(),1);var Pyt=X(he(),1);var M9=Pr.line;var cee=(0,Pyt.createContext)({marker:M9});function Lyt({children:e}){let{marker:t}=(0,AO.useContext)(cee),{styles:r}=po("UnorderedList");return AO.default.createElement(N,{...r.listItem()},AO.default.createElement(v,{...r.marker()},t),AO.default.createElement(N,{...r.content()},e))}var Fyt=X(he(),1),$ve=(0,Fyt.createContext)({depth:0});function jcn({children:e}){let{depth:t}=(0,I_.useContext)($ve),{styles:r,config:n}=po("UnorderedList"),i=(0,I_.useMemo)(()=>({depth:t+1}),[t]),o=(0,I_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??M9}:{marker:M9}},[n,t]);return I_.default.createElement($ve.Provider,{value:i},I_.default.createElement(cee.Provider,{value:o},I_.default.createElement(N,{...r.list()},e)))}jcn.Item=Lyt;var Vcn=X(he(),1);var Ycn=X(he(),1);var Q9=X(he(),1);var hO=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 Uyt=X(he(),1);var EO=X(he(),1);var P9=X(he(),1);function Hyt({isFocused:e,isSelected:t,children:r}){let{styles:n}=po("Select");return P9.default.createElement(N,{...n.option({isFocused:e})},e&&P9.default.createElement(v,{...n.focusIndicator()},Pr.pointer),P9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&P9.default.createElement(v,{...n.selectedIndicator()},Pr.tick))}var Cm=X(he(),1);import{isDeepStrictEqual as Wcn}from"node:util";var Kcn=(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}},$yt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new hO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},qyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,Cm.useReducer)(Kcn,{visibleOptionCount:e,defaultValue:r,options:t},$yt),[s,a]=(0,Cm.useState)(t);t!==s&&!Wcn(t,s)&&(o({type:"reset",state:$yt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,Cm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,Cm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,Cm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,Cm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,Cm.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 Gyt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function _O({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=qyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});Gyt({isDisabled:e,state:s});let{styles:a}=po("Select");return EO.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=EO.default.createElement(EO.default.Fragment,null,l.label.slice(0,u),EO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return EO.default.createElement(Hyt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Jcn=X(he(),1);var zyt=X(he(),1);var Xcn=X(he(),1);var uee=X(he(),1);var Zcn=X(he(),1);var H2i=ar.inverse(" ");var Yg=X(he(),1);var yO=X(he(),1);var jyt=X(he(),1);var dee=(0,jyt.createContext)({marker:Pr.line});function fee({children:e}){let{marker:t}=(0,yO.useContext)(dee),{styles:r}=po("OrderedList");return yO.default.createElement(N,{...r.listItem()},yO.default.createElement(v,{...r.marker()},t),yO.default.createElement(N,{...r.content()},e))}var Yyt=X(he(),1),qve=(0,Yyt.createContext)({marker:""});function Vg({children:e}){let{marker:t}=(0,Yg.useContext)(qve),{styles:r}=po("OrderedList"),n=0;for(let o of Yg.default.Children.toArray(e))!(0,Yg.isValidElement)(o)||o.type!==fee||n++;let i=String(n).length;return Yg.default.createElement(N,{...r.list()},Yg.default.Children.map(e,(o,s)=>{if(!(0,Yg.isValidElement)(o)||o.type!==fee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Yg.default.createElement(qve.Provider,{value:{marker:l}},Yg.default.createElement(dee.Provider,{value:{marker:l}},o))}))}Vg.Item=fee;var tun=X(he(),1);var Gve=X(he(),1);var eun=X(he(),1);var AOi=ar.inverse(" ");var run=X(he(),1);var nun=X(he(),1);var oun=X(he(),1);var pee=X(he(),1);var iun=X(he(),1);var UOi=ar.inverse(" ");var $i=X(he(),1);var zve=X(he(),1),jve=X(he(),1);X5();us();Qi();$v();or();var Vyt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function tx(){let e=[...Vyt,...[...Vyt].reverse()],{frame:t}=hR({interval:120});return zve.createElement(N,{flexWrap:"nowrap",height:1,width:2},zve.createElement(v,{color:Le().claude},e[t%e.length]))}var Aee=X(he(),1);var gee=null,T_=null,mee=new Set;function Vve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Lpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function Yve(){T_&&(gee=Vve(T_),mee.forEach(e=>e(gee)))}function sun(e,t){return T_!==e&&(T_&&T_.off("resize",Yve),T_=e,gee=Vve(e),e.on("resize",Yve)),mee.add(t),()=>{mee.delete(t),mee.size===0&&T_&&(T_.off("resize",Yve),T_=null,gee=null)}}function Wve(){let{stdout:e}=AR(),[t,r]=(0,Aee.useState)(()=>Vve(e));return(0,Aee.useEffect)(()=>sun(e,r),[e]),t}function bO(){return Wve()}He();Tf();ke();lh();ke();var DMi=X(Axe(),1);import{homedir as j9}from"os";import{join as IO}from"path";import{existsSync as Y9,mkdirSync as PCt,appendFileSync as QCt,readFileSync as LCt,constants as npn,writeFileSync as ipn,unlinkSync as FCt,statSync as opn}from"fs";import{platform as UCt}from"process";import{accessSync as spn}from"fs";var rpn="2.4.21",z9={VERSION:rpn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};He();var nx=IO(L0,".update.lock"),apn=300*1e3;function HCt(){try{if(Y9(L0)||PCt(L0,{recursive:!0}),Y9(nx)){let e=opn(nx);if(Date.now()-e.mtimeMs<apn)return!1;try{FCt(nx)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return ipn(nx,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function $Ct(){try{Y9(nx)&&LCt(nx,"utf8")===`${process.pid}`&&FCt(nx)}catch(e){ve(`Failed to release lock: ${e}`)}}async function hxe(){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{spn(t,npn.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 qCt(e){if(!HCt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:z9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{Y9(e)||PCt(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(UCt==="win32"){let n=await si(`setx PATH "${process.env.PATH};${e}"`);if(n.code!==0)throw new Error(`Failed to update PATH on Windows: ${n.stderr}`)}else{let n=[IO(j9(),".bashrc"),IO(j9(),".bash_profile"),IO(j9(),".zshrc"),IO(j9(),".config","fish","config.fish")];for(let i of n)if(Y9(i))try{if(!LCt(i,"utf8").includes(e)){if(i.includes("fish")){let s=`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dahawa/hawa-code",
3
- "version": "2.4.20",
3
+ "version": "2.4.21",
4
4
  "bin": {
5
5
  "hcode": "hawa.js"
6
6
  },